简介
Zabbix是一个企业级的分布式开源监控方案。能够监控各种网络参数以及服务器健康性和完整性。支持灵活的通知机制,提供出色的报告和数据可视化功能
Zabbix组成
- 服务端server:核心组件,agent可以向它报告可用性和完整性信息和统计数据。该server所有的配置,数据和业务数据都存在数据库中
- 数据库存储:配置信息和Zabbix收集到的数据都被存储在数据库中,支持MySQL,PostgreSQL
- Web界面:提供了基于Web的访问界面(采用PHP语言编写)
- Proxy代理服务器:proxy可以替server收集性能和可用性的数据。proxy是一个可选择部署的部分,但它可以减轻zabbix server的负载压力
- 客户端agent:zabbix agent被部署在监控的目标上,能够主动监控本地的资源和应用程序,并收集到的数据汇报给zabbix server
Zabbix安装
请参考安装文档
环境:centos7系统,MySQL数据库,Zabbix3.4
192.168.1.60 centos7 zabbix-server
192.168.1.49 centos7 zabbix-agent
1.添加rpm包:
rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/6/x86_64/zabbix-release-3.4-1.el6.noarch.rpm
2.安装Zabbix server, frontend, agent
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent
3.安装数据库Mysql,并导入数据
1)为zabbix server创建授权用户zabbix
grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'password';
2)导入数据
#zcat 显示压缩包中文件的内容
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
3)为zabbix server配置数据库连接信息,修改/etc/zabbix/zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
4.为zabbix agent配置,修改/etc/zabbix/zabbix_agentd.conf
Server=192.168.1.60 #服务端IP
ServerActive=192.168.1.60 #服务端IP
Hostname=192.168.1.49 #被监控agent的IP或主机名
5.PHP相关配置
修改/etc/httpd/conf.d/zabbix.conf
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai
或者直接修改php.ini文件
监控redis
自动发现脚本
1)添加自动发现脚本/etc/zabbix/script/redis_monitor.py
自动发现脚本的内容即:
#!/usr/bin/env python
import os
import json
t=os.popen("netstat -nltp|awk -F: '/redis-server/&&/LISTEN/{print $2}'|awk '{print $1}'| grep -v grep | grep -v '^$'")
ports = []
for port in t.readlines():
r = os.path.basename(port.strip())
ports += [{'{#REDISPORT}':r}]
print json.dumps({'data':ports}, sort_keys=True, indent=4, separators=(',',':'))
2)添加redis监控的配置文件/etc/zabbix/zabbix_agentd.d/userparameter_redis.conf,内容即:
[root@localhost ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf
UserParameter=redis.discovery[*],/etc/zabbix/scripts/redis_monitor.py discovery $1
UserParameter=redis.ping[*],/etc/zabbix/scripts/redis_monitor.py ping $1
UserParameter=redis.item[*],/etc/zabbix/scripts/redis_monitor.py info $1 $2
UserParameter=sentinel.ping[*], /etc/zabbix/scripts/redis_monitor.py sentinel_ping $1
UserParameter=sentinel.item[*],/etc/zabbix/scripts/redis_monitor.py sentinel_info $1 $2
获取redis/sentinel服务端口
/etc/zabbix/scripts/redis_monitor.py discovery redis #获取redis服务端口
/etc/zabbix/scripts/redis_monitor.py discovery sentinel #获取sentinel服务端口
执行脚本,例如获取redis端口:
[root@localhost ~]# /etc/zabbix/scripts/redis_monitor.py discovery redis
{
"data":[
{
"{#REDISPORT}":"6379"
}
]
}
Zabbix web内配置
1)添加redis模板
在zabbix web页面:配置->模板
2)添加应用集
zabbix web页面:配置->模板->redis模板名(点选)->应用集
3)添加自动发现规则
监控列表:
zabbix web页面:配置->模板->redis模板名(点选)->自动发现规则->创建发现规则
3)添加监控项
zabbix web页面:配置->模板->redis模板名(点选)->自动发现规则->自动发现规则名称(点选)->监控项原型->创建监控项
检测监控项是否成功,在zabbix server端利用zabbix_get测试:
[root@localhost ~]# zabbix_get -s 192.168.1.49 -k 'redis.item[maxmemory,6379]'
524288000
注意:
(1)、默认管理账号:Admin/zabbix
(2)、zabbix-get是Zabbix服务端的一个命令,用于检测agent端的配置是否正确,很方便地知道key是否能正常获取到数据
如果zabbix-get没有安装,可以进行安装
yum install zabbix_get -y
(3)、 创建监控项中的”信息类型(Data Type)”,选择合适的数据类型,注意与获取的数据数据类型保持一致。我们在创建图表时采用的监控项数据类型必须是numeric(unsigned/float)
4)添加主机
在zabbix web页面:配置->主机
5)为主机添加模板
在zabbix web页面:配置->主机->选择为此添加模板的主机->模板选项
问题
1、zabbix server/agent以zabbix或者root用户启动问题
以zabbix用户启动(推荐)
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf #启动客户端agent
zabbix_server -c /etc/zabbix/zabbix_server.conf #启动服务端
以root用户启动
systemctl start zabbix_agentd.service
systemctl start zabbix_server.service
当以root用户启动时,需要设置/etc/zabbix/zabbix_agentd.conf内参数:
AllowRoot=1
2、日志文件/var/log/zabbix/zabbix_agentd.log出现如下问题:
no active checks on server [192.168.1.60:10051]: host [xxxxx] not found
在zabbix web页面Configuration->Hosts(配置->主机)页面更改Host name和zabbix_agentd.conf里面的Hostname一样,查看zabbix_agentd.conf文件中的Hostname
### Option: Hostname
# Unique, case sensitive hostname.
# Required for active checks and must match hostname as configured on the server.
# Value is acquired from HostnameItem if undefined.
#
# Mandatory: no
# Default:
# Hostname=
再次重启zabbix-agent服务即可
4、SELinux配置
#查询SElinux策略内各项规则的布尔值
[root@localhost ~]# getsebool -a
httpd_can_connect_zabbix --> off
zabbix_can_network --> off
httpd_can_network_connect_db --> off
#修改策略
setsebool -P httpd_can_connect_zabbix on
setsebool -P zabbix_can_network on
setsebool -P httpd_can_network_connect_db on
4、zabbix的图表中有些乱码
寻找windows中的字体源, 上传某一个字体到zabbix服务器中的指定目录/usr/share/zabbix/fonts/,比如字体“楷体 常规”
修改/usr/share/zabbix/include/defines.inc.php,将关键字“graphfont”改为“simkai”
define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
define('ZBX_FONT_NAME', 'graphfont');
#或命令行替换
sed -i 's/graphfont/simkai/g' /usr/share/zabbix/include/defines.inc.php
5、日志文件/var/log/zabbix/zabbix_server.log出现如下类似的错误,即是获取的数据数据类型和设置监控项的数据类型不匹配导致的
15714:20180514:075327.276 error reason for "192.168.1.49:redis.item[maxmemory,6379]" changed: Value "/opt/redis/redis-4.0.2/src/redis-cli
-h localhost -p 6379 -a 123456 info 2>/dev/null | grep -w maxmemory | cut -d: -f2
524288000" of type "string" is not suitable for value type "Numeric (unsigned)"
附录: