文中摘自微信公众平台「JAVA日知录」,创作者单一色彩 。转截文中请联络JAVA日知录微信公众号。
根据之前的内容大家构建好啦监控自然环境而且监控了服务器、数据库查询、运用,运维管理工作人员可以随时掌握现阶段被监控目标的运作状况,可是她们不太可能根据坐到计算机旁边盯住DashBoard来发觉服务器或运用出现异常。
这就需要大家必须一个告警作用,当服务器或运用指标值出现异常时推送告警,根据邮箱或是信息的方式告知运维管理工作人员妥善处理。
今日咱们就来聊一聊 根据Prometheus和Grafana的监控服务平台的出现异常告警作用。
告警方法Grafana
最新版本的Grafana早已出示了告警配置,立即在dashboard监控panel中设定告警就可以,可是我就用之后发觉实际上并不灵便,不兼容自变量,并且许多免费下载的数据图表没法应用告警,因此我们不挑选应用Grafana告警,而使用Alertmanager。
Alertmanager
对比于Grafana的图形界面页面,Alertmanager必须借助配置文档完成,配置稍显繁杂,可是胜在功能齐全灵便。下面咱们就一步一步完成告警通告。
告警种类
Alertmanager告警关键应用下列二种:
- 电子邮件接收器 email_config
- Webhook接收器 webhook_config,用到post方式向配置的url地址推送如下所示文件格式的主要参数。
{"version":"2","status":"<resolved|firing>","alerts":[{"labels":<object>,"annotations":<object>,"startsAt":"<rfc3339>","endsAt":"<rfc3339>"}]}
「此次关键应用电子邮件的形式开展告警。」
完成流程
从GitHub上下载最新版本的Alertmanager,将其提交缓解压力到服务器上。tar -zxvf alertmanager-0.19.0.linux-amd64.tar.gz
vialertmanager.ymlglobal:resolve_timeout:5msmtp_smarthost:'mail.163.com:25'#电子邮箱推送端口号smtp_from:'xxx@163.com'smtp_auth_username:'xxx@163.com'#邮箱账号smtp_auth_password:'xxxxxx'#邮箱密码smtp_require_tls:falseroute:group_by:['alertname']group_wait:10s#最开始即第一次等候多长时间時间推送一组报警的通告group_interval:10s#在推送新报警前的等待的时间repeat_interval:1h#推送反复报警的周期时间针对email配置中,该项不能设定过低,不然可能因为发送邮件过多经常,被smtp服务器回绝receiver:'email'receivers:-name:'email'email_configs:-to:'xxx@xxx.com'
改动进行后可以应用 ./amtool check-config alertmanager.yml校验文件是不是恰当。
校检恰当后运行alertmanager。nohup ./alertmanager &。(第一次启动可以不应用nohup默然运行,便捷后边查询日志)
大家只界定了一个路由器,那么就代表着全部由Prometheus造成的告警在发送至Alertmanager以后都是会根据名叫 email的receiver接受。事实上,针对不一样档次的告警,会出现不一样的处理方法,因而在route中,大家还能够界定大量的子Route。实际配置标准大伙儿可以去百度搜索进一步掌握。
配置Prometheus
- 在Prometheus安装文件下创建rules文件夹,置放全部的告警标准文档。
alerting:alertmanagers:-static_configs:-targets:['192.168.249.131:9093']rule_files:-rules/*.yml
在rules文件夹下创建告警标准文档 service_down.yml,当服务器退出时邮件发送。
groups:-name:ServiceStatusrules:-alert:ServiceStatusAlertexpr:up==0for:2mlabels:team:nodeannotations:summary:"Instance{{$labels.instance}}hasbeandown"description:"{{$labels.instance}}ofjob{{$labels.job}}hasbeendownformorethan2minutes."value:"{{$value}}"
「配备详细说明」
alert:报警标准的名字。
expr:根据PromQL关系式报警开启标准,用以测算是不是有时间序列分析达到该标准。
for:评定等待的时间,可选主要参数。用以表明仅有当开启标准不断一段时间后才推送报警。等待期内新造成报警的情况为PENDING,等待期后为FIRING。
labels:自定义标签,容许客户特定要额外到报警上的一组额外标识。
annotations:用以特定一组额外信息内容,例如用以叙述报警详细资料的内容等,annotations的內容在报警造成的时候会一同做为主要参数发送至Alertmanager。
配备进行后重新启动Prometheus,浏览Prometheus查询报警配备。
关掉node_exporter,过2分钟左右就可以接到报警电子邮件啦,截屏如下所示:Alertmanager的报警內容适用应用模版配备,可以应用漂亮的模版开展3D渲染,有兴趣的可以试一下!
The More
node exporter的一些测算句子
(avgby(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m]))*100)
node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Cached_bytes-node_memory_Buffers_bytes-node_memory_Slab_bytes
node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Cached_bytes-node_memory_Buffers_bytes-node_memory_Slab_bytes
((node_memory_MemTotal_bytes-node_memory_MemFree_bytes-node_memory_Cached_bytes-node_memory_Buffers_bytes-node_memory_Slab_bytes)/node_memory_MemTotal_bytes)*100
- server1的运行内存利用率(企业为percent)
((node_memory_MemTotal_bytes{instance="server1"}-node_memory_MemAvailable_bytes{instance="server1"})/node_memory_MemTotal_bytes{instance="server1"})*100
- server2的硬盘利用率(企业为percent)
((node_filesystem_size_bytes{fstype=~"xfs|ext4",instance="server2"}-node_filesystem_free_bytes{fstype=~"xfs|ext4",instance="server2"})/node_filesystem_size_bytes{fstype=~"xfs|ext4",instance="server2"})*100
time()-node_boot_time
- server1的uptime時间(企业为seconds)
time()-node_boot_time_seconds{instance="server1"}
irate(node_network_transmit_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m])>0
- server1的互联网流出量(企业为bytes/sec)
irate(node_network_transmit_bytes_total{instance="server1",device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m])>0
irate(node_network_receive_bytes_total{device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m])>0
- server1的互联网流通量(企业为bytes/sec)
irate(node_network_receive_bytes_total{instance="server1",device!~"lo|bond[0-9]|cbr[0-9]|veth.*"}[5m])>0
irate(node_disk_read_bytes_total{device=~"sd.*"}[5m])