Prometheus是一款面向云原生的监控软件,支持众多软件、系统数据的采集与监控。您可以将Prometheus数据和告警监控规则迁移到日志服务中,基于日志服务告警系统完成告警。本文介绍如何将Prometheus告警无缝转换为日志服务告警。

前提条件

背景信息

Prometheus告警监控规则配置主要包括告警名称、评估语句、告警labels、告警annoations等信息。Prometheus告警触发后需要在AlertManager中配置告警路由和通知。AlertManager功能强大,但是一套全脚本化的配置,针对非研发人员,并不友好。AlertManager需要对接额外的PagerDuty等系统,才能完成常见的告警值班轮岗等需求,在使用上需要维护各类碎片化的系统。日志服务告警通过阿里云控制台简单的界面化操作即可完成,同时支持比较高阶的功能(例如轮岗值班代班等),可以满足各类运维运营人员的需求。

Prometheus告警监控规则主要包含groups配置、rules配置,内容示例如下:

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告警监控规则与日志服务告警监控规则的映射关系如下表所示。
Prometheus告警监控规则 日志服务告警监控规则
alert 日志服务告警监控规则名称。
expr 日志服务时序查询的PromQL语句。
for 日志服务告警监控规则中的连续触发阈值。
labels 日志服务告警监控规则中的标签。

如果Prometheus告警监控规则的labels中包含severity等严重度的配置,则会映射为日志服务告警监控规则中的严重度。

annotations 日志服务告警监控规则中的标注。

日志服务告警监控规则中的标注支持大部分Prometheus告警的渲染语法。

步骤一:接入Prometheus数据

Prometheus默认将时序数据存储在本地磁盘和内存中,数据量较大时,往往会占用海量内存。您可以通过Prometheus Remote Write功能将数据迁移到日志服务的时序库中进行存储。

  1. 登录Prometheus所在服务器。
  2. 打开配置文件,并根据实际情况替换如下参数。具体操作,请参见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                      
    参数 说明
    url 日志服务MetricStore的URL,格式为https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/write。其中:
    • {sls-endpoint}:服务入口。更多信息,请参见服务入口
    • {project}:您已创建的Project。
    • {metricstore}:您已创建的MetricStore。
    注意
    • 如果您使用的是阿里云内网,请优先使用内网域名。
    • 为保证传输安全性,请务必使用https。
    basic_auth 鉴权信息,以Remote Write协议写入数据到日志服务需要BasicAuth鉴权,即您在前提条件中所创建的阿里云AccessKey。其中:
    • username为阿里云AccessKey ID。
    • password为阿里云AccessKey Secret。
    queue_config 用于设置写入的缓存、重试等策略。

    为避免过多无效网络请求,建议min_backoff不低于100msmax_backoff不低于5s

    如果Prometheus数据量较大,可修改queue_config配置,建议修改为:
    batch_send_deadline: 20s
    capacity: 20480
    max_backoff: 5s
    max_samples_per_send: 2048
    min_backoff: 100ms
    min_shards: 100
  3. 验证是否已上传数据到日志服务。
    配置好Prometheus后,您可通过预览方式查看数据是否已上传到日志服务。
    1. 登录日志服务控制台
    2. 在Project列表区域,单击目标Project。
    3. 时序存储 > 时序库页签中,选择目标MetricStore右侧的修改日志库图标 > 消费预览
      消费预览页面,如果有数据,则表示配置成功。Prometheus-数据消费

步骤二:迁移Prometheus告警监控规则

日志服务提供开箱即用的Python转换脚本用于迁移Prometheus告警监控规则。

  1. 下载prom_alert_to_sls-main.zip
    Python转换脚本
  2. 安装依赖包。
    pip install -r /path/to/requirements.txt
  3. 修改并运行main.py文件。

    main.py文件中的如下内容需根据实际情况配置。

    if __name__ == '__main__':
        region = '<region>'                   # 目标Project所在的地域。
        metric_project = '<metric_project>'   # 目标MetricStore所在的Project。
        metric_store = '<metric_store>'       # 用于存储Prometheus告警监控规则的MetricStore,需与您在步骤一:接入Prometheus数据时所设置的MetricStore一致。
        # 阿里云访问密钥AccessKey。该AccessKey需具备写入数据到MetricStore以及创建告警的权限,即您在前提条件中所创建的阿里云AccessKey。
        # 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维。
        access_key = '<ak>'                   
        access_secret_key = '<sk>'            
        action_policy_id = '<user define in sls>'   # 设置为您所创建的日志服务告警行动策略ID。
        alert_policy_id = 'sls.builtin.dynamic'     # 告警策略ID,默认使用动态告警策略sls.builtin.dynamic。
        transform_alert_rules('prometheus-rules.yaml',
                              region,
                              metric_project,
                              metric_store,
                              access_key,
                              access_secret_key,
                              action_policy_id,
                              alert_policy_id)
  4. 验证迁移结果。
    1. 登录日志服务控制台
    2. 在Project列表区域,单击目标Project。
    3. 在左侧导航栏中,单击告警
    4. 规则/事务页签中,确认是否迁移Prometheus告警监控规则成功。
      如果列表中存在Prometheus告警监控规则,则表示已成功将Prometheus告警监控规则转化为日志服务告警监控规则,后续您可以在日志服务中对Prometheus数据进行告警监控。迁移告警监控规则