一、资源的创建

根据自己的需求进行安装 网站:下载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 界面配置监控
- 访问 http://10.0.0.100/zabbix
- 按照安装向导完成初始设置
- 登录(第一登录:账:zabbix 密:password 第二登录:账:Admin,密:zabbix) 如果:连接不到数据库可以看看数据库是否启动!
- 创建主机:
- 进入 "配置" -> "主机" -> "创建主机"
- 对于 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 监控
- 进入 "配置" -> "主机",找到 10.0.0.101 主机
- 点击 "编辑"
- 在 "JMX 接口" 标签下,添加:
- IP 地址:10.0.0.101
- 端口:12345
- 在 "模板" 标签下,添加 "Template App Apache Tomcat JMX" 模板
- 点击 "更新" 保存配置
- 具体操作看下图

三、基于 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 监控
- 在 10.0.0.100 上安装必要工具:apt install -y zabbix-get
-
在 Zabbix Web 界面配置:
- 进入 "配置" -> "主机",找到 10.0.0.101 主机
- 点击 "编辑"
- 在 "模板" 标签下,添加 "Template App Nginx by HTTP" 模板
- 点击 "更新" 保存配置
-
(可选)如果需要自定义监控项,可以创建基于以下键值的监控项:
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 用户进行授权 .
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
所有评论(0)