zabbix server端:centos7.6
一、关闭防火墙和selinux、设置时区和时间同步
~]# systemctl stop firewalld
~]# systemctl disable firewalld
~]# setenforce 0
~]# vim /etc/sysconfig/selinux
SELINUX=disabled #将enforcing更改为disabled
# timedatectl set-timezone Asia/Shanghai
~]# yum -y install chrony
~]# vim /etc/chrony.conf
server ntp1.aliyun.com iburst #修改为阿里云的ntp服务器
~]# systemctl restart chronyd
二、更换为yum源为阿里云源
~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
~]# yum makecache
三、安装LAMP环境
~]# yum -y install mariadb mariadb-server httpd php php-mysql
~]# systemctl start httpd mariadb
~]# systemctl enable httpd mariadb
~]# mysql_secure_installation
四、安装zabbix程序,此处选用3.0 LTS(长期维护版)
~]# rpm -Uvh https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
~]# yum clean all
~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
初始化数据库:
~]# mysql -uroot -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'password'; #此处password为zabbix的数据库密码,自行设置
MariaDB [(none)]> quit;
~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix #输入zabbix用户的密码
~]# vim /etc/zabbix/zabbix_server.conf
DBPassword=password #输入zabbix用户的密码
~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai #输入正确的时区信息
~]# systemctl restart zabbix-server zabbix-agent httpd
~]# systemctl enable zabbix-server zabbix-agent httpd
五、浏览器初始化zabbix的web
~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/usr/share/zabbix"
~]# systemctl restart httpd
访问http://server-ip,默认账号为Admin,密码为zabbix。生产环境注意:1、修改Admin密码;2、关闭guest用户。
六、由于3.0的很多模板支持的问题,所以此处升级为4.0LTS。
阿里云的zabbix仓库源包:
https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
具体参考官方升级指南:
https://www.zabbix.com/documentation/4.0/zh/manual/installation/upgrade/packages/rhel_centos
七、添加对中文的支持,避免中文乱码问题:3.0和4.0的区别:3.0路径:/usr/share/zabbix/fonts/ 4.0路径:/usr/share/zabbix/assets/fonts/
以下示例为4.0LTS版本
找一台windows主机:win+R,输入fonts(即C:\Windows\Fonts),选择某一字体(此处示例为:宋体常规)
通过拖动上传字体文件到zabbix-server上:前提 ~]# yum -y install lrzsz
~]# mv simsun.ttc /usr/share/zabbix/assets/fonts/song.ttf
~]# chmod a+x /usr/share/zabbix/assets/fonts/song.ttf
~]# vim /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'song'); #将字体graphfont修改为song
常用监控方式:
一、通过agent监控:
1、安装zabbix-agent程序和设置配置文件
centos 7
~]# rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.15-1.el7.x86_64.rpm
~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.20.120.214 #设置server端IP
#ServerActive=172.20.120.214 #此处没有启用active模式,所以注释(active模式是客户端主动发送数据给server端)
Hostname=172.20.120.182 #设置客户端的名称
~]# systemctl start zabbix-agent
~]# systemctl enable zabbix-agent
centos6
~]# sudo rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/6/x86_64/zabbix-agent-4.0.15-1.el6.x86_64.rpm
~]# hostip=`ip addr l | grep eth0 | grep inet | awk -F "/" '{print $1}' | awk '{print $2}'` #此处获取网卡为eth0,请按需修改
~]# sudo sed -i -e 's/Server=127.0.0.1/Server=172.20.120.214/g' -e 's/ServerActive=127.0.0.1/#ServerActive=127.0.0.1/g' -e "s/Hostname=Zabbix server/Hostname=$hostip/g" /etc/zabbix/zabbix_agentd.conf
~]# sudo service zabbix-agent start
~]# sudo chkconfig zabbix-agent on
2、添加到web监控的模式:
a、手动添加
访问web端http://server-ip:配置-主机-创建主机-设置主机相关信息:如图
b、自动发现
步骤:
1、设置自动发现后要进行的动作
访问web端http://server-ip:配置-动作-事件源(自动发现)-创建动作
2、设置自动发现规则
访问web端http://server-ip:配置-自动发现-创建发现规则
Zabbix监控nginx性能
1、查看是否有with-http_stub_status_module该模块
~]# nginx -V
2、配置nginx状态页面
~]# vim /etc/nginx/nginx.conf
location /ngx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
}
~]# systemctl reload nginx
测试是否可以获取到status页面
~]# curl http://127.0.0.1/ngx_status
其中字段解释如下:
Active connections :表示Nginx正在处理的活动连接数。
server :表示Nginx启动到现在共处理了多少个连接
accepts :表示Nginx启动到现在共成功创建多少次握手
handled requests :表示总共处理了 多少次请求
Reading :Nginx 读取到客户端的 Header 信息数
Writing :Nginx 返回给客户端 Header 信息数
Waiting :Nginx 已经处理完正在等候下一次请求指令的驻留链接(开启keep-alive的情况下,这个值等于Active-(Reading+Writing))
所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中。
3、编写监控脚本
~]# vim /etc/zabbix/ngx_status.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
#检测nginx进程是否存在
function ping {
/sbin/pidof nginx | wc -l
}
#检测nginx性能
function active {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | grep 'Active' | awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | grep 'Reading' | awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | grep 'Writing' | awk '{print $4}'
}
function waiting {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | grep 'Waiting' | awk '{print $6}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | awk NR==3 | awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | awk NR==3 | awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/ngx_status/" 2> /dev/null | awk NR==3 | awk '{print $3}'
}
#执行function
$1
~]# chmod a+x /etc/zabbix/ngx_status.sh
测试脚本
~]# bash /etc/zabbix/ngx_status.sh requests
4、zabbix-agent配置文件
~]# vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1
UserParameter=nginx.status[*],/etc/zabbix/ngx_status.sh $1
~]# systemctl restart zabbix-agent
~]# systemctl enable zabbix-agent
zabbix server端测试
~]# yum -y install zabbix-get
~]# zabbix_get -s 172.20.120.56 -k 'nginx.status[accepts]' #-s后接agent-ip,-k后接自定义key
5、zabbix web端
下载模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA
导入模板
主机配置
主机添加模板(Template App NGINX)
二、通过snmp方式监控:
Zabbix监控Dell服务器硬件(iDRAC)
1、Dell服务器端
浏览器登录iDRAC
启用SNMP
点击“iDRAC”——“网络”——“服务”——“SNMP代理”
勾选“已启用”,然后点击“应用”
2、zabbix web端
下载模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA
导入模板
主机配置SNMP interfaces
主机添加模板Dell iDRAC;注意点:宏的设置需要对应起来(即SNMP community的值要对应起来)。
zabbix监控华为交换机和防火墙设备
1、在交换机和防火墙开启snmp功能,和设置SNMP community
2、zabbix web端
下载模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA
导入模板
主机配置SNMP interfaces
主机添加模板(Template Net Huawei VRP SNMPv2)注意点:宏的设置需要对应起来(即SNMP community的值要对应起来)。
windows服务器的监控:
1、安装agent客户端;官网下载地址https://assets.zabbix.com/downloads/4.0.15/zabbix_agents-4.0.15-win-amd64-openssl.zip
解压zabbix_agents-4.0.15-win-amd64-openssl.zip
conf目录存放是agent配置文件
bin文件存放windows下程序
修改conf目录下的zabbix_agentd.conf文件
LogFile=c:\zabbix_agentd.log //日志存放位置
EnableRemoteCommands=1 //允许在本地执行远程命令
LogRemoteCommands=1 //执行远程命令是否保存操作日志
Server=172.20.120.214 //zabbix_server主机IP地址
#ServerActive=192.168.1.10 //由于没有开启active模式,因此注释即可
Hostname=****** //被监控主机名,自身主机名
打开命令提示符进行安装
c:\zabbix\bin\zabbix_agentd.exe -i -c c:\zabbix\conf\zabbix_agentd.conf
c:\zabbix\bin\zabbix_agentd.exe -s -c c:\zabbix\conf\zabbix_agentd.conf
完成安装后,服务里就有了zabbix-agent服务
最后记得设置防火墙允许zabbix-agent互联
windows补充点:
默认windows模板没有cpu使用率监控项,添加如下:
名称:CPU usage%
键值:perf_counter[\Processor(_Total)\% Processor Time]
信息类型:浮点数
单位:%
问题:无法获取cpu使用率,server端日志:Collector is not started
解决方法:重建性能计数器设置:管理员执行下lodctr /R命令即可
设置报警方式:
一、邮件报警:
1、管理--报警媒介类型--创建媒体类型
2、管理--用户--报警媒介--添加
3、配置--动作--事件源:触发器--创建动作
操作内容如下:
故障{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}
恢复操作内容如下:
恢复{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}
更新操作内容如下:
更新信息:{EVENT.NAME}
更新信息:
{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
{EVENT.UPDATE.MESSAGE}
Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.
最后进行故障测试,验证是否发送成功。查看:报表--动作日志
二、阿里云短信报警:此处示例使用python3.6+(python2存在中文短信乱码的情况)
1、CentOS7 升级Python2.x到3.x
~]# python -V #查看当前python版本
~]# yum -y install python3
~]# mv /usr/bin/python /usr/bin/python.bak
~]# ln -sv /usr/bin/python3 /usr/bin/python
为了兼容yum:修改/usr/bin/yum和/usr/libexec/urlgrabber-ext-down文件,将 #!/usr/bin/python 改为 #!/usr/bin/python2.7
2、安装阿里云SDK核心库:
~]# pip3 install aliyun-python-sdk-core
3、阿里云短信服务,申请短信签名和模板:此处传递三个参数:${host},${time},${item}。
4、编写python脚本,并测试
~]# vim /usr/lib/zabbix/alertscripts/sendsms.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
import sys
client = AcsClient('
request = CommonRequest()
request.set_accept_format('json')
request.set_domain('dysmsapi.aliyuncs.com')
request.set_method('POST')
request.set_protocol_type('https') # https | http
request.set_version('2017-05-25')
request.set_action_name('SendSms')
#以下将zabbix传递的第一个参数为发送人号码,并将第二个参数message信息,切割为3个变量:host、time、item
string = sys.argv[2]
phone_number = sys.argv[1]
message = string.split(";")
dict1 = { }
dict1['host'] = message[0]
dict1['time'] = message[1]
dict1['item'] = message[2]
request.add_query_param('RegionId',"cn-hangzhou")
request.add_query_param('PhoneNumbers',phone_number)
request.add_query_param('SignName',"签名名称") #填写申请的签名名称
request.add_query_param('TemplateCode',"模版CODE") #填写申请的模版CODE
request.add_query_param('TemplateParam',dict1)
response = client.do_action(request)
# python2: print(response)
print(str(response, encoding = 'utf-8'))
~]# chmod a+x /usr/lib/zabbix/alertscripts/sendsms.py
~]# python /usr/lib/zabbix/alertscripts/sendsms.py 手机号码 '官网;18:03;test' #参数1:手机号码;参数2:3个参数用;号隔开
5、zabbix web端设置
管理--报警媒介类型--创建媒体类型
管理--用户--报警媒介--添加
配置--动作--事件源:触发器--创建动作
消息内容:
{TRIGGER.NAME}:{TRIGGER.KEY1};{EVENT.TIME};{TRIGGER.STATUS}
最后进行故障测试,验证是否发送成功。查看:报表--动作日志
三、钉钉群报警:
官方参考文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
1、钉钉建群,添加自定义webhook机器人,复制webhook地址;注意新版钉钉有安全设置。示例选择自定义关键字:监控
2、建立脚本
~]# vim /usr/lib/zabbix/alertscripts/dingding.sh
#!/bin/bash
to=$1
subject=$2
text=$3
curl 'webhook地址' \ #此处的地址为机器人的webhook地址
-H 'Content-Type: application/json' \
-d '
{"msgtype": "text",
"text": {
"content": "'"$text"'"
},
"at":{
"atMobiles": [ "'"$1"'" ],
"isAtAll": false
}
}'
~]# chmod a+x /usr/lib/zabbix/alertscripts/dingding.sh
~]# chown zabbix:zabbix /usr/lib/zabbix/alertscripts/dingding.sh
~]# bash /usr/lib/zabbix/alertscripts/dingding.sh 1 2 监控 #第三个参数必须包含自定义关键字,否则失败
3、同上设置报警媒介、用户和动作。
脚本参数按次序分别是:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
消息内容同邮件报警一致即可
收件人填写手机号码即可
最后进行故障测试,验证是否发送成功。查看:报表--动作日志