·一.zabbix监控重要性
1.什么是监控
对我们的操作系统进行不间断的监控
2.为什么要监控
软件生命周期中非常重要的一个环节
能够做到事前告警,事后我们还可以根据监控内容排查问题
企业: 销售人员需求--->开发写代码-->测试代码-->运维-->部署操作系统-->安装服务优化服务运行服务-->日志处理日志分析--->交付(用户 自己的团队 测试) --如果监控不到位导致恶性循环-->最终导致项目流产-->公司倒闭 资金链断裂
运维 不受重视(不懂运维) 1-2个运维-->开发部门总监-->导致运维部门无规范
运维制定流程、制定规范! 架构师
开发经理 开发压力大 写出好的产品? 代码债务。
运维经理 员工-->监控 运维债务
开公司: 销售+技术总监(架构师) 10个项目
金丝雀 监控指标
在有问题的时候 运维(管理) 运维债务
3.如何去监控监控什么内容:
监控硬件 磁盘 df -h 内存 free 磁盘IO 负载 CPU 网络
软件服务 端口 进程 状态
业务层面 业务数据进行数据 自定义监控 订单量 注册用户 充值用户 日志中 数据库中体现
业务之间接口调用监控 curl
4.监控有哪些工具
zabbix 硬件 服务状态 自定义监控(万物皆可监控)
Nagions 网络产品 交换机 路由器
Cacti 流量
OPen-Falcon 小米公司 互联网自研监控产品
prometheus kubernetes docker
监控宝等
二.zabbix平台架构
基于LNMP平台 Linux Nginx MySQL PHP
zabbix端口
zabbix服务端: 10.0.0.71 端口10051
zabbix_proxy: 10.0.0.7 端口10051
java_gateway: 10.0.0.7 端口10052
zabbix_agent: 10.0.0.7 10.0.0.8 端口10050
三.zabbix安装部署
1.安装部署mysql
1.下载mysql8.0版本
[root@zabbix:~]#wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-1.el8.x86_64.rpm-bundle.tar
2.解压数据库
[root@zabbix:~]#tar xf mysql-8.0.36-1.el8.x86_64.rpm-bundle.tar
3.rpm安装
[root@zabbix ~]# rpm -ivh mysql-community-common-8.0.36-1.el8.x86_64.rpm
[root@zabbix ~]# rpm -ivh mysql-community-client-plugins-8.0.36-1.el8.x86_64.rpm
[root@zabbix ~]# rpm -ivh mysql-community-libs-8.0.36-1.el8.x86_64.rpm
[root@zabbix ~]# rpm -ivh mysql-community-client-8.0.36-1.el8.x86_64.rpm
[root@zabbix ~]# rpm -ivh mysql-community-icu-data-files-8.0.36-1.el8.x86_64.rpm
[root@zabbix ~]# rpm -ivh mysql-community-devel-8.0.36-1.el8.x86_64.rpm
[root@zabbix ~]# rpm -ivh mysql-community-server-8.0.36-1.el8.x86_64.rpm
4.启动数据库
[root@zabbix ~]# systemctl start mysqld
5.进入数据库修改密码
查看随机生成的密码
[root@zabbix:~]#cat /var/log/mysqld.log |grep root@local
2024-09-23T02:33:31.213883Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Kfbi5aJupw<k
修改密码:
[root@zabbix:~]#mysql -uroot -p'Kfbi5aJupw<k'
mysql> alter user root@localhost identified by 'Oldboy123.com';
6.创建zabbix库
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user 'zabbix'@'localhost' identified by 'Oldboy123.com';
mysql> ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Oldboy123.com';
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
Query OK, 0 rows affected (0.00 sec)
清理mysql安装包
[root@zabbix:~]#rm -rf mysql-*
7.下载zabbix的源码包,将sql数据导入到zabbix库中
[root@zabbix:~]#wget https://cdn.zabbix.com/zabbix/sources/oldstable/5.0/zabbix-5.0.47.tar.gz
解压zabbix源码
[root@zabbix ~]# ll
总用量 21616
-rw-r--r-- 1 root root 22132982 5月 20 2025 zabbix-5.0.47.tar.gz
[root@zabbix ~]# tar xf zabbix-5.0.47.tar.gz
进入源码目录
[root@zabbix ~]# cd zabbix-5.0.47/
[root@zabbix zabbix-5.0.47]# cd database/mysql/
[root@zabbix mysql]# ll
总用量 17008
-rw-r--r-- 1 test test 15252182 5月 20 2025 data.sql
-rw-r--r-- 1 test test 282 5月 20 2025 double.sql
-rw-r--r-- 1 test test 1978341 5月 19 2025 images.sql
-rw-r--r-- 1 test test 482 5月 20 2025 Makefile.am
-rw-r--r-- 1 test test 15936 5月 20 2025 Makefile.in
-rw-r--r-- 1 test test 156294 5月 20 2025 schema.sql
需要将schema.sql images.sql data.sql导入zabbix库
[root@zabbix:mysql]#mysql -uzabbix -p'Oldboy123.com' zabbix < schema.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@zabbix:mysql]#mysql -uzabbix -p'Oldboy123.com' zabbix < images.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@zabbix:mysql]#mysql -uzabbix -p'Oldboy123.com' zabbix < data.sql
2.安装部署php服务
1.安装php服务
[root@zabbix:~]# yum -y install php php-bcmath php-cli php-common php-devel php-embedded php-fpm php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-process php-xml php-json php-ldap
2.修改监听方式为端口
[root@zabbix ~]# grep -n 9000 /etc/php-fpm.d/www.conf
39:listen = 127.0.0.1:9000
3.启动加入开机自启
[root@zabbix:~]#systemctl start php-fpm
[root@zabbix:~]#systemctl enable php-fpm
4.查看是否启动
[root@zabbix:~]#netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 875/sshd: /usr/sbin
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3702/php-fpm: maste
tcp6 0 0 :::22 :::* LISTEN 875/sshd: /usr/sbin
3.安装部署Nginx服务
1.配置Nginx仓库
[root@zabbix:~]#cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
2.安装nginx服务
[root@zabbix:~]#yum -y install nginx
3.配置Nginx服务
[root@zabbix:conf.d]#cat default.conf
server {
listen 80;
server_name _;
root /code;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@zabbix:conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4.启动nginx并开机自启
[root@zabbix:conf.d]#systemctl start nginx
[root@zabbix:conf.d]#systemctl enable nginx
检查9000 3306 80端口
[root@zabbix:conf.d]#netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 875/sshd: /usr/sbin
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3702/php-fpm: maste
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3996/nginx: master
tcp6 0 0 :::22 :::* LISTEN 875/sshd: /usr/sbin
tcp6 0 0 :::33060 :::* LISTEN 2698/mysqld
5.将代码文件拷贝到/code目录
[root@zabbix:conf.d]#mkdir /code
[root@zabbix:conf.d]#cd /code/
拷贝源码中的前端页面代码到/code目录
[root@zabbix:code]#cp -r /root/zabbix-5.0.43/ui/* .
[root@zabbix:code]#ls
[root@zabbix:~]#chown -R apache.apache /code/
统一用户php和nginx都使用apache运行
[root@zabbix:code]#grep apache /etc/nginx/nginx.conf
user apache;
[root@zabbix:code]#systemctl restart nginx
4.编译zabbix服务
1.进入源码目录
[root@zabbix:~]#cd zabbix-5.0.43/
[root@zabbix:zabbix-5.0.43]#
2.安装依赖包
[root@zabbix:zabbix-5.0.43]#yum -y install libxml2 libxml2-devel net-snmp-devel curl-devel libevent-devel
3.配置zabbix
[root@zabbix:zabbix-5.0.43]#./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
4.编译
[root@zabbix:zabbix-5.0.43]# make
5.安装
[root@zabbix:zabbix-5.0.43]# make install
6.完成后检查 在命令行输入zabbix tab键 检查
[root@zabbix:~]#zabbix_
zabbix_agentd zabbix_get zabbix_js zabbix_sender zabbix_server
7.配置zabbix连接数据库信息
[root@zabbix:~]#grep -n ^DB /usr/local/etc/zabbix_server.conf
94:DBName=zabbix
110:DBUser=zabbix
118:DBPassword=Oldboy123.com
8.创建启动虚拟用户zabbix
[root@zabbix:~]#useradd zabbix
9.启动
zabbix_server # 启动服务端
zabbix_agentd # 启动客户端
编写systemctl运行zabbix
[root@zabbix:~]#cat /usr/lib/systemd/system/zabbix.service
[Unit]
Description=Zabbix server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/sbin/zabbix_server
ExecStop=/usr/local/sbin/zabbix_server stop
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
重新加载配置
[root@zabbix:~]#systemctl daemon-reload
[root@zabbix:~]#systemctl start zabbix
[root@zabbix:~]#systemctl enable zabbix
检查端口
[root@zabbix:~]#netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 875/sshd: /usr/sbin
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 15573/zabbix_server
5.界面安装部署
1.修改PHP默认的配置

[root@zabbix:~]#egrep -n "post_max_size|max_execution_time|max_input_time|timezone" /etc/php.ini|grep -v ';'
383:max_execution_time = 300
393:max_input_time = 300
672:post_max_size = 16M
902:date.timezone = Asia/ShangHai
测试PHP
[root@zabbix:~]#php-fpm -t
[23-Sep-2024 11:23:38] NOTICE: configuration file /etc/php-fpm.conf test is successful
重启PHP服务
[root@zabbix:~]#systemctl restart php-fpm



四.zabbix界面配置
1.修改语言为中文


2.修改默认的字体
[root@zabbix:~]#cd /code/assets/fonts/
[root@zabbix:fonts]#ll
total 740
-rw-r--r-- 1 apache apache 756072 Sep 23 10:51 DejaVuSans.ttf
将windows的字体上传到当前目录修改名称
C:\Windows\fonts\目录下
[root@zabbix:fonts]#mv DejaVuSans.ttf DejaVuSans.ttf.bak
[root@zabbix:fonts]#mv STXINWEI.TTF DejaVuSans.ttf
[root@zabbix:fonts]#ll
total 4700
-rw-r--r-- 1 root root 4051204 Jun 13 19:10 DejaVuSans.ttf
-rw-r--r-- 1 apache apache 756072 Sep 23 10:51 DejaVuSans.ttf.bak
刷新页面检查字体

五.监控zabbix服务器本身
1.安装客户端zabbix-agent 默认已经编译
2.启动客户端
[root@zabbix:~]#zabbix_agentd
六.监控客户端
1.准备客户端10.0.0.7
2.安装zabbix-agent客户端 Kylin系统直接安装(其他操作 部署YUM仓库)
[root@web01:~]#yum -y install zabbix-agent
3.配置zabbix客户端配置文件指向服务端10.0.0.71
[root@web01:~]#grep -n ^Server /etc/zabbix_agentd.conf
115:Server=172.16.1.71
4.启动zabbix客户端
[root@web01:~]#systemctl start zabbix-agent
[root@web01:~]#systemctl enable zabbix-agent
5.zabbix页面配置添加监控的主机


1.添加一台主机

2.主机配置完成后添加模版

最后点击添加

七.日志位置
服务端日志: /tmp/zabbix_server.log
客户端yum安装: /var/log/zabbix/zabbix_agentd.log
变绿说明成功

八.zabbix自定义监控
1.自定义监控流程:
1.取值
2.配置到客户端的配置文件中 zabbix-agent.conf
3.在zabbix服务端取值测试
4.将自定义的key添加到zabbix页面进行监控
#面试题 自定义监控的流程
1.取值
uptime|awk '{print $(NF-6)}'
2.写入客户端的配置文件
[root@web01:~]#vim /etc/zabbix_agentd.conf
[root@web01:~]#grep user_login /etc/zabbix_agentd.conf
UserParameter=user_login,uptime|awk '{print $(NF-6)}'
先在客户端命令执行
zabbix-agent -p 查看自定义的值
3.重启客户端生效
[root@web01:~]#systemctl restart zabbix-agent
4.服务端检查自定义key值是否取值成功
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k user_login
3
5.添加到zabbix界面


自定义取值可以使用include方式将自定key单独存放.conf的配置文件中
1.修改客户端的配置文件
[root@web01:zabbix_agentd.conf.d]#sed -n '314p' /etc/zabbix_agentd.conf
Include=/etc/zabbix_agentd.conf.d/*.conf
创建存放conf的路径
mkdir /etc/zabbix_agentd.conf.d/
2.创建新的文件自定义key
[root@web01:zabbix_agentd.conf.d]#pwd
/etc/zabbix_agentd.conf.d
[root@web01:zabbix_agentd.conf.d]#cat os.conf
UserParameter=user_login,uptime|awk '{print $(NF-6)}'
2.自定义监控端口是否存在
客户端配置:
[root@web01:~]#cat /etc/zabbix_agentd.conf.d/os.conf
UserParameter=user_login,uptime|awk '{print $(NF-6)}'
UserParameter=ssh_port,netstat -tnulp|grep 22|grep -w tcp|wc -l
[root@web01:~]#systemctl restart zabbix-agent
[root@web01:~]#zabbix_agentd -p|grep ssh_port
ssh_port [t|1]
授权netstat命令s权限
[root@web01:~]#chmod u+s /usr/bin/netstat
服务端测试获取key值:
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k ssh_port
1
页面进行自定义监控项添加

3.自定义映射值



查看映射值:

4.使用系统自带的监控项监控端口

4.自定义监控内存使用率
[root@web01:zabbix_agentd.conf.d]#cat os.conf
UserParameter=user_login,uptime|awk '{print $(NF-6)}'
UserParameter=ssh_port,netstat -tnulp|grep 22|grep -w tcp|wc -l
UserParameter=free_use,free|awk 'NR==2{print $3/$2*100}'
重启客户端
[root@web01:zabbix_agentd.conf.d]#systemctl restart zabbix-agent
服务端测试取值
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k free_use
30.36
zabbix页面添加

监控web01
监控web02
自定义监控
用登录数
系统负载
内存使用率
磁盘使用率
SSH端口
nginx端口
网络不通
文件被篡改 1.txt
监控网站首页是否正常(页面内容 状态码... curl接口返回状态)
九.设置触发器
1.设置用户登录数超过2个则告警通知,默认告警到zabbix界面上。


2.设置内存超过40%告警(实际工作中80%)

压力测试内存
ab -n800000 -c200 http://127.0.0.1/index.php
3.设置联合告警
用户登录个数超过3,内存百分比超过30,同时成立则告警。

十.配置邮件告警
1.配置告警媒介


2.配置动作



3.配置收件人
zabbix默认将告警发送到zabbix群组,群组中默认一个用户admin用户
配置admin用户的接收信息的方式


4.配置自定义告警模版

默认标题:
故障: {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}
5.配置远程执行命令
先监听nginx端口


配置sudo提权
[root@web01:~]#grep zabbix /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL
客户端开启远程执行命令功能
[root@web01:~]#grep -n ^EnableRemoteCommand /etc/zabbix_agentd.conf
91:EnableRemoteCommands=1
[root@web01:~]#systemctl restart zabbix-agent
配置远程执行命令
动作触发器选择Nginx端口

操作具体执行的流程


配置事件通知升级过程

十一.配置企业微信告警
1.注册企业微信 注册流程







2.下载weixin python告警脚本
QQ群搜索weixin.py下载,然后上传到zabbix服务端
[root@zabbix:~]#ll
-rw-r--r-- 1 root root 1364 Sep 24 15:09 weixin.py
修改weixin.py中的三个参数
vim weixin.py
...
corpid='ww4f16cdc27c1a64234'
appsecret='xxx'
agentid=1000002
...
安装python2版本
[root@zabbix:~]#yum -y install python2
安装python2-pip # 用来安装python依赖
[root@zabbix:~]#yum -y install python2-pip
安装运行python脚本的依赖
[root@zabbix:~]#pip2.7 install requests
3.在企业平台创建的zabbix应用中管理接口
设置可信域名

下载验证文件,将文件上传到站点根目录下

添加当前出口的公网IP地址(zabibix服务器的公网IP地址)



测试脚本:
[root@zabbix:~]#python2.7 weixin.py "ZhaoJunJie" "下雨了" "回家开车"

4.集成到zabbix页面中
将脚本移动到固定的目录
[root@zabbix:~]#mv weixin.py /usr/local/share/zabbix/alertscripts/
[root@zabbix:~]#ll /usr/local/share/zabbix/alertscripts/
total 4
-rw-r--r-- 1 root root 1355 Sep 24 15:45 weixin.py
[root@zabbix:~]#chmod +x /usr/local/share/zabbix/alertscripts/weixin.py
[root@zabbix:~]#ll /usr/local/share/zabbix/alertscripts/weixin.py
-rwxr-xr-x 1 root root 1355 Sep 24 15:45 /usr/local/share/zabbix/alertscripts/weixin.py
[root@zabbix:~]#chown zabbix.zabbix /tmp/weixin.log
[root@zabbix:~]#ll /tmp/weixin.log
-rw-r--r-- 1 zabbix zabbix 5424 Sep 24 15:46 /tmp/weixin.log
创建媒介类型

{ALERT.SENDTO} #发给谁
{ALERT.SUBJECT} #报警标题
{ALERT.MESSAGE} #报警内容

自定义告警内容

动作配置:


注意事项: 发送给客户端消息配置: 两种方式
第一种方式 使用媒介中的模版

第二种方式 在动作中自定义消息

十二.自定义图形
1.登录数监控创建图形


查看图形

2.内存使用百分比创建图形


3.在一张图片上显示多个监控项


4.聚合图形
将多个表集成到一张图






5.创建幻灯片



十三. 自定义模版
将Nginx七种状态作为模版
1.nginx配置七种状态
[root@web01:conf.d]#cat wordpress.conf
server {
listen 80;
server_name www.wp.com;
root /code/wp;
location / {
index index.php index.html;
}
location /nginx_status {
stub_status;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#fastcgi_param HTTPS on;
}
}
[root@web01:conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01:conf.d]#systemctl restart nginx
[root@web01:conf.d]#curl 127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
2.自定义取值
[root@web01:zabbix_agentd.conf.d]#cat nginx.conf
UserParameter=nginx_ac,curl -s 127.0.0.1/nginx_status|awk 'NR==1{print $NF}'
UserParameter=nginx_acc,curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $1}'
UserParameter=nginx_ha,curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $2}'
UserParameter=nginx_re,curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $3}'
[root@web01:zabbix_agentd.conf.d]#systemctl restart zabbix-agent
服务端测试:
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k nginx_ac
1
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k nginx_acc
11
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k nginx_re
12
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k nginx_ha
13


创建模版监控项和主机还没有进行关联


后面再进行创建监控项 直接克隆前面的即可。




创建了5个监控项



关联自定义的模版

查看关联后的图形

3.web02关联nginx模版
1.安装zabbix客户端
[root@web02:~]#yum -y install zabbix-agent
2.配置文件指向服务端
[root@web02:~]#grep 172.16.1.71 /etc/zabbix_agentd.conf
Server=172.16.1.71
3.配置nginx状态
[root@web02:conf.d]#cat wordpress.conf
server {
listen 80;
server_name www.wp.com;
root /code/wp;
location / {
index index.php index.html;
}
location /nginx_status {
stub_status;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#fastcgi_param HTTPS on;
}
}
[root@web02:conf.d]#systemctl restart nginx
[root@web02:conf.d]#curl 127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
4.将web01的自定义key拷贝到web02
[root@web02:conf.d]#ll /etc/zabbix_agentd.conf.d/
total 8
-rw-r--r-- 1 root root 306 Sep 25 10:40 nginx.conf
-rw-r--r-- 1 root root 176 Sep 25 10:40 os.conf
开启include配置
[root@web02:conf.d]#sed -n '314p' /etc/zabbix_agentd.conf
Include=/etc/zabbix_agentd.conf.d/*.conf
5.重启zabbix客户端
[root@web02:conf.d]#systemctl restart zabbix-agent
6.监控主机并且关联模版

关联模版


4.监控PHP状态信息
[root@web01:~]#sed -n '240p' /etc/php-fpm.d/www.conf
pm.status_path = /status
[root@web01:~]#php-fpm -t
[25-Sep-2024 11:15:49] NOTICE: configuration file /etc/php-fpm.conf test is successful
[root@web01:~]#systemctl restart php-fpm
配置nginx
[root@web01:conf.d]#cat wordpress.conf
server {
listen 80;
server_name www.wp.com;
root /code/wp;
location / {
index index.php index.html;
}
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;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#fastcgi_param HTTPS on;
}
}
[root@web01:conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01:conf.d]#systemctl restart nginx
测试取值:
curl 127.0.0.1/status
自定义取值
[root@web01:zabbix_agentd.conf.d]#cat php.conf
UserParameter=php_idle,curl -s 127.0.0.1/status|awk '/^idle/{print $NF}'
UserParameter=php_ac,curl -s 127.0.0.1/status|awk '/^active/{print $NF}'
UserParameter=php_max,curl -s 127.0.0.1/status|awk 'NR==12{print $NF}'
UserParameter=php_chil,curl -s 127.0.0.1/status|awk 'NR==13{print $NF}'
[root@web01:zabbix_agentd.conf.d]#systemctl restart zabbix-agent
服务端测试
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k php_idle
4
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k php_ac
1
创建PHP模版


后面监控项使用克隆的方式创建
…

触发器配置

图形配置

关联到WEB01

十四.使用脚本方式自定义监控项
1.使用case脚本传参的方式获取七种状态
[root@web01:~]#mv nginx.sh /etc/zabbix_agentd.conf.d/
[root@web01:~]#cat /etc/zabbix_agentd.conf.d/nginx.sh
#!/bin/sh
case $1 in
active)
curl -s 127.0.0.1/nginx_status|awk 'NR==1{print $NF}'
;;
accepts)
curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $1}'
;;
handled)
curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $2}'
;;
requests)
curl -s 127.0.0.1/nginx_status|awk 'NR==3{print $3}'
;;
*)
echo "Usage: $0 [active|accepts|handled|requests]"
esac
2.给脚本执行权限
[root@web01:~]#chmod +x /etc/zabbix_agentd.conf.d/nginx.sh
[root@web01:~]#ll /etc/zabbix_agentd.conf.d/nginx.sh
-rwxr-xr-x 1 root root 356 Sep 25 11:41 /etc/zabbix_agentd.conf.d/nginx.sh
3.修改自定义key配置文件
[root@web01:zabbix_agentd.conf.d]#cat nginx.conf
UserParameter=nginx.[*],/etc/zabbix_agentd.conf.d/nginx.sh $1
重启失效
[root@web01:zabbix_agentd.conf.d]#systemctl restart zabbix-agent
4.服务端测试
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k nginx.[active]
1
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k nginx.[accepts]
10782
[root@zabbix:~]#zabbix_get -s 172.16.1.7 -k nginx.[handled]
10787
修改键值

十五.zabbix通过SNMP监控网络设备
SNMP
简单网络管理协议(SNMP-Simple Network Management Protocol)
SNMP的经常使用版本有三个:SNMPv1、SNMPv2、SNMPv3(SNMPv3是具备安全性的通讯协议)
SNMP被普遍应用在NMS网络管理系统中(Network Management System)。知名的NMS包括BMC的Patrol、CA的Unicenter、Sun Mangegement控制台、IBM的Tivoli Netview、以及全球著名的HP Openview。 NMS的目标是提供一个监控和管理全部开启SNMP功能的设备的单一入口。
SNMP协议经过UDP端口161和162进行通讯。
161端口:SNMP Message
162端口:SNMP Trap Meaasge
SNMP管理模型中有三个基本组成部分:管理站(Manager),被管代理(Agent)和管理信息库(MIB)。
被管代理(Agent)指的是用于跟踪监测被管理设备状态的特殊软件或硬件,每个代理都拥有自己本地的MIB。
被管代理(Agent)翻译来自管理站(Manager)的请求,验证操作的可执行性,通过直接与相应的功能实体(如网络设备)通信来执行信息处理任务,同时向管理站返回响应信息。
网络设备硬件信息表示方式两种:
OID表述方法 数字表示 .1.3.6.1.2.1.25.2.2.0 # 获取内存大小
MIB表示方法 字符串表示 hrMemorySize # 获取内存大小
OID和MIB大全
https://www.cnblogs.com/cqx6388/p/17235747.html

SNMP三种版本
SNMP v1 最早的SNMP协议 不支持加密算法
SNMP v2 兼容v1版本支持更多数据类型和错误代码 常用版本
SNMP v3 增加了认证和加密功能,避免非法访问 验证效率低
客户端安装snmp
[root@web01:~]#yum -y install net-snmp
修改配置
[root@web01:~]#sed -n '41p;55p;116p' /etc/snmp/snmpd.conf
com2sec notConfigUser default public # 团体名称 打开注视
view systemview included .1.
group notConfigGroup v2c notConfigUser
启动snmp 端口161
[root@web01:~]#systemctl start snmpd
[root@web01:~]#netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:161 0.0.0.0:* 1075095/snmpd
服务端安装snmp命令
-v 指定SNMP版本
2c 指定SNMP版本为V2
-c 指定团体名称
[root@zabbix ~]# yum -y install net-snmp-utils
[root@zabbix:~]#snmpwalk -v2c -c public 10.0.0.7 SysName
SNMPv2-MIB::sysName.0 = STRING: web01
[root@zabbix:~]#snmpwalk -v2c -c public 10.0.0.7 .1.3.6.1.2.1.25.2.2.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 970908 KBytes
[root@zabbix:~]#snmpwalk -v2c -c public 10.0.0.7 hrMemorySize
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 970908 KBytes
测试通过后,页面使用snmp协议监控



交换机配置SNMP协议以及团体名称
1. 进入配置模式:
Router#configure terminal
Enter configuration commands, one per line. End
with CNTL/Z.
Router(config)#
2. 使用以下命令启用只读 (RO) 社区字符串:
Router(config)#snmp-server community public RO
其中public是只读社区字符串。
Router(config)#exit
Router#
十六.zabbix自动化监控
1.zabbix自动发现
zabbix服务端通过扫描地址段的方式自动发现存活的服务器
发现服务器后进行动作处理 添加主机 关联模板 关联报警等
缺点1: 扫描速度慢 server压力较大
缺点2: 所有扫描到的客户端只能使用统一模板 比如web和数据库使用模板是不同的 还需要手动进行配置
第一步.将web01和web02主机删除
第二步.配置自动发现

第三步.配置动作


添加的条件,也可以IP地址段

发现上面的条件后具体做的动作


2.自动注册
客户端主动将自身信息上传给服务端用来减少服务端的压力
根据需求调整自动还是被动模式
zabbix服务端: 默认主动模式 我主动去抓取客户端的数据 10s
被动模式 等着客户端主动将数据提交给服务端
例如: 当服务器超过300-500+台以上
当网络较复杂的情况
当服务器配置一般的情况
修改模版监控项为主动上报模式
1.修改客户端的模式为主动模式
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=172.16.1.71 # 主动注册服务器地址
Hostname=web01 # 必须设置为主机名称
[root@web01 ~]# systemctl restart zabbix-agent
2.配置自动注册
注意: 先删除自动发现功能防止冲突

配置主机名称包含web字段

如果发现包含web字段的执行的操作是

监控文件是否被修改

触发器配置

作业: 监控自己网站页面是否正常
十七.修改监控项为主动上报模式

修改系统默认的模版为主动

十八.zabbix proxy代理



1.安装部署zabbix_proxy代理
1.下载mysql8.0版本
[root@web01:~]#wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-1.el8.x86_64.rpm-bundle.tar
2.解压数据库
[root@web01:~]#tar xf mysql-8.0.36-1.el8.x86_64.rpm-bundle.tar
3.rpm安装
[root@web01 ~]# rpm -ivh mysql-community-common-8.0.36-1.el8.x86_64.rpm
[root@web01 ~]# rpm -ivh mysql-community-client-plugins-8.0.36-1.el8.x86_64.rpm
[root@web01 ~]# rpm -ivh mysql-community-libs-8.0.36-1.el8.x86_64.rpm
[root@web01 ~]# rpm -ivh mysql-community-client-8.0.36-1.el8.x86_64.rpm
[root@web01 ~]# rpm -ivh mysql-community-icu-data-files-8.0.36-1.el8.x86_64.rpm
[root@web01 ~]# rpm -ivh mysql-community-devel-8.0.36-1.el8.x86_64.rpm
[root@web01 ~]# rpm -ivh mysql-community-server-8.0.36-1.el8.x86_64.rpm
4.启动数据库
[root@web01 ~]# systemctl start mysqld
5.进入数据库修改密码
查看随机生成的密码
[root@web01:~]#cat /var/log/mysqld.log |grep root@local
2024-09-23T02:33:31.213883Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Kfbi5aJupw<k
修改密码:
[root@web01:~]#mysql -uroot -p'Kfbi5aJupw<k'
mysql> alter user root@localhost identified by 'Oldboy123.com';
6.创建zabbix库
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user 'zabbix'@'localhost' identified by 'Oldboy123.com';
mysql> ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Oldboy123.com';
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
Query OK, 0 rows affected (0.00 sec)
7.下载zabbix源码 导入proxy库
[root@web01:~]#cd zabbix-5.0.43/database/mysql/
[root@web01:mysql]#mysql -uzabbix -pOldboy123.com zabbix < schema.sql
8.安装编译依赖
[root@web01:zabbix-5.0.43]#yum -y install libxml2 libxml2-devel net-snmp-devel curl-devel libevent-devel
配置
[root@web01:zabbix-5.0.43]#./configure --prefix=/usr/ --enable-proxy --with-net-snmp --with-mysql
编译并安装
[root@web01:zabbix-5.0.43]#make && make install
9.修改proxy配置文件连接数据库信息
[root@web01:~]#cd /usr/etc/
[root@web01:etc]#ll
total 24
-rw-r--r-- 1 root root 22677 Sep 26 10:48 zabbix_proxy.conf
drwxr-xr-x 2 root root 6 Sep 26 10:48 zabbix_proxy.conf.d
[root@web01:etc]#grep ^DB zabbix_proxy.conf
DBName=zabbix
DBUser=zabbix
DBPassword=Oldboy123.com
[root@web01:~]#egrep "10.0.0.71|sh_proxy" /usr/etc/zabbix_proxy.conf
Server=10.0.0.71
Hostname=sh_proxy
10.启动zabbix proxy
[root@web01:~]#netstat -tnulp
Active Internet connections (only servers)
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 1094428/zabbix_agen
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1272514/zabbix_prox
2.修改web02指定到代理服务器web01
[root@web02:~]#egrep '172.16.1.7|web02' /etc/zabbix_agentd.conf
Server=172.16.1.7
ServerActive=172.16.1.7
Hostname=web02
[root@web02:~]#systemctl restart zabbix-agent
3.zabbix界面添加proxy代理


4.通过proxy代理添加172.16.1.8

检查
十九.监控java程序
zabbix通过zabbix-java-gateway实现对java进行监控
监控java使用jmx协议
服务端: 10.0.0.71
zabbix-java-gateway: 10.0.0.7
tomcat: 10.0.0.8

1.WEB02部署Tomcat
1.安装jdk
上传jdk
安装jdk
[root@web02:~]#rpm -ivh jdk-8u181-linux-x64.rpm
2.下载tomcat
[root@web02:~]#wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.95/bin/apache-tomcat-9.0.95.tar.gz
3.解压
[root@web02:~]#tar xf apache-tomcat-9.0.95.tar.gz
[root@web02:~]#mv apache-tomcat-9.0.95 /usr/local/tomcat
4.配置tomcat开启jmx协议
[root@web02:~]#head -10 /usr/local/tomcat/bin/catalina.sh
#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.sun.management.jmxremote \
-Djava.rmi.server.hostname=10.0.0.8 \
-Dcom.sun.management.jmxremote.port=12345 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false"
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
5.启动tomcat
[root@web02:~]#/usr/local/tomcat/bin/startup.sh
[root@web02:~]#netstat -tnulp
tcp6 0 0 :::8080 :::* LISTEN 116117/java
tcp6 0 0 :::12345 :::* LISTEN 116117/java
2.服务端配置java网关
[root@zabbix:~]#egrep "^Java|StartJava" /usr/local/etc/zabbix_server.conf
JavaGateway=10.0.0.51
JavaGatewayPort=10052
### Option: StartJavaPollers
StartJavaPollers=2
3.在db01安装java gateway
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-latest-5.0.el7.noarch.rpm
#如果web01则卸载yum -y remove zabbix50-agent-5.0.42
[root@db01:~]#yum -y install zabbix-java-gateway
[root@db01:~]#systemctl start zabbix-java-gateway.service
3.页面监控tomca程序


二十.zabbix优化
1.高并发需要对MySQL进行拆分
2.zabbix-agent被动上传修改为主动上报模式
3.地区较多情况 或者网络复杂情况使用proxy代理模式
4.系统自带监控项优化
5.进程优化
6.缓存优化
面试题:zabbix监控过哪些内容
1.监控主机硬件信息内存 CPU 负载 磁盘IO
2.监控系统重要的配置文件、代码文件防黑客篡改
3.监控服务是否正常(通过取端口号或者进程号)
4.监控服务,软件业务的状态信息(nginx状态信息 数据库的状态信息 增删改查 订单量 慢查询)
5.监控业务调用接口 curl状态返回
6.业务数据监控 日志监控。日志状态码 客户端IP地址
通过自定义啥都可以监控,想监控什么都行。
主动和被动模式
zabbix自定义监控流程?
zabbix压力大如何解决?
zabbix如何优化?
用过zabbix的低级自动发现吗? 监听多实例
