本文档是关于Zabbix监控系统的全面指南,涵盖了从基础概念到高级应用的完整知识体系。提供了大量实际配置示例和脚本,适合运维工程师、DevOps实践者以及系统管理员学习和参考,帮助他们构建稳定、高效的监控体系。
zabbix5.0稳定版
1.什么是监控
对我们的操作系统进行不间断的监控
2.为什么要监控
软件生命周期中非常重要的一个环节
能够做到事前告警,事后我们还可以根据监控内容排查问题
金丝雀 监控指标
在有问题的时候 运维(管理) 运维债务
3.如何去监控,监控什么内容:
监控硬件 磁盘 df -h 内存 free 磁盘IO 负载 CPU 网络
软件服务 端口 进程 状态
业务层面 业务数据进行数据 自定义监控 订单量 注册用户 充值用户 日志中 数据库中体现
4.监控有哪些工具
zabbix 硬件 服务状态 自定义监控
Nagions 网络产品 交换机 路由器
Cacti 流量
OPen-Falcon 小米公司
prometheus kubernetes docker
监控宝等
一. zabbix安装
安装5.0版本
1.配置仓库
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
2.安装zabbix-server zabbix-agent
yum -y install zabbix-server-mysql zabbix-agent
3.安装scl源 解决版本冲突问题
[root@zabbix ~]# yum -y install centos-release-scl
4.开启前端仓库
[root@zabbix ~]# vim /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
...
enabled=1
...
5.安装 php apache 前端
[root@zabbix ~]# yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl
6.安装mysql数据库
[root@zabbix ~]# yum -y install mariadb-server
启动数据库
[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# systemctl enable mariadb
7.创建zabbix库
[root@zabbix ~]# mysql -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create user zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> quit
Bye
8.初始化数据(业务运行前需要依赖数据库中的一些数据表格 需要提前导入)
[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix # 需要输入zabbix密码
[root@zabbix ~]# mysql -uroot
MariaDB [(none)]> set global log_bin_trust_function_creators = 0;
quit
9.修改zabbix连接数据的信息
[root@zabbix ~]# egrep ^DB /etc/zabbix/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix # 将注释打开配置密码
10.修改时区
[root@zabbix ~]# tail -1 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/ShangHai
11.启动服务 server agent httpd php 加入开机自启
[root@zabbix ~]# systemctl start zabbix-server zabbix-agent httpd rh-php72-php-fpm
[root@zabbix ~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
12.通过浏览器访问安装页面
http://10.0.0.71/zabbix/
13.修改语言
服务端: 10.0.0.51
客户端: 10.0.0.8 10.0.0.7
1.添加 Zabbix 软件仓库
[root@zabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
2.安装 Zabbix server 并使用 MySQL 数据库:
[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql mariadb-server zabbix-agent httpd
3.启动数据库并配置
[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# systemctl enable mariadb
在企业中数据库:
开发给我们的产品用到数据: 里面的数据 可能是我们按照zabbix的方式进行创建库
直接通过产品的安装选项来自动创建数据库 在产品配置文件中需要数据库的连接方式 用户名密码等
直接发给我们一个sql文件 让我们直接导入到数据库中
[root@zabbix ~]# mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> create user 'zabbix'@'localhost' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to 'zabbix'@'localhost';
Query OK, 0 rows affected (0.00 sec)
4.导入zabbix数据
[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix zabbix
5.配置zabbix连接数据库信息
[root@zabbix ~]# grep ^DB /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
6.启动zabbix并加入开机自动运行
[root@zabbix ~]# systemctl start zabbix-server httpd
[root@zabbix ~]# systemctl enable zabbix-server httpd
7.访问zabbix页面 10.0.0.51/zabbix
8.修改时区 去掉注释修改为亚洲上海 并重启httpd服务
[root@zabbix ~]# grep Asia/Shanghai /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
重启httpd
[root@zabbix ~]# systemctl restart httpd
9.zabbix安装完成
10.调整为中文重新配置字体
查找windows字体复制到zabbix的字体目录下
windows字体位置
上传其中一个字体到/usr/share/fonts/dejavu/ 并改名
[root@zabbix ~]# cd /usr/share/fonts/dejavu/
[root@zabbix dejavu]# ll
total 5288
-rw-r--r-- 1 root root 611212 Feb 27 2011 DejaVuSans-BoldOblique.ttf
-rw-r--r-- 1 root root 672300 Feb 27 2011 DejaVuSans-Bold.ttf
-rw-r--r-- 1 root root 580168 Feb 27 2011 DejaVuSansCondensed-BoldOblique.ttf
-rw-r--r-- 1 root root 631992 Feb 27 2011 DejaVuSansCondensed-Bold.ttf
-rw-r--r-- 1 root root 576004 Feb 27 2011 DejaVuSansCondensed-Oblique.ttf
-rw-r--r-- 1 root root 643852 Feb 27 2011 DejaVuSansCondensed.ttf
-rw-r--r-- 1 root root 345204 Feb 27 2011 DejaVuSans-ExtraLight.ttf
-rw-r--r-- 1 root root 611556 Feb 27 2011 DejaVuSans-Oblique.ttf
-rw-r--r-- 1 root root 720012 Feb 27 2011 DejaVuSans.ttf
[root@zabbix dejavu]# rz -E
rz waiting to receive.
[root@zabbix dejavu]# mv DejaVuSans.ttf DejaVuSans.ttf.bak
[root@zabbix dejavu]# mv STXIHEI.TTF DejaVuSans.ttf
二. Zabbix监控服务器信息
1.安装zabbix-agent客户端 准备一台服务器10.0.0.8
[root@web02 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
安装5.0客户端:
配置仓库:
[root@web02 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.34-1.el7.x86_64.rpm
或者:
[root@web02 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
如果安装提示软件冲突:
[root@web02 ~]# yum -y install centos-release-scl
安装客户端agent
[root@web02 ~]# yum -y install zabbix-agent
2.配置zabbix客户端服务器信息 启动客户端
[root@web02 ~]# yum -y install zabbix-agent
[root@web02 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.51
[root@web02 ~]# systemctl start zabbix-agent
3.zabbix监控web02
4.WEB02服务器完成监控操作
三、拆分数据库
企业zabbix高并发场景使用
1.准备一台数据库服务器10.0.0.52安装mariadb
[root@db ~]# yum -y install mariadb-server
[root@db ~]# systemctl start mariadb
[root@db ~]# mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> create user 'zabbix'@'%' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to 'zabbix'@'%';
Query OK, 0 rows affected (0.00 sec)
2.导出zabbix服务器zabbix数据库、导入到新的数据库
[root@zabbix ~]# mysqldump -uroot -B zabbix > zabbix.sql
[root@zabbix ~]# cat zabbix.sql |mysql -h 172.16.1.52 -uzabbix -pzabbix zabbix
3.配置WEB连接数据库信息
[root@zabbix ~]# systemctl stop mariadb
[root@zabbix ~]# cat /etc/zabbix/web/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '172.16.1.52';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'zabbix';
[root@zabbix ~]# grep ^DB /etc/zabbix/zabbix_server.conf
DBHost=172.16.1.52
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
3.重启服务
[root@zabbix ~]# systemctl restart zabbix-server httpd
四、自定义监控
通过获取系统信息来定义zabbix的监控项、配置zabbix触发器发送告警通知
案例: 系统登陆数超过2个,则发送告警信息
1.获取用户登录信息
2.如何配置让zabbix可以拿到这个数据
3.zabbix页面配置
4.配置触发器
zabbix客户端自定义监控的语法结构
UserParameter=,
UserParameter= 固定语法
变量名称
后面的逗号是固定写法
取值 取到的值会赋值给变量名称
在zabbixserver端我们只要获取到变量名称 就能拿到对应的值
1.获取系统的登陆用户数
[root@web02 ~]# w
11:41:22 up 2:20, 2 users, load average: 0.02, 0.07, 0.06
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 09May21 184days 0.56s 0.56s -bash
root pts/0 10.0.0.1 09:26 2.00s 0.74s 0.15s w
[root@web02 ~]# w|awk 'NR==1{print $4}'
2
2.定义为zabbix的监控项
[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.d/system.conf
UserParameter=login_number,w|awk 'NR==1{print $4}'
# 查看监控项 zabbix_agentd -p 有语法检测功能
[root@web02 ~]# zabbix_agentd -p|grep login_number
login_number [t|3]
# 重启客户端
[root@web02 ~]# systemctl restart zabbix-agent.service
3.使用zabbix服务器端进行采集监控
服务端通过命令行测试是否通过监控项来获取用户自定义的值
# 安装zabbix-get命令
[root@zabbix ~]# yum -y install zabbix-get
在web页面添加监控项
查看监控项
4.监控tcp 22端口是否存活
键值在选择中选取需要监控的信息
检查 TCP 端口 是否处于侦听状态。返回 0 - 未侦听;1 - 正在侦听
注意: zabbix5.0版本不支持netstat命令需要加s权限
[root@web02 ~]# chmod +s /bin/netstat
停止web02 sshd服务
[root@web02 ~]# systemctl stop sshd
5.自定义配置展示值映射
调用值映射
6.自定义监控服务器内存百分比
第一步: 自定义监控项 获取可用百分比
[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.d/system.conf
UserParameter=login_number,w|awk 'NR==1{print $4}'
UserParameter=mem_free,free|awk 'NR==2{print $NF/$2*100}'
[root@web02 ~]# systemctl restart zabbix-agent.service
[root@web02 ~]# zabbix_agentd -p|grep mem_free
mem_free [t|72.0469]
第二步: 服务端测试获取key值 并添加监控
[root@zabbix ~]# zabbix_get -s 172.16.1.8 -k mem_free
72.2032
7.为可用内存设置触发器
当内存可用百分比小于20% 则触发报警规则
测试: 关闭swap分区
[root@web02 ~]# swapoff -a
使用dd压测消耗内存
[root@web02 ~]# dd if=/dev/zero of=/dev/null bs=600M count=1024
8.配置多条件触发器
同时满足两个条件触发告警
添加swap可用百分比
[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.d/system.conf
UserParameter=login_number,w|awk 'NR==1{print $4}'
UserParameter=mem_free,free|awk 'NR==2{print $NF/$2*100}'
UserParameter=swap_free,free -m|awk 'NR==3{print $3/$2*100}'
修改触发器配置
完成后在使用dd压测查看结果
五、自定义报警
1.配置发件人
awbzmztfmrhnbdga
2.开启动作
3.配置收件人
4.测试内存使用率查看信息
[root@web02 ~]# dd if=/dev/zero of=/dev/null bs=700M count=1024
5.自定义告警内容
默认标题:
故障: {EVENT.NAME}
消息内容:
报警主机: {HOST.NAME1}
报警服务: {ITEM.NAME}
报警key1: {ITEM.KEY1}: {ITEM.VALUE1}
报警key2: {ITEM.KEY2}: {ITEM.VALUE2}
严重级别: {TRIGGER.SEVERITY}
恢复操作
默认标题:
恢复: {EVENT.NAME}
消息内容:
恢复主机: {HOST.NAME1}
恢复服务: {ITEM.NAME}
恢复key1: {ITEM.KEY1}: {ITEM.VALUE1}
恢复key2: {ITEM.KEY2}: {ITEM.VALUE2}
6.远程执行命令
因为zabbix服务启动用户为zabbix所有在远程执行命令时需要使用sudo提权
[root@web02 ~]# grep zabbix /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL
测试客户端执行systemctl restart sshd
[root@web02 ~]# su - zabbix - /bin/bash
-sh-4.2$ sudo systemctl restart sshd
开启客户端支持远程执行命令
[root@web02 ~]# grep EnableRemoteCommands /etc/zabbix/zabbix_agentd.conf
### Option: EnableRemoteCommands
EnableRemoteCommands=1
重启客户端
[root@web02 ~]# systemctl restart zabbix-agent.service
添加到动作中
停止WEB01的SSHD服务测试是否可以执行远程命令
7.微信报警
1.配置脚本文件
下载weixin.py脚本
注册企业微信
创建应用获取信息
vim weixin.py
#修改三行,具体信息,参考自己的企业微信
corpid='wxd074861951c67ba6'
appsecret='QtraZrI936DZ0jZ3aSWTZ_F633mNTeyrkkYvNa88gh0'
agentid=1
安装pip需要epel仓库
[root@zabbix ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@zabbix ~]# yum install python-pip -y &>/dev/null
[root@zabbix ~]# pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
python weixin.py 'LiZhenYa' '下雨了!' '回家收衣服'
[root@zabbix ~]# mv weixin.py /usr/lib/zabbix/alertscripts/
[root@zabbix ~]# chmod +x /usr/lib/zabbix/alertscripts/weixin.py
2.配置报警媒介类型
{ALERT.SENDTO} #发给谁
{ALERT.SUBJECT} #报警标题
{ALERT.MESSAGE} #报警内容
3.配置动作发送邮件修改为微信媒介进行告警
六、自定义图形
1.给自定义监控项创建图形
2.创建聚合图形
多图形组合成一张图
3.幻灯片演示
七、自定义模板
1.创建模板
创建模板的作用,主机和模板分离,多台服务器监控相同项目只调用同一个模板即可,修改监控项只修改模板即可对所有服务器完成操作
2.复制自定义监控项配置为模板
3.复制触发器
4.复制图形
注意: 应用集根据需求也可以进行复制
查看自定义配置模板信息
5.新建一台服务器关联自定义模板linux-server
将自定义key拷贝至目标服务器 将server作为客户端进行测试
[root@web02 ~]# scp /etc/zabbix/zabbix_agentd.d/system.conf 10.0.0.51:/etc/zabbix/zabbix_agentd.d/
重启客户端
[root@zabbix ~]# systemctl restart zabbix-agent
关联模板
检查server的监控项是否监控成功
图形也正常被监控到
八、监控Nginx状态
监控Nginx7种状态
1.开启nginx状态模块
2.取出7种状态设置为监控项
3.创建模板进行关联
4.配置触发器
1.开启Nginx状态模块
[root@web02 ~]# cat /etc/nginx/conf.d/status.conf
server {
listen 88;
location /nginx_status {
stub_status;
}
}
[root@web02 ~]# systemctl restart nginx
2.配置监控项
[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx.active,curl -s 127.0.0.1:88/nginx_status|awk 'NR==1{print $NF}'
UserParameter=nginx.accepts,curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $1}'
UserParameter=nginx.handled,curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $2}'
UserParameter=nginx.requests,curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $3}'
[root@web02 ~]# systemctl restart zabbix-agent.service
服务端测试取值
[root@zabbix ~]# zabbix_get -s 172.16.1.8 -k nginx.active
创建模板 基于模板创建监控项 注意: 也可以先添加监控项然后在复制到模板
3.添加触发器监控88状态端口
4.基于模板创建图形
5.模板创建完成后关联到被监控的主机
查看效果
扩展监控web01做模板关联
1.web01开启status状态模块
2.自定义key配置文件拷贝到web01
3.关联模板
九、监控PHP服务状态
1.安装PHP服务配置
上传PHP RPM包安装
2.打开PHP状态信息配置
[root@web02 php]# vim /etc/php-fpm.d/www.conf
pm.status_path = /status
[root@web02 php]# systemctl restart php-fpm
3.修改Nginx配置文件
[root@web02 ~]# cat /etc/nginx/conf.d/status.conf
server {
listen 88;
location /nginx_status {
stub_status;
}
location /status {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@web02 ~]# systemctl restart nginx
测试是否获取PHP状态信息
[root@web02 ~]# curl 127.0.0.1:88/status
pool: www # pool的名称
process manager: dynamic # 进程管理方式,现今大多都为dynamic,不要使用static
start time: 11/Nov/2021:10:11:53 +0800 # php-fpm上次启动的时间
start since: 282 # php-fpm已运行了多少秒
accepted conn: 2 # pool接收到的请求数
listen queue: 0 # 处于等待状态中的连接数,如果不为0,需要增加php-fpm进程数
max listen queue: 0 # 从php-fpm启动到现在处于等待连接的最大数量
listen queue len: 128 # 处于等待连接队列的套接字大小
idle processes: 4 # 处于空闲状态的进程数
active processes: 1 # 处于活动状态的进程数
total processes: 5 # 进程总数
max active processes: 1 # 从php-fpm启动到现在最多有几个进程处于活动状态
max children reached: 0 # 当pm试图启动更多的children进程时,却达到了进程数的限制,达到一次记录一次,如果不为0,需要增加php-fpm pool进程的最大数
slow requests: 0 # 当启用了php-fpm slow-log功能时,如果出现php-fpm慢请求这个计数器会增加,一般不当的Mysql查询会触发这个值
4.自定义监控项
[root@web02 ~]# vim /etc/zabbix/zabbix_agentd.d/php.conf
UserParameter=fpm.accepted,curl -s 127.0.0.1:88/status|awk '/^accepted/{print $NF}'
UserParameter=fpm.idle,curl -s 127.0.0.1:88/status|awk '/^idle/{print $NF}'
UserParameter=fpm.active,curl -s 127.0.0.1:88/status|awk '/^active/{print $NF}'
UserParameter=fpm.total,curl -s 127.0.0.1:88/status|awk '/^total/{print $NF}'
UserParameter=fpm.children,curl -s 127.0.0.1:88/status|awk '/children/{print $NF}'
[root@web02 ~]# systemctl restart zabbix-agent.service
客户端查看是否正常获取值
fpm.accepted [t|11]
fpm.idle [t|4]
fpm.active [t|1]
fpm.total [t|5]
fpm.children [t|0]
客户端查看是否正常获取自定义值
[root@zabbix ~]# zabbix_get -s 172.16.1.8 -k fpm.active
1
5.创建自定义PHP模板
基于模板添加监控项
添加完成
配置触发器
配置图形
6.关联模板到被监控主机
查看状态
测试PHP访问
[root@web02 ~]# for i in `seq 100`;do ab -n2000 -c20 127.0.0.1:88/status;done
十、使用脚本方式自定义监控项
1.书写脚本进行取值
[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.sh
#!/bin/sh
case $1 in
active)
curl -s 127.0.0.1:88/nginx_status|awk 'NR==1{print $NF}'
;;
accepts)
curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $1}'
;;
handled)
curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $2}'
;;
requests)
curl -s 127.0.0.1:88/nginx_status|awk 'NR==3{print $3}'
;;
*)
echo "Usage: $0 [active|accepts|handled|requests]"
esac
增加执行权限
[root@web02 ~]# chmod +x /etc/zabbix/zabbix_agentd.d/nginx.sh
2.修改zabbix客户端配置文件
[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx.conf
UserParameter=nginx.[*],/etc/zabbix/zabbix_agentd.d/nginx.sh $1
3.zabbix创建模板及监控项
4.关联至被监控主机
十一、监控数据库MySQL
1.监控MySQL进程
2.监控MySQL端口
3.监控MySQL状态信息
通过命令查看MySQL状态信息: show global status
通过awk取值进行监控
[root@web02 ~]# mysql -uroot -e 'show global status;'
+------------------------------------------+-------------+
| Variable_name | Value |
+------------------------------------------+-------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Access_denied_errors | 0 |
| Aria_pagecache_blocks_not_flushed | 0 |
| Aria_pagecache_blocks_unused | 15737 |
| Aria_pagecache_blocks_used | 0 |
| Aria_pagecache_read_requests | 0 |
| Aria_pagecache_reads | 0 |
| Aria_pagecache_write_requests | 0 |
| Aria_pagecache_writes | 0 |
Threads_connected # 连接数
Com_select # 查询总量
Com_insert # 插入总量
Com_update # 更新总量
Com_delete # 删除总量
Bytes_received # 流入总流量
Bytes_sent # 流出总流量
Slow_queries # 慢查询总量
4.使用脚本定义监控项
[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.sh
mysql -uroot -e 'show global status;'|grep -w $1|awk '{print $NF}'
[root@web02 ~]# chmod +x /etc/zabbix/zabbix_agentd.d/mysql.sh
[root@web02 ~]# cat /etc/zabbix/zabbix_agentd.d/mysql.conf
UserParameter=mysql.[*],/etc/zabbix/zabbix_agentd.d/mysql.sh $1
服务端测试
[root@zabbix ~]# zabbix_get -s 172.16.1.8 -k mysql.[Threads_connected]
Threads_connected 1
5.服务端创建MySQL监控模板
其他值添加过程省略请自行根据需求添加。。。。
完成添加
6.添加触发器
7.配置图形
8.关联至被监控主机
生成数据
[root@web02 ~]# cat mysql.sh
for i in `seq 100`
do
mysql -uroot -e "create database IF NOT EXISTS db;
use db;
DROP TABLE IF EXISTS test${i};
create table test${i}(id int);
insert into db.test${i} values (123456);
select * from db.test${i};
delete from test${i} where id=123456;"
done
十二、SNMP监控
简单网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。
SNMP: OID和MIB介绍 扩展了解
SNMP监控的网络设备 里面的状态都有一个唯一值来表示 这个唯一值就是OID或MIB方式来表示
这个值以树状结构来展示
SNMP三种版本
SNMP v1 最早的SNMP协议 不支持加密算法
SNMP v2 兼容v1版本支持更多数据类型和错误代码 常用版本
SNMP v3 增加了认证和加密功能,避免非法访问 验证效率低
1.安装SNMP服务
[root@web02 ~]# yum -y install net-snmp
2.修改配置文件
[root@web02 ~]# vim /etc/snmp/snmpd.conf
com2sec notConfigUser default public # 团体名称 可自定义 连接使用
view systemview included .1 # 从/开始检查取值
3.启动服务
[root@web02 ~]# systemctl start snmpd
[root@web02 ~]# systemctl enable snmpd
在zabbix安装snmp客户端进行取值测试
OID
-v 指定SNMP版本
2c 指定SNMP版本为V2
-c 指定团体名称
[root@zabbix ~]# yum -y install net-snmp-utils
[root@zabbix ~]# snmpwalk -v2c -c public 172.16.1.8 .1.3.6.1.4.1.2021.11.9.0
UCD-SNMP-MIB::ssCpuUser.0 = INTEGER: 0
[root@zabbix ~]# snmpwalk -v2c -c public 172.16.1.8 .1.3.6.1.2.1.25.2.2.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 997956 KBytes
[root@zabbix ~]# snmpwalk -v2c -c public 172.16.1.8 HOST-RESOURCES-MIB::hrMemorySize.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 997956 KBytes
4.通过SNMP监控客户端
十三、zabbix自动化监控
1.zabbix自动发现
zabbix服务端通过扫描地址段的方式自动发现存活的服务器
发现服务器后进行动作处理 添加主机 关联模板 关联报警等
缺点1: 扫描速度慢 server压力较大
缺点2: 所有扫描到的客户端只能使用统一模板 比如web和数据库使用模板是不同的 还需要手动进行配置
配置动作
重启测试
[root@zabbix ~]# systemctl restart zabbix-server.service
[root@web02 ~]# systemctl restart zabbix-agent.service
2.zabbix自动注册
客户端主动将自身信息上传给服务端用来减少服务端的压力
根据需求调整自动还是被动模式
例如: 当服务器超过300-500+台以上
当网络较复杂的情况
当服务器配置一般的情况
修改监控项为主动上报模式
1.将客户端配置为主动模式
[root@web02 ~]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=172.16.1.51 # 主动注册服务器地址
Hostname=web02 # 必须设置为主机名称
[root@web02 ~]# systemctl restart zabbix-agent
2.配置自动注册的动作
注意: 先删除自动发现功能防止冲突
添加动作 动作---> 右上角选择 --> 自动注册
修改监控项目被动为主动 减小服务器压力
十四、zabbix分布式监控
1.安装zabbix-proxy代理
[root@web02 ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@web02 ~]# yum -y install zabbix-proxy-mysql
[root@web02 ~]# yum -y install mariadb-server
[root@web02 ~]# systemctl start mariadb
[root@web02 ~]# mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
MariaDB [(none)]>
导入数据库
[root@web02 ~]# zcat /usr/share/doc/zabbix-proxy-mysql-4.0.35/schema.sql.gz |mysql -uzabbix -pzabbix zabbix
检查数据导入是否正常
[root@web02 ~]# mysql -uroot -e "use zabbix;show tables;"
+----------------------------+
| Tables_in_zabbix |
+----------------------------+
| acknowledges |
| actions |
| alerts |
| application_discovery |
| application_prototype |
| application_template |
| applications |
......
2.配置zabbix-proxy代理
[root@web02 ~]# egrep '^[DH]|^Server' /etc/zabbix/zabbix_proxy.conf
Server=10.0.0.51
Hostname=sz_proxy
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
3.启动zabbix-proxy代理
[root@web02 ~]# systemctl start zabbix-proxy.service
[root@web02 ~]# netstat -tnulp|grep 10051
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 119590/zabbix_proxy
tcp6
4.配置客户指向zabbxi-proxy
客户端: 172.16.1.8 自身也作为客户端来测试
客户端: 172.16.1.5
[root@web02 ~]# egrep '172.16.1.8|^Hostname' /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.8
ServerActive=172.16.1.8
Hostname=web02
[root@web02 ~]# systemctl restart zabbix-agent.service
[root@lb01 ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@lb01 ~]# yum -y install zabbix-agent
[root@lb01 ~]# egrep '172.16.1.8|^Hostname' /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.8
ServerActive=172.16.1.8
Hostname=lb01
[root@lb01 ~]# systemctl restart zabbix-agent.service
5.server端添加主机
清空原监控客户端及自动注册发现功能
基于代理添加主机
继续将proxy作为客户端监控
十五、zabbix监控java
zabbix通过zabbix-java-gateway实现对java进行监控
监控java使用jmx协议
服务端: 10.0.0.51
zabbix-java-gateway: 10.0.0.8
tomcat: 10.0.0.5
1.安装Tomcat服务并开启jmx协议和取值页面
安装JDK
[root@lb01 ~]# rpm -ivh jdk-8u181-linux-x64.rpm
安装Tomcat
[root@lb01 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.55/bin/apache-tomcat-9.0.55.tar.gz --no-check-certificate
[root@lb01 ~]# tar xf apache-tomcat-8.5.72.tar.gz -C /usr/local/
[root@lb01 ~]# mv /usr/local/apache-tomcat-8.5.72/ /usr/local/tomcat
注释: hostname 为自己本机ip
[root@lb01 ~]# cat /usr/local/tomcat/bin/catalina.sh
#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Djava.rmi.server.hostname=172.16.1.5 \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"
启动tomcat
[root@lb01 ~]# /usr/local/tomcat/bin/startup.sh
[root@lb01 ~]# netstat -tnulp|grep 12345
tcp6 0 0 :::12345 :::* LISTEN 14213/java
2.安装zabbix-java-gateway
在10.0.0.8服务器上安装
[root@web02 ~]# yum -y install zabbix-java-gateway
[root@web02 ~]# systemctl start zabbix-java-gateway.service
[root@web02 ~]# systemctl enable zabbix-java-gateway.service
[root@web02 ~]# netstat -tnulp|grep 10052
tcp6 0 0 :::10052 :::* LISTEN 121398/java
3.配置服务器连接java-gateway
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
JavaGateway=172.16.1.8
JavaGatewayPort=10052
StartJavaPollers=3
4.通过jmx进行监控
删除原主机进行后添加测试
十六、zabbix优化
1.高并发需要对MySQL进行拆分
2.zabbix-agent被动上传修改为主动上报模式
3.地区较多情况尽量使用proxy代理模式
4.系统自带监控项优化
5.进程优化
6.缓存优化
十七、zabbix+ansible自动注册
1.配置好自动注册规则
2.写ansible playbook
[root@zabbix ansible]# cat zabbix.yml
- hosts: all
vars:
- SERVER_IP: 172.16.1.51
tasks:
- name: Install Zabbix-Agent
yum:
name: https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
state: present
- name: Config Zabbix-Agent
template:
src: zabbix_agentd.conf.j2
dest: /etc/zabbix/zabbix_agentd.conf
notify: Restart Zabbix Agent
- name: Scp Zabbix Agent Configure
copy:
src: ./zabbix_agentd.d/
dest: /etc/zabbix/zabbix_agentd./
- name: Start Zabbix Agent
systemd:
name: zabbix-agent
state: started
enabled: yes
handlers:
- name: Restart Zabbix Agent
systemd:
name: zabbix-agent
state: restarted
[root@zabbix ansible]# vim zabbix_agentd.conf.j2
Server={{ SERVER_IP }}
Hostname={{ ansible_hostname }}
ServerActive={{ SERVER_IP }}
十八、grafana
1.安装grafana
[root@zabbix ~]# wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.4-1.x86_64.rpm
[root@zabbix ~]# yum -y localinstall grafana-enterprise-8.2.4-1.x86_64.rpm
[root@zabbix ~]# systemctl start grafana-server.service
[root@zabbix ~]# systemctl enable grafana-server.service
查看grafana监听端口号
[root@zabbix ~]# netstat -tnulp|grep grafana
tcp6 0 0 :::3000 :::* LISTEN 17716/grafana-serve
2.安装zabbix插件
[root@zabbix ~]# grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 4.0.1
[root@zabbix ~]# grafana-cli plugins install alexanderzobnin-zabbix-app
如果从github下载较慢 建议先下载然后安装
通过windows下载安装包 然后上传到/var/lib/grafana/plugins/
[root@zabbix plugins]# ll
total 16196
-rw-r--r-- 1 root root 16584375 Nov 16 11:56 alexanderzobnin-zabbix-app-4.0.1.zip
[root@zabbix plugins]# unzip alexanderzobnin-zabbix-app-4.0.1.zip
[root@zabbix plugins]# systemctl restart grafana-server.service
http://10.0.0.61/zabbix/api_jsonrpc.php
在页面查看是否安装成功
开启zabbix插件功能
3.添加数据源
导入模板
修改模板信息
4.grafana直接连接数据库取值
zabbix插件处选择mysql
十九、总结
Zabbix作为一款成熟的企业级监控解决方案,凭借其强大的功能、灵活的扩展性和活跃的社区支持,已成为IT监控领域的标准工具之一。通过本指南的学习,您应该能够掌握Zabbix的核心概念和实际应用技巧,构建适合自己业务需求的监控体系。
监控系统的建设是一个持续优化的过程,建议在实践中不断调整和优化监控项、告警阈值和可视化展示。随着业务的发展和技术栈的变化,监控策略也需要相应调整,以确保持续提供有效的监控覆盖。