zabbix server端:centos7.6
php
1、关闭防火墙和selinux、设置时区和时间同步
python
~]# systemctl stop firewalldmysql
~]# systemctl disable firewalldlinux
~]# setenforce 0nginx
~]# vim /etc/sysconfig/selinuxweb
SELINUX=disabled #将enforcing更改成disabledsql
# timedatectl set-timezone Asia/Shanghai数据库
~]# yum -y install chronyjson
~]# vim /etc/chrony.confvim
server ntp1.aliyun.com iburst #修改成阿里云的ntp服务器
~]# systemctl restart chronyd
2、更换为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
3、安装LAMP环境
~]# yum -y install mariadb mariadb-server httpd php php-mysql
~]# systemctl start httpd mariadb
~]# systemctl enable httpd mariadb
~]# mysql_secure_installation
4、安装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
5、浏览器初始化zabbix的web
~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/usr/share/zabbix"
~]# systemctl restart httpd
访问http://server-ip,默认帐号为Admin,密码为zabbix。生产环境注意:一、修改Admin密码;二、关闭guest用户。
6、因为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
7、添加对中文的支持,避免中文乱码问题: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
经常使用监控方式:
1、经过agent监控:
一、安装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
二、添加到web监控的模式:
a、手动添加
访问web端http://server-ip:配置-主机-建立主机-设置主机相关信息:如图
b、自动发现
步骤:
一、设置自动发现后要进行的动做
访问web端http://server-ip:配置-动做-事件源(自动发现)-建立动做
二、设置自动发现规则
访问web端http://server-ip:配置-自动发现-建立发现规则
Zabbix监控nginx性能
一、查看是否有with-http_stub_status_module该模块
~]# nginx -V
二、配置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数较多,则说明并发访问量很是大,正在处理过程当中。
三、编写监控脚本
~]# 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
四、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
五、zabbix web端
下载模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA
导入模板
主机配置
主机添加模板(Template App NGINX)
2、经过snmp方式监控:
Zabbix监控Dell服务器硬件(iDRAC)
一、Dell服务器端
浏览器登陆iDRAC
启用SNMP
点击“iDRAC”——“网络”——“服务”——“SNMP代理”
勾选“已启用”,而后点击“应用”
二、zabbix web端
下载模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA
导入模板
主机配置SNMP interfaces
主机添加模板Dell iDRAC;注意点:宏的设置须要对应起来(即SNMP community的值要对应起来)。
zabbix监控华为交换机和防火墙设备
一、在交换机和防火墙开启snmp功能,和设置SNMP community
二、zabbix web端
下载模板:https://pan.baidu.com/s/1CCaIURk-kXAcEXJ6BD-TEA
导入模板
主机配置SNMP interfaces
主机添加模板(Template Net Huawei VRP SNMPv2)注意点:宏的设置须要对应起来(即SNMP community的值要对应起来)。
windows服务器的监控:
一、安装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、邮件报警:
一、管理--报警媒介类型--建立媒体类型
二、管理--用户--报警媒介--添加
三、配置--动做--事件源:触发器--建立动做
操做内容以下:
故障{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}.
最后进行故障测试,验证是否发送成功。查看:报表--动做日志
2、阿里云短信报警:此处示例使用python3.6+(python2存在中文短信乱码的状况)
一、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
二、安装阿里云SDK核心库:
~]# pip3 install aliyun-python-sdk-core
三、阿里云短信服务,申请短信签名和模板:此处传递三个参数:${host},${time},${item}。
四、编写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('<accessKeyId>', '<accessSecret>','default') #此处填写accesskey信息,其获取地址:https://usercenter.console.aliyun.com
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个参数用;号隔开
五、zabbix web端设置
管理--报警媒介类型--建立媒体类型
管理--用户--报警媒介--添加
配置--动做--事件源:触发器--建立动做
消息内容:
{TRIGGER.NAME}:{TRIGGER.KEY1};{EVENT.TIME};{TRIGGER.STATUS}
最后进行故障测试,验证是否发送成功。查看:报表--动做日志
3、钉钉群报警:
官方参考文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
一、钉钉建群,添加自定义webhook机器人,复制webhook地址;注意新版钉钉有安全设置。示例选择自定义关键字:监控
二、创建脚本
~]# 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 监控 #第三个参数必须包含自定义关键字,不然失败
三、同上设置报警媒介、用户和动做。
脚本参数按次序分别是:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}
消息内容同邮件报警一致便可
收件人填写手机号码便可
最后进行故障测试,验证是否发送成功。查看:报表--动做日志