网络知识 娱乐 prometheus监控pushgateway,通过alertmanager实现告警

prometheus监控pushgateway,通过alertmanager实现告警

以前一直觉得监控告警是件很神奇的事情,仿佛可望不可及,今天我们就一起来解开它神秘的面纱哈哈~~

我的电脑是win10系统,我在电脑上安装了Docker Desktop软件,使用docker部署的

prometheus、pushgateway和alertmanager。

一、拉取prometheus、pushgateway和alertmanager的镜像,命令很简单:

docker pull prom/prometheus

docker pull prom/pushgateway

docker pull prom/alertmanager

可以通过docker images命令查看镜像是否拉取成功。

二、配置prometheus,创建prometheus.yml

global:n scrape_interval: 60sn evaluation_interval: 60snnnalerting:n alertmanagers:n - static_configs:n - targets: ["ip:9093"]t#这里是alertmanager的地址,注意这个地址是宿主机的地址,不可以写localhost或者127.0.0.1,下面的ip同理nnrule_files:n - "rule/*.yml"t#alertmanager的告警规则文件nnscrape_configs:n - job_name: prometheusn static_configs:n - targets: ['ip:9090']n labels:n instance: prometheusn - job_name: pushgatewayn static_configs:n - targets: ['ip:9091']n labels:n instance: pushgatewayn

可以在rule文件夹下创建一个test_rule.yml

groups:n - name: test_rulen rules:n - alert: chat接口超时1500ms个数 # 告警名称n expr: test_metric > 0 # 告警的判定条件,参考Prometheus高级查询来设定n for: 1m # 满足告警条件持续时间多久后,才会发送告警n labels: #标签项n team: noden annotations: # 解析项,详细解释告警信息n summary: "异常服务节点:{{$labels.exported_instance}}"n description: "异常节点:{{$labels.exported_instance}}: 异常服务名称: {{$labels.Service_Name}} "n value: "chat接口超时1500ms个数:{{$value}}"n

其中exported_instance和Service_Name都是我们往pushgateway中推送的数据,通过{{$labels.xxx}}的形式可以获取到

三、配置alertmanager.yml,创建alertmanager.yml

nnglobal:n resolve_timeout: 5m #处理超时时间,默认为5minn smtp_smarthost: 'smtp.126.com:25' # 邮箱smtp服务器代理,我这里是126的n smtp_from: '###@126.com' # 发送邮箱名称=邮箱名称n smtp_auth_username: '###@126.com' # 邮箱名称=发送邮箱名称n smtp_auth_password: '#####' # 授权码n smtp_require_tls: falsen smtp_hello: '126.com'n ntemplates:n - 'test.tmpl'tt#告警信息模板n nroute:n group_by: ['alertname'] #报警分组依据n group_wait: 10s #最初即第一次等待多久时间发送一组警报的通知n group_interval: 10m # 在发送新警报前的等待时间n repeat_interval: 1h # 发送重复警报的周期 对于email配置中,此项不可以设置过低,>否则将会由于邮件发送太多频繁,被smtp服务器拒绝n receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称n nreceivers:n- name: 'email'n email_configs: # 邮箱配置n - to: '###@126.com' # 接收警报的email配置n headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题n send_resolved: truen html: '{{ template "test.html" .}}'t#这个test.html就是模板中define的名称,需要对应起来n webhook_configs:n - url: 'http://ip:9093/alertmanager/hook't#这个是alertmanager的地址,ip也是宿主机的ipninhibit_rules:n - source_match:n severity: 'critical'n target_match:n severity: 'warning'n equal: ['alertname', 'dev', 'instance']n

再配置test.tmpl

{{ define "test.html" }}n<table border="1">n <tr>n <td>报警项</td>n <td>实例</td>n <td>报警阀值</td>n <td>开始时间</td>n </tr>n {{ range $i, $alert := .Alerts }}n <tr>n <td>{{ index $alert.Labels "alertname" }}</td>n <td>{{ index $alert.Labels "instance" }}</td>n <td>{{ index $alert.Annotations "value" }}</td>n <td>{{ $alert.StartsAt }}</td>n </tr>n {{ end }}n</table>n{{ end }}n

配置结束,下面开始启动容器

一、启动pushgateway:docker run -d --name=pushgateway -p 9091:9091 prom/pushgateway

可以登录http://localhost:9091/查看:

prometheus监控pushgateway,通过alertmanager实现告警

二、启动alertmanager

docker run -d -p 9093:9093 --restart=always --name=alertmanager -v 宿主机的alertmanager.yml地址:/etc/alertmanager/alertmanager.yml -v 宿主机的test.tmpl地址:/etc/alertmanager/test.tmpl prom/alertmanager:latest

登录http://localhost:9093/查看:

prometheus监控pushgateway,通过alertmanager实现告警

三、启动prometheus容器

docker run -d -p 9090:9090 --restart=always --name=prometheus -v 宿主机的prometheus.yml地址:/etc/prometheus/prometheus.yml -v 宿主机的rule文件夹路径:/etc/prometheus/rule/ prom/prometheusn

登录 http://localhost:9090/查看:

prometheus监控pushgateway,通过alertmanager实现告警

查看监控情况:

prometheus监控pushgateway,通过alertmanager实现告警

prometheus监控pushgateway,通过alertmanager实现告警

此时环境已经全部部署完毕,下面可以往pushgateway中推送数据,查看告警情况

echo "test_metric 2" | curl --data-binary @- http://127.0.0.1:9091/metrics/job/test_job/instance/192.168.0.1/Service_Name/ai_sym_interfacen

这个命令的意思是向job为test_job中推送数据,instance为192.168.0.1,Service_Name为ai_sym_interface,值为2

prometheus监控pushgateway,通过alertmanager实现告警

可登录pushgateway查看推送情况:

prometheus监控pushgateway,通过alertmanager实现告警

由于prometheus监控了pushgateway的数据指标,所以在prometheus中也可以看到这条数据:

prometheus监控pushgateway,通过alertmanager实现告警

由于我们配置了test_rule.yml,当test_metric大于0并持续一秒会发送,报警邮件:

prometheus监控pushgateway,通过alertmanager实现告警

至此,邮箱告警就完成了,其他的告警也是同样的道理,可以继续研究,加油~!

原文链接:记忆旅途