顺滑迁移Prometheus告警到SLS告警

SLS告警简介

SLS告警是云上的一站式告警监控运维平台,支持各种Ops场景。SLS告警系统主要包括指标采集,监控系统,告警管理,通知管理等子系统。

  • 指标采集包括时序、日志、Trace数据;
  • 监控系统支持定时查询各类数据源并进行协同评估,满足触发条件后,产生告警;
  • 告警管理系统主要包括对监控系统产生的告警进行合并、抑制、静默等处理,以此来达到告警降噪的目的,除了SLS自身的告警监控,还支持常见的第三方告警系统,可以将Prometheus,Zabbix,Grafana等产生的告警进行统一降噪处理。
  • 通知管理支持众多的通知渠道,包括常见的短信、语音、Webhook、钉钉、企业微信、飞书,还支持Function Compute和EventBridge等。同时,还支持灵活的分派策略,支持将不同属性的告警发送给不同的渠道。此外还包括灵活的值班轮岗,代班等功能。

顺滑迁移Prometheus告警到SLS告警

Prometheus告警

Prometheus作为一个开源的云原生监控系统,具有很广泛的应用场景,通过各种Exporter收集各类设备,应用的指标,将各类指标抽象为时序数据,在Prometheus上可以使用PromQL进行高效的指标查询和分析。

在告警方面,可以在Prometheus上配置监控规则,满足Prometheus的监控规则后,会有触发或者恢复告警产生。这些告警的通知需要搭建另外的告警管理系统AlertManger进行处理。

Prometheus的告警规则配置示例(参考)如下:

顺滑迁移Prometheus告警到SLS告警

告警产生后可以在Prometheus的UI看到触发告警的状态:

顺滑迁移Prometheus告警到SLS告警

Prometheus告警规则的配置主要包括告警名称,评估语句,告警labels,告警annoations等信息,告警触发后需要在AlertManager中配置告警的路由,通知等。AlertManager虽然功能强大,但是需要具备“程序员”的能力才可以进行比较灵活的配置,AlertManager基本是一套全脚本化的配置:对于运营人员如果对业务进行告警配置,往往不是很友好;

如果需要常见的告警值班轮岗等需求时,需要对接额外的Pageduty等系统,在使用上需要维护各类碎片化的系统。在告警产生时如果需要对接各类云上功能,比如Function Compute或者EventBridge,需要自行开发Webhook等,不具有一站式的解决方案。

实现同样的功能,Prometheus告警需要搭配AlertManager,PageDuty再加上脚本化开发等才可以实现相应的功能。而SLS告警支持在阿里云控制台简单的输入配置,界面化的操作即可完成告警管理的配置,同时SLS告警支持比较高阶的功能,如轮岗值班代班等,可以满足各类运维运营人员的需求。同时SLS告警具有强大的支持团队,在使用上有任何问题,可以随时在SLS支持群中提出获取解决方案。


Prometheus告警迁移方案

有没有一种办法即保留现有的Prometheus使用方式,又可以将现有的Prometheus告警规则迁移到云上使用呢?答案是肯定的。这里介绍一种简单的迁移办法,并提供脚本来进行迁移。

该迁移方案主要包括两个步骤,接下来分别进行详细介绍

  • 将Prometheus数据RemoteWrite到SLS的时序库。
  • 将Prometheus告警规则迁移转化为SLS告警。

Prometheus数据RemoteWrite到SLS的时序库中

Promethues默认将时序指标存储在本地磁盘和内存,在指标数据非常庞大的时候,往往需要占用海量的内存;Prometheus也可以将指标数据RemoteWrite到远端存储。SLS时序存储具有价格低廉,查询高效,兼容PromQL语法的特点,是一种理想的RemoteWrite目标。配置非常简单:

  • 首先创建MetricStore,参考创建MetricStore
  • 创建具有写入MetricStore的AK,配置Prometheus的Remote Write,配置脚本如下:
url: https://sls-prometheus-test.cn-beijing.log.aliyuncs.com/prometheus/sls-prometheus-test/prometheus-raw/api/v1/write
basic_auth:
  username: access-key-id
  password: access-key-secret

queue_config:
  batch_send_deadline: 20s
  capacity: 20480
  max_backoff: 5s
  max_samples_per_send: 2048
  min_backoff: 100ms
  min_shards: 100   

               

这样就可以在SLS控制台,Project->时序存储->时序库中查看时序数据。具体使用方法可以参考通过Remote Write协议接入Prometheus监控数据


迁移Prometheus告警规则

迁移Prometheus告警规则主要包含两个步骤:

  • 在SLS控制台-告警管理中心创建行动策略
  • 通过脚本将Prometheus告警规则转化为SLS告警规则

创建SLS告警行动策略

顺滑迁移Prometheus告警到SLS告警

首先在SLS控制台进入日志应用->告警管理中心。在第一次进入后,会提示选择告警中心日志库的存储区域,此时可以选择一个跟业务Project一样的区域或者地理位置相近的区域。

然后点击右上角的全局配置

顺滑迁移Prometheus告警到SLS告警

点击左侧行动策略菜单,点击添加按钮,创建行动策略,行动策略配置支持各种通知渠道,具体配置可以参考创建行动策略

顺滑迁移Prometheus告警到SLS告警

Prometheus告警规则迁移到SLS

Prometheus的告警规则主要包含groups,rules的配置,其配置示例在上文也有涉及。这类假设已经有了一批Prometheus的告警规则,文件是prometheus-alert.yaml。内容格式举例如下:

groups:
- name: alert
  rules:
  - alert: CacheMiss
    expr: sum by (method) (rate(metastore_query_count{job="some_job", hit_cache="true"}[5m])) / sum by (method) (rate(metastore_query_count{job="some_job"}[5m])) * 100 < 85
    for: 1m
    labels:
      severity: High
    annotations:
      description: Method {{ $labels.method }} cache hit rate is {{ $value }}

Prometheus告警规则可以同SLS告警规则进行同等的映射:

  • alert映射为SLS告警规则名称;
  • expr映射为SLS时序查询的PromQL;
  • for映射为SLS告警规则的连续触发阈值:threshold;
  • labels映射为SLS告警规则中的标签;
  • annoations映射为SLS告警规则的标注;
  • 同时在labels中如果含有severity等严重度的配置,会映射为SLS告警规则的严重度。

同时SLS的告警监控规则的标注支持大部分Prometheus的渲染语法,通过以上的映射规则,可以使用SLS的SDK自行编写程序进行转换。这里提供了一个开箱即用的Python转换脚本,完整脚本可以参考github链接

顺滑迁移Prometheus告警到SLS告警

执行脚本主要步骤如下:

  • 首先创建requirements.txt,主要依赖如下:

pyyaml

aliyun-log-python-sdk

  • 修改main.py,具体AK,SK和行动策略id需要自行配置,其他相关配置如有需要也可自行修改。

顺滑迁移Prometheus告警到SLS告警

  • 安装完requirement.text中的依赖后,可以开始运行python main.py。

即可将告警导入到指定的project下,在Project下查看告警中心,可以看到5个Prometheus告警规则已经导入到SLS的Project下面。

顺滑迁移Prometheus告警到SLS告警

点开其中一个进行编辑,可以看到prometheus告警与SLS告警的映射关系:

顺滑迁移Prometheus告警到SLS告警

可以看到:

  • 规则名称由group和rule的名字拼接而成;
  • 检查频率设置为了最小1分钟;
  • 查询统计使用了SLS的promql_query进行了封装;
  • 分组评估使用了标签自动;
  • 触发条件对应了labels中设置的severity的高严重度;
  • 标注使用了prometheus告警中的annotations进行了替换,为了保持模板的可用性,增加了一个value变量;
  • 告警策略默认使用动态告警策略sls.builtin.dynamic,行动策略使用了事先创建好的huolang-test-prom-test;

至此,已经将prometheus的告警规则转化为了SLS的告警监控规则,后续就可以修改告警策略和行动策略来享受到SLS告警管理带来的便利。

总结

本文分别简单介绍了SLS告警和Prometheus告警,以及两者之间存在映射的可能性,并且通过实例和脚本将两者进行了转换;通过该迁移方案,用户可以将原有的Prometheus告警规则无缝迁移到SLS告警,然后可以使用SLS告警强大的告警降噪和告警通知渠道功能。在使用过程中如果遇到任何问题,可以咨询SLS的技术支持群。

以下链接供参考

SLS日志服务:https://help.aliyun.com/document_detail/48869.html

SLS告警学习路径:https://help.aliyun.com/learn/markets/aliyuningpath/log/alert

通过Remote Write协议接入Prometheus监控数据:https://help.aliyun.com/document_detail/171781.html

创建告警策略:https://help.aliyun.com/document_detail/207709.html

脚本链接:https://github.com/panawala/prom_alert_to_sls



欢迎扫群加入阿里云-日志服务(SLS)技术交流(集团同学请直接搜索群号11702236加入), 获得第一手资料与支持

顺滑迁移Prometheus告警到SLS告警

上一篇:每天一个知识点linux(十一)任务计划


下一篇:C++中消息自动派发之二 About IDL解析器