prometheus 告警配置以及配置项解释

监控是脱离不了告警的。告警是指把监控发现的问题通过微信或者短信等通信手段,告诉我们。zabbix有他的告警机制。而prometheus是通过alertmanager实现的。

alertmanager的安装


alertmanager是支持集群模式的。本文也是用集群方式安装。

  • 选择两台或者三台机器用于部署alertmanager。
  • 下载alertmanager安装包,这个在官方下载就行了。
  • 分别把压缩包解压到各个机器上
  • 修改配置文件alertmanager.yml
global:
  resolve_timeout: 5m

receivers:
- name: magpie.ding
  webhook_configs:
  - url: http://10.252.3.10:9002/ding_message
    send_resolved: false

route:
  receiver: magpie.ding
  group_by: ['kind']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1m
  routes:
  - receiver: magpie.ding
    match_re: 
      severity: warnging

inhibit_rules:
  - source_match:
      alertname: 'node_time:sum:error'
    target_match:
      alertname: 'node_netstat_Icmp_InMsgs:error'
    equal: ['kind','severity']

global 这个是全局设置
resolve_timeout 当告警的状态有firing变为resolve的以后还要呆多长时间,才宣布告警解除。这个主要是解决某些监控指标在阀值边缘上波动,一会儿好一会儿不好。


receivers 定义谁接收告警。也就是PrometheUS把告警内容发送到这个地方,然后这个地方的某些东东把告警发送给我们。
name就是个代称方便后面用
webhook_configs 这个是说 PrometheUS把告警发送给webhook,也就是一个http的url,当然这个url需要我们自己定义服务实现了。PrometheUS还支持其他的方式,具体可以参考官网:https://prometheus.io/docs/alerting/configuration/
prometheus 告警配置以及配置项解释_第1张图片
send_resolved 当问题解决了是否也要通知一下


route 是个重点,告警内容从这里进入,寻找自己应该用那种策略发送出去
receiver 一级的receiver,也就是默认的receiver,当告警进来后没有找到任何子节点和自己匹配,就用这个receiver
group_by 告警应该根据那些标签进行分组
group_wait 同一组的告警发出前要等待多少秒,这个是为了把更多的告警一个批次发出去
group_interval 同一组的多批次告警间隔多少秒后,才能发出
repeat_interval 重复的告警要等待多久后才能再次发出去
routes 也就是子节点了,配置项和上面一样。告警会一层层的找,如果匹配到一层,并且这层的continue选项为true,那么他会再往下找,如果下层节点不能匹配那么他就用区配的这一层的配置发送告警。如果匹配到一层,并且这层的continue选项为false,那么他会直接用这一层的配置发送告警,就不往下找了。
match_re 用于匹配label。此处列出的所有label都匹配到才算匹配


inhibit_rules这个叫做抑制项,通过匹配源告警来抑制目的告警。比如说当我们的主机挂了,可能引起主机上的服务,数据库,中间件等一些告警,假如说后续的这些告警相对来说没有意义,我们可以用抑制项这个功能,让PrometheUS只发出主机挂了的告警。
source_match 根据label匹配源告警
target_match 根据label匹配目的告警
equal 此处的集合的label,在源和目的里的值必须相等。如果该集合的内的值再源和目的里都没有,那么目的告警也会被抑制。


  • 分别启动alertmanager
    比如在A,B两个节点上部署alertmanager,那么A节点的启动命令:
#你应该用nohup后台启动 
./alertmanager --config.file=alertmanager.yml --cluster.peer=hostB:9094

B节点的启动命令:

#你应该用nohup后台启动 
./alertmanager --config.file=alertmanager.yml --cluster.peer=hostA:9094
  • 在PrometheUS上进行配置
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - hostA:9093
      - hostB:9093
  • 重启或者重新加载PrometheUS的配置
  • 访问http://hostA:9093 就能看到alertmanager的页面
    prometheus 告警配置以及配置项解释_第2张图片
    alertmanager部署完毕

测试

  • 设置监控规则和阀值
    新建一个文件名字是prometheus.rules.yml(名字是自定义的),
- name: test_alert_up
  rules:
  - alert: node_time:sum:error
    expr: up < 1
    #for: 10s
    labels:
      severity: warnging
      action: text
      kind: node_export
    annotations:
      summary: not up 
      last: "{{ $value }}"

上面的规则是检查,node_export是不是存活
for 是说当监控第一次发现某个指标超过阀值,等待for秒后,再检查一次,如果还是超过阀值在发送给alertmanager

  • 把规则和PrometheUS关联起来,修改PrometheUS的配置文件
rule_files:
  - "prometheus.rules.yml"
  • 重新加载配置或者重启
    prometheus 告警配置以及配置项解释_第3张图片
  • 停掉一个node_export
    prometheus 告警配置以及配置项解释_第4张图片
  • 查看你的告警服务是不是告警了,我这里的服务是我自己写的,通过钉钉告警
    prometheus 告警配置以及配置项解释_第5张图片

其他

如果你觉得alertmanager的inhibit_rules麻烦,你可以不配置inhibit_rules,而是登录alertmanager的页面,新建slience规则,也能达到关闭某个告警的效果。
在这里插入图片描述
prometheus 告警配置以及配置项解释_第6张图片


先写到这里了,有问题进QQ群630300475聊一聊,大家一起进步

你可能感兴趣的:(监控)