首页 > 其他分享 >prometheus告警处理 altermanager

prometheus告警处理 altermanager

时间:2023-05-18 17:22:29浏览次数:48  
标签:alertmanager smtp alert altermanager prometheus 告警

prometheus告警处理 altermanager

一.告警简介

1.工作流程

prometheus收集监测的信息
prometheus.yml 文件中定义 rules 文件,rules 里包含告警信息
prometheus 把告警信息 push 给 altermanager,alertmanager 里定义收件人和发件人
altermanager 发送文件到邮箱或微信

2.告警生命周期

定期采集监控数据
定期扫描告警规则,发现告警发给 alertmanager,prometheus 页面能看到 alert ,状态为 pending
多次发送到 alertmanager,持续时长超过告警告警规则的 for 的 alert,prometheus 页面看到状态为 firing,准备发送
firing 状态的 alert 等待 group_interval 时间聚合发送
恢复正常后,警报状态重新变回 inactive

3.告警等级

Inactive: 什么都没发生
Pending:已触发阈值,但未满足告警持续时间
Firing:已触发阈值,并满足for定义的持续时间。告警发送给接受者

4.通知方式

webhook:web回调或者http服务的推送API接口
wechat:通过微信 API发送
sns:短信
Pushover :通过Pushover API发送
email:电子邮件

二. AlertManager组件

1.特性

prometheus是组件化工具,prometheus server只负责产生告警,并不会处理告警。 AlertManager组件就是用来处理和消费告警

Alertmanager定义告警机制,通过Slack,Email,wechat等发送警报

1.1 分组

当系统停机时,可能会成百上千的报警同时生成,这个时候就需要将这些告警信息分组了
分组:是指当出现问题时,Altermanager会收到一个单一的通知将同类型/同一种影响的短信合并为一条来发送

1.2. 抑制

抑制:是指当报警发出后,停止重复发送初始化警告引发其他错误的警告的机制
例如当警报被触发,通知整个性能不可达,可以配置Alertmanager忽略由该警报触发而产生的所有其他警报,这可以防止通知多个或多个问题不相关的其他警报。

1.3.沉默

沉默:是指在特定时间内不要发送告警信息,比如设置23点-08点不发送任何告警信息

三、二进制安装altermanager

下载官网

Download | Prometheus

(1)创建工作目录

mkdir -pv /softwares

(2)解压altermanager

tar xf alertmanager-0.25.0.linux-amd64.tar.gz -C /softwares

(3)通知规则---邮件的方式-不使用模板

[root@xiaosun alertmanager-0.25.0.linux-amd64]# cat alertmanager.yml 
global:
  resolve_timeout: 5m
  smtp_from: '1692****[email protected]'   #发件人邮箱
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '1692****[email protected]'   #发件人用户名
  smtp_auth_password: 'aicgt*****hia'      #邮箱授权码
  smtp_require_tls: false
  smtp_hello: 'qq.com'
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '1692****[email protected]'   #收件人邮箱
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
smtp_smarthost: 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。
smtp_auth_password: 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。
smtp_require_tls: 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。

AlertManager 配置自定义邮件模板

[root@prometheus alertmanager]# mkdir template
[root@prometheus alertmanager]# cd template/
[root@prometheus template]# vim email.tmpl
{{ define "email.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}

=========  监控告警 =========
告警程序:     Alertmanager
告警类型:    {{ $alert.Labels.alertname }}
告警级别:    {{ $alert.Labels.severity }} 级
告警状态:    {{ .Status }}
故障主机:    {{ $alert.Labels.instance }} {{ $alert.Labels.device }}
告警主题:    {{ .Annotations.summary }}
告警详情:    {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}
主机标签:    {{ range .Labels.SortedPairs  }}  [{{ .Name }}: {{ .Value  | html }} ] {{- end }} 
故障时间:    {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}

{{- end }}
{{- end }}

{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}

========= 告警恢复 =========
告警程序:     Alertmanager
告警主题:    {{ $alert.Annotations.summary }}
告警主机:    {{ .Labels.instance }}
告警类型:    {{ .Labels.alertname }}
告警级别:    {{ $alert.Labels.severity }} 级
告警状态:    {{   .Status }}
告警详情:    {{ $alert.Annotations.message }}{{ $alert.Annotations.description}}
故障时间:    {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间:    {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}

{{- end }}
{{- end }}
{{- end }}
这里定义的时间为go 语言的诞生时间!!!切记不能乱填

 {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}

调用模板

global:
.....
  smtp_hello: 'qq.com'
 # 调用模板
templates:
  - '/softwares/alertmanager-0.25.0.linux-amd64/template/email.tmpl'
route:
  group_by: ['alertname']
....

(4)运行altermanager服务

启动脚本

cat > /usr/lib/systemd/system/alertmanager.service  << 'EOF'
[Unit]
Description=alertmanager
[Service]
Type=simple
ExecStart=/softwares/alertmanager-0.25.0.linux-amd64/alertmanager  --storage.path=/softwares/alertmanager-0.25.0.linux-amd64/data --config.file=/softwares/alertmanager-0.25.0.linux-amd64/alertmanager.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start alertmanager
systemctl status alertmanager

3、配置prometheus推送给altermanager:

(1)修改prometheus的配置文件

[root@xiaosun prometheus-2.37.6.linux-amd64]# vim prometheus.yml 
...
alerting:
  alertmanagers:
    - static_configs:
        - targets:
            - 10.0.0.108:9093

rule_files:
    - "/softwares/prometheus-2.37.6.linux-amd64/rule/*.yml"
在实际环境中,告警规则肯定有很多,比如对服务器异常进行告警,就有宕机、CPU使用率超过100%、内存使用率超过80%、硬盘使用率超过80%等等
最好创建一个文件夹,针对每个监控对象,创建一个配置文件。
告警规则配置在独立的文件中,文件格式为yml,并在prometheus.yml文件的rule_files模块中进行引用,prometheus启动时,会在rule_files定义的文件或目录下查找规则配置文件并加载

(2)编写prometheus的规则文件

[root@xiaosun prometheus-2.37.6.linux-amd64]# mkdir rule 
# 相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)
groups:
# name:组名。报警规则组名称
- name: alters
  # rules:定义规则
  rules:
  # alert:告警规则的名称
  - alert: NodeMemoryUsage 
  
    # expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
    expr: 100 - (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 > 20
    
    # for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
    for: 1m
    
    # labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
    labels:
      # severity: 指定告警级别。有三种等级,分别为warning、critical和emergency。严重等级依次递增。
      severity: emergency

    # annotations: 附加信息,比如用于描述告警详细信息的文字等
    # annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
    annotations:
      # summary描述告警的概要信息
      # description用于描述告警的详细信息。
      summary: "内存使用过高"
      description: "{{ $labels.instance }} 内存使用大于 80% (当前值: {{ $value }})"
例子
[root@xiaosun prometheus-2.37.6.linux-amd64]# vim rule/rules.yml
groups:
- name: container-runtime
  rules:
  - alert: container-10.0.0.108
    expr: up{instance="10.0.0.108:9100", job="node_exporter_108"} == 0
    for: 15s
    annotations:
      summary: "{{ $labels.instance }} 已停止运行超过 15s!"

  - alert: container-容器挂啦-2023
    expr: up{instance="10.0.0.109:9100", job="node_exporter_109"} == 0
    for: 5s
    annotations:
      summary: "Duang~ {{ $labels.instance }} 已停止运行超过 15s!"

(3)重启prometheus server服务

[root@xiaosun prometheus-2.37.6.linux-amd64]# systemctl restart prometheus

标签:alertmanager,smtp,alert,altermanager,prometheus,告警
From: https://www.cnblogs.com/scfssq/p/17412555.html

相关文章

  • Prometheus笔记-监控Nginx
    安装Nginx及stub_status模块参考历史文章:https://www.cnblogs.com/jruing/p/17391716.html安装Nginx-exporter#下载wgethttps://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.11.0/nginx-prometheus-exporter_0.11.0_linux_amd64.tar.gz#解压......
  • 低版本Grafana使用原生webhook实现企业微信告警
    公司现有生产环境普遍使用的还是Grafana7版本,而Grafana9版本才支持企业微信告警。钉钉倒是支持,但是公司不用钉钉,不想就为了这个下一个软件。且Grafana的版本升级太激进,每个大版本之间的差异巨大,我也不想升级,于是另辟蹊径,整了个脚本接收Grafana的POST请求,把请求内容发送到我的企业......
  • Prometheus 与 grafana的搭配使用
     prometheus 核心是一个单独的二进制方式文件  pull模型 内置的时间序列数据库(TSDB) 强大的查询语言PromQL 可视化 开放化 维度存储模型  OLAP系统1、存储计算层 >PrometheusServer,里面包含了存储引擎和计算引擎>Retrieval组件为取数组件,它会主动从......
  • 记录一次全局异常告警@ExceptionHandler和HandlerExceptionResolver的问题
         最近有同事说之前写的全局异常告警,如果有@Valid的注解,在接入新写的插件告警后,返回信息不打印了。全局异常是基于@ExceptionHandler的全局异常类,主要是ServletMVC的ModelAndView返回的错误信息的捕获。代码如下:   /***@authorxxx*/@RestControlle......
  • wazuh告警通过webhook推送到飞书
    使用wazuh自带的shuffle脚本实现 步骤:1.进入:/var/ossec/integrations复制shuffle、shuffle.py两个文件,并重命名为:custom-feishu、custom-feishu.py备注:一定要按这个方式命名,自定义告警前,都要加custom2.编辑custom-feishu.py,修改generate_msg函数: 3.如果想看告警......
  • SpringBoot+Prometheus+Grafana实现应用程序可视化监控
    1、SpringBoot应用暴露监控指标maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupI......
  • 玩转Zabbix智能告警:降噪、排班、认领、升级、IM协同
    Zabbix作为一款流行的企业级监控工具,可以监控各种网络设备和服务的状态,并提供强大的告警功能,能够在出现异常情况时及时通知管理员。以下是Zabbix的一些特点:支持多种监控方式,包括SNMP、JMX、IPMI等,可以监控各种网络设备、服务器、虚拟化平台等;提供了丰富的监控项和模板,可以轻松......
  • prometheus 监控 exsi vcenter,kvm libvirt
    转自:https://www.scriptjc.com/article/1284 prometheus监控exsivcenter,kvmlibvirt来源:原创时间:2021-10-20作者:脚本小站分类:Linux监控vcenter:github地址:1https://github.com/pryorda/vmware_exporter启动:1234567#!/bin/bash ......
  • Prometheus系列---【zookeeper-exporter的安装】
    zookeeper-exporter的安装1.下载地址链接:2.上传到服务器指定目录cd/home/appusermkdirmonitor3.执行修改权限chmod+x/home/appuser/monitor/zookeeper_exporter4.启动zookeeper_exporternohup/home/appuser/monitor/zookeeper_exporter-bind-addr=:1887>/dev/n......
  • alertmanager实现某个时间段静默某些告警项
    目录【0】解决思路分析【1】APIAPIVersionPOST/api/v2/alertsGET/api/v2/alertsGET/api/v2/alerts/groups【2】API使用实践(2.1)基本案例【3】最佳实践(定时静默)(3.1)立马构造出故障的告警信息(3.2)构建好静默,获取静默语句(3.3)使用生成静默规则(3.4)自动化脚本 ......