1.Prometheus
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 }} 节点内存告警"
2.alertmanager
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:告警通知模板
- 由
alertmanager.yml
中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 }}
模板中的变量来自下图
- 后续待定