Zabbix配置监控告警

一、配置CPU使用率的监控及触发项

1.添加CPU监控项

在【数据采集】栏中——点击【主机】——点击一台Zabbix客户端的【监控项】——右上方点击【创建监控项】,在【监控项】栏填写以下信息:

  • 填写【名称】为 CPU使用率

  • 选择【键值】为 system.cpu.util[<cpu>,<type>,<mode>,<logical_or_physical>],表示CPU 使用率百分比,返回浮点数;其中,<type> 替换为 idle,其余默认,即最终填写的键值内容为:

    system.cpu.util[,idle]

    system.cpu.util:用于监控 CPU 使用率的监控项键值,具体参数含义如下:

    • <cpu>:CPU 核心编号,通常是一个整数。可以使用 all 表示所有 CPU 核心的平均值。
    • <type>:CPU 使用类型,包括 usersystemidleniceiowait 等。
      • user:用户态 CPU 使用率。表示应用程序在用户空间运行所消耗的 CPU 时间。
      • system:系统态 CPU 使用率。表示内核空间运行(包括系统调用和中断处理)所消耗的 CPU 时间。
      • idle:空闲 CPU 时间。表示 CPU 未被使用的时间。
      • nice:低优先级进程(由 nice 命令设置的优先级)消耗的 CPU 时间。
      • iowait:等待 I/O 操作完成所消耗的 CPU 时间。
      • irq:硬中断处理消耗的 CPU 时间。
      • softirq:软中断处理消耗的 CPU 时间。
      • steal:被虚拟化环境中的其他虚拟机窃取的 CPU 时间。
      • guest:虚拟机中运行客户操作系统所消耗的 CPU 时间。
    • <mode>:监控模式,包括 avg1avg5avg15,分别表示 1 分钟、5 分钟、15 分钟的平均值。
    • <logical_or_physical>:指定是逻辑 CPU 还是物理 CPU。可以使用 logicalphysical
  • 填写【单位】为 %

  • 填写【更新间隔】为10s(测试时间短,可以更快看到效果);

image-20240807131046534

填写完成后,点击【测试】,然后点击【获取值】,测试能否获取到值:

image-20240807131506809

在【预处理】栏中,点击【预定步骤】的【添加】,选择【名称】为 JavaScript,填写【参数】为 return 100 - value,因为前面获取的值是CPU的空闲值,所以要用100减掉空闲值才是使用值:

image-20240807131903569

然后点击【测试】,然后点击【获取值】,测试能否获取到值:

image-20240807131953358

如果zabbix客户端的监控项默认已存在监控CPU,即键值为system.cpu.util[,user],那就不需要手动再添加了,这里zabbix已自动存在CPU的监控,后续直接使用默认监控的项来处理:

image-20240807132441305

2.添加CPU触发器

在【数据采集】栏中——点击【主机】——点击刚刚Zabbix客户端的【触发器】——右上方点击【创建触发器】,在【触发器】栏填写以下信息:

  • 填写【名称】为 CPU使用率在1分钟之内平均超过90%

  • 选择【严重性】为 告警

  • 添加【表达式】:

    • 【监控项】选择 Linux: CPU user time
    • 【功能】选择 avg()-周期T内的平均值
    • 【最后一个(T)】填写 1m(表示时间1分钟);
    • 【结果】选择 >,并填写 90,即最终填写的表达式内容为:

    avg(/zabbix_agent-51-65/system.cpu.util[,user],1m)>90

    该表达式用于监控某个主机的 CPU 用户态使用率。如果在过去1分钟内,CPU 用户态使用率的平均值超过了 90%,则触发一个告警。

image-20240807133801697

3.测试CPU使用率触发严重性

在配置的Zabbix客户端10.22.51.65后台,使用压测工具 stress 命令,测试将CPU执行到超过 90% 的占用率:

# 启动 8 个 CPU 计算任务
stress --cpu 8

# 直接将内存提高到将近100%(建议用这条更快)
stress --cpu $(nproc)

解释说明:

  • --cpu $(nproc):这个部分使用 nproc 命令来获取系统的 CPU 核心数,并启动相同数量的 CPU 工作线程来达到高 CPU 使用率。

在Zabbix界面上,点击【监测】——【问题】,会发现显示一条新问题:

image-20240807135032749

点击 CPU使用率在1分钟之内平均超过90% 问题,选择【历史记录】中的 Linux: CPU user time

image-20240807135551234

显示图形界面如下:

image-20240807140519017

也可以在【监测】的【最新数据】中找到对应的主机查看CPU图形。

二、配置告警媒介

1.配置Email告警媒介

电子邮件以我自己的QQ邮箱为例。

在【告警】栏中——点击【媒介】——点击自带的名称【 Email (HTML)】,在【报警媒介类型】栏填写以下信息:

  • 填写【SMTP服务器】(SMTP服务器的地址,这里使用的是QQ);
  • 填写【电子邮件】(发件人的邮箱地址);
  • 填写【SMTP HELO】(最好与发件人的域名相匹配);
  • 选择【认证】;
    • 输入【用户名称】(SMTP服务器的用户名);
    • 输入【密码】(SMTP服务器的密码);
  • 勾选【已启用】。

在【消息模板】栏中,对【消息类型】中的【问题】和【问题恢复】模板进行编辑:

  • 点击编辑【问题】模板:

    • 编辑【主题】内容如下:

      服务器:{
             
              
              HOSTNAME1} 发生: {
             
              
              TRIGGER.NAME} 故障!
      
    • 编辑【消息】内容如下:

      <table cellspacing="0"
        style="border-right: 1px solid #FFC007;border-bottom: 1px solid #FFC007;min-width: 300px;font-family: 微软雅黑;  font-size: 13px;">
        <tr>
          <td
            style="width: 55px;font-weight: bold;border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;">
            告警主机</td>
          <td
            style="border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;">
            {
             
              
              HOST.CONN}/{
             
              
              HOST.DESCRIPTION}</td>
        </tr>
        <tr>
          <td
            style="font-weight: bold;border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;">
            告警时间</td>
          <td
            style="border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;">
            {
             
              
              EVENT.DATE} {
             
              
              EVENT.TIME}</td>
        </tr>
        <tr>
          <td
            style="font-weight: bold;border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;">
            告警等级</td>
          <td
            style="border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;">
            {
             
              
              TRIGGER.SEVERITY}</td>
        </tr>
        <tr>
          <td
            style="font-weight: bold;border-left: 1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;">
            告警信息</td>
          <td
            style="background-color:#FFC007; border-left:1px solid #FFC007;border-top: 1px solid #FFC007;height:28px;padding-left: 10px;padding-right: 10px;">
            {
             
              
              TRIGGER.NAME} 故障!</td>
        </tr>