Fork me on GitHub

zabbix自动发现规则监控redis(主从哨兵)

简介

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页面:配置->模板
zabbix redis temp

2)添加应用集
zabbix web页面:配置->模板->redis模板名(点选)->应用集
zabbix redis app

3)添加自动发现规则
监控列表:
zabbix redis item list

zabbix web页面:配置->模板->redis模板名(点选)->自动发现规则->创建发现规则
zabbix redis rule

3)添加监控项
zabbix web页面:配置->模板->redis模板名(点选)->自动发现规则->自动发现规则名称(点选)->监控项原型->创建监控项
zabbix redis item

检测监控项是否成功,在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页面:配置->主机
zabbix redis hosts list
zabbix redis add hosts

5)为主机添加模板
在zabbix web页面:配置->主机->选择为此添加模板的主机->模板选项
zabbix redis add temp

问题

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)"

附录:

1、redis监控配置文件
2、redis监控脚本
3、redis监控模板

轻轻的我走了,正如我轻轻的来