热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)

本文主要介绍关于大数据,软件测试,测试工程师,性能测试,docker的知识点,对【Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)】和【运维监控

本文主要介绍关于大数据,软件测试,测试工程师,性能测试,docker的知识点,对【Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)】和【运维监控能够实现自动化吗】有兴趣的朋友可以看下由【测试小娜】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的自动化测试,技术分享,软件测试相关技术问题。

运维监控能够实现自动化吗

目录

AlertManager配置

服务部署

告警规则

prometheus.yml配置文件

邮件推送

邮件配置

重启AlertManager

触发报警

邮件自定义

自定义模板

修改alertmanager.yml

重启AlertManager

模板优化

时间格式

邮件标题

学习资源分享


上期回顾:Docker系列——Grafana+Prometheus+Node-exporter服务器监控平台(一)

在前一篇博文中介绍,服务器监控已经部署成功。如果每天都需要人去盯着服务情况,那也不太现实。既然监控平台已经部署好了,是不是可以自动触发报警呢?

在上一篇Prometheus架构中有讲到,核心组件之一:AlertManager,AlertManager即Prometheus体系中的告警处理中心。所以实现告警功能,可以使用该组件,具体如何实现,我们来看。

AlertManager配置 服务部署

拉取镜像

使用命令

docker pull prom/alertmanager:latest

服务启动

使用如下命令:

docker run -d --name alertmanager -p 9093:9093 \
prom/alertmanager:latest

启动服务后,通过地址访问,http://:9093可以看到默认提供的 UI 页面,不过现在是没有任何告警信息的,因为我们还没有配置报警规则来触发报警。

配置文件

AlertManager 默认配置文件为 alertmanager.yml,在容器内路径为 /etc/alertmanager/alertmanager.yml,默认配置如下:

global:
  resolve_timeout: 5m
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'web.hook'
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

简单介绍一下主要配置的作用:

global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。

route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。

receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。

inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。

告警规则

alertmanager配置好后,我们来添加告警规则,就是符合规则,才会推送消息,规则配置如下:

mkdir -p /root/prometheus/rules && cd /root/prometheus/rules/
vim host.rules

添加如下信息:

groups:
- name: node-up
  rules:
  - alert: node-up
    expr: up{job="linux"} == 0
    for: 15s
    labels:
      severity: 1
      team: node
    annotations:
      summary: "{
  { $labels.instance }} 已停止运行超过 15s!"

说明一下:该 rules 目的是监测 node 是否存活,expr 为 PromQL 表达式验证特定节点 job="linux" 是否活着,for 表示报警状态为 Pending 后等待 15s 变成 Firing 状态,一旦变成 Firing 状态则将报警发送到 AlertManager,labels 和 annotations 对该 alert 添加更多的标识说明信息,所有添加的标签注解信息,以及 prometheus.yml 中该 job 已添加 label 都会自动添加到邮件内容中

参考规则:
https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#rule

prometheus.yml配置文件

修改prometheus.yml配置文件,添加 rules 规则文件,已有内容不变,配置文件中添加如下内容:

alerting:
  alertmanagers:
    - static_configs:
      - targets: 
        - 'ip:9093'
rule_files:
  - "/etc/prometheus/rules/*.rules"

注意: 这里rule_files为容器内路径,需要将本地host.rules文件挂载到容器内指定路径,修改 Prometheus 启动命令如下,并重启服务。

docker run  -d --name prometheus \
  -p 9090:9090 \
  -v /root/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
  -v /root/prometheus/rules/:/etc/prometheus/rules/  \
prom/prometheus

通过ip+端口访问,查看rules,如下所示:

这里说明一下 Prometheus Alert 告警状态有三种状态:Inactive、Pending、Firing。

Inactive:非活动状态,表示正在监控,但是还未有任何警报触发。

Pending:表示这个警报必须被触发。由于警报可以被分组、压抑/抑制或静默/静音,所以等待验证,一旦所有的验证都通过,则将转到 Firing 状态。

Firing:将警报发送到 AlertManager,它将按照配置将警报的发送给所有接收者。一旦警报解除,则将状态转到 Inactive,如此循环。

说了这么多,就用推送邮件来实践下结果。

邮件推送 邮件配置

我们来配置一下使用 Email 方式通知报警信息,这里以 QQ 邮箱为例,新建目录

mkdir -p /root/prometheus/alertmanager/ && cd /root/prometheus/alertmanager/

使用vim命令 vim alertmanager.yml,配置文件中添加如下内容:

global:
  resolve_timeout: 5m
  smtp_from: '11111111@qq.com'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '11111111@qq.com'
  smtp_auth_password: 'XXXXXXXXX'
  smtp_hello: 'qq.com'
  smtp_require_tls: false
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '222222222@foxmail.com'
    send_resolved: true
    #insecure_skip_verify: 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

修改 AlertManager 启动命令,将本地alertmanager.yml文件挂载到容器内指定位置,是配置生效,命令如下所示:

docker run -d --name alertmanager -p 9093:9093 \
-v /root/prometheus/alertmanager/:/etc/alertmanager/ \
prom/alertmanager:latest
触发报警

之前我们定义的 rule 规则为监测 job="linux" Node 是否活着,那么就可以停掉node-exporter服务来间接起到 Node Down 的作用,从而达到报警条件,触发报警规则。

使用命令 docker stop 容器id,停止服务后,等待 60s 之后可以看到 Prometheus target 里面 linux 状态为 unhealthy 状态,等待 60s 后,alert 页面由绿色 node-up (0 active) Inactive 状态变成了黄色 node-up (1 active) Pending 状态,继续等待 60s 后状态变成红色 Firing 状态,向 AlertManager 发送报警信息,此时 AlertManager 则按照配置规则向接受者发送邮件告警。

停掉服务后,我们来看状态的变化,首先是Inactive状态,AlertManager也没有报警信息,如下所示:

等待60s后,再次查看服务状态,变成了Pending状态,如下所示:

继续等待 60s,变成了Firing状态,如下所示:

并且AlertManager 有报警信息,如下所示:

查看自己的邮件,收到了邮件推送,如下所示:

服务一直处于停止状态,会一直推送消息,5分钟一次,如下所示:

说到这里,对有些时间节点有点不理解,这里有几个地方需要解释一下:

每次停止/恢复服务后,60s 之后才会发现 Alert 状态变化,是因为 prometheus.yml中 global -> scrape_interval: 60s 配置决定的,如果觉得等待 60s 时间太长,可以修改小一些,可以全局修改,也可以局部修改。例如局部修改 linux 等待时间为 5s。

Alert 状态变化时会等待 15s 才发生改变,是因为host.rules中配置了for: 15s状态变化等待时间。

报警触发后,每隔 5m 会自动发送报警邮件(服务未恢复正常期间),是因为alertmanager.yml中route -> repeat_interval: 5m配置决定的。

邮件自定义

在刚才的邮件内容中,基本信息有,但不直观,那可不可以自定义模板内容呢?答案是有的,我们继续来看。

自定义模板

自定义一个邮件模板,在/root/prometheus/alertmanager/目录下,vim email.tmpl配置如下:

{
  { define "email.from" }}1111111111@qq.com{
  { end }}
{
  { define "email.to" }}222222222222@foxmail.com{
  { end }}
{
  { define "email.html" }}
{
  { range .Alerts }}
=========start==========
告警程序: prometheus_alert 
告警级别: { { .Labels.severity }} 级 
告警类型: { { .Labels.alertname }} 
故障主机: { { .Labels.instance }} 
告警主题: { { .Annotations.summary }} 
告警详情: { { .Annotations.description }} 
触发时间: { { .StartsAt.Format "2006-01-02 08:08:08" }} 
=========end==========
{ { end }} { { end }}

简单说明一下,上边模板文件配置了 email.from、email.to、email.to.html 三种模板变量,可以在 alertmanager.yml 文件中直接配置引用。这里 email.to.html 就是要发送的邮件内容,支持 Html 和 Text 格式,这里为了显示好看,采用 Html 格式简单显示信息。下边 { { range .Alerts }} 是个循环语法,用于循环获取匹配的 Alerts 的信息,下边的告警信息跟上边默认邮件显示信息一样,只是提取了部分核心值来展示。

修改alertmanager.yml

由于已经定义了变量,所以我们在alertmanager配置文件中可以引用变量,并且引用我们自定义的模板,引用模板需要增加 templates ,配置如下:

global:
  resolve_timeout: 5m
  smtp_from: '{
  { template "email.from" . }}'
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: '{
  { template "email.from" . }}'
  smtp_auth_password: 'XXXXXXXXXXXXXXXXX'
  smtp_hello: 'qq.com'
  smtp_require_tls: false
templates:
  - '/etc/alertmanager/*.tmpl'
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: '{
  { template "email.to" . }}'
    html: '{
  { template "email.html" . }}'
    send_resolved: true
    #insecure_skip_verify: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
重启AlertManager

修改 AlertManager 启动命令,将本地email.tmpl文件挂载到容器内指定位置并重启。由于我的配置是跟alertmanager的配置文件在同一个目录下,所以不用重新挂载,重启容器即可。
我们将node服务停止,再次查收邮件,查看下效果,如下所示:

模板优化 时间格式

我们从上图可以看出,邮件内容格式已经改变,但时间却显示的有点离谱,原因是时间格式问题,修改邮件模板,针对时间配置格式,如下所示:

{
  { define "email.from" }}11111111111@qq.com{
  { end }}
{
  { define "email.to" }}2222222222222@foxmail.com{
  { end }}
{
  { define "email.html" }}
{
  { range .Alerts }}
=========start==========
告警程序: prometheus_alert 
告警级别: { { .Labels.severity }} 级 
告警类型: { { .Labels.alertname }} 
故障主机: { { .Labels.instance }} 
告警主题: { { .Annotations.summary }} 
告警详情: { { .Annotations.description }} 
触发时间: { { (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} 
=========end==========
{ { end }} { { end }}

保存后再次重启alertmanager服务,重新操作一遍之前的动作,查看最终的邮件效果,如下所示:

配置时间格式后,我们看效果图,时间是修正了的。

邮件标题

还可以自定义邮件标题,修改alertmanager.yml配置文件,增加参数:headers即可,如下所示:

receivers:
- name: 'email'
  email_configs:
  - to: '{
  { template "email.to" . }}'
    html: '{
  { template "email.html" . }}'
    send_resolved: true
    headers: { Subject: "{
  { .CommonAnnotations.summary }}" }

配置好重启alertmanager服务,再次触发告警邮件,收到的内容如下:

以上就是今天的分享内容,报警系统功能就已完成,后续介绍微信、钉钉推送,下期再见。

学习资源分享

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….

如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我的qq群大家一起讨论交流,里面也有各种软件测试资料和技术交流。

本文《Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)》版权归测试小娜所有,引用Docker系列——Grafana+Prometheus+Node-exporter服务器告警中心(二)需遵循CC 4.0 BY-SA版权协议。


推荐阅读
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • GAMETECH腾讯云游戏行业技术沙龙成都站圆满落幕
    11月13日,由腾讯云主办、游戏茶馆协办的2020年首场GAME-TECH腾讯云游戏行业技术沙龙在成都圆满落幕。本次沙龙邀请了腾讯云游戏行业解决方案总监宋永周、腾讯云游戏行业高级解决方案架构师曾梓恩、腾讯云游戏行业高级产品架构师郑晓曦、腾讯云游戏行业高级解决方案架构师温球良和天美L1(王者荣耀)服务器技术副总监杨光,为参会同行们带来了干货满满的技术建议。本文介绍了腾讯云游戏云的优势和为不同游戏研运场景提供的服务。腾讯云在中国游戏云服务市场领跑,成为众多游戏开发者的合作伙伴。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 智慧博物馆信息系统建设方案
    3.信息化系统建设3.1博物馆RFID藏品管理系统3.1.1系统概述博物馆藏品保管是一项十分复杂又繁琐的工作。从事保管工作除了经常、及时地进行藏品的登记、分类、编目、保养和修 ... [详细]
author-avatar
太阳神夜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有