【2023】Prometheus-Prometheus与Alertmanager配置详解

news/2024/5/19 0:57:19 标签: prometheus, 服务器, 运维, alertmanager, 告警

记录一下Prometheus与Alertmanager的配置参数等内容

目录

  • 1.Prometheus
  • 2.alertmanager
    • 2.1.alertmanager.yml
      • 2.1.1.global:全局配置
        • 2.1.1.1.以email方式作为告警发送方
        • 2.1.1.2.以wechat方式作为告警发送方
        • 2.1.1.3.以webhook方式作为告警发送方
      • 2.1.2.templates:告警通知模板
      • 2.1.3.route:路由
        • 2.1.3.1.routes:子路由用法示例
      • 2.1.4.receivers:接收器
        • 2.1.4.1.email_configs:配置邮件告警通知
        • 2.1.4.2.webhook_config:配置钉钉告警通知
        • 2.1.4.3.wechat_config:配置微信告警通知
      • 2.1.5.inhibit_rules:告警抑制
    • 2.2.templates:告警通知模板
      • 2.2.1.定义一个email告警通知模板

1.Prometheus

prometheusyml_3">1.1.prometheus.yml

global:
# 采集间隔时间为15秒,默认1分钟
  scrape_interval: 15s 
# 评估规则间隔15秒,默认1分钟
  evaluation_interval: 15s

# 接入alertmanager工具
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          - 192.168.10.5:9093

# 定义告警规则存放位置
rule_files:
  - "/data/prometheus/rules/*_rules.yml"

# 采集数据源的源信息的配置项,可以配置多个
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

1.2.告警规则定义

  • node节点告警规则定义,列出两个例子,其他告警规则照猫画虎
groups:
  - name: node_status
    rules:
    - alert: '节点状态'
      expr: up == 0
      for: 1m
      labels:
        severity: '紧急严重'
      annotations:
        discription: "Node has been down for more than 2 minutes"
        summary: "IP为 {{ $labels.instance }} 节点宕机"
  - name: cpu_use
    rules:
    - alert: 'CPU使用情况'
      expr: ((node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / node_memory_MemTotal_bytes) > 0.9
      for: 1m
      lavels:
        severity: '警告'
      annotations:
        discription: "内存使用超过百分之九十了"
        summary: "IP为 {{ $labels.instance }} 节点内存告警"

alertmanager_56">2.alertmanager

alertmanageryml_57">2.1.alertmanager.yml

2.1.1.global:全局配置

2.1.1.1.以email方式作为告警发送方

global:
  # 邮箱SMTP服务器代理地址
  smtp_from: 'smtp.163.com:465'
  # 发送邮件的名称
  smtp_smarthost: 'xxx@163.com'
  # 邮箱用户名
  smtp_auth_username: 'xxx@163.com'
  # 邮箱授权密码token
  smtp_auth_password: 'PLAPPSJXJCQABYAF'
  # 通过指定文件来输入密码,与上条选一即可
  smtp_auth_password_file: 'password/pass'
  # 设置tls协议,是否使用分别是ture/false
  smtp_require_tls: false
  # 用于控制在确认报警后多久可以被视为解决的时间,默认5分
  resolve_timeout: 5m

2.1.1.2.以wechat方式作为告警发送方

global:
# 企业微信API地址,默认为https://qyapi.weixin.qq.com/cgi-bin/
  wechat_api_url: XXX
# 设置为企业微信中创建的Prometheus应用中记录的“Secret”内容
  wechat_api_secret: XXX
# 设置为企业微信中记录的“企业ID”
  wechat_api_corp_id: XXX

2.1.1.3.以webhook方式作为告警发送方

  • 默认全局段没有配置

2.1.2.templates:告警通知模板

  • alertmanager启动会加载该目录下文件,可自行定义告警内容。

  • templates:模板,用于定义接收告警的内容

# 注意:目录需自行创建,目录存放在alertmanager安装目录
templates:
  - 'template/*.tmpl'

2.1.3.route:路由

  • 用于处理prometheus生成的告警信息将其发送到receiver指定的目的地址。
  • 设置的第一个route为根节点,后面包含的节点为子节点
route:
  # 对报警进行分组,将多个相似告警合并为一个组,减少重复报警
  group_by: ['cluster,alertname']
  # 从接收告警到发送告警的等待时间,时间段内告警会合并一个通知,默认30s
  group_wait: 30s
  # 相同的group之间发送告警的时间间隔,默认5分钟
  group_interval: 5m
  # 告警成功发送后能再次发送相同告警的时间间隔,默认4小时
  repeat_interval: 20m
  # 配置要发送告警使用的接收器名称
  receiver: 'email'
  # 默认为false,用于指示处理警告时进行下一步处理
  # 若设置为true,告警则进行匹配子节点
  continue: false
  # 用于将报警规则与报警事件进行匹配的功能
  # 通过字符方式进行匹配,判断告警中是否有标签labelname=labelvalue
  match:
    [ <labelname>: <labelvalue> ]
  # 通过正则表达式进行告警规则匹配设置
  match_re:
    [ <labelname>: <regex>, ... ]
  # 可以设置触发器发出的报警消息来检测指定的指标值,并执行相应的报警操作
  # 例如定义报警时间、报警级别等
  matchers:
    - foo = bar
    - dings != bums
  # 暂停某个时间段内告警,比如晚上8点到第二天7点间暂停告警
  mute_time_intervals: [{start: "20:00", end: "07:00"}]
  # 指定在哪些时间段内才发出警告,用法与上条一样
  active_time_intervals: [{start: "20:00", end: "07:00"}]
  # 可进行子路由节点匹配设置
  routes: 

2.1.3.1.routes:子路由用法示例

  • 下面这段代码的含义是告警发送给admin-receiver,按照cluster与alertname进行分组。
  • 子路由中若告警匹配到标签service=mysql或service=redis,将会向databas-pager发送告警
  • 子路由中若告警匹配到标签team=frontend,则会按照标签product,environment对告警进行分组后发送
route:
  ... ...
  group_by: ['cluster,alertname']
  receiver: 'admin-receiver'
  routes:
  - receiver: 'database-pager'
    group_wait: 10s
    matchers:
    - service=~"mysql|redis"
  - receiver: 'frontend-pager'
    group_by: [product,environment]
    matchers:
    - team="frontend"

2.1.4.receivers:接收器

  • 接收器是一个通称,每个接收器需要一个唯一的全局名称
  • 接收器的名称要与routes中的receiver保持一致
receivers:
# 指定接收器名称
- name: database-pager
# 配置email告警
  email_configs:
    [ - <email_config>, ... ]
# 配置钉钉告警
  webhook_configs:
    [ - <webhook_config>, ... ]
# 配置微信告警
  wechat_configs:
    [ - <wechat_config>, ... ]
- name: database-pager
  email_configs:
    [ - <email_config>, ... ]
  webhook_configs:
    [ - <webhook_config>, ... ]
  wechat_configs:
    [ - <wechat_config>, ... ]

2.1.4.1.email_configs:配置邮件告警通知

  • 还有一些其他的选项没有列出,如需要请自行查看官网
email_configs:
# 设置接收告警邮件的地址
  - to: '接收通知邮箱地址'
# 设置告警通知内容的来源,名字为模板文件的define内容
    html: '{{ template "email.html" . }}'
# 故障恢复是否通知,默认为false
    send_resolved: true
# 告警邮件标题
    headers:
      subject: "[XXX] 告警通知" 

2.1.4.2.webhook_config:配置钉钉告警通知

webhook_configs:
- url: 接收钉钉告警的地址
  send_resolved: true

2.1.4.3.wechat_config:配置微信告警通知

wechat_configs:
# 用于验证身份的企业id
- corp_id: 'XXX'
# 企业微信API地址
  api_url: 'XXX'
# 设置为企业微信中创建的Prometheus应用中记录的“AgentId”内容
  agent_id: 'XXX'
#  设置为企业微信中新建的Prometheus应用中记录的“Secret”内容
  api_secret: 'XXX'
# 设置为企业微信中的“部门ID”
  to_party: '2
# 设置为企业微信中使用的账号
  to_user: 'XXX'
  send_resolved: true

2.1.5.inhibit_rules:告警抑制

  • 可以指定在特定条件下要忽略的告警条件
  • 可以使用此选项设置首选项,例如优先处理某些告警
  • 如果同一组中的告警同时发生,则忽略其他告警
inhibit_rules:
# 当存在源标签告警触发时抑制含有目标标签的告警
- source_match:
    severity: 'critical'
  target_match:
    severity: 'warning'
# 保证该配置下标签内容相同才会被抑制
  equal: ['alertname','dev','instance']

2.2.templates:告警通知模板

2.2.1.定义一个email告警通知模板

{{ define "test.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
========= ERROR ==========<br>
告警名称:{{ .Labels.alertname }}<br>
告警级别:{{ .Labels.severity }}<br>
告警机器:{{ .Labels.instance }} {{ .Labels.device }}<br>
告警详情:{{ .Annotations.summary }}<br>
告警时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
========= END ==========<br>
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
========= INFO ==========<br>
告警名称:{{ .Labels.alertname }}<br>
告警级别:{{ .Labels.severity }}<br>
告警机器:{{ .Labels.instance }}<br>
告警详情:{{ .Annotations.summary }}<br>
告警时间:{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
恢复时间:{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
========= END ==========<br>
{{- end }}
{{- end }}
{{- end }}

  • 模板中的变量来自下图
    在这里插入图片描述
  • 后续待定

http://www.niftyadmin.cn/n/49508.html

相关文章

52000000

选择题(共52题,合计52.0分) 1. 敏捷团队在项目执行过程中会用到一种叫做“看板”的可视化工具&#xff0c;它可显示WIP&#xff0c; 帮助识别瓶颈和过度承诺&#xff0c; 从而使团队能够优化工作流。请从下列选项中选择WIP的最佳解释?() A 等待初步加工的材料的库存 B 目前正…

多线程环境下的伪共享

今天和大家聊一聊伪共享 1.什么是伪共享&#xff1f; 缓存一致性协议在计算机中针对的最小单元&#xff1a;缓存行&#xff0c;每个缓存行的大小是64字节&#xff0c;一串连续的64字节数据都会存储到缓存行中。 假设数据A和数据B在同一缓存行中&#xff0c;CPU1修改了数据A&am…

基于OpenCV 的车牌识别

基于OpenCV 的车牌识别 车牌识别是一种图像处理技术&#xff0c;用于识别不同车辆。这项技术被广泛用于各种安全检测中。现在让我一起基于 OpenCV 编写 Python 代码来完成这一任务。 车牌识别的相关步骤 1. 车牌检测&#xff1a;第一步是从汽车上检测车牌所在位置。我们将使用…

Boom 3D最新2023电脑版音效增强软件

Boom 3D是适用于Mac和Windows系统的专业音效增强软件&#xff0c;旨在通过播放器&#xff0c;媒体或流媒体服务等介质&#xff0c;在不同类型的耳机上以3D环绕效果播放媒体内容。您无需使用昂贵的耳机或其他附加环绕音效增强器即可感受3D环绕音乐。 Boom 3D专业音效增强软件&am…

Redis的缓存雪崩、击穿、穿透和解决方案

2.5 缓存穿透问题的解决思路 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对象 优点&#xff1a;实现简单&#xff0c;维护…

2023 软件测试行业内卷动荡,红利期过去后,何去何从?

前段时间席卷全互联网行业的内卷现象&#xff0c;想必有不少人都深陷其中。其实刚开始测试行业人才往往供不应求&#xff0c;而在发展了十几年后&#xff0c;很多人涌入这个行业开始面对存量竞争。红利期过去了&#xff0c;只剩内部争夺。 即便如此&#xff0c;测试行业仍有许…

python读取.stl文件

目录 .1 文本方式读取 1.2 stl解析 1.3 stl创建 .2 把点转换为.stl .1 文本方式读取 代码如下 stl_path/home/pxing/codes/point_improve/data/003_cracker_box/0.stlpoints[] f open(stl_path) lines f.readlines() prefixvertex num3 for line in lines:#print (l…

全球爆火的ChatGPT,能否推动芯片市场增长?

“我所热爱的是我真实的生活&#xff0c;因为它包含了我所有的经历和感受&#xff0c;是我每一天都在体验和思考的。”这句非常有诗意的话&#xff0c;来自最近爆火的ChatGPT。 ChatGPT作为一款智能机器人&#xff0c;上知天文下知地理&#xff0c;不仅能写文案&#xff0c;还…