一、资源的创建

根据自己的需求进行安装 网站:下载Zabbix 7.0 LTS for Ubuntu 24.04 (Noble), MySQL, Apache

10.0.0.100上按照上面的要求进行安装即可。
100节点上修改 zabbix_agentd.conf 文件:vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,10.0.0.100   
ServerActive=127.0.0.1,10.0.0.100    #主动提供数据的时候


 10.0.0.101 上安装 Zabbix Agent
# wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
# dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
# apt update    #至关重要

# 安装Zabbix Agent
apt install -y zabbix-agent

# 配置Agent
vim /etc/zabbix/zabbix_agentd.conf

# 修改以下配置
Server=10.0.0.100
ServerActive=10.0.0.100
Hostname=10.0.0.101

# 启动Agent
systemctl restart zabbix-agent
systemctl enable zabbix-agent
Zabbix Agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到 zabbix server
端, zabbix server 将数据存储到数据库中, zabbix web 访问数据库在前端进行展现和绘图。

 通过 Web 界面配置监控

  1. 访问 http://10.0.0.100/zabbix
  2. 按照安装向导完成初始设置
  3. 登录(第一登录:账:zabbix 密:password  第二登录:账:Admin,密:zabbix)            如果:连接不到数据库可以看看数据库是否启动!
  4. 创建主机:
    • 进入 "配置" -> "主机" -> "创建主机"
    • 对于 10.0.0.100:主机名称填 10.0.0.100,IP 地址填 127.0.0.1
    • 对于 10.0.0.101:主机名称填 10.0.0.101,IP 地址填 10.0.0.101
    • 两个主机都链接到 "Linux by Zabbix agent" 模板

二、JMX 方式监控 Tomcat 10

1. 在 10.0.0.101 上安装 Tomcat 10(apt install tomcat10 -y,然后再find / -name "catalina.sh")

# 安装Java
apt install -y openjdk-11-jdk

# 下载并安装Tomcat 10
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.13/bin/apache-tomcat-10.1.13.tar.gz
tar -zxvf apache-tomcat-10.1.13.tar.gz
mv apache-tomcat-10.1.13 /opt/tomcat10
chmod +x /opt/tomcat10/bin/*.sh

2. 配置 Tomcat 启用 JMX(vim /usr/share/tomcat10/bin/catalina.sh)

# 编辑启动脚本
vim /opt/tomcat10/bin/setenv.sh

# 添加以下内容
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.port=12345"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
CATALINA_OPTS="$CATALINA_OPTS -Djava.rmi.server.hostname=10.0.0.101"

# 启动Tomcat
/opt/tomcat10/bin/startup.sh

3. 在 10.0.0.101 上安装 Zabbix Java Gateway

# 安装Java Gateway
apt install -y zabbix-java-gateway

# 启动服务
systemctl restart zabbix-java-gateway
systemctl enable zabbix-java-gateway

4.配置 Zabbix Server 使用 Java Gateway

# 在10.0.0.100上编辑Zabbix Server配置
vim /etc/zabbix/zabbix_server.conf

# 添加以下配置
JavaGateway=10.0.0.101
JavaGatewayPort=10052
StartJavaPollers=5

# 重启Zabbix Server
systemctl restart zabbix-server

总结

 在 Zabbix Web 界面配置 Tomcat 监控

  1. 进入 "配置" -> "主机",找到 10.0.0.101 主机
  2. 点击 "编辑"
  3. 在 "JMX 接口" 标签下,添加:
    • IP 地址:10.0.0.101
    • 端口:12345
  4. 在 "模板" 标签下,添加 "Template App Apache Tomcat JMX" 模板
  5. 点击 "更新" 保存配置
  6. 具体操作看下图

三、基于 HTTP 方式监控 Nginx

1. 在 10.0.0.101 上安装 Nginx

apt install -y nginx
systemctl start nginx
systemctl enable nginx

2. 配置 Nginx 状态监控

# 创建Nginx状态配置(错误的,待看看解决方式)
vim /etc/nginx/conf.d/status.conf

# 添加以下内容
server {
    listen 80;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        access_log off;
        allow 10.0.0.100;  # 只允许Zabbix Server访问
        deny all;
    }
}

# 检查配置并重启Nginx
nginx -t
systemctl restart nginx

3. 验证 Nginx 状态页面

# 在10.0.0.100上测试(结果是404 not found) 
curl http://10.0.0.101/nginx_status

原因是在nginx里面有两个include
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;   和此起了冲突 注释或删掉就行了



#我在/etc/nginx/sites-enabled/default 里面加上如下配置 nginx -T:可以查看哪些配置生效的
location /status {
        stub_status;
    }

# 在10.0.0.100上测试
curl http://10.0.0.101/status(是正常的)

4. 在 Zabbix Server 上配置 Nginx 监控

  1. 在 10.0.0.100 上安装必要工具:apt install -y zabbix-get
  2. 在 Zabbix Web 界面配置:

    • 进入 "配置" -> "主机",找到 10.0.0.101 主机
    • 点击 "编辑"
    • 在 "模板" 标签下,添加 "Template App Nginx by HTTP" 模板
    • 点击 "更新" 保存配置
  3. (可选)如果需要自定义监控项,可以创建基于以下键值的监控项:

    • web.page.get[http://10.0.0.101/nginx_status]
    • 然后使用正则表达式提取所需的指标

完成以上配置后,你就可以在 Zabbix 的 "监测" -> "最新数据" 中查看所有监控指标了。

    四、基于agent方式监控Nginx

    在15主机上安装nginx,并将配置文件更改成location /status { stub_status ....  (可参考上面,略)

    1.安装主机环境

    [root @rocky9-15 ~ ] # yum install zabbix-agent   #安装软件
    [root @rocky9-15 ~ ] # vim /etc/zabbix/zabbix_agentd.conf
    117 : Server = 10.0.0.100  # 指定 zabbix 服务端的地址
    125 : ListenPort = 10050 # 默认的端口号,可以不用取消注释
    158 # ServerActive=127.0.0.1 # 注释该条目,这是另外一种指定 zabbixserver 主机的方式
    169 : Hostname = 10.0.0.15 # zabbixserver 监控当前主机的时候,客户端主机唯一的标识
    注意: 如果没有定义 Hostname, 则服务器将使用 agent 的系统主机名命名主机。
    重启服务并设置为开机自启动
    [root @rocky9-15 ~ ] # systemctl start zabbix-agent.service
    [root @rocky9-15 ~ ] # systemctl enable zabbix-agent.service
    查看端口
    [root @rocky9-15 ~ ] # netstat -tnulp | grep -E 'Add|zabb'
    Proto Recv-Q Send-Q Local Address  Foreign Address  State   PID / Program name
    tcp         0       0 0.0.0.0 : 10050   0.0.0.0 :*        LISTEN   5039 / zabbix_agentd
    tcp6       0       0 ::: 10050       :::*             LISTEN   5039 / zabbix_agentd

    2.监控Nginx

    3.查看监控数据

    五、监控PHP-FPM

    前面已经部署好 nginx 环境了,这里面我们部署 php 服务
    root @ubuntu24-101: ~ # apt update && apt -y install php-fpm
    root @ubuntu24-101: ~ # vim /etc/php/8.3/fpm/pool.d/www.conf
     
    root @ubuntu24-101: ~ # vim /etc/php/8.3/fpm/pool.d/www.conf
    ;listen = 127.0.0.1 : 9000
    listen = / run / php / php8 .3 - fpm.sock
    pm.status_path = / php_status         # Zabbix 系统默认监控路径 /status, nginx 有冲突
    ping.path = / ping                              # 取消注释
    root @ubuntu24-101: ~ # systemctl restart php8.3-fpm     #重启服务
    配置nginx
    root @ubuntu24-101: ~ # vim /etc/nginx/sites-enabled/default   定制nginx文件
    .. .
     location ~ \ .php |/ php_status |/ ping $ {
       root / data / php;
       fastcgi_pass unix :/ run / php / php8 .3 - fpm.sock;
       include fastcgi_params;
       fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name ;
     }
    root @ubuntu24-101: ~ # systemctl restart nginx       #重启服务
    root @ubuntu24-101: ~ # curl localhost/php_status      #查看状态
    root @ubuntu24-101: ~ # curl localhost/ping   #得到结果→      pong
    监控 php   下图10.0.0.16 表示的是10.0.0.101主机 下同
    定制宏信息
    { $PHP_FPM .STATUS.PAGE}, / php_status
    { $PHP_FPM .HOST} 10.0.0.101

    六、PHP监控-Agent

    前面已经部署好nginx环境了,这里面我们部署php服务
    [root
    @rocky9-15 ~]# yum -y install php-fpm 
    [root@rocky9-15 ~]# vim /etc/php-fpm.d/www.conf
    listen = /run/php-fpm/www.sock
    pm.status_path
    = /php_status         # Zabbix系统默认监控路径/status,nginx有冲突
    ping.path = /ping # 取消注释
    [root@rocky9-15 ~]# systemctl enable --now php-fpm.service  重启服务

    配置nginx
    [root
    @rocky9-15 ~]# vim /etc/nginx/nginx.conf
    ...

           location ~ ^/ (ping | php_status) $ {
             fastcgi_pass unix :/ run / php-fpm / www.sock;
             include fastcgi_params;
             fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name ;
           }

    [root@rocky9-15 ~]# systemctl restart nginx   重启服务
     

     监控php

    定制宏信息
    {
    $PHP_FPM .STATUS.PAGE}, / php_status
    { $PHP_FPM .HOST} 10.0.0.15

    七、核心实践

    1. item属性(监控项)

    Iitem属性
    随便打开一个监控条目,我们就以 "vm.memory.size[available]" 监控项为例,点击其对应的名字 "Linux by Zabbix agent: Available memory",效果如下

    2. key原理

    系统内置的监控项如下:       内置的监控项无法满足要求 , 可以自定义监控项
    https
    :// www.zabbix.com / documentation / 7.0 / zh / manual / config / items / itemtypes / zabbix_agent
    https :// www.zabbix.com / documentation / 6.0 / zh / manual / config / items / itemtypes / zabbix_agent
    https :// www.zabbix.com / documentation / 5.0 / zh / manual / config / items / itemtypes / zabbix_agent
    zabbix_agentd.conf 监控项配置效果如下:

     
    监控项键值的格式(包括键值的参数)必须遵循语法规则。下面的插图描述了所支持的语法。可以通过跟随箭头来确定每个点上允许的元素和字符 - 如果可以通过线到达某个块,则允许,否则 - 不允许。
    自定义 key
    监控项key值参考资料
    https :// www.zabbix.com / documentation / 7.0 / zh / manual / config / items / item / key
    https :// www.zabbix.com / documentation / 6.0 / zh / manual / config / items / item / key
    https :// www.zabbix.com / documentation / 5.0 / zh / manual / config / items / item / key
    root @ubuntu24-100: ~ # dpkg -L zabbix-agent | grep doc       查看模版文件
    root @ubuntu24-100: ~ # cat /usr/share/doc/zabbix-agent/userparameter_mysql.conf    文件实例

    简单实践
    创建 item ,我们这里主要是用于 CPU 的系统负载监控,所以名称为 cpu_load.conf
    root @ubuntu24-100: ~ # cd /etc/zabbix/zabbix_agentd.d
    root @ubuntu24-100:zabbix_agentd .d # vim cpu_load.conf
    查看编辑文件内容
    root @ubuntu24-100:zabbix_agentd .d # cat cpu_load.conf
    UserParameter = cpu.load1,uptime | awk -F ": |, " '{print $4}'
    UserParameter = cpu.load5,uptime | awk -F ": |, " '{print $5}'
    UserParameter = cpu.load15,uptime | awk -F ": |, " '{print $6}'
    结果显示:我们的监控项文件已经做好了,那么接下来就开始在 zabbix web 界面上创建 item 并关联到对应的主机上.
    点击右上角的 "Create item", 进入到创建 item 条目的界面,效果如下

    创建前可以测试监控项

    检查效果
    点击 Monitoring 菜单下的 Lastest data ,通过 Filter 获取我们刚才定制的监控项,效果如下

    3. 带参数的item

    root @ubuntu24-101: ~ # curl localhost/status
    定制脚本 get_nginx_status.sh
    #!/bin/bash
    
    # 配置参数
    HOST="127.0.0.1"
    PORT="80"
    STATUS_URL="status"
    
    # 定制错误提示信息
    usage() {
        echo "Usage: $0 [ active|reading|writing|accepts|handled|requests|ping ]"
        exit 1
    }
    
    # 判断脚本执行条件:参数个数必须为1
    if [ $# -ne 1 ]; then
        usage
    fi
    
    # 定义 curl 命令(获取 nginx status 页面内容)
    curl_cmd="/usr/bin/curl -s http://$HOST:$PORT/$STATUS_URL 2>/dev/null"
    
    # 各指标获取函数
    active() {
        ${curl_cmd} | grep "Active" | awk '{print $NF}'
    }
    
    reading() {
        ${curl_cmd} | grep "Reading" | awk '{print $2}'
    }
    
    writing() {
        ${curl_cmd} | grep "Writing" | awk '{print $4}'
    }
    
    accepts() {
        ${curl_cmd} | awk 'NR==3' | awk '{print $1}'
    }
    
    handled() {
        ${curl_cmd} | awk 'NR==3' | awk '{print $2}'
    }
    
    requests() {
        ${curl_cmd} | awk 'NR==3' | awk '{print $3}'
    }
    
    ping() {
        /usr/bin/pidof nginx | wc -l
    }
    
    # 根据参数执行对应操作
    case $1 in
        active)    active    ;;
        reading)   reading   ;;
        writing)   writing   ;;
        accepts)   accepts   ;;
        handled)   handled   ;;
        requests)  requests  ;;
        ping)      ping      ;;
        *)         usage     ;;
    esac
    root @ubuntu24-101: ~ # chmod +x /etc/zabbix/zabbix_agentd.d/chk_nginx.sh
    root @ubuntu24-101: ~ # vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf  定制监控配置
    # nginx 版本 UserParameter = nginx.version,nginx - v
    # nginx 性能指标 UserParameter = nginx.status[ * ], / etc / zabbix / zabbix_agentd.d / chk_nginx.sh $1
    root @ubuntu24-101: ~ # systemctl restart zabbix-agent.service    #重启服务

    服务端检测效果 , 如果可以的话,最好去 10.0.0.100  主机上测试
    root @ubuntu24-100: ~ # zabbix_get -s 10.0.0.16 -p 10050 -k "nginx.status[requests]"      48(结)
    root @ubuntu24-100: ~ # zabbix_get -s 10.0.0.16 -p 10050 -k "nginx.status[active]"            2(结)
    root @ubuntu24-100: ~ # zabbix_get -s 10.0.0.16 -p 10050 -k "nginx.version"
    nginx version : nginx / 1.24.0 (Ubuntu)

    4. Graph实践

    点击创建图表

    点击要监控的添加

    创建完后点击预览 然后再根据情况保存

    5. Dashboard(仪表盘)实践   

    Zabbix 6.0 取消 Screens ,使用仪表盘 Dashboards 替代
    创建dashboard
    点击 Monitoring - dashboard ,进入到 dashboard 的管理界面
    点击 Create dashboard ,进入到创建 dashboard 界面,效果如下  然后再点击应用
    添加构件
    添加样式 1 :点击 " 添加新构建 " 定制当前区域要放置,我们这次先选择第一个 host availability ,效果如下:
    通过数据定制图形
    添加样式 2 :直接通过获取数据的方式定制图形,效果如下
    直接导入图形
    添加样式 3 :添加已存在的图片效果
    按照方法 3 ,将其他的几个图形都加入到当前的 dashboard 中,综合效果如下:
    点击右上角的 保存 dashboard 即可保存我们的 dashboard

    6.触发器[熟练]

    触发器的结构:每个触发器由一个表达式构成 , 它定义了监控项所采集的数据的一个阈值,一旦某次采集的数据超出了触发器定义的阈值 , 触发器状态将会转为 "PROBLEM" ; 而当采取的数据再次回归至合理的范围内时 , 其状态将重新返回到 "OK" 。 触发器中使用的表达式是非常灵活的。可以使用它们去创建关于监控统计的复杂逻辑测试。

    触发器的级别

    添加报警声音(了解)

    触发器解析
    在Trigger的配置中,比较重要的就是以下三个属性:
    Name
    用于设定触发器的名称,如果需要携带特定主机唯一标识的话,可以借助于宏变量 Serverity 用于设定触发器的安全等级,可以随机选择
    Expression 触发器的核心配置,表达式需要按照规矩来来写

    创建触发器

    解析如下:
    Name 采用 zabbix 宏变量的效果自动获取部分数据值
    Serverity 选择 Warning
    Expression 采用我们上一节的简单示例, 1 分钟之内负载值超过 0.45 就报警。不用选择时间间隔
    Allow manual close 勾选,表示允许人为关闭该告警信息

    定制表达式(点击表达式右手边的添加,会出现下面的图)

    确认触发器效果

    触发器测试
    root @ubuntu24-100: ~ # cd /tmp/
    root @ubuntu24-100:tmp # dd if=/dev/zero of=/dev/null bs=1k count=10000000
    输入了 10000000 + 0 块记录
    输出了 10000000 + 0 块记录
    10240000000 字节 ( 10 GB, 9.5 GiB) 已复制, 30.8535 s 332 MB / s
    告警升级
    我们需要根据实际的数据做多个告警处理,比如 CPU 1 分钟的负载超过 0.45 就触发 Warning ,当负载数据超过 0.85 触发 High ,当负载数据超过 1.1 就触发 Disaster 告警。
    这里以 触发 Disaster 告警 为例(其他雷同):

    7.告警管理[熟练]

    告警机制:zabbix 的告警,其实起始于 item ,触发于 Trigger ,终于 Action ,依赖 Media 渠道,也就是说怎么告警主要是有 Action 资源来决定的,但是告警的通知渠道却是有对应的 Media 资源来决定 .
    准备工作  
    - 业务场景需要告警机制 ( 告警发送方和通知接收方 )
    - 服务器支持告警功能
    告警机制
    - User User group 资源配置告警用户
    - 设定告警媒介 Media 资源
    动作管理
    - 启动什么时候告警的 Action
    - 关联触发告警的 Trigger

    7.1 邮件环境[熟练]

    QQ 邮箱的设置功能,找到邮件服务,点击开启 POP3/SMTP 服务 [ 短信发送需要钱 ]
    网易邮箱环境 (下面的操作都是围绕网易邮箱来展开)
    在服务端安装邮件环境
    root @ubuntu24-100: ~ # apt-get install libio-socket-ssl-perl libnet-ssleay-perl sendemail -y
    示例如下:
    root @ubuntu24-100: ~ # echo ' 你好啊 ' > append_file.txt
    root @ubuntu24-100: ~ # sendemail -f wshs1117@126.com -t wshs1117@126.com -u "email
    " -m "sendemail 命令使用测试 " -s smtp.126.com -o message-charset=utf-8 -o tls=yes
    -xu wshs1117@126.com -xp LTZFDDIVDRNYOOAL -a append_file.txt
    Mar 16 18 : 14 : 51 ubuntu24-13 sendemail[ 23596 ] : Email was sent successfully !
    Zabbix 集成
    查看默认的 zabbix 使用邮件脚本的配置
    root @ubuntu24-100: ~ # grep AlertSc /etc/zabbix/zabbix_server.conf
    ### Option: AlertScriptsPath
    # AlertScriptsPath=/usr/lib/zabbix/alertscripts
    root @ubuntu24-100: ~ # cat >/usr/lib/zabbix/alertscripts/sendmail.sh
    #!/bin/bash
    
    
    # 定制基础环境变量
    email_send='wshs1117@126.com'       # 发送者邮箱
    email_receive=$1                    # 接收者邮箱(第一个参数)
    email_subject=$2                    # 邮件主题(第二个参数)
    email_message=$3                    # 邮件内容(第三个参数)
    email_passwd='LTZFDDIVDRNYOOAL'     # SMTP授权码
    smtp_server='smtp.126.com'          # SMTP服务器地址
    
    # 定制发送邮件逻辑
    if [ $# -eq 3 ]; then
        /usr/bin/sendemail \
            -f "$email_send" \
            -t "$email_receive" \
            -u "$email_subject" \
            -m "$email_message" \
            -s "$smtp_server" \
            -o message-charset=utf-8 \
            -o tls=yes \
            -xu "$email_send" \
            -xp "$email_passwd"
    fi
    测试效果
    root @ubuntu24-100: ~ # cd /usr/lib/zabbix/alertscripts/
    root @ubuntu24-100:alertscripts # chmod +x sendmail.sh
    root @ubuntu24-100:alertscripts # chown zabbix:zabbix sendmail.sh
    root @ubuntu24-100:alertscripts # ./sendmail.sh wshs1117@126.com "test" "hello world"

    7.2 告警实践[熟练]

    用户管理: 告警的涉及到谁有权限发送邮件,所以媒介的管理是建立在 User 的基础上,为了方便管理 user 还需要 User Group 资源对象。
    点击 User 右侧的 Media 的部分,用户设置告警的通知方式

    注意:对于之前的几个版本 2. x-5.x ,默认的 Email 功能无法使用,而对于 zabbix6 .0 + 的版本来说,目前默认的 Email 功能可以正常使用。 为了防止后续异常,这里仍然不建议使用默认的

    7.3 脚本告警方式

    告警-->媒介-->创建媒介类型   就能找到下图的显示

    7.4 告警动作管理

    点击左边栏的告警下动作菜单,点击 " 触发器动作 "

    以默认的动作配置为例,可以看到基本属性信息
    点击 Operations 操作用于设置告警时候的通知模板格式

    属性解析:
    Default message 是基于大量的 zabbix 宏变量获取真实信息,然后以格式化输出
    默认 1 小时后,再发送一次短信,所以为了上课的演示,我们这里需要调整两次邮件间的默认发送时间间隔为 1 m, 1 m 是最小的时间间隔实践。
    Operations 用于设定通知的详情信息,我们可以点击查找步骤右边的 编辑,效果如下

    7.5 告警媒介实践

    点击左边栏告警的子菜单 media type(媒介)

    SMTP 服务器: smtp .126 .com
    SMTP 服务器端口: 465 # 不是默认的 25
    电子邮件: wshs1117 @126 .com
    SMTP HELO : 126 .com
    安全连接 SSL / TLS
    勾选: SSL 验证对端和主机
    认证:选择用户名和密码
          用户名: wshs1117 @126 .com
          密码: LTZFDDIVDRNYOOAL   -- 授权码

    点击更新后,启用Email能力

    点击右侧的测试,输入信息接受者的身份后,点击测试即可

    7.6 邮件脚本方式

    创建一个新的媒介类型

    因为脚本中已经内含了邮件的基本认证信息,所以无需在 zabbix 中进行定制了,这个地方只需要将通过合适的宏变量传递正确的值即可。
    脚本名字: sendmail.sh
    脚本参数:
    {ALERT.SENDTO}
    {ALERT.SUBJECT}
    {ALERT.MESSAGE}
    描述:通过定制宏的方式,设定脚本的基本使用方法
    点击右侧的测试,按照如下方式,修改三个修改的输入框信息
    查看邮箱的效果 (略)

    7.7 告警用户实践

    创建用户组

    设定 redis-group 主机组的 读写 权限
    点击创建后,查看效果
    创建用户
    点击右上角的 "create user", 创建用户 zhangsan ,群组输入为 email users ,密码是 "W!@#$%^w"
    设置告警媒介 , 点击 "zhangsan" 用户,进入到 Media 配置栏,进行如下配置
    属性解析:我们的张三仅仅接收一般事故的告警通知,所以将 high Disater 取消掉
    查看效果
    这里的用户权限涉及到四个 :
    Guest User Admin Super admin 四种级别,我们这里需要使用 Super admin ,否则的话,无
    法无法发送和接收邮件。 我们可以在 User Role 来定制符合我们需求的用户级别的权限。

    7.8 告警动作条件

    选择触发器之后,点击添加,查看动作效果

    7.9 告警动作操作

    点击 Operations 后告警内容不做操作,主要是通知人员的设置,效果如下:
    默认的步骤持续时间 1 h 的意思是 在 1 h 之内,只发送一次,所以这个值指的是 发送的间隔频率

    7.10 告警恢复操作

    同样的方式配置 Recover Operations
    然后再点击添加
    测试效果
    在三个终端上,输入连接 redis 的命令,
    root @ubuntu24-16: ~ # redis-cli
    127.0.0.1 : 6379 >
    查看 zabbix dashboard 和触发器效果
    然后到邮箱中查看邮箱告警信息  (略)
    在三个终端上,终止连接 redis 的命令,
    root @ubuntu24-16: ~ # redis-cli
    127.0.0.1 : 6379 > exit
    然后到邮箱中查看邮箱告警信息  (略)

    8. 告警进阶[熟练]

    修改告警的功能属性,告警信息内容如下【想要每分钟发送一次的话,将步骤持续时间调整为 60s
    Default Subject : 【故障】服务器 : {HOSTNAME} 发生 : {TRIGGER.NAME} 故障
    Default message : 告警时间 : {EVENT.DATE} {EVENT.TIME}
    事件 ID : {EVENT.ID}
    告警等级 : {EVENT.SEVERITY}
    问题名称 : {EVENT.NAME}
    其他的一些样式
    ---- 操作主题
    故障 : {TRIGGER.STATUS} 服务器 : {HOSTNAME1} 事件 : {TRIGGER.NAME} 故障 !
    # 消息内容
    告警主机 : {HOSTNAME1}
    告警时间 : {EVENT.DATE} {EVENT.TIME}
    告警等级 : {TRIGGER.SEVERITY}
    告警信息 : {TRIGGER.NAME}
    告警项目 : {TRIGGER.KEY1}
    问题详情 : {ITEM.NAME} : {ITEM.VALUE}
    当前状态 : {TRIGGER.STATUS} : {ITEM.VALUE1}
    事件 ID : {EVENT.ID}
    ---- 恢复操作主题
    恢复 : {TRIGGER.STATUS} 服务器 : {HOSTNAME1} 事件 : {TRIGGER.NAME} 已恢复 !
    # 恢复消息内容
    告警主机 : {HOSTNAME1}
    告警时间 : {EVENT.DATE} {EVENT.TIME}
    故障持续时间 : {EVENT.AGE}
    恢复时间 : {EVENT.RECOVERY.TIME}
    告警等级 : {TRIGGER.SEVERITY}
    告警信息 : {TRIGGER.NAME}
    告警项目 : {TRIGGER.KEY1}
    问题详情 : {ITEM.NAME} : {ITEM.VALUE}
    当前状态 : {TRIGGER.STATUS} : {ITEM.VALUE1}
    事件 ID : {EVENT.ID}

    8.1告警恢复定制

    修改告警恢复的功能属性,告警信息内容如下

    属性解析:
    Default Subject : 【恢复】 服务器 : {HOSTNAME} : {TRIGGER.NAME} 已恢复
    Default message : 告警时间 : {EVENT.DATE} {EVENT.TIME}
    事件 ID : {EVENT.ID}
    告警等级 : {EVENT.SEVERITY}
    问题名称 : {EVENT.NAME}
    故障测试效果,时间需要持续 3-4 分钟,不然演示不出来效果  三个终端执行下面的命令
    root @ubuntu24-16: ~ # redis-cl      等待 3-4 分钟之后,故障恢复测试效果  邮箱确认效果如下
    告警声音提示   默认不开启,可以设置(略)

    8.2 告警升级

    关于告警升级主要有两个思路:
    1 问题在没有指定的时间里结束,就向高一级人员发出通知。
    - 要点,高一级的人,也要接收低级别的信息
    2 根据问题的不同级别,向不同的人发送告警通知
    - 多来几个 trigger action 即可, 定制方法与前一节实践流程一致。
    - 要点在于,不同的人员只能接收指定级别的告警通知。
    调整用户身份
    按照 user 的创建方式,再来创建另外两个用户 lisi wangwu ,接收告警信息的级别不一样,分别与 cpu的三个触发器一一对应。
    修改Action
    张三:【故障】服务器 : {HOSTNAME} 发生 : {TRIGGER.NAME} 故障,已通知 zhangsan
    李四:【故障】服务器 :~~ {TRIGGER.NAME} 故障, zhangsan 没处理,升级通知 lisi
    王五:【故障】服务器 :~~ {TRIGGER.NAME} 故障,前面两个人没处理,升级通知 wangwu

    故障测试   root@ubuntu24-16:~# redis-cli  此命令三个终端执行

    故障测试效果,时间需要持续 6 分钟,不然演示不出来效果
    等待 8 分钟之后,故障恢复测试效果    邮件效果如下

    8.3 微信告警 230

    注:需要写脚本 脚本(略)    课件230开始看     
    测试效果: 点击刚才添加的媒介之后,点击 测试,按照如下内容输入

    查看企业微信效果

    案例测试
    点击 zhangsan 账号,增加发送信息的媒介,注意类型是 微信告警
    修改信息发送动作     点击刚才的redis 告警动作,将发送告警改为 微信告警

    点击恢复操作,也变动为微信告警

    依次点击 更新 即可
    测试效果
    root @ubuntu24-16: ~ # redis-cli     在三个终端上,输入连接 redis 的命令, 如果恢复输入exit
    微信查看效果

    8.4 钉钉告警[了解]

    对于 prometheus 来说,它所支持的告警机制非常多,尤其是通过 webhook ,可以实现市面上大部分的实时动态的告警平台。
    alertmanager webhook 集成了钉钉报警,钉钉机器人对文件格式有严格要求,所以必须通过特定的格式转换,才能发送给你钉钉的机器人。
    源代码: https :// github.com / timonwong / prometheus-webhook-dingtalk
    最新版本: 2.0.0 / 20210819
    配置钉钉

    下载钉钉,登录钉钉后,创建专属的团队组,点击右上角的内容,点击创建企业”

    创建聊天群,点击右上角的"+", 选择"发起群聊"。点击右上角的设置找到"智能群助手",点击后,就可以看到"添加机器人"

    选择添加机器人后,选择 " 自定义 ( 通过 webhook 接入自定义服务 )"

    定制特有的关键字信息,便于后续接收信息

    自定义关键字: Zabbix 告警
    勾选加签: SECc7c5de929efe790203b6b32201175798cf305afa0f3277ade1003b4a8d739590
    注意:自定义关键字和加签同时存在的话,加签生效, 如果想要演示自定义关键字的效果,可以先取消加签功能
    记录 webhook 地址 : https :// oapi.dingtalk.com / robot / send ?
    access_token = c73e0be8f01dfda9849b6f90003fa78cd38953e3589e6dd9015fb7d4b809c495
    前提: 取消加签的功能
    关键字测试
    root@ubuntu24-13: ~ # curl -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"Zabbix告警 - zabbix 告警 测试 "}}' https://oapi.dingtalk.com/robot/send?
    access_token=c73e0be8f01dfda9849b6f90003fa78cd38953e3589e6dd9015fb7d4b809c495
    { "errcode" : 0 , "errmsg" : "ok" }

    钉钉确认效果  
    注:只有包含我们定制的告警关键字的信息才会被发送成功。 这里面测试的时候,没有开启加签

    关键字匹配失败则无法告警
    root @ubuntu24-13: ~ # curl -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"Zabbix告 1 - zabbix 告警测试 "}}' https://oapi.dingtalk.com/robot/send?access_token=c73e0be8f01dfda9849b6f90003fa78cd38953e3589e6dd9015fb7d4b809c495
    { "errcode" : 310000 , "errmsg" : " 错误描述 : 关键词不匹配 ; 解决方案 : 请联系群管理员查看此机器人的关键词,并在发送的信息中包含此关键词;" }


    加签测试

    前提: 勾选加签功能选项 ,如果两个都勾选的话,那就是 并集关系,如果取消自定义关键词,就不再受内容限制了

    加签校验的特点在于: 基于时间戳的会话认证,所以我们要基于加签的信息,生成配套的时间戳和 base64 的秘钥生成,最后与我们的 token 生成标准的 url 地址
    https :// oapi.dingtalk.com / robot / send ? access_token = 钉钉 token & timestamp = 时间戳信息
    & sign = 生成的秘钥
     
    定制生成的 python 脚本和shell脚本(略)
    root @ubuntu24-13: ~ # mv dingtalk_zabbix.sh /usr/lib/zabbix/alertscripts/   放到 zabbix 专属目录下
    root @ubuntu24-13: ~ # chmod +x /usr/lib/zabbix/alertscripts/dingtalk_zabbix.sh
    root @ubuntu24-13: ~ # chown zabbix:zabbix /usr/lib/zabbix/alertscripts/dingtalk_zabbix.sh


    创建媒介    剩下的和微信告警类似(略)

    9.故障自愈[了解]

    zabbix 是一款广泛使用的开源监控系统,其故障自愈功能是较为高级且实用的特性

    以nginx故障重启为例

    基础环境配置

    zabbix 服务账号 - 不推荐
    默认 zabbix agent 是使用 zabbix 用户启动的,有些特权命令 zabbix 用户是没有权限执行,会导致定义好的自治愈策略因为权限拒绝而执行失败, 所以需要事先对 zabbix 用户进行授权 .
    修改 zabbix agent 的启动身份
    root @ubuntu24-16: ~ # vim /etc/zabbix/zabbix_agentd.conf
    AllowRoot = 1
    恢复 zabbix用户

    zabbix 服务账号 - 推荐

    10.故障自愈实践[熟练]

    这里用10.0.0.14主机(rocky系统) 安装zabbix,安装nginx  修改配置文件里的server为100主机

    界面实践

    主机名字: 10.0.0.14
    模版: Linux by zabbix agent Nginx by Zabbix agent
    主机群组: web-group
    接口: 10.0.0.14 , 10050
    描述:使用被动模式添加 openeuler nginx 服务
    监控对象:服务器
    添加监控项 - 主机方式
    名称: Nginx 服务状态
    键值: net.tcp.listen[ 80 ]
    主机接口: 10.0.0.14 : 10050
    更新间隔: 10 s ,默认是 1 min
    描述:添加 Nginx 服务的检测状态
    点击测试,因为远程主机的 nginx 服务已经关闭,所以这里获取的值是 0

    添加监控项 - 模版方式
    点击 数据采集 - 模版 - 搜索 nginx,并点击 Nginx by Zabbix agent 的模版条目右侧的监控项
    点击创建监控项 - 内容和上一节几乎一样。

    名称: Nginx 服务状态 - 模版
    键值: net.tcp.listen[ 80 ]
    主机接口: 10.0.0.14 : 10050
    更新间隔: 10 s ,默认是 1 min
    值映射:选择我们之前定制好的 service state 的值映射,
    描述:添加 Nginx 服务的检测状态
    注意:如果没有值映射的话,可以进入到模版页面,进行值映射配置即可

    定制触发器
     
    点击 数据采集 - 模版 - 搜索 nginx,查看效果
    点击
    Nginx by Zabbix agent 的模版条目右侧的触发器

    创建触发器

    事件名称: Nginx 服务状态异常
    表达式: last( / Nginx by Zabbix agent / net.tcp.listen[ 80 ]) = 0
    表达式来源:可以通过条件的方式自动生成
    描述: Nginx 服务状态异常

    定制策略
    点击 告警 - 脚本-创建脚本,按照如下方式创建一个故障自愈脚本

    名称: Nginx 故障自愈
    范围:动作操作
    类型:脚本
    执行在: Zabbix 客户端
    命令: sudo systemctl restart nginx
    描述:故障自愈:发现远程主机的服务状态异常,自动重启服务
    主机群组:所有
    定制告警动作
    注意: 告警动作生效的作用范围,仅限于 设置完成后发生的问题 ,历史发生的,或者正在发生的问题, 不管用。
    之前的告警是,等到一定的级别后才会进入到邮件告警的动作,这里面我们需要建立的是一个一旦发生Nginx服务异常,我们就将 Nginx 服务启动的触发器。
    点击 告警 - 动作 - 触发器动作,查看效果
    点击 创建动作,条件选择为 我们之前定制的主机级别的触发器  然后再添加看效果
    定制告警操作
    点击操作

    在 操作部分,选择的操作位 Nginx 故障自愈的 脚本功能
    目标列表:勾选当前主机即可     点击添加后,查看效果   点击 添加后,确定 触发器动作(略)


    10.1 自愈实践2[扩展]

    定制 Redis 监控   272

    Logo

    有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

    更多推荐