Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---三)

简介: Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(基础篇---三)

前言:

前文Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(二)_实现了告警系统模块的部署和测试,主要的告警范围是服务器节点的操作系统内存,磁盘空间的使用率这些方面,并没有涵盖系统的主要服务,例如docker,nginx,tomcat,MySQL等等由systemd管理的服务的监控。因此,本文将就如何扩展node_exporter来监测一些常用的由systemd进程管理的主要服务以及CPU使用率监测的实现做一个讲解。

一,

node_exporter的扩展

首先,我们看看node_exporter的帮助:


      --collector.arp            Enable the arp collector (default: enabled).
      --collector.bcache         Enable the bcache collector (default: enabled).
      --collector.bonding        Enable the bonding collector (default: enabled).
      --collector.btrfs          Enable the btrfs collector (default: enabled).
      --collector.buddyinfo      Enable the buddyinfo collector (default: disabled).
      --collector.cgroups        Enable the cgroups collector (default: disabled).
      --collector.conntrack      Enable the conntrack collector (default: enabled).
      --collector.cpu            Enable the cpu collector (default: enabled).
      --collector.cpufreq        Enable the cpufreq collector (default: enabled).
      --collector.diskstats      Enable the diskstats collector (default: enabled).
      --collector.dmi            Enable the dmi collector (default: enabled).
      --collector.drbd           Enable the drbd collector (default: disabled).
      --collector.drm            Enable the drm collector (default: disabled).
      --collector.edac           Enable the edac collector (default: enabled).
      --collector.entropy        Enable the entropy collector (default: enabled).
      --collector.ethtool        Enable the ethtool collector (default: disabled).
      --collector.fibrechannel   Enable the fibrechannel collector (default: enabled).
      --collector.filefd         Enable the filefd collector (default: enabled).
      --collector.filesystem     Enable the filesystem collector (default: enabled).
      --collector.hwmon          Enable the hwmon collector (default: enabled).
      --collector.infiniband     Enable the infiniband collector (default: enabled).
      --collector.interrupts     Enable the interrupts collector (default: disabled).
      --collector.ipvs           Enable the ipvs collector (default: enabled).
      --collector.ksmd           Enable the ksmd collector (default: disabled).
      --collector.lnstat         Enable the lnstat collector (default: disabled).
      --collector.loadavg        Enable the loadavg collector (default: enabled).
      --collector.logind         Enable the logind collector (default: disabled).
      --collector.mdadm          Enable the mdadm collector (default: enabled).
      --collector.meminfo        Enable the meminfo collector (default: enabled).
      --collector.meminfo_numa   Enable the meminfo_numa collector (default: disabled).
      --collector.mountstats     Enable the mountstats collector (default: disabled).
      --collector.netclass       Enable the netclass collector (default: enabled).
      --collector.netdev         Enable the netdev collector (default: enabled).
      --collector.netstat        Enable the netstat collector (default: enabled).
      --collector.network_route  Enable the network_route collector (default: disabled).
      --collector.nfs            Enable the nfs collector (default: enabled).
      --collector.nfsd           Enable the nfsd collector (default: enabled).
      --collector.ntp            Enable the ntp collector (default: disabled).
      --collector.nvme           Enable the nvme collector (default: enabled).
      --collector.os             Enable the os collector (default: enabled).
      --collector.perf           Enable the perf collector (default: disabled).
      --collector.powersupplyclass  
                                 Enable the powersupplyclass collector (default: enabled).
      --collector.pressure       Enable the pressure collector (default: enabled).
      --collector.processes      Enable the processes collector (default: disabled).
      --collector.qdisc          Enable the qdisc collector (default: disabled).
      --collector.rapl           Enable the rapl collector (default: enabled).
      --collector.runit          Enable the runit collector (default: disabled).
      --collector.schedstat      Enable the schedstat collector (default: enabled).
      --collector.selinux        Enable the selinux collector (default: enabled).
      --collector.slabinfo       Enable the slabinfo collector (default: disabled).
      --collector.sockstat       Enable the sockstat collector (default: enabled).
      --collector.softnet        Enable the softnet collector (default: enabled).
      --collector.stat           Enable the stat collector (default: enabled).
      --collector.supervisord    Enable the supervisord collector (default: disabled).
      --collector.sysctl         Enable the sysctl collector (default: disabled).
      --collector.systemd        Enable the systemd collector (default: disabled).
      --collector.tapestats      Enable the tapestats collector (default: enabled).
      --collector.tcpstat        Enable the tcpstat collector (default: disabled).
      --collector.textfile       Enable the textfile collector (default: enabled).
      --collector.thermal_zone   Enable the thermal_zone collector (default: enabled).
      --collector.time           Enable the time collector (default: enabled).
      --collector.timex          Enable the timex collector (default: enabled).
      --collector.udp_queues     Enable the udp_queues collector (default: enabled).
      --collector.uname          Enable the uname collector (default: enabled).
      --collector.vmstat         Enable the vmstat collector (default: enabled).
      --collector.wifi           Enable the wifi collector (default: disabled).
      --collector.xfs            Enable the xfs collector (default: enabled).
      --collector.zfs            Enable the zfs collector (default: enabled).
      --collector.zoneinfo       Enable the zoneinfo collector (default: disabled).

可以看到--collector.systemd是默认不采集的,但有一个问题,如果开启了,那么所有的systemd管理的启停脚本都将要采集,有一些无关紧要的服务是不需要的,因此,需要先开启--collector.systemd 然后设置一个白名单。具体做法如下:

修改node_exporter的启停脚本,内容如下:

[Unit]
Descriptinotallow=node_exporter Monitoring System
Documentatinotallow=node_exporter Monitoring System
[Service]
ExecStart=/usr/local/bin/node_exporter --web.listen-address=:9100 --collector.systemd --collector.systemd.unit-whitelist=(nginx|docker|sshd).service
[Install]
WantedBy=multi-user.target

重启node_exporter服务:

systemctl daemon-reload && systemctl restart node_exporter

打开浏览器,登录Prometheus的管理界面,输入PromeQL语句 node_systemd_unit_state{job="server",name="sshd.service"}

(job的名称是在Prometheus 的主配置文件内设定的,必须要有设定才可以用哦)

可以看到查询到了sshd服务,同样的将name="sshd.service"替换成name="docker.service" 也可以查询到规则匹配的范围

下图表示sshd服务的四种状态,

 

同样的,查询docker服务:

OK,可以看到只有192.168.217.23 五种服务状态,state="inactive"表示docker服务挂掉了,24服务器确实没有安装docker环境,因此,这些采集是准确无误的。




二,

编写报警规则

groups:
- name: systemd.rules
  rules:
  - alert: docker_systemd_down  # 告警聚合的名称依据
    expr: node_systemd_unit_state{job="server", name="docker.service", state="inactive"} ==1
    for: 1m
    labels:
      severity: 灾难  # 告警级别
    annotations:
      summary: "Instance {{ $labels.name }} 停止工作"
      description: "{{ $labels.instance }}的{{ $labels.name }} 已经停止1分钟以上"

这个文件随便命名吧,后缀必须是yml即可,放置在/usr/local/prometheus/rules/目录下,然后重启Prometheus server:

systemctl restart prometheus

继续查询:

三,

测试环节

在23服务器上手动停止docker,模拟故障:

systemctl stop docker

查看Prometheus server的管理界面的Alert,可以看到成功触发报警

稍等片刻后,邮件也收到了,告警级别也会变成firing:




四,

增加CPU负载告警规则:

groups:
- name: systemd.rules
  rules:
  - alert: docker_systemd_down  # 告警聚合的名称依据
    expr: node_systemd_unit_state{job="server", name="docker.service", state="inactive"} ==1
    for: 1m
    labels:
      severity: 灾难  # 告警级别
    annotations:
      summary: "Instance {{ $labels.name }} 停止工作"
      description: "{{ $labels.instance }}的{{ $labels.name }} 已经停止1分钟以上"
  - alert: NodeCPUUsage
    expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100) > 80
    for: 2m
    labels:
      severity: 危险
    annotations:
      summary: "{{$labels.instance}}: CPU使用过高"
      description: "{{$labels.instance}}: CPU使用大于 80% (当前值: {{ $value }})"

同样的,重启Prometheus server服务:

systemctl restart prometheus

同样的查询规则范围和准确度:

测试环节:

使用stress 模拟CPU负载超过80(在23服务器上执行):

#创建8个stress进程,持续时间600秒,模拟CPU在用户态使用率达到100%的场景。
stress --cpu 8 --timeout 600
#或者创建8个stress进程和100个io进程,持续时间600秒,模拟CPU在用户态和内核态总使用率达到100%的场景。
stress -c 8 -i 100 --verbose --timeout 600

在Prometheus server管理界面,可以看到CPU负载达到了百分百:

在alert页面可以看到确实是百分百了,当然,邮件也发送了:

基本的告警流程大概就这样了,告警等级可以使用中文是比较好的一个设定。

目录
相关文章
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1686 69
|
11月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
4508 3
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
992 78
|
11月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
2540 16
|
12月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
812 10
|
12月前
|
运维 网络协议 Linux
CentOS下Bind服务的安装与故障排查
通过以上的步骤,您应该能够在CentOS系统上安装并配置BIND DNS服务,并进行基本的故障排查。
828 0
|
12月前
|
存储 Ubuntu Linux
安卓手机免root安装各种Linux系统:Ubuntu, Centos,Kali等
此外还可以安装Slackware、Archstrike等系统,还可以通过github查找方法安装更多有趣的东西。 昨日小编就是通过Termux安装的Kali Linux工具包。
|
Linux 网络安全 Apache
针对在Centos/Linux安装Apache过程中出现的常见问题集锦
以上每个问题的解决方案应深入分析错误日志、系统消息和各种配置文件,以找到根本原因并加以解决。务必保持系统和Apache软件包更新到最新版本,以修复已知的bugs和安全漏洞。安装和管理Web服务器是一项需要细致关注和不断学习的任务。随着技术的发展,推荐定期查看官方文档和社区论坛,以保持知识的更新。
441 80
|
机器人 Linux
CentOS 7系统中安装特定版本CMake 3.21.2的方法。
到这里,过程已经全部完成。如果你跟随上面的步骤来,那么你现在已经拥有了一个全新的CMake版本在你的CentOS 7系统上了。这个过程就像是你通过一系列仪式,唤醒了一个沉睡已久的古老机器人,它现在完全按照你的意愿来帮你构建和编译软件了。
816 18
|
人工智能 数据挖掘 Linux
Centos安装Python3.7(亲测可用)
本指南详细介绍了在基于Linux(以CentOS系统为例,使用yum包管理器)的系统上安装Python 3.7版本的完整流程。Python是一种广泛使用的高级编程语言,在各种领域如软件开发、数据分析、人工智能和区块链开发等都有着重要的应用。
943 2