一、思路
首先搭建zabbixserver,本机需要安装agent以便对本机进行监控,然后部署邮件报警相关配置
二、部署、配置
环境
主机名 | IP地址 | 角色 |
---|---|---|
zserver | 192.168.111.3 | 监控端同时也作为被监控端,Tomcat |
zagent | 192.168.111.4 | 被监控端,mysql |
- 可以正常连接互联网
- 配置epel源
- 本案例将防火墙以及selinux关闭
[root@localhost ~]# ntpdate ntp1.aliyun.com
#同步阿里云的时间
wget https://mirrors.tuna.tsinghua.edu.cn/epel//epel-release-latest-7.noarch.rpm
yum clean all
- 配置主机名和hosts
[root@localhost ~]# vim /etc/hosts
192.168.111.3 zserver
192.168.111.4 zagent
[root@zserver ~]# uname -n
zserver
[root@zagent ~]# uname -n
zagent
安装zabbix
- 安装依赖包和LAMP
[root@zserver ~]# yum -y install httpd mariadb-server mariadb mariadb-devel php php-mbstring php-mysql php-bcmath php-gd php-xmlrpc php-ldap php-xml libevent libevent-devel net-snmp net-snmp-devel libxml2 libxml2-devel
[root@zserver ~]# yum -y install httpd mariadb-server mariadb mariadb-devel php php-mbstring php-mysql php-bcmath php-gd php-xmlrpc php-ldap php-xml libevent libevent-devel net-snmp net-snmp-devel libxml2 libxml2-devel
[root@zserver ~]# systemctl enable mariadb
[root@zserver ~]# systemctl start mariadb
[root@zserver ~]# systemctl start httpd
[root@zserver ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@zserver ~]# mysqladmin -uroot password 123456
- 部署二进制包jdk
rm -rf /usr/bin/java
tar zxf jdk-8u191-linux-x64.tar.gz
mv jdk1.8.0_191 /usr/local/java8
echo "JAVA_HOME=/usr/local/java8" >> /etc/profile
source /etc/profile
echo "PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
source /etc/profile
[root@zserver ~]# javac -version
javac 1.8.0_191
#系统自带的jdk中并无javac程序
- 部署zabbix
tar zxf zabbix-3.4.15.tar.gz
cd zabbix-3.4.15/
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --enable-java && make -j2 && make install
#--enable-server打开Zabbix服务器的构建
#--enable-agent打开Zabbix代理和客户端实用程序的构建
#--enable-java打开Zabbix Java网关的构建
#--enable-ipv6启用IPv6支持
#--with-mysql可选;使用MySQL客户端库[default = no]
#--with-net-snmp可选;使用Net-SNMP包[default = no]
- mariadb对其进行授权
mysql -uroot -p123456
MariaDB [(none)]> create database zabbix character set utf8;
#创建zabbix专用库
MariaDB [(none)]> grant all on zabbix.* to zabbix@'192.168.111.3' identified by 'zabbix';
MariaDB [(none)]> flush privileges;
- 导入初始架构和数据到zabbix库中
cd zabbix-3.4.15/
mysql -uzabbix -pzabbix -h192.168.111.3 zabbix < database/mysql/schema.sql
mysql -uzabbix -pzabbix -h192.168.111.3 zabbix < database/mysql/images.sql
mysql -uzabbix -pzabbix -h192.168.111.3 zabbix < database/mysql/data.sql
- 创建专门的程序用户
[root@zserver zabbix-3.4.15]# useradd -M -s /sbin/nologin zabbix
[root@zserver zabbix-3.4.15]# mkdir /usr/local/zabbix/logs
[root@zserver zabbix-3.4.15]# chown -R zabbix:zabbix /usr/local/zabbix/
- 配置文件
[root@zserver zabbix-3.4.15]# vim /usr/local/zabbix/etc/zabbix_server.conf
LogFile=/usr/local/zabbix/logs/zabbix_server.log
#指定zabbix日志位置
PidFile=/tmp/zabbix_server.pid
#指定zabbix pid文件位置
DBHost=192.168.111.3
#指定数据库主机
DBName=zabbix
#指定数据库名为zabbix
DBUser=zabbix
DBPassword=zabbix
#指定用户为zabbix ,密码zabbix
DBSocket=/var/lib/mysql/mysql.sock
Include=/usr/local/zabbix/etc/zabbix_server.conf.d/*.conf
[root@zserver zabbix-3.4.15]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
PidFile=/tmp/zabbix_agentd.pid
Server=192.168.111.3
#zabbix server的ip地址,多个ip使用逗号分隔
ServerActive=192.168.111.3
#zabbix 主动监控server的ip地址,使用逗号分隔多IP,如果注释这个选项,那么当前服务器的主动监控就被禁用了(被动模式)
Hostname=zserver
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
ln -s /usr/local/zabbix/sbin/* /usr/local/bin/
ln -s /usr/local/zabbix/bin/* /usr/local/bin/
#链接执行命令
[root@zserver ~]# zabbix_server
[root@zserver ~]# zabbix_agentd
#启动监控端,和agent端
- zabbix前端配置PHP
mv zabbix-3.4.15/frontends/php/ /var/www/html/zabbix
chown -R apache:apache /var/www/html/zabbix
vim /etc/php.ini
878 date.timezone = Asia/Shanghai
#时区
384 max_execution_time = 300
#单位秒,通过POST、GET以及PUT方式接
收数据时间进行限制
394 max_input_time = 300
#php程序上传文件解析数据时的时间限制
672 post_max_size = 32M
#POST 方式请求数据所允许的最大大小
405 memory_limit = 128M
#设置php程序的内存限制
854 extension=bcmath.so
#加载zabbix程序需要加载的扩展模块bcmath.so,手动添加
systemctl restart httpd
#重启服务
[root@zserver ~]# netstat -anpt | egrep ':10050|:10051|:80'
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 72512/zabbix_agentd
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 72450/zabbix_server
tcp6 0 0 :::10050 :::* LISTEN 72512/zabbix_agentd
tcp6 0 0 :::10051 :::* LISTEN 72450/zabbix_server
tcp6 0 0 :::80 :::* LISTEN 72666/httpd
- 客户机访问web页面进行zabbix安装
......
对zabbix进行初步优化
- 中文页面
-->administration
-->Users
-->Admin
-->Language选择Chinese(zh_CN)
-->UPdates
-->然后刷新页面
- 更改admin密码
-->administration
-->Users
-->Admin
- 解决中文乱码
rm -rf /var/www/html/zabbix/fonts/DejaVuSans.ttf
#然后将下载到的中文字体.ttf结尾的字体文件放到该目录即可
mv STXINWEI.TTF DejaVuSans.ttf
chown -R apache:apache /var/www/html/zabbix/fonts/*
添加监控主机
- 添加自身
-->配置
-->主机
-->创建主机
-->主机名称(与agent配置文件中相同)
可见名称(自定义)
群组(将Linuxserver群组添加到左侧)
ip(agent所在机器的IP地址和端口)
-->添加
-->选定agent1
-->模板(进行选择,选定Template OS Linux)
--添加
-->更新(等待一会,相应的图标如ZBX会高亮)
- 添加另一台
yum -y install libxml2-devel libcurl-devel pcre-devel mariadb*
#依赖安装
tar zxf zabbix-3.4.15.tar.gz
cd zabbix-3.4.15/
./configure --prefix=/usr/local/zabbix --enable-agent --with-net-snmp --with-libcurl --with-libxml2 && make && make install
#不需要开启server监控端了
cp misc/init.d/tru64/zabbix_agentd /etc/init.d/
vim /etc/init.d/zabbix_agentd
DAEMON=/usr/local/zabbix/sbin/zabbix_agentd
#前面的目录更改为实际安装路径
chmod +x /etc/init.d/zabbix_agentd
useradd -M -s /sbin/nologin zabbix
mkdir /usr/local/zabbix/logs
chown -R zabbix:zabbix /usr/local/zabbix/
PidFile=/tmp/zabbix_agentd.pid
Server=192.168.111.3
ServerActive=192.168.111.3
Hostname=zagent
LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf
UnsafeUserParameters=1
#允许所有字符的参数传递给用户定义的参数
UserParameter=mysql.version,mysql -V
# =前面表示定义一个键值对,=后面逗号前面是键的名称,后面是键的值.可以在server监控端使用zabbix_get -s 192.168.111.4 -k mysql.version来得到mysql -V命令的输出结果
UserParameter=mysql.status[*],/usr/local/zabbix/etc/chk_mysql.sh $1
#显而易见,这里表示的就是执行一个脚本了,[*]这个是用户跟的参数,跟后面的$1位置参数对应,脚本里已经定义好
UserParameter=mysql.ping,mysqladmin -uroot -p123456 -P3306 -h192.168.111.4 ping | grep -c alive
#这里是监控MySQL的配置项
[root@zagent ~]# vim /usr/local/zabbix/etc/chk_mysql.sh
[root@zagent ~]# chmod +x /usr/local/zabbix/etc/chk_mysql.sh
----chk_mysql.sh监控脚本----
cat /usr/local/zabbix/etc/chk_mysql.sh
#!/bin/bash
# 用户名
MYSQL_USER='root'
# 密码
MYSQL_PWD='123456'
# 主机地址/IP
MYSQL_HOST='192.168.111.4'
# 端口
MYSQL_PORT='3306'
# 数据连接
MYSQL_CONN="/usr/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PWD} -h${MYSQL_HOST} -P${MYSQL_PORT}"
# 参数是否正确
if [ $# -ne "1" ];then
echo "arg error!"
fi
# 获取数据
case $1 in
Uptime)
result=`${MYSQL_CONN} status|cut -f2 -d":"|cut -f1 -d"T"`
echo $result
;;
Com_update)
result=`${MYSQL_CONN} extended-status |grep -w "Com_update"|cut -d"|" -f3`
echo $result
;;
Slow_queries)
result=`${MYSQL_CONN} status |cut -f5 -d":"|cut -f1 -d"O"`
echo $result
;;
Com_select)
result=`${MYSQL_CONN} extended-status |grep -w "Com_select"|cut -d"|" -f3`
echo $result
;;
Com_rollback)
result=`${MYSQL_CONN} extended-status |grep -w "Com_rollback"|cut -d"|" -f3`
echo $result
;;
Questions)
result=`${MYSQL_CONN} status|cut -f4 -d":"|cut -f1 -d"S"`
echo $result
;;
Com_insert)
result=`${MYSQL_CONN} extended-status |grep -w "Com_insert"|cut -d"|" -f3`
echo $result
;;
Com_delete)
result=`${MYSQL_CONN} extended-status |grep -w "Com_delete"|cut -d"|" -f3`
echo $result
;;
Com_commit)
result=`${MYSQL_CONN} extended-status |grep -w "Com_commit"|cut -d"|" -f3`
echo $result
;;
Bytes_sent)
result=`${MYSQL_CONN} extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`
echo $result
;;
Bytes_received)
result=`${MYSQL_CONN} extended-status |grep -w "Bytes_received" |cut -d"|" -f3`
echo $result
;;
Com_begin)
result=`${MYSQL_CONN} extended-status |grep -w "Com_begin"|cut -d"|" -f3`
echo $result
;;
*)
echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions|Com_insert|Com_delete|Com_commit|Bytes_sent|Bytes_received|Com_begin)"
;;
esac
#关于脚本中MySQLadmin的详细用法,可以在网上找一些文档看一看,很多
[root@zagent ~]# systemctl start mariadb
[root@zagent ~]# systemctl enable mariadb
mysqladmin -uroot password 123456
[root@zagent ~]# mysql -uroot -p123456
MariaDB [(none)]> grant all on *.* to root@'zagent' identified by '123456';
#这一步授权,虽然都是MySQL本机,但只是我们人类角度的一台机器,MySQL程序也许并不会这么认为,我们需要明确授权哪台主机名所在的主机.
MariaDB [(none)]> flush privileges;
[root@zagent ~]# /etc/init.d/zabbix_agentd start
Zabbix agent started.
[root@zserver ~]# zabbix_get -s 192.168.111.4 -k mysql.status[Uptime]
4130
#可以在server监控端简单测试一下
-->配置
-->主机
-->创建主机
-->主机名称(与agent配置文件中相同)
可见名称(自定义)
群组(将Linuxserver群组添加到左侧)
ip(agent所在机器的IP地址和端口)
-->添加
-->选定agent1
-->模板(进行选择,选定Template OS Linux)
--添加
-->更新(等待一会,相应的图标如ZBX会高亮)
- 配置监控zagent的MySQL
首先添加服务模板
-->配置
-->主机
-->选择相应的主机名称
-->模板
-->选择
-->模板(进行选择,选定Template DB MySQL)
--添加
-->更新(等待一会亮)
创建图形
-->配置
-->主机
-->选择相应的主机名称后的图形
-->创建图形
-->监控项下-->添加 选择MySQL status
-->添加
部署监控Tomcat
注意:编译安装zabbixserver时,添加--enable-java编译项
本案例在zabbix-server上安装Tomcat进行监控测试
[root@zserver ~]# vim /usr/local/zabbix/sbin/zabbix_java/settings.sh
9 LISTEN_IP="0.0.0.0"
17 LISTEN_PORT=10052
27 PID_FILE="/tmp/zabbix_java.pid"
35 START_POLLERS=5
[root@zserver ~]# vim /usr/local/zabbix/etc/zabbix_server.conf
#末行追加
JavaGateway=192.168.111.3
JavaGatewayPort=10052
StartJavaPollers=5
[root@zserver ~]# /usr/local/zabbix/sbin/zabbix_java/startup.sh
[root@zserver ~]# pkill -9 zabbix_server
[root@zserver ~]# zabbix_server
[root@zserver ~]# netstat -lnpt | grep 10052
tcp6 0 0 :::10052 :::* LISTEN 79396/java
[root@zserver ~]# tar zxf apache-tomcat-8.5.16.tar.gz
[root@zserver ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat8
[root@zserver ~]# vim /usr/local/tomcat8/bin/catalina.sh
#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
#启用远程监控
-Dcom.sun.management.jmxremote.port=12345
#jmx远程监控端口,webzabbix添加时必须一致
-Dcom.sun.management.jmxremote.authenticate=false
#不开启用户密码认证
-Dcom.sun.management.jmxremote.ssl=false
#不开启ssl
-Djava.rmi.server.hostname=192.168.111.3"
#运行tomcat服务器所在IP地址
[root@zserver ~]# vim /usr/local/tomcat8/bin/catalina.sh
[root@zserver ~]# //usr/local/tomcat8/bin/startup.sh
Using CATALINA_BASE: //usr/local/tomcat8
Using CATALINA_HOME: //usr/local/tomcat8
Using CATALINA_TMPDIR: //usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java8
Using CLASSPATH: //usr/local/tomcat8/bin/bootstrap.jar://usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
LISTEN 79722/java
[root@zserver ~]# netstat -lnpt | grep java
tcp6 0 0 :::10052 :::* LISTEN 79396/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 79722/java
tcp6 0 0 :::8009 :::* LISTEN 79722/java
tcp6 0 0 :::8080 :::* LISTEN 79722/java
tcp6 0 0 :::46546 :::* LISTEN 79722/java
tcp6 0 0 :::35319 :::* LISTEN 79722/java
tcp6 0 0 :::12345 :::* LISTEN 79722/java
- webzabbix添加Tomcat监控
-->配置
-->主机
-->选择相应的主机名称
-->jmx接口-->添加刚才在配置文件定义的ip以及12345端口
-->更新
-->模板
-->导入(从本机文件中导入,从网络上下载的有很多)
(不需要修改选项,直接导入就好)
-->配置
-->主机
-->选择相应的主机名称
-->模板
-->选择响应模板进行添加并更新
刷新等待一两分钟,jmx字符会高亮
配置邮件报警
首先登陆网易邮箱,获取到授权码,这里已经成功,不在测试
继续进行
zabbixserver端配置邮件服务器
[root@zserver ~]# yum -y install mailx dos2unix
#dos2unix程序用来防止乱码的
[root@zserver ~]# vim /etc/mail.rc
#末行追加
set from=该邮件来自于谁 smtp=smtp.163.com
#smtp是邮箱服务器地址
set smtp-auth-user=接收邮件的邮箱地址 smtp-auth-password=授权码
set smtp-auth=login
[root@zserver yum.repos.d]# vim /usr/local/zabbix/etc/zabbix_server.conf
#末行追加
AlerScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
#设置邮件报警脚本路径
[root@zserver yum.repos.d]# vim /usr/local/zabbix/share/zabbix/alertscripts/mail.sh
#!/bin/bash
#export.UTF-8
bt=$2
sjr=$1
FILE=/tmp/mailtmp.txt
echo "$3" >$FILE
/usr/bin/dos2unix -k $FILE
/bin/mail -s "$bt" "$sjr" <$FILE
[root@zserver ~]# chmod +x /usr/local/zabbix/share/zabbix/alertscripts/mail.sh
[root@zserver ~]# chown zabbix:zabbix /usr/local/zabbix/share/zabbix/alertscripts/mail.sh
[root@zserver ~]# touch /tmp/mailtmp.txt
[root@zserver ~]# chmod 777 /tmp/mailtmp.txt
[root@zserver ~]# chown zabbix:zabbix /tmp/mailtmp.txt
#文件以及报警脚本的归属以及权限,注:脚本文件和存放邮件消息文件归属必须是zabbix;
- 配置zabbixweb监控项邮件报警
-->管理
-->报警媒介类型
-->创建媒体类型
-->自定义名称
-->类型选择脚本
-->脚本名称我这里输入mail.sh(要和真实脚本名称一致)
-->添加三个脚本参数分别为{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE}
-->添加
- 配置zabbix中的用户所使用的报警媒介类型以及接收邮件的邮箱;
-->管理
-->用户
-->Admin
-->报警媒介
-->添加
-->类型选择,刚才添加的自定义名称
-->收件人填写收件人的邮箱地址
-->添加
-->更新
- 创建发送邮件的动作
-->配置
-->动作
-->创建动作
-->自定义动作名称
-->操作
-->默认操作步骤持续时间 60s(设置报警邮件间隔时间)
-->默认标题 故障{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}
-->新的
-->用户选择admin
-->仅送到刚才添加的自定义名称
-->添加
-->恢复操作和操作写的内容一样(确认操作写的内容也是一样的)
-->添加
现在是没有任何条件,即发生任何动作都会触发邮件报警
使用zagent主机上ftp服务做测试,现在将其关掉
稍等几秒监控图形已经可以看到值为0了
三.总结
- 测试过程总体还算是顺利,但是zabbix也不可能做到实时监控,肯定会有时间延迟,虽然是测试环境资源也足够,还是没有实时报警,差不多服务停掉3分钟后才收到邮件
- 本案例没有将图片上传出来,会影响阅览者阅读的直观性
- 监控布置的结果虽然有了,但是思路还是不清晰