searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Prometheus数据主动上报与告警规则设置

2023-09-27 03:28:12
493
0

前言

大部分情况下,Prometheus周期性调用HTTP接口获取监控数据。某些情况下,主机无法暴露接口,或者不需要频繁推送数据,可以使用pushgateway进行主动数据上报

此外,对于主动上报的数据,本文还将讨论Prometheus的告警设置。

什么是Pushagateway

PushGateway 作为 Prometheus 生态中的一个重要一员,它允许任何客户端向其 Push 符合规范的自定义监控指标,在结合 Prometheus 统一收集监控。

配置Pushgateway

使用docker的方式配置后运行,9091端口便是push入口

docker pull prom/pushgateway
docker run -d --name=pg -p 9091:9091 prom/pushgateway

接入Prometheus

打开prometheus.yml文件,在scrape_configs内添加下面配置:

- job_name: pushgateway
    static_configs:
      - targets: ['127.0.0.1:9091']
        labels:
          instance: pushgateway

重启Promtheus后,Promtheus Server便会定期从Pushgateway拉取数据。

如何推送数据至Pushgateway

假设某服务器上存在一个后台进程,它会周期性检测机器的状态,当发生异常时,则推送数据至Pushgateway。

在Bash脚本中,我们可以使用curl命令完成推送。

#!/bin/bash

# 定义 Pushgateway 地址和端口
pushgateway="127.0.0.1:9091"

# 定义指标名称和值
metric_name="memory_used"
metric_value=70

# 定义错误变量
error=1

# 判断是否推送指标
if [ "$error" -eq 1 ]; then
  # 拼接推送指标的字符串
  data="$metric_name $metric_value"

  # 发送指标数据到 Pushgateway
  echo -n "$data" | curl --data-binary @- "$pushgateway/metrics/job/my_job"
fi

bash中,推送的URL为127.0.0.1:9091/metrics/job/my_job。其中job为tag_name,my_job为tag_value。我们可以以此类推添加多个tag。

比如127.0.0.1:9091/metrics/job/test_job/instance/local/就是添加了{job:test_job, instance:local}两个tag。

如何删除Pushgateway上的数据

类似地,使用curl就能完成删除的指令。

curl -X DELETE 127.0.0.1:9091/metrics/job/test_job/instance/local

被动上报与主动上报

上面讨论了Pushgateway的上报方式,也就是主动上报的形式。那么,普通HTTP接口和Pushgateway的区别是什么呢?

上报方式 简述 优点 缺点
被动上报/pull 客户端使用library,变成exporter,然后prometheus server定时从exporter pull数据。 某一个节点挂了,时序缺失,Prometheus能感知到
主动上报/push 使用pushgateway,所有客户端push数据到pushgateway,然后prometheus server定时从pushgateway pull数据。 解决客户端无法暴露接口等安全问题 如果某一个上报方挂了,pushgateway无法感知上报方的状态

总的说来,被动上报(pull)更好,也是官方推荐的数据上报方式,但push方式能解决上报难问题,具体问题要具体分析。

设置告警规则

在yml中配置告警规则

groups:
- name: Prometheus.rules
  rules:
  - alert: Memory Usage Too High
    expr:  memory_used{job="test_job", instance="local"} > 70
    for: 2m
    labels:
      severity: critical
    annotations:
      title: 'Memory Usage Too High'
      description: "memory used too high"
  • alert:告警规则的名称;
  • expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件;
  • for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending;
  • labels:自定义标签,允许用户指定要附加到告警上的一组附加标签;
  • annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager;

因此,上面的告警规则定义了,当内存使用高于70%且持续2分钟时,便会发出警告。

另外,prometheus.yml中需要配置好rule文件的路径

rule_files:
[ - <filepath_glob> ... ]

告警规则例子

groups:
  - name: hostStatsAlert
    rules:
      - alert: hostCpuUsageAlert
        expr: |
          sum(avg without (cpu)(irate(node_cpu{mode!='idle'}[5m]))) by (instance) > 0.85
        for: 1m
        labels:
          severity: page
        annotations:
          summary: "Instance {{ $labels.instance }} CPU usage high"
          description: "{{ $labels.instance }} CPU usage above 85% (current value: {{ $value }})"
      - alert: hostMemUsageAlert
        expr: |
          (node_memory_MemTotal - node_memory_MemAvailable) / node_memory_MemTotal > 0.85
        for: 1m
        labels:
          severity: page
        annotations:
          summary: "Instance {{ $labels.instance }} MEM usage high"
          description: "{{ $labels.instance }} MEM usage above 85% (current value: {{ $value }})"

上面展示的告警规则为

  1. 当CPU 最近5分钟内的平均使用率高于85%且保持了1分钟后,发出告警
  2. 当内存使用率高于85%后且保持了1分钟后,发出告警

告警方式

prometheus.yml只是定义了规则,“告警”这一动作还需由AlertManager进行。AlertManager可以通过邮件、即时通讯软件等方式发送告警。另外,AlertManager还拥有丰富的自定义功能,管理告警间隔、告警分组、receiver分组、告警路由等等。

下面是一个最简单的邮件发送告警,通过SMTP配置发送者,receivers中配置接收者。

global:
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'xxx@163.com'
  smtp_auth_username: 'xxx@163.com'
  smtp_auth_password: 'xxxxxx' # 邮箱的授权密码
  smtp_require_tls: false
templates:
  - '/alertmanager/template/*.tmpl'
route:
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 10m
  receiver: default-receiver
receivers:
- name: 'default-receiver'
  email_configs:
  - to: 'xxx@qq.com'
    html: '{ alert.html }'
    headers: { Subject: "Prometheus[WARN] 内存使用过高!!!" }

 

0条评论
0 / 1000
z****n
5文章数
0粉丝数
z****n
5 文章 | 0 粉丝
原创

Prometheus数据主动上报与告警规则设置

2023-09-27 03:28:12
493
0

前言

大部分情况下,Prometheus周期性调用HTTP接口获取监控数据。某些情况下,主机无法暴露接口,或者不需要频繁推送数据,可以使用pushgateway进行主动数据上报

此外,对于主动上报的数据,本文还将讨论Prometheus的告警设置。

什么是Pushagateway

PushGateway 作为 Prometheus 生态中的一个重要一员,它允许任何客户端向其 Push 符合规范的自定义监控指标,在结合 Prometheus 统一收集监控。

配置Pushgateway

使用docker的方式配置后运行,9091端口便是push入口

docker pull prom/pushgateway
docker run -d --name=pg -p 9091:9091 prom/pushgateway

接入Prometheus

打开prometheus.yml文件,在scrape_configs内添加下面配置:

- job_name: pushgateway
    static_configs:
      - targets: ['127.0.0.1:9091']
        labels:
          instance: pushgateway

重启Promtheus后,Promtheus Server便会定期从Pushgateway拉取数据。

如何推送数据至Pushgateway

假设某服务器上存在一个后台进程,它会周期性检测机器的状态,当发生异常时,则推送数据至Pushgateway。

在Bash脚本中,我们可以使用curl命令完成推送。

#!/bin/bash

# 定义 Pushgateway 地址和端口
pushgateway="127.0.0.1:9091"

# 定义指标名称和值
metric_name="memory_used"
metric_value=70

# 定义错误变量
error=1

# 判断是否推送指标
if [ "$error" -eq 1 ]; then
  # 拼接推送指标的字符串
  data="$metric_name $metric_value"

  # 发送指标数据到 Pushgateway
  echo -n "$data" | curl --data-binary @- "$pushgateway/metrics/job/my_job"
fi

bash中,推送的URL为127.0.0.1:9091/metrics/job/my_job。其中job为tag_name,my_job为tag_value。我们可以以此类推添加多个tag。

比如127.0.0.1:9091/metrics/job/test_job/instance/local/就是添加了{job:test_job, instance:local}两个tag。

如何删除Pushgateway上的数据

类似地,使用curl就能完成删除的指令。

curl -X DELETE 127.0.0.1:9091/metrics/job/test_job/instance/local

被动上报与主动上报

上面讨论了Pushgateway的上报方式,也就是主动上报的形式。那么,普通HTTP接口和Pushgateway的区别是什么呢?

上报方式 简述 优点 缺点
被动上报/pull 客户端使用library,变成exporter,然后prometheus server定时从exporter pull数据。 某一个节点挂了,时序缺失,Prometheus能感知到
主动上报/push 使用pushgateway,所有客户端push数据到pushgateway,然后prometheus server定时从pushgateway pull数据。 解决客户端无法暴露接口等安全问题 如果某一个上报方挂了,pushgateway无法感知上报方的状态

总的说来,被动上报(pull)更好,也是官方推荐的数据上报方式,但push方式能解决上报难问题,具体问题要具体分析。

设置告警规则

在yml中配置告警规则

groups:
- name: Prometheus.rules
  rules:
  - alert: Memory Usage Too High
    expr:  memory_used{job="test_job", instance="local"} > 70
    for: 2m
    labels:
      severity: critical
    annotations:
      title: 'Memory Usage Too High'
      description: "memory used too high"
  • alert:告警规则的名称;
  • expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件;
  • for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending;
  • labels:自定义标签,允许用户指定要附加到告警上的一组附加标签;
  • annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager;

因此,上面的告警规则定义了,当内存使用高于70%且持续2分钟时,便会发出警告。

另外,prometheus.yml中需要配置好rule文件的路径

rule_files:
[ - <filepath_glob> ... ]

告警规则例子

groups:
  - name: hostStatsAlert
    rules:
      - alert: hostCpuUsageAlert
        expr: |
          sum(avg without (cpu)(irate(node_cpu{mode!='idle'}[5m]))) by (instance) > 0.85
        for: 1m
        labels:
          severity: page
        annotations:
          summary: "Instance {{ $labels.instance }} CPU usage high"
          description: "{{ $labels.instance }} CPU usage above 85% (current value: {{ $value }})"
      - alert: hostMemUsageAlert
        expr: |
          (node_memory_MemTotal - node_memory_MemAvailable) / node_memory_MemTotal > 0.85
        for: 1m
        labels:
          severity: page
        annotations:
          summary: "Instance {{ $labels.instance }} MEM usage high"
          description: "{{ $labels.instance }} MEM usage above 85% (current value: {{ $value }})"

上面展示的告警规则为

  1. 当CPU 最近5分钟内的平均使用率高于85%且保持了1分钟后,发出告警
  2. 当内存使用率高于85%后且保持了1分钟后,发出告警

告警方式

prometheus.yml只是定义了规则,“告警”这一动作还需由AlertManager进行。AlertManager可以通过邮件、即时通讯软件等方式发送告警。另外,AlertManager还拥有丰富的自定义功能,管理告警间隔、告警分组、receiver分组、告警路由等等。

下面是一个最简单的邮件发送告警,通过SMTP配置发送者,receivers中配置接收者。

global:
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'xxx@163.com'
  smtp_auth_username: 'xxx@163.com'
  smtp_auth_password: 'xxxxxx' # 邮箱的授权密码
  smtp_require_tls: false
templates:
  - '/alertmanager/template/*.tmpl'
route:
  group_by: ['alertname', 'cluster', 'service']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 10m
  receiver: default-receiver
receivers:
- name: 'default-receiver'
  email_configs:
  - to: 'xxx@qq.com'
    html: '{ alert.html }'
    headers: { Subject: "Prometheus[WARN] 内存使用过高!!!" }

 

文章来自个人专栏
zhangyuhang
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0