目录
一、Zabbix安装介绍
Zabbix是一个企业级分布式开源监控解决方案,支持实时监控数干台服务器,虚拟机和网络设备,采集百万级监控指标,适用于任何IT基础架构、服务、应用程序和资源的解决方案。
Zabbix安装包可通过官方链接(国外)或阿里云、清华云(国内)等镜像仓库获取
#在ubuntu2004上部署Zabbix6.0
#root@ubuntu-test1 IP:10.0.0.161
#root@ubuntu-test2 IP:10.0.0.162
#root@ubuntu-test3 IP:10.0.0.163
root@ubuntu-test1:~# wget https://mirrors.aliyun.com/zabbix/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu20.04_all.deb #下载zabbix源
root@ubuntu-test1:~# dpkg -i zabbix-release_6.0-4+ubuntu20.04_all.deb
root@ubuntu-test1:~# ls /etc/apt/sources.list.d/
original.list zabbix-agent2-plugins.list zabbix.listroot@ubuntu-test1:~# sed -i.bak 's#https://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#g' /etc/apt/sources.list.d/zabbix.list #替换软件源至国内阿里云
root@ubuntu-test1:~# apt update
root@ubuntu-test1:~# apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent zabbix-get #下载zabbix相关服务包root@ubuntu-test1:~# apt -y install mysql-server
root@ubuntu-test1:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
root@ubuntu-test1:~# systemctl enable --now mysqld.service
root@ubuntu-test1:~# mysqlmysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.01 sec)mysql> create user zabbix@'10.0.0.%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.02 sec)mysql> grant all privileges on zabbix.* to zabbix@'10.0.0.%';
Query OK, 0 rows affected (0.01 sec)mysql> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
root@ubuntu-test1:~# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p123456 -h'10.0.0.161' zabbix #准备数据表
root@ubuntu-test1:~# mysql
mysql> set global log_bin_trust_function_creators = 0;root@ubuntu-test1:~# vim /etc/zabbix/zabbix_server.conf #修改zabbix配置
DBPassword=123456
DBHost=10.0.0.161 #仅非本地数据库需要该项
DBPort=3306 #仅非本地数据库需要该项root@ubuntu-test1:~# vim /etc/zabbix/nginx.conf #修改nginx配置
server {
listen 80;
server_name zabbix.wlm.com;
........}
root@ubuntu-test1:~# vim /etc/php/7.4/fpm/pool.d/zabbix-php-fpm.conf #修改PHP服务器时区
php_value[date.timezone] = Asia/Shanghai
root@ubuntu-test1:~# systemctl enable --now zabbix-server.service nginx zabbix-agent php7.4-fpm.serviceroot@ubuntu-test1:~# apt -y install language-pack-zh-hans #安装中文语言包
root@ubuntu-test1:~# cd /usr/share/zabbix/assets/fonts #导入中文字体至此目录
root@ubuntu-test1:/usr/share/zabbix/assets/fonts# ls
graphfont.ttf graphfont.ttf.bak#进入web界面配置zabbix,web端管理员默认账号Admin,zabbix
#在被控制端安装Zabbix Agent6.0
root@ubuntu-test2:~# wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu20.04_all.deb #下载官方镜像源
root@ubuntu-test2:~# dpkg -i zabbix-release_6.0-4+ubuntu20.04_all.deb
root@ubuntu-test2:~# apt update && apt -y install zabbix-agent
root@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.conf #配置agentServer=10.0.0.161
root@ubuntu-test2:~# systemctl enable --now zabbix-agent.service
root@ubuntu-test1:/etc/zabbix# zabbix_get -s 10.0.0.162 -p 10050 -k "agent.ping" #运行命令测试agent是否正常,若返回结果是1代表agent配置正常
1#在web端创建主机接入被监控端服务器
二、Zabbix主动模式与被动模式实现
2.1,基本概念
所有模式均是相对Zabbix Agent的角度来定义
主动模式:Agent 端请求 Server 端获取主动的监控项列表,并主动将需检测的监控项内参数上传至Server端。该模式需要在Agent端进行配置,可监控主机2000-5000台。
被动模式:Server 端向 Agent 端请求获取监控项的数据,Agent端才会返回数据。(此为默认工作模式)该模式配置简单,但是会加重Server负载,一台Server只能监控500台以下的主机。
两种模式可以在Zabbix Server 上同时存在 , 可以将一部分监控项设为主动 , 其它设为被动模式。
2.2,被动模式
被动模式流程:
Server打开TCP连接
Server发送单个请求
Agent接受请求并响应
Server处理接收的数据
关闭TCP连接
没获取一个监控项都需要打开一个TCP连接
2.3,主动模式
主动模式流程:
Agent主动打开TCP连接
Agent请求监控项
Server返回监控项
Agent处理响应
关闭TCP连接
Agent查询数据
Agent建立TCP连接
Agent批量返回监控项数据
Server处理数据并返回响应状态
关闭TCP连接
#主动模式实现
root@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.conf #修改Agent的配置
Server=10.0.0.161
ServerActive=10.0.0.161 #主动模式,指向Server的IP
Hostname=ubuntu-test2 #此项必须与Server中设置的主机名相同
Timeout=30root@ubuntu-test2:~# systemctl restart zabbix-agent.service
root@ubuntu-test2:~# tail /var/log/zabbix/zabbix_agentd.log #查看日志
6671:20240909:103016.281 IPv6 support: YES
6671:20240909:103016.281 TLS support: YES
6671:20240909:103016.281 **************************
6671:20240909:103016.281 using configuration file: /etc/zabbix/zabbix_agentd.conf
6671:20240909:103016.294 agent #0 started [main process]
6675:20240909:103016.299 agent #4 started [listener #3]
6674:20240909:103016.299 agent #3 started [listener #2]
6676:20240909:103016.300 agent #5 started [active checks #1]
6672:20240909:103016.306 agent #1 started [collector]
6673:20240909:103016.308 agent #2 started [listener #1]#在web端修改关联的agent模板为主动模式
三、自定义监控报警
3.1,使用内置模板监控Zabbix主机
#监控Nginx服务,先在web端查询内置是否有相应模板以及状态页路径信息
root@ubuntu-test1:~# vim /etc/nginx/sites-enabled/default #在被控端添加Nginx状态页
location /basic_status {
stub_status;
}
root@ubuntu-test1:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@ubuntu-test1:~# systemctl reload nginx.service#在web端添加Nginx监控模板
#在web端可查看到监控项数值
#监控php服务,先在web端查询内置有相应模板且状态页与php默认路径一致
root@ubuntu-test1:~# vim /etc/php/7.4/fpm/pool.d/www.conf
pm.status_path=/status
ping.path=/pinglisten = /run/php/php7.4-fpm.sock
root@ubuntu-test1:~# vim /etc/nginx/sites-enabled/default
location ~ \.php$|/status|/ping {
root /var/www/html;
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
root@ubuntu-test1:~# systemctl restart nginx.service php7.4-fpm.service
#在web端添加监控模板,并查看监控数据
3.2,自定义模板
1,创建监控模板
2,创建监控项、图形、触发器
#在被控端agent内配置自定义监控项
#利用zabbix内置的标准检测器定义监控项
#为目标添加触发器,同时为触发器命名、划分严重性并配置表达式
#在模板可新建值映射便于展示
#创建图形
3,为需要监控的主机关联模板
4,不依靠zabbix内置的标准检测器,完全自定义监控项
#在被监控端的zabbix-agent内自定义监控项
root@ubuntu-test2:~# df #查看磁盘利用率
Filesystem 1K-blocks Used Available Use% Mounted on
udev 946388 0 946388 0% /dev
tmpfs 198632 1236 197396 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 19430032 5613716 12803992 31% /
tmpfs 993152 0 993152 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 993152 0 993152 0% /sys/fs/cgroup
/dev/loop1 65536 65536 0 100% /snap/core20/2318
/dev/loop0 64896 64896 0 100% /snap/core20/1828
/dev/loop5 94208 94208 0 100% /snap/lxd/29619
/dev/loop3 39808 39808 0 100% /snap/snapd/21759
/dev/loop4 94080 94080 0 100% /snap/lxd/24061
/dev/loop2 51072 51072 0 100% /snap/snapd/18357
/dev/sda2 1992552 215264 1656048 12% /boot
tmpfs 198628 0 198628 0% /run/user/0
root@ubuntu-test2:~# df|awk -F' +|%' '$7=="/boot"{print $5}' #取出boot分区使用率
12
root@ubuntu-test2:~# df|awk -F' +|%' '$7=="/"{print $5}' #取出根分区使用率
31root@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.conf #可在主配置文件内添加监控项(不建议)
root@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.d/disk-monitor.conf #创建新的子配置文件添加监控项UserParameter=root_df,df|awk -F' +|%' '$7=="/"{print $5}'
root@ubuntu-test2:~# zabbix_agentd -t root_df #测试监控项
root_df [t|31]
root@ubuntu-test2:~# systemctl restart zabbix-agent.service #重启代理服务root@ubuntu-test1:~# zabbix_get -s 10.0.0.162 -p 10050 -k "root_df" #在服务器端测试
31#在web端添加监控项至模板
5,优化自定义监控项
root@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.d/disk-monitor.sh #编写取监控值脚本
#!/bin/bash
df|awk -v partition=$1 -F' +|%' '$7==partition{print $5}'root@ubuntu-test2:~# bash /etc/zabbix/zabbix_agentd.d/disk-monitor.sh /
32
root@ubuntu-test2:~# chmod +x /etc/zabbix/zabbix_agentd.d/disk-monitor.shroot@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.d/disk-monitor.conf #添加自定义监控项配置文件
UserParameter=df[*],/etc/zabbix/zabbix_agentd.d/disk-monitor.sh $1
root@ubuntu-test2:~# systemctl restart zabbix-agent.service
root@ubuntu-test2:~# zabbix_agentd -t df[/] #被监测端测试监控项
df[/] [t|32]
root@ubuntu-test1:~# zabbix_get -s 10.0.0.162 -k 'df[/]' #监测端测试监控项
32
#在web端添加监控项即可6,同理可对TCP十一种有限状态机添加监控
root@ubuntu-test2:~# netstat -nat | awk '$NF ~ "ESTABLISHED"{state[$NF]++}END{for(i in state){print state[i]}}' #取ESTABLISHED连接数
2root@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.d/disk-monitor.conf
UserParameter=tcp_status[*],/etc/zabbix/zabbix_agentd.d/tcp-monitor.sh $1
root@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.d/tcp-monitor.sh
#!/bin/bash
netstat -nat | awk -v status=$1 '$NF ~ status{state[$NF]++}END{for(i in state){print state[i]}}'
root@ubuntu-test2:~# chmod +x /etc/zabbix/zabbix_agentd.d/tcp-monitor.sh
root@ubuntu-test2:~# systemctl restart zabbix-agent.service
root@ubuntu-test2:~# zabbix_agentd -t tcp_status[LISTEN]
tcp_status[LISTEN] [t|9]
root@ubuntu-test2:~# zabbix_agentd -t tcp_status[ESTABLISHED]
tcp_status[ESTABLISHED] [t|2]#在web端添加监控项
Java服务监控:
Zabbix不支持直接监控Java服务,需要使用Java-Gateway做代理(Java服务需要提前开启JMX功能才能被监控)
#在ubuntu-test3安装tomcat服务后,开启JMX
root@ubuntu-test3:~# catalina.sh version #tomcat安装步骤请参考往期
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Server version: Apache Tomcat/9.0.75
Server built: May 4 2023 13:04:05 UTC
Server number: 9.0.75.0
OS Name: Linux
OS Version: 5.4.0-182-generic
Architecture: amd64
JVM Version: 1.8.0_371-b11
JVM Vendor: Oracle Corporationroot@ubuntu-test3:~# vim /usr/local/tomcat/bin/catalina.sh #在文件内添加下列参数开启JMX功能
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.0.0.163 -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
root@ubuntu-test3:~# systemctl restart tomcat.service
root@ubuntu-test3:~# ss -ntl|grep 12345 #验证JMX端口开放
LISTEN 0 50 *:12345 *:*#部署Java-Gateway,默认端口为10052(需要安装JDK,可单独部署,也可与zabbix server或agent共用服务器)
root@ubuntu-test3:~# rsync -a /etc/apt/sources.list.d/ 10.0.0.161:/etc/apt/sources.list.d/zabbix.list #复制zabbix软件源
root@ubuntu-test3:~# apt update
root@ubuntu-test3:~# apt -y install zabbix-java-gateway #包安装Java网关
root@ubuntu-test3:~# systemctl restart zabbix-java-gateway.service
root@ubuntu-test1:~# vim /etc/zabbix/zabbix_server.conf #配置监控端连接Java网关端口JavaGateway=10.0.0.163
JavaGatewayPort=10052
StartJavaPollers=10
root@ubuntu-test1:~# systemctl restart zabbix-server.service#在web端为服务添加监控
SNMP:
简单网络管理协议,属于TCP/IP 五层协议中的应用 层协议,用于网络管理的协议,SNMP 主要用于网络设备的管理。
#在被监控端配置SNMP协议
root@ubuntu-test3:~# apt -y install snmpd #安装snmp服务
root@ubuntu-test3:~# vim /etc/snmp/snmpd.conf #配置snmp服务agentaddress 0.0.0.0
view systemonly included .1
root@ubuntu-test3:~# systemctl restart snmpd.service#在web端配置SNMP监控项
#团体名必须和被监控端保持一致
3.3,启动监控报警
#配置触发器
#设置前端告警
#手动触发磁盘分区利用率告警
root@ubuntu-test2:~# dd if=/dev/zero of=/boot/a.img bs=1500M count=1
#手动清除数据解决问题后,告警消失
root@ubuntu-test2:~# rm -f /boot/a.img
#配置邮件报警(需要提前开启邮箱的SMTP/POP3功能)
#为服务器配置发件端
#可在消息模板内添加内置消息,或如下图对模板进行修改
#为服务器配置收件端
#定义动作
四、Zabbix proxy主动及被动案例
4.1,Zabbix proxy基本概念
Zabbix作为一个分布式监控系统,支持通过代理(proxy)收集zabbix agent的监控数据,然后由Zabbix proxy再把数据发送给zabbix server,从而降低了数据的采集时间、也相应的增加了监控能力,尤其是是多机房或多云环境时避免跨网段监控告警不及时。
与Zabbix Server不同,Zabbix proxy只执行数据收集,不运行触发器,无处理事件,也不发送告警,无Web管理界面,所以最终导致告警延时可能会比较长
所有模式均是相对Zabbix proxy的角度来定义
主动模式:Zabbix proxy主动的向Server周期性的申请获取Agent的监控项信息,该模式可大幅度降低Server的负载压力。
被动模式:Zabbix proxy被动的等待Server的连接,并接受Server发送的监控项指令,然后再由向Zabbix proxy向Agent端发起请求获取数据。
Zabbix proxy的主、被动模式与Agent的主、被动模式没有关系。
4.2,Zabbix proxy安装和配置
#通过官方链接获取镜像仓库文件
root@ubuntu-test3:~# wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu20.04_all.deb
root@ubuntu-test3:~# dpkg -i zabbix-release_6.0-4+ubuntu20.04_all.debroot@ubuntu-test3:~# sed -i.bak 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#' /etc/apt/sources.list.d/zabbix.list
root@ubuntu-test3:~# apt update
root@ubuntu-test3:~# apt -y install zabbix-proxy-mysql zabbix-sql-scripts #安装proxy组件
root@ubuntu-test3:~# apt -y install mysql-server
root@ubuntu-test3:~# systemctl enable --now mysql.serviceroot@ubuntu-test3:~# mysql
mysql> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
mysql> create user proxy@'10.0.0.%' identified with mysql_native_password by '123456';
mysql> grant all on zabbix_proxy.* to proxy@'10.0.0.%';
mysql> set global log_bin_trust_function_creators = 1;
mysql> \qroot@ubuntu-test3:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address = 127.0.0.1
#mysqlx-bind-address = 127.0.0.1
root@ubuntu-test3:~# systemctl restart mysql.serviceroot@ubuntu-test3:~# cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uproxy -p123456 -h10.0.0.163 zabbix_proxy
root@ubuntu-test3:~# vim /etc/zabbix/zabbix_proxy.conf #配置proxy(主动模式)
ProxyMode=0 #主动模式为0,被动模式为1,默认为0
Server=10.0.0.161 #指向Zabbix Server的IP
Hostname=Zabbix-proxy-active #必须与web端proxy名称一致
DBHost=10.0.0.163 #数据库IP
DBName=zabbix_proxy #数据库名称
DBUser=proxy #数据库连接用户名
DBPassword=123456 #数据库连接用户密码root@ubuntu-test3:~# systemctl enable --now zabbix-proxy.service
#在web端添加proxyroot@ubuntu-test2:~# vim /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.163
#ServerActive=10.0.0.163
root@ubuntu-test2:~# systemctl restart zabbix-agent.service
#在web端创建新主机以proxy模式监控
五、Zabbix agent部署脚本
适用于ubuntu和redhat系列系统安装,需在脚本内提前配置安装的Zabbix Agent版本号(默认版本Zabbix-release-6.0-4)和Zabbix Server的IP地址
cat zabbix_agent_install.sh
#!/bin/bash
version_main=6.0 #主版本号
version_second=$version_main-4 #小版本号
IP=10.0.0.161 #Zabbix Server服务器IP
url=mirrors.aliyun.com/zabbix/zabbix
main()
{
. /etc/os-release
if [ $ID = "ubuntu" ];then
wget $url/$version_main/$ID/pool/main/z/zabbix-release/zabbix-release_$version_second+ubuntu${VERSION_ID}_all.deb
dpkg -i zabbix-release_$version_second+ubuntu${VERSION_ID}_all.deb
if [ $? -eq 0 ]; then
echo "apt is ok"
else
echo "apt is error"
exit
fi
apt update
apt -y install zabbix-agent
sed -i "s#^Server=.*#Server=$IP#" /etc/zabbix/zabbix_agentd.conf
systemctl enable --now zabbix-agent.service
elif [ $ID = "rocky" -o $ID = "centos" ];then
bb=`echo $REDHAT_SUPPORT_PRODUCT_VERSION|awk -F'.' '{print $1}'`
wget $url/$version_main/rhel/$bb/x86_64/zabbix-release-$version_second.el8.noarch.rpm
rpm -Uvh zabbix-release-$version_second.el8.noarch.rpm
if [ $? -eq 0 ]; then
echo "yum is ok"
else
echo "yum is error"
exit
fi
yum updateinfo
yum -y install zabbix-agent
sed -i "s#^Server=.*#Server=$IP#" /etc/zabbix_agentd.conf
systemctl enable --now zabbix-agent.service
else
echo "the os-system is not support"
fi
}
main
六、构建granfana大盘
#下载官网安装包至本地执行安装
root@ubuntu-test2:~# ls
grafana-enterprise_9.5.2_amd64.deb snap
root@ubuntu-test2:~# dpkg -i grafana-enterprise_9.5.2_amd64.deb #包安装
root@ubuntu-test2:~# systemctl enable --now grafana-server.service #启动服务root@ubuntu-test2:~# ss -ntlp | grep 3000
LISTEN 0 4096 *:3000 *:* users:(("grafana",pid=274939,fd=11))#在浏览器访问IP:3000登录web页面,初始账号密码均为admin
#安装需要的插件
root@ubuntu-test2:~# grafana-cli plugins list-remote #列出可安装的插件及最新版本
root@ubuntu-test2:~# grafana-cli plugins list-remote|grep zabbix
id: alexanderzobnin-zabbix-app version: 4.5.3
root@ubuntu-test2:~# grafana-cli plugins install alexanderzobnin-zabbix-app #安装插件
root@ubuntu-test2:~# ll /var/lib/grafana/plugins/ #插件的默认路径,可解压插件文件至该目录代替网络安装
total 12
drwxr-xr-x 3 root root 4096 Sep 13 10:08 ./
drwxr-xr-x 6 grafana grafana 4096 Sep 13 10:08 ../
drwxr-xr-x 6 root root 4096 Sep 13 10:08 alexanderzobnin-zabbix-app/
root@ubuntu-test2:~# grafana-cli plugins ls #列出已安装的插件
installed plugins:
alexanderzobnin-zabbix-app @ 4.5.3#在web端可启用插件安装情况
root@ubuntu-test2:~# systemctl restart grafana-server.service
#添加Zabbix数据源并输入Zabbix服务器管理账号密码(如果使用apache,那url需改为http://zabbix.wlm.com/zabbix/api_jsonrpc.php)
#导入官网Grafana模板
#导入模板的json文件或模板ID,如5363