Prometheus入门2-Prometheus和AlertManager

一.Prometheus:配置获取node_export的JOB

我们可以修改 Prometheus 的配置文件,将服务器加到 scrape_configs 中:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'server'
    static_configs:
      - targets: ['xx.xx.xx.xx:9100']

增加你要监控的node_export地址

  - job_name: 'node_export_20'
    static_configs:
    - targets: ['10.3.3.20:9100']
  • 修改配置后,需要重启 Prometheus 服务
  • 在 Prometheus Web UI 的 Status -> Targets 中,可以看到新加的服务器

二.Prometheus:整合Prometheus-rule

  1. 编写Prometheus规则文件
# vim /opt/monitor/soft/prometheus-2.13.0.linux-amd64/rule.yml
groups:
- name: alert-rules                               #告警的分组,后续告警优化时,可通过分组做优化配置
  rules:
  - alert: InstanceStatus                        #告警规则名称
    expr: up{job="node_export_6"} == 0    #1是服务正常 ,0服务挂了
    for: 10s                                             #评估等待10s,等待期间报警状态为pending
    labels:                                               #此标签可用于match之后的通知操作
      severity: 'critical'
    annotations:                                      #描述告警信息
      summary: "实例: {{ $labels.instance }} 服务挂了"  
      description: "job: {{ $labels.job }} 服务挂了,请检查服务."
  • 这里的expr需要熟悉PromQL语法
  • severity跟下面的alertmanager模块路由相关
  1. Prometheus配置文件读取规则文件
# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:19093']

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "/opt/monitor/soft/prometheus-2.13.0.linux-amd64/rule.yml"
  # - "first_rules.yml"
  # - "second_rules.yml"

其中:

  • targets: ['localhost:19093']写alertmanagers的服务地址
  • rule_files配置对应的规则文件,重新启动Prometheus

三.AlertManager模块告警配置

上面配置好规则,接下来我们需要在alertmanager模块进行配置。

3.1 自定义消息模版

告警通知使用的是默认模版,因为它已经编译到二进制包了,所以我们不需要额外配置。如果我们想自定义模版,这又该如何配置呢?

步骤一: 下载官方默认模版

$ wget https://raw.githubusercontent.com/prometheus/alertmanager/master/template/default.tmpl

步骤二: 根据自己的需求修改模版,主要是下面这一段

其中:node_export.html为自定义,跟后面配置alertmanager.yml要一致。

{{ define "node_export.html" }}
.... // 修改内容
{{ end }}

步骤三: 修改 alertmanger.yml,添加 templates 配置参数

templates:          #默认Alertmanager使用系统自带的默认通知模板 ,用户也可在此自定义模板          
  #- '/opt/monitor/soft/alertmanager-0.19.0.linux-amd64/template/*.tmpl'
  - './template/*.tmpl'

最后保存重新加载配置即可。

步骤四: 创建一个自定义模板文件

样例

{{ define "node_export.html" }}
{{ if gt (len .Alerts.Firing) 0 -}}
Alerts Firing:

{{ range .Alerts}} 告警级别: {{ .Labels.severity }}
告警类型: {{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }} {{- end }} {{- end }} {{ if gt (len .Alerts.Resolved) 0 -}} Alerts Resolved: {{ range .Alerts}} 告警级别: {{ .Labels.severity }}
告警类型: {{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
触发时间: {{ .StartsAt.Format "2006-01-02 15:04:05" }}
恢复时间: {{ .EndsAt.Format "2006-01-02 15:04:05" }} {{- end }} {{- end }} {{- end }}

3.2 配置文件alertmanager.yml路由和email模板引用

下面需要配置文件alertmanager.yml进行配置

  • 配置email地址和引用的模板
receivers:                                  
- name: 'node-export'
  email_configs:             
  - to: '[email protected]'
    send_resolved: false  #告警解除发送恢复通知
    html: '{{ template "node_export.html" . }}'     #应用哪个模板
    headers: { Subject: "node-export服务告警" }   #邮件主题信息 如果不写headers也可以在模板中定义默认加载email.default.subject这个模板

不同报警发送不同的邮箱,每个邮箱的模板都可以自定义。

  • 配置路由
route:                   #顶级路由必须匹配所有报警,因为他要接受所有报警,再分匹配到分支路由上
  group_by: ['alertname']   ##将传入警报分组在一起的标签。例如,cluster=A和alertname=LatencyHigh的多个警报将批处理为单个组。
  group_wait: 30s  #当传入的警报创建新的警报组时,至少等待"30s"发送初始通知。
  group_interval: 5m  #当发送第一个通知时,等待"5m"发送一批新的警报,这些警报开始针对该组触发。 (如果是group_by里的内容为新的如:alertname=1,alertname=2 会马上发送2封邮件, 如果是group_by之外的会等待5m触发一次)
  repeat_interval: 10m #如果警报已成功发送,请等待"4h"重新发送,重复发送邮件的时间间隔
  receiver: 'default-receiver'
  routes:                 #分支路由,可设置不同的匹配规则
  - receiver: 'default-receiver'
    match:              #匹配告警规则的key:value
      severity: 'critical'                
  - receiver: 'node-export'
    match:              #匹配告警规则的key:value
      severity: 'node-export'                

其中的这一段匹配路由

  - receiver: 'node-export'
    match:              #匹配告警规则的key:value
      severity: 'node-export'     
  • 重启alertmanager模块

四.参考资料

  • Awesome Prometheus
  • 初识PromQL

你可能感兴趣的:(Prometheus入门2-Prometheus和AlertManager)