监控系统服务器的状态、网站的流量指标、进程服务的运行状态,保证整个集群的工作正常
1、定义
基于web界面提供的一种可视化的监控服务软件,已分布式的方式系统监控以及网络监控、硬件监控等的开源软件
2、组织架构
(1)C/S模式:客户端和服务端组成。zabbix server服务端,zabbix agent客户端
(2)B/S模式:浏览器和服务端组成。通过浏览器可以直接访问服务器数据
3、zabbix的组件程序
(1)zabbix server:服务端, 通过一系列的组件SNMP,zabbix agent,ping,通过端口远程监控 客户端的数据,把数据收集到服务端进行展示,以及提供用户分析的界面web
****(2)zabbix agent:客户端,****被监控的目标机器,把需要收集的数据以及自定义的监控数据,发送给zabbix server
(3)zabbix_proxy:代理服务器,安装在监控的目标系统上的软件组件,可以代替zabbix_server收集数据,然后由代理软件传送给服务端zabbix_server,减轻主服务器的压力
****(4)zabbix_get:****可选组件(不是必要的),提供命令行的工具(zabbix的命令行)
****(5)zabbix_sender:****可选组件(不是必要的),提供命令行的工具(zabbix的命令行),可以将自定义数据发送到zabbix服务器,对于不直接由zabbix代理监控的数据或从脚本传送来的数据来说较方便
4、工作方式
5、部署zabbix实验
****实验目的:****监控服务,可视化界面展示
实验条件:
|-------------|------------|--------------|---------------------------------------------------------------------------|-------------------------|
| 主机名 | 作用 | IP地址 | 组件 | 硬件 (最少) |
| test1 | server 服务端 | 20.0.0.10 | 时间同步+SCL+mysql和apache的web组件+mariadb(数据库)+zabbix-agent+zabbix-server-mysql | 4核8G |
| test2 | agent 客户端 | 20.0.0.20 | 时间同步+zabbix-agent2 | 2核4G |
实验步骤:
|------------|---------------|
| 端口 | 主机 |
| 10050 | server服务端 |
| 10051 | agent监控端(客户端) |
1、安装时间同步【所有服务器】
yum install ntpdate -y
ntpdate ntp.aliyun.com
2、部署zabbix服务端
(1)获取 zabbix 的下载源
rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
(2)更换 zabbix.repo 为阿里源
cd /etc/yum.repos.d
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' zabbix.repo
yum clean all && yum makecache
yum install -y zabbix-server-mysql zabbix-agent
|---------------------|--------------------------------------|
| zabbix-server-mysql | 指定安装zabbix后,使用mysql作为数据库后端(也可以使用其他的) |
| zabbix-agent | 可以把主服务器也加入到监控目标中 |
(3)安装SCL
yum install -y centos-release-scl
便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4
(4)修改 zabbix-front 前端源
(5)安装mysql和apache的web组件
yum install -y zabbix-web-mysql-scl zabbix-apache-conf-scl
(6)安装 zabbix 所需的数据库
yum install -y mariadb-server mariadb
(7)初始化数据库
mysql_secure_installation
(8)添加数据库用户,以及 zabbix 所需的数据库信息
mysql -u root -p123
CREATE DATABASE zabbix character set utf8 collate utf8_bin;
#创建一个名为 "zabbix" 的 MySQL 数据库,字符集为 UTF-8,排序规则为 utf8_bin
GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix';
flush privileges;
(9)导入数据库信息
rpm -ql zabbix-server-mysql #查询 sql 文件的位置
zcat /usr/share/doc/zabbix-server-mysql-5.0.40/create.sql.gz | mysql -uroot -p123 zabbix
#导入 Zabbix 监控系统所需的 MySQL 数据库架构
(10)修改 zabbix server 配置文件,修改数据库的密码
vim /etc/zabbix/zabbix_server.conf
(11)修改 zabbix 的 php 配置的时区文件
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
(12)启动 zabbix 相关服务
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
(13)测试。服务端浏览器访问
20.0.0.10/zabbix
出现错误:Time zone for PHP is not set (configuration parameter "date.timezone").
未设置PHP的时区(配置参数"date.timezone")
原因:配置文件错误
解决:改成正确的配置文件
切换成中文
解决 zabbix-server Web页面中文乱码问题
yum install -y wqy-microhei-fonts
\cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
(2)修改 agent2 配置文件
vim /etc/zabbix/zabbix_agent2.conf
(3)启动 zabbix-agent2
systemctl start zabbix-agent2
systemctl enable zabbix-agent2
netstat -natp | grep zabbix
(4)在服务端验证 zabbix-agent2 的连通性
yum install -y zabbix-get
#安装 zabbix 主动获取数据的命令
zabbix_get -s '20.0.0.20' -p 10050 -k 'agent.ping'
zabbix_get -s '20.0.0.20' -p 10050 -k 'system.hostname'
(5)修改服务端的agent2 配置文件
****(6)****在 Web 页面中添加主机
添加agent主机【监控客户端】
(7)自定义监控内容
who | wc -l
①创建 zabbix 的监控项配置文件,用于自定义 key【脚本实现】
vim /etc/zabbix/zabbix_agent2.conf
注意点:监控配置文件都在此目录下
cd /etc/zabbix/zabbix_agent2.d/
vim UserParameter_login.conf
UserParameter=login.user,who|wc -l
systemctl restart zabbix-agent2
②在服务端验证新建的监控项
zabbix_get -s '20.0.0.20' -p 10050 -k 'login.user'
(8)在 Web 页面创建自定义监控项模板
①创建模板②创建应用集(用于管理监控项的)③创建监控项④创建触发器⑤创建图形⑥将主机与模板关联起来(一个主机可以关联多个模板)⑦设置邮件报警
⑦模拟故障
超过3台agent主机会发送邮件,并且触发器有动作记录
(8)监控nginx服务
①安装nginx服务②打开nginx状态,关闭访问日志
③创建nginx脚本
#!/bin/bash
#Description:Automated monitoring nginx performance and process nginx_status scripts
HOST="localhost"
PORT=80
stub_status="stub_status"
NGINX_COMMAND=$1
nginx_check() {
if [ -f /sbin/pidof ]; then
/sbin/pidof nginx | wc -w
else
ps aux | grep -v "grep" | grep -c "nginx:"
fi
}
nginx_active(){
/usr/bin/curl -s "http://$HOST:PORT/{stub_status}/" 2> /dev/null | awk '/Active/ {print $NF}'
}
nginx_reading(){
/usr/bin/curl -s "http://$HOST:PORT/{stub_status}/" 2> /dev/null | awk '/Reading/ {print $2}'
}
nginx_writing(){
/usr/bin/curl -s "http://$HOST:PORT/{stub_status}/" 2> /dev/null | awk '/Writing/ {print $4}'
}
nginx_waiting(){
/usr/bin/curl -s "http://$HOST:PORT/{stub_status}/" 2> /dev/null | awk '/Waiting/ {print $6}'
}
nginx_accepts(){
/usr/bin/curl -s "http://$HOST:PORT/{stub_status}/" 2> /dev/null | awk 'NR==3 {print $1}'
}
nginx_handled(){
/usr/bin/curl -s "http://$HOST:PORT/{stub_status}/" 2> /dev/null | awk 'NR==3 {print $2}'
}
nginx_requests(){
/usr/bin/curl -s "http://$HOST:PORT/{stub_status}/" 2> /dev/null | awk 'NR==3 {print $3}'
}
case $NGINX_COMMAND in
check)
nginx_check
;;
active)
nginx_active
;;
reading)
nginx_reading
;;
writing)
nginx_writing
;;
waiting)
nginx_waiting
;;
accepts)
nginx_accepts
;;
handled)
nginx_handled
;;
requests)
nginx_requests
;;
*)
echo $"USAGE:$0 {check|active|reading|writing|waiting|accepts|handled|requests}"
esac
赋权脚本文件④创建监控nginx服务的脚本nginx.sh 是一个脚本文件的路径,而 $1 是脚本接受的第一个参数
⑤在服务端测试连接客户端
zabbix_get -s '20.0.0.20' -p 10050 -k nginx.status[check]
⑥在 Web 页面创建自定义监控项模板
创建模板创建应用集(用于管理监控项的)创建监控项
注意:键值必须要与自定义的监控项配置文件中设置的保持一致
创建触发器(当监控项获取到监控的值后和触发器预设的值进行对比,判断是否报警)创建图形将主机与模板关联起来(一个主机可以关联多个模板)⑦测试监控nginx服务故障问题1:nginx服务出现故障,无法发送故障邮件到邮箱原因:无法解析主机名:无法解析主机:smtp.qq.com;未知错误解决:添加一个本地网关
问题2:报警类型被拒绝解决:更新一下报警媒介
(9)监控mysql的I/O线程 【面试题】
注意:
用zabbix监控服务器状态、硬件信息、内存、磁盘读写、进程服务器
用普罗米修监控容器 ,zabbix监控容器会出现假告警
工作流程:在监控的服务器上自定义监控脚本,并创建脚本筛选出IO线程,设置故障触发条件,在zabbix界面添加主机、创建模板、应用集、监控项、触发器等,即可监控mysql的IO线程
①yum安装mysql【编译安装不适用此方法】
②创建查看mysql 的IO线程的脚本赋权脚本文件
③自定义监控mysql 的I/O线程脚本
注意:必须放在/etc/zabbix/zabbix_agent2.d/目录下创建监控脚本
④在服务端测试客户端
⑤在 Web 页面创建自定义监控项模板
创建模板创建应用集创建监控项创建触发器
错误:无法检测mysql的IO故障
原因:触发器条件设置错误解决:须符合/opt/test_mysql.sh的脚本文件设置的触发条件创建图形【可有可无】主机关联模板⑥测试监控mysql的IO故障问题1:客户端和服务端时间不同步
解决:安装时间同步
yum install ntpdate -y
ntpdate ntp.aliyun.com
问题2:模拟mysql故障后,重启mysql无法解决故障
原因:查看仪表板发现所有检测的主机与服务均没有波动,zabbix相关服务挂了
解决:重启zabbix相关服务,自动解决无法恢复故障的问题
客户端systemctl start zabbix-agent2
服务端systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm