以前一直觉得监控告警是件很神奇的事情,仿佛可望不可及,今天我们就一起来解开它神秘的面纱哈哈~~
我的电脑是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:
scrape_interval: 60s
evaluation_interval: 60s
alerting:
alertmanagers:
- static_configs:
- targets: ["ip:9093"] #这里是alertmanager的地址,注意这个地址是宿主机的地址,不可以写localhost或者127.0.0.1,下面的ip同理
rule_files:
- "rule/*.yml" #alertmanager的告警规则文件
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['ip:9090']
labels:
instance: prometheus
- job_name: pushgateway
static_configs:
- targets: ['ip:9091']
labels:
instance: pushgateway
可以在rule文件夹下创建一个test_rule.yml
groups:
- name: test_rule
rules:
- alert: chat接口超时1500ms个数 # 告警名称
expr: test_metric > 0 # 告警的判定条件,参考Prometheus高级查询来设定
for: 1m # 满足告警条件持续时间多久后,才会发送告警
labels: #标签项
team: node
annotations: # 解析项,详细解释告警信息
summary: "异常服务节点:{{$labels.exported_instance}}"
description: "异常节点:{{$labels.exported_instance}}: 异常服务名称: {{$labels.Service_Name}} "
value: "chat接口超时1500ms个数:{{$value}}"
其中exported_instance和Service_Name都是我们往pushgateway中推送的数据,通过{{$labels.xxx}}的形式可以获取到
三、配置alertmanager.yml,创建alertmanager.yml
global:
resolve_timeout: 5m #处理超时时间,默认为5min
smtp_smarthost: 'smtp.126.com:25' # 邮箱smtp服务器代理,我这里是126的
smtp_from: '###@126.com' # 发送邮箱名称=邮箱名称
smtp_auth_username: '###@126.com' # 邮箱名称=发送邮箱名称
smtp_auth_password: '#####' # 授权码
smtp_require_tls: false
smtp_hello: '126.com'
templates:
- 'test.tmpl' #告警信息模板
route:
group_by: ['alertname'] #报警分组依据
group_wait: 10s #最初即第一次等待多久时间发送一组警报的通知
group_interval: 10m # 在发送新警报前的等待时间
repeat_interval: 1h # 发送重复警报的周期 对于email配置中,此项不可以设置过低,>否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称
receivers:
- name: 'email'
email_configs: # 邮箱配置
- to: '###@126.com' # 接收警报的email配置
headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
send_resolved: true
html: '{{ template "test.html" .}}' #这个test.html就是模板中define的名称,需要对应起来
webhook_configs:
- url: 'http://ip:9093/alertmanager/hook' #这个是alertmanager的地址,ip也是宿主机的ip
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
再配置test.tmpl
{{ define "test.html" }}
报警项
实例
报警阀值
开始时间
{{ range $i, $alert := .Alerts }}
{{ index $alert.Labels "alertname" }}
{{ index $alert.Labels "instance" }}
{{ index $alert.Annotations "value" }}
{{ $alert.StartsAt }}
{{ end }}
{{ end }}
配置结束,下面开始启动容器
一、启动pushgateway:docker run -d --name=pushgateway -p 9091:9091 prom/pushgateway
可以登录http://localhost:9091/查看:
二、启动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容器
docker run -d -p 9090:9090 --restart=always --name=prometheus -v 宿主机的prometheus.yml地址:/etc/prometheus/prometheus.yml -v 宿主机的rule文件夹路径:/etc/prometheus/rule/ prom/prometheus
登录 http://localhost:9090/查看:
查看监控情况:
此时环境已经全部部署完毕,下面可以往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_interface
这个命令的意思是向job为test_job中推送数据,instance为192.168.0.1,Service_Name为ai_sym_interface,值为2
可登录pushgateway查看推送情况:
由于prometheus监控了pushgateway的数据指标,所以在prometheus中也可以看到这条数据:
由于我们配置了test_rule.yml,当test_metric大于0并持续一秒会发送,报警邮件:
至此,邮箱告警就完成了,其他的告警也是同样的道理,可以继续研究,加油~!
原文链接:记忆旅途
留言与评论(共有 0 条评论) “” |