Zabbix 是一个企业级分布式开源监控解决方案。
Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。
Zabbix 支持主动轮询(polling)和被动捕获(trapping)。Zabbix所有的报表、统计数据和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。
Zabbix 是免费的。Zabbix 是根据 GPL 通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。
源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件。
主机名 | 服务 | IP |
---|---|---|
zabbix_server | zabbix_server、zabbix_agent、mysql | 192.168.1.13 |
zabbix_agent | zabbix_agent | 192.168.1.15 |
在zabbix_server主机上操作:
#rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
#yum clean all
yum install zabbix-server-mysql zabbix-agent
yum install centos-release-scl
vi /etc/yum.repos.d/zabbix.repo
[zabbix-frontend]
…
enabled=1
…
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
在数据库主机上运行以下代码
#mysql -uroot -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@”%” identified by “zabbix”
mysql> exit;
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix zabbix -p
vi /etc/zabbix/zabbix_server.conf 密码为数据库中设置的密码。
DBPassword=Zabbix
DBSocket=/forp/mysql-8.0.23/temp/mysql.sock
vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai
systemctl start zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
http://server_ip_or_name/zabbix
点击下一步
OK表示设置正常,点击下一步。
配置完成。登录,默认的账号和密码是Admin/zabbix
设置web页面中文显示
解决方法
从windows找到楷体字体simkai,搜索楷体即可,windows路径 c盘–>Windows–>Fonts
在zabbix-server上备份zabbix默认字体并且上传新字体
[root@zabbix-server ~]# cd /usr/share/fonts/dejavu/
上传字体,修改名称为DejaVuSans.ttf
[root@zabbix-server dejavu]# mv DejaVuSans.ttf DejaVuSans.ttf.bak
[root@zabbix-server dejavu]# mv simkai.ttf DejaVuSans.ttf
注意字体的权限要让zabbix用户可以读
chmod 644 DejaVuSans.ttf
在zabbix_agent主机上操作:
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
yum -y install zabbix-agent
vim /etc/zabbix/zabbix_agentd.conf
Server=191.168.1.13 #改成 监控端的ip 被动模式
ServerActive=191.168.1.13 #改成 监控端的ip 主动模式
Hostname=Zabbix server #把这项注释掉
HostnameItem=system.hostname #把这项注释去掉 (自动获取主机名)
启动zabbix_agent服务
systemctl start zabbix-agent
Systemctl enable zabbix-agent
在windows客户端执行
Zabbix下载地址:https://www.zabbix.com/download
在D盘新建zabbix文件夹,将下载好的安装包解压到D盘的zabbix下
找到conf下的配置文件 zabbix_agentd.conf ,修改LogFile、Server、ServerActive 、Hostname这几个参数。具体配置如下:
LogFile=D:\zabbix\zabbix_agentd.log
Server=192.168.1.134 #zabbix-server端地址
ServerActive=192.168.1.134:10051 #zabbix-server端地址
#Hostname=Win-server-2016 #注释掉
HostnameItem=system.hostname #去掉注释,自动获取主机名
修改好配置文件后,用CMD(需有管理员权限)将Zabbix Agent安装为Windows系统的服务,在windows控制台下执行以下命令:
D:\zabbix\bin\zabbix_agentd.exe -i -c D:\zabbix\conf\zabbix_agentd.conf
控制台输出信息如下,表示安装成功:
zabbix_agentd.exe [4864]: service [Zabbix Agent] installed successfully
zabbix_agentd.exe [4864]: event source [Zabbix Agent] installed successfully
C:\zabbix\bin\win64\zabbix_agentd.exe -c C:\zabbix\conf\zabbix_agentd.win.conf -s
控制面板–windows 防火墙–高级设置–入站规则–新建规则, 详细步骤参考下图:
根据上图步骤,依次添加,完成入站规则的添加
其中的主机名称和客户端IP请根据实际情况填写。
ZBX为绿代表正常可监控。
yum -y install mailx
vi /etc/mail.rc
set [email protected]
set smtp=smtp.exmail.qq.com
set [email protected]
set smtp-auth-password=Helper666
set smtp-auth=login
cd /usr/lib/zabbix/alertscripts/ 进入脚本存放目录
vi sendmail.sh
#!/bin/sh
echo ‘start’ >> /tmp/zabbix.log
messages=echo $3 | tr '\r\n' '\n'
subject=echo $2 | tr '\r\n' '\n'
echo “ m e s s a g e s " ∣ m a i l − s " {messages}" | mail -s " messages"∣mail−s"{subject}” 1 e c h o " 1 echo " 1echo"{messages}" >> /tmp/zabbix.log
echo “end” >> /tmp/zabbix.log
date >> /tmp/zabbix.log
echo ‘-------------’ >> /tmp/zabbix.log
设置脚本所有者为zabbix用户
chown zabbix:zabbix sendmail.sh
设置脚本执行权限
chmod +x sendmail.sh
选择“通讯录”,添加一个部门,并新增一个成员,成员添加完之后,成员需关注你注册的企业号。
新建一个zabbix告警的”消息型“应用,如下:
配置应用的相关权限,让你应用对你的组及成员可见。记录CorpID和Secret的值。
安装simplejson
#wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
#tar zxvf simplejson-3.8.2.tar.gz
#cd simplejson-3.8.2
#python setup.py build
#python setup.py install
进入zabbix的脚本目录
#cd /usr/lib/zabbix/alertscripts/
#git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
#cp Zabbix-Alert-WeChat/wechat.py /usr/lib/zabbix/alertscripts/
#chmod +x wechat.py
使用之前记录的CorpID和Secret
#!/usr/bin/python
#_coding:utf-8 _
import urllib,urllib2
import json
import sys
import simplejson
reload(sys)
sys.setdefaultencoding(‘utf-8’)
def gettoken(corpid,corpsecret):
gettoken_url = ‘https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=’ + corpid + ‘&corpsecret=’ + corpsecret
print gettoken_url
try:
token_file = urllib2.urlopen(gettoken_url)
except urllib2.HTTPError as e:
print e.code
print e.read().decode(“utf8”)
sys.exit()
token_data = token_file.read().decode(‘utf-8’)
token_json = json.loads(token_data)
token_json.keys()
token = token_json[‘access_token’]
return token
def senddata(access_token,user,subject,content):
send_url = ‘https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=’ + access_token
send_values = {
“touser”:“weixin”, #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
“toparty”:“2”, #企业号中的部门id。
“msgtype”:“text”, #消息类型。
“agentid”:“1”, #企业号中的应用id。
“text”:{
“content”:subject + ‘\n’ + content
},
“safe”:“0”
}
#send_data = json.dumps(send_values, ensure_ascii=False)
send_data = simplejson.dumps(send_values, ensure_ascii=False).encode(‘utf-8’)
send_request = urllib2.Request(send_url, send_data)
response = json.loads(urllib2.urlopen(send_request).read())
print str(response)
if name == ‘main’:
user = str(sys.argv[1]) #zabbix传过来的第一个参数
subject = str(sys.argv[2]) #zabbix传过来的第二个参数
content = str(sys.argv[3]) #zabbix传过来的第三个参数
corpid = ‘wx55e2936995a90a90’ #CorpID是企业号的标识
corpsecret = ‘CvHI0Jko3qsvv1XkEufWDWSWQj-1a5iuPpw-lcVcFze8yHFgcrBTDSFTFQ6lzPQq’ #corpsecretSecret是管理组凭证密钥
accesstoken = gettoken(corpid,corpsecret)
senddata(accesstoken,user,subject,content)
[root@zabbix-server alertscripts]# ./wechat.py test test message
https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ww2b6c88112f22f05a&corpsecret=7E19pTE9QRICouULJ4v2EDItL0u5IqBU0H7xq4ME3SM
{u’invaliduser’: u’admin’, u’errcode’: 0, u’errmsg’: u’ok’}
提示消息发送成功,查看微信消息可看到相关的测试信息:
手动停止zabbix-agent上的mysql服务,测试是否会收到消息
能收到微信,启动mysql服务后同样能收到告警恢复的消息,表示微信告警功能正常。
思路1:通过监测应用的端口是否挂掉来判断该端口对应的应用是否挂掉。
思路2:如果一个进程没有监听端口(即每次服务启动,生成的端口都不固定),则可以直接监测应用的进程,来判断应用有没有挂
以191.168.1.15这台服务器的mysql服务为例:
配置 —> 主机:191.168.1.15 —> 监控项 —> 创建监控项
根据自己需求填写 监控项参数
配置 —> 主机: 191.168.1.15 ----> 触发器 ----> 创建触发器
如果一个进程没有监听端口,则可以使用如下 key
key: proc.num[,,,]
通过某用户执行,某进程状态,进程名称来统计进程的数量
name: 是进程名称(默认“all processes”)
user: 运行该进程的用户名(默认"all user")
state: 进程状态(默认"all"), 可选:run, sleep, zomb
cmdline: 该项内容是模糊匹配,命令行过滤(支持正则表达式)
注:name 匹配可能不是很准,一般根据cmdline来匹配进程
先在zabbix 服务端通过 zabbix_get 测一下(不要在zabbix agent端 使用zabbix_agent 命令去测)
mysql服务关闭后
[root@zabbix_server ~]# zabbix_get -s 191.168.1.15 -k proc.num[,mysql,all,mysql]
0
[root@zabbix_server ~]# zabbix_get -s 191.168.1.15 -k proc.num[,mysql]
0
mysql服务启动后
[root@zabbix_server ~]# zabbix_get -s 191.168.1.15 -k proc.num[,mysql,all,mysql]
1
[root@zabbix_server ~]# zabbix_get -s 191.168.1.15 -k proc.num[,mysql]
1
配置 —> 主机:191.168.1.15 —> 监控项 —> 创建监控项