Zabbix分布式监控系统
IP | 主机名 | 节点 |
192.168.200.50 | zabbix-server | Server节点 |
192.168.200.60 | zabbix-agent | Agent节点 |
一 基础环境配置
1.虚拟机基础配置(IP,挂载,yum源)
2.更改主机名
# hostnamectl set-hostname zabbix-server
# hostnamectl set-hostname zabbix-agent
3.关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
4.添加host映射
# vi /etc/hosts
192.168.200.50 zabbix-server
192.168.200.60 zabbix-agent
二 LNMP环境部署(Zabbix服务端)
1.上传LNMP环境部署包
2.解压LNMP环境部署源码包
# tar zxvf lnmp1.6-full.tar.gz
3.一键部署LNMP环境
# cd lnmp1.6-full 修改MySQL数据目录:
# vi lnmp.conf
MySQL_Data_Dir='/data/mysql'
# ./install.sh lnmp 执行脚本
选择MySQL版本:
设置MySQL密码,选择InnoDB引擎是否开启:
选择PHP版本:
选择不安装内存分配器:
按Enter键开始安装:
部署成功显示:
测试访问网页:
三 Zabbix服务端部署及配置
1.安装依赖包:
# yum install -y libevent-devel wget tar gcc gcc-c++ make net-snmp-devel libxml2-devel libcurl-devel
2.创建 zabbix 用户
# useradd -s /sbin/nologin zabbix
3.zabbix-4.0.3.tar.gz传到/usr/local/src目录下解压编译安装
# tar zxvf zabbix-4.0.3.tar.gz #解压源码包 # mkdir /usr/local/zabbix # mv /usr/local/src/zabbix-4.0.3/* /usr/local/zabbix #迁移到安装目录 # cd /usr/local/zabbix/ # ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl --with-libxml2
● --prefix指定安装目录
● --enable-server安装Zabbix server
● --enable-agent安装Zabbix agent
● --with-mysql用MySQL来存储
编译完成结果:
# make && make install #编译安装
4.环境变量设置:
# vi /etc/profile
export PATH=$PATH:/usr/local/zabbix/sbin/:/usr/local/zabbix/bin/
# source /etc/profile
# echo $PATH
查看版本:zabbix_server --version
5.配置启动脚本:
# cp /usr/local/zabbix/misc/init.d/fedora/core/zabbix_server /etc/init.d/
#cp /usr/local/zabbix/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
# vi /etc/init.d/zabbix_server
BASEDIR=/usr/local/zabbix #zabbix安装目录
# vi /etc/init.d/zabbix_agentd
BASEDIR=/usr/local/zabbix #zabbix安装目录
添加权限:
# chmod 755 /etc/init.d/zabbix_*
启动Zabbix服务及启动状态:
# systemctl start zabbix_server
# systemctl start zabbix_agentd
# systemctl status zabbix_server
# systemctl status zabbix_agentd
6.登录数据库创建Zabbix用户和导入Zabbix库
Mysql数据库 mysql -h 127.0.0.1 -uroot -p000000
mysql> create database zabbix character set utf8 collate utf8_bin; ##创建Zabbix库和设置格式
mysql> grant all privileges on zabbix.* to zabbix@'127.0.0.1' identified by 'zabbix'; ##创建Zabbix用户并分配权限
mysql> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
mysql> flush privileges; ##刷新权限
mysql> set names utf8; ##设置字符集
mysql> use zabbix ##切换到Zabbix库中
把源码/usr/local/zabbix/database/mysql/安装路径下的3个sql文件导入数据库:
mysql> source /usr/local/zabbix/database/mysql/schema.sql
mysql> source /usr/local/zabbix/database/mysql/data.sql
mysql> source /usr/local/zabbix/database/mysql/images.sql
mysql> show tables; ##查看导入的表格
7.编辑Zabbix server的配置
# cp /usr/local/zabbix/etc/zabbix_server.conf{,.bak}
# vi /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/tmp/zabbix_server.log
DBHost=127.0.0.1 ##指定数据库信息(需配合参数 DBSocket 使用)
DBName=zabbix ##服务端连接数据库的库名
DBUser=zabbix ##连接数据库的用户
DBPassword=zabbix ##连接数据库的密码
DBPort=3306 ##指定连接数据库的端口
Timeout=30 ##与AGNET和其它外部设备通信超时设置,单位为秒
LogSlowQueries=3000 ##用于服务端数据库慢查询功能,单位是毫秒
DBSocket=/tmp/mysql.sock ##指定MYSQL的SOCK连接路径
修改Zabbix目录的权限:
# chown zabbix:zabbix -R /usr/local/zabbix/
重启服务生效:
# systemctl restart zabbix_server
四 Zabbix Web界面部署
1. 配置Nginx虚拟主机
# vi /usr/local/nginx/conf/vhost/zabbix.com.conf
server
{
listen 80;
server_name zabbix.com www.zabbix.com;
index index.html index.htm index.php;
root /data/nginx/zabbix; ##Zabbix Web界面数据目录
location ~ [^/]\.php(/|$)
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/nginx/zabbix$fastcgi_script_name;
include fastcgi_params;
}
}
源码安装包路径下的文件cp到Zabbix Web文件目录当中:
# mkdir -p /data/nginx/zabbix # /etc/init.d/nginx reload ##生效服务 # cp -rf /usr/local/zabbix/frontends/php/* /data/nginx/zabbix
2. 修改php.ini的配置文件
# vi /usr/local/php/etc/php.ini
post_max_size = 32M
max_execution_time = 350
max_input_time = 350
date.timezone = Asia/Shanghai
3. 修改php-fpm.conf的配置文件
# vi /usr/local/php/etc/php-fpm.conf
[www]
listen = 127.0.0.1:9000
重启php-fpm服务:
/etc/init.d/php-fpm restart
检查端口是否启动:
# netstat -lntp | grep php
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2141/php-fpm: maste
4. Web界面部署安装
初始页面:
配置数据库连接信息:
配置Zabbix服务端详细信息:
安装确认信息:
安装报错:
根据提示下载,并把它放到指定路径/data/nginx/zabbix/conf/zabbix.conf.php
# pwd
data/nginx/zabbix/conf
# ll
重新刷新界面:
登录界面:(账号:Admin 密码:zabbix)
登录后界面:
五 Zabbix 客户端部署
1. 下载Zabbix客户端安装包
# yum -y install wget
# wget http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.3-1.el7.x86_64.rpm
2. 安装Zabbix客户端
# rpm -ivh zabbix-agent-4.0.3-1.el7.x86_64.rpm
安装完后我们后面经常使用的文件如路径如下:
/etc/zabbix/zabbix_agentd.conf ##zabbix_agentd配置文件
/etc/zabbix/zabbix_agentd.d ##zabbix_agentd进程文件
/var/run/zabbix/zabbix_agentd.pid ##zabbix_agentd pid文件路径
/var/log/zabbix/zabbix_agentd.log ##zabbix_agentd日志文件路径
备份配置文件:
# cp /etc/zabbix/zabbix_agentd.conf{,.bak}
# egrep -v '^$|#' /etc/zabbix/zabbix_agentd.conf.bak > /etc/zabbix/zabbix_agentd.conf
修改配置文件:
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0 ##指定日志文件的大小,单位MB。0表示禁用日志轮转
ListenPort=10050 ##指定监听端口
StartAgents=3 ##Zabbix启动之后开启被动监控的进程数量,如果设置 为0,那么Zabbix被动监控被禁用
ListenIP=0.0.0.0 ##监听IP地址,默认为所有接口
Server=192.168.200.50 ##允许哪个Zabbix server的IP地址监控本机
#ServerActive=192.168.200.50 ##Zabbix 主动监控server的ip地址
Hostname=zabbix agent
Include=/etc/zabbix/zabbix_agentd.d/*.conf ##自定义配置文件
重启生效配置:
# systemctl restart zabbix-agent
查看端口10050是否启动:
# netstat -lntp | grep zabbix
六 Zabbix Web界面的使用管理操作
1. 首先设置中文
2. 解决中文乱码问题
从Windows控制面板找到字体,选择字体文件,拷贝到Zabbix服务器的/data/nginx/zabbix/fonts目录下。
将DejaVuSans.ttf字体备份起来,然后用simhei.ttf重命名成DejaVuSans.ttf
重新刷新页面后中文乱码消失:
3. 创建客户端监控主机
1.创建群组
找到配置→主机→创建主机:
接着配置主机链接模板,选择Template OS Linux,单击“添加”按钮。
之后在最新数据中查看结果:
4. 创建模板
选择配置→模板→创建模板→添加监控项
选择自带的监控项:
七 Zabbix自定义监控项
1.配置自定义监控脚本,修改agent配置文件:
# vi /etc/zabbix/zabbix_agentd.d/users.conf
UnsafeUserParameters=1
UserParameter=users, /bin/bash /scripts/user.sh ##存放脚本位置
2.配置监控脚本:
# mkdir /scripts
# vi /scripts/user.sh
#!/bin/bash
user=$(who |wc -l)
if [ $user -gt 3 ];then
echo '1'
else
echo '2'
fi
3.添加权限:
# chown -R zabbix.zabbix /scripts/
# chmod 777 /scripts/user.sh
4.测试脚本:
./user.sh
如果返回值为1说明在线用户超过3个,如果返回值为2,说明在线用户不超过3个;
生效配置:
# systemctl restart zabbix-agent
# systemctl status zabbix-agent
# netstat -lntp | grep zabbix ##查看端口是否都启动了
5.服务端测试:
# zabbix_get -s 192.168.200.60 -k users
6.进入Zabbix Web配置;
流程:配置→主机→监控项→创建监控项;配置→主机→触发器→创建触发器。
7.验证
客户端主机开多于三个用户,看是否会触发报警!
# who
八 Zabbix自定义报警媒介
创建自定义报警媒介
创建邮件报警需要执行以下步骤:
安装sendMail→创建邮件发送脚本→创建报警媒介类型
1.安装sendMail:
[root@zabbix-server ~]# yum -y install sendmail mailx
2.配置邮件发送配置:
[root@zabbix-server ~]# vi /etc/mail.rc
set from=972xxxx@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=972xxxx@qq.com
set smtp-auth-password=xxxxxxx //smtp授权码,非QQ密码
set smtp-auth=login
重启服务:
# systemctl restart sendmail
授权码方式获取:打开QQ邮箱→设置→帐户→开启IMAP/SMTP服务。
定义告警脚本存放路径:
[root@zabbix-server ~]# vi /usr/local/zabbix/etc/zabbix_server.conf
添加以下参数
AlertScriptsPath=/scripts
创建存放目录:
[root@zabbix-server ~]# mkdir /scripts
编写邮件发送脚本:
[root@zabbix-server ~]# vi /scripts/mail.sh
#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'` ##定义邮件内容变量
subject=`echo $2 | tr '\r\n' '\n'` ##定义邮件主题变量
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1
对脚本以及日志输出文件授权:
[root@zabbix-server ~]# touch /tmp/mailx.log
[root@zabbix-server ~]# chown zabbix.zabbix /tmp/mailx.log
[root@zabbix-server ~]# chown -R zabbix.zabbix /scripts/
[root@zabbix-server ~]# chmod +x /scripts/mail.sh
测试脚本发送是否成功:
[root@zabbix-server ~]# /scripts/mail.sh 972xxxx@qq.com "hello" "test mail!"
3.Zabbix Web界面设置告警媒介:
管理→报警媒介类型→创建报警媒介
脚本参数:
{ALERT.SENDTO} 收件人
{ALERT.SUBJECT} 邮件标题
{ALERT.MESSAGE} 邮件内容
创建完报警媒介后,会发现你的媒介类型就多了一个邮件报警:
九 Zabbix自定义邮件告警的使用
1. 配置告警接收用户,选择告警等级
步骤如下:管理→用户→编辑Admin用户→报警媒介→单击“添加”按钮
添加成功后选择更新
2. 创建邮件发送动作:
步骤如下:配置→动作→创建动作→添加触发条件→添加操作内容→添加恢复操作内容
告警标题:
Problem: {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}
在操作中勾选Pause operations for suppressed problems→新的
添加一下内容:选择“添加”按钮。
添加成功后:
恢复操作与操作那边一样。
添加恢复标题→添加恢复内容→添加新的
恢复标题
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
恢复内容:
恢复告警设备: {HOSTNAME1} 触发名称: {TRIGGER.NAME} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 恢复详情: {ITEM.NAME}:{ITEM.VALUE} 恢复当前状态为:{TRIGGER.STATUS} 事件ID:{EVENT.ID}
之后单击“添加”按钮,创建动作就完成了!
3. 邮件报警与恢复通知测试
首先让客户端监控项报警:
# who