一、zabbix 监控 PHP-FPM应用实战
Nginx+PHP-FPM是目前最流行的LNMP架构,在基于PHP开发的系统下,对这些系统性能的监控,主要是关注PHP-FPM的运行状态,那么什么是PHP-FPM呢,我们说PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个PHP FastCGI管理器,它提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,对于PHP 5.3.3之前的php来说,它是一个补丁包,而从PHP5.3.3版本开始,PHP内部已经集成了php-fpm模块,意味着被PHP官方收录了。在编译PHP的时候指定“–enable-fpm”参数即可开启PHP-FPM。
1.1、 启用php-fpm状态功能
要监控php-fpm的运行状态非常简单,因为php-fpm和nginx一样,都内置了一个状态输出页面,这样我们就可以打开这个状态页面,然后通过编写程序抓取页面内容,就可以实现对php-fpm的状态监控。
因此,第一步是修改php-fpm配置文件,打开php-fpm的状态监控页面,这里我们是通过源码安装的php,安装路径为/usr/local/php7,所以php-fpm配置文件的路径为/usr/local/php7/etc/php-fpm.conf.default,将php-fpm.conf.default重命名为php-fpm.conf,然后打开/usr/local/php7/etc/php-fpm.d/www.conf (默认是www.conf.default, 重命名为www.conf 即可)文件,找到如下内容:
[root@localhost ~]#cat /usr/local/php7/etc/php-fpm.d/www.conf | grep status_path
pm.status_path = /status
pm.status_path参数就是配置php-fpm运行状态页的路径,这里保持默认为/status即可。当然也可以改成其它的。
除此之外,还需要关注如下php-fpm参数:
[www]
user = wwwdata
group = wwwdata
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 300
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
每个参数含义如下:
user和group用于设置运行php-fpm进程的用户和用户组。
listen是配置php-fpm进程监听的IP地址以及端口,默认是127.0.0.1:9000
pm用来指定php-fpm进程池开启进程的方式,有两个值可以选择,分别是static(静态)和dynamic(动态)。
dynamic表示php-fpm进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理,保证空闲的进程数不多于pm.max_spare_servers。
static表示php-fpm进程数是静态的, 进程数自始至终都是pm.max_children指定的数量,不再增加或减少。
pm.max_children = 300;在static方式下表示固定开启的php-fpm进程数量,在dynamic方式下表示开启php-fpm的最大进程数。
pm.start_servers = 20; 表示在dynamic方式下初始开启php-fpm进程数量。
pm.min_spare_servers = 5; 表示在dynamic方式空闲状态下开启的最小php-fpm进程数量。
pm.max_spare_servers = 35; 表示在dynamic方式空闲状态下开启的最大php-fpm进程数量,这里要注意pm.max_spare_servers的值只能小于等于pm.max_children的值。
这里需要注意的是:如果pm为static, 那么其实只有pm.max_children这个参数生效。系统会开启设置数量的php-fpm进程。如果pm为dynamic, 系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数,最大不超过pm.max_children设置的进程数。
那么,对于我们的服务器,选择哪种pm方式比较好呢?一个经验是,内存充足(16GB以上)的服务器,推荐pm使用static方式,内存较小(16GB以下)推荐pm使用dynamic方式。
1.2、nginx配置php-fpm状态页面
开启php-fpm的状态监控页面后,还需要在nginx中进行配置,可以在默认主机里面加上location,也可以在你希望能访问到的主机里面加上location。
打开nginx.conf配置文件,然后添加如下内容:
server {
listen 80;
server_name localhost;
location ~ ^/(status)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
}
这里需要添加的是location部分,添加到了“server_name”为“localhost”的server中。需要注意的是/usr/local/nginx/是nginx的安装目录,html是默认存放PHP程序的根目录。
1.3、 重启nginx/php-fpm
配置完成后,依次重启nginx和php-fpm,操作如下:
[root@web-server ~]# killall -HUP nginx
[root@web-server ~]# systemctl restart php-fpm
1.4、php-fpm status页面状态
接着就可以查看php-fpm的状态页面了,php-fpm状态页比较个性化的一个地方是它可以带参数,可以带的参数有json、xml、html,使用zabbix或者nagios监控可以考虑使用xml或者默认方式。
可通过如下方式查看php-fpm状态页面信息:
[root@localhost ~]# curl http://127.0.0.1/status
pool: www
process manager: dynamic
start time: 26/Jun/2018:18:21:48 +0800
start since: 209
accepted conn: 33
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 1
active processes: 1
total processes: 2
max active processes: 1
max children reached: 0
slow requests: 0
这个是默认输出方式,也可以输出为xml格式,
例如:
[root@localhost ~]# curl http://127.0.0.1/status?xml
<?xml version="1.0" ?>
<status>
<pool>www</pool>
<process-manager>dynamic</process-manager>
<start-time>1541665774</start-time>
<start-since>9495</start-since>
<accepted-conn>15</accepted-conn>
<listen-queue>0</listen-queue>
<max-listen-queue>0</max-listen-queue>
<listen-queue-len>128</listen-queue-len>
<idle-processes>1</idle-processes>
<active-processes>1</active-processes>
<total-processes>2</total-processes>
<max-active-processes>1</max-active-processes>
<max-children-reached>0</max-children-reached>
<slow-requests>0</slow-requests>
</status>
还可以输出为json格式,例如:
[root@localhost ~]# curl http://127.0.0.1/status?json
{"pool":"www","process manager":"dynamic","start time":1541665774,"start since":9526,"accepted conn":16,"listen queue":0,"max listen queue":0,"listen queue len":128,"idle processes":1,"active processes":1,"total processes":2,"max active processes":1,"max children reached":0,"slow requests":0}
至于输出为哪种方式,根据喜好自己选择,下面说下输出中每个参数的含义:
pool – fpm池子名称,大多数为www
process manager – 进程管理方式,值:static, dynamic or ondemand. dynamic
start time – 启动日期,如果reload了php-fpm,时间会更新
start since – 运行时长
accepted conn – 当前池子接受的请求数
listen queue – 请求等待队列,如果这个值不为0,那么要增加FPM的进程数量
max listen queue – 请求等待队列最高的数量
listen queue len – socket等待队列长度
idle processes – 空闲进程数量
active processes – 活跃进程数量
total processes – 总进程数量
max active processes – 最大的活跃进程数量(FPM启动开始算)
max children reached - 达到进程最大数量限制的次数,如果这个数量不为0,那说明最大进程数量太小了,可适当改大一点。
了解含义后,php-fpm这边就配置完成了。
1.5、在zabbix agent端添加自定义监控
监控php-fpm状态,非常简单,无需单独编写脚本,一条命令组合即可搞定,主要思路是通过命令行的curl命令,获取php-fpm状态页面的输出,然后过滤出来需要的内容即可,这里我们以监控172.16.213.232这个主机上面的php-fpm为例,在此主机上执行如下命令组合:
[root@nginx-server ~]# /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<accepted-conn>" | awk -F'>|<' '{ print $3}'
21
[root@nginx-server ~]# /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<process-manager>" | awk -F'>|<' '{ print $3}'
dynamic
[root@nginx-server ~]# /usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<active-processes>" | awk -F'>|<' '{ print $3}'
1
很简单吧,这个命令组合即可获取我们需要的监控值,可以让命令组合中grep命令后面的过滤值当做变量,这样就可以获取任意值了。
下面开始自定义监控项,在/etc/zabbix/zabbix_agentd.d目录下创建一个userparameter_phpfpm.conf文件,然后写入如下内容:
UserParameter=php-fpm.status[*],/usr/bin/curl -s "http://127.0.0.1/status?xml" | grep "<$1>" | awk -F'>|<' '{ print $$3}'
注意这个自定义监控项,定义了一个“php-fpm.status[ ]”,其中,这个“[ ]”就是“$1”提供的值,$1为输入值,例如输入active-processes,那么监控项的键值就为php-fpm.status[active-processes]。另外,最后那个“”,不然无法获取数据。
所有配置完成,重启zabbix agent服务使配置生效。
1.6、Zabbix图形界面导入模板
zabbix默认没有自带php-fpm的监控模板,需要自己编写,这里我们直接将编写好的模板供大家下载,可以从如下地址下载php-fpm模板:
[root@iivey /]# wget https://www.ixdba.net/zabbix/zbx_php-fpm_templates.zip
模板下载完成后,点击zabbix web导航上面的“配置”选项,然后选择“模板”,点击右上角“导入”按钮,开始导入php-fpm模板到zabbix中。
模板导入后,点击web上面的“设置”选项,然后选择“模板”,找到“Template App PHP-FPM”模板,可以看到此模板包含12个监控项,1个触发器,3个图形,1个应用集,重点看一下监控项和键值信息,如下图所示:
最后,还需要将此模板链接到需要监控的主机下,点击web导航上面的“配置”选项,然后选择“主机”,接着点开172.16.213.232主机链接,然后选择“模板”这个二级选项,通过“链接指示器”选择一个模板“Template App PHP-FPM”,添加进去即可。如下图所示:
模板添加后,172.16.213.232主机上php-fpm状态信息都已经纳入到了zabbix监控中了。如下图所示:
至此,zabbix监控php-fpm完成了。
二、zabbix 监控 tomcat应用实战
对于使用tomcat的一些java类应用,在应用系统异常的时候,我们需要了解tomcat以及JVM的运行状态,以判断是程序还是系统资源出现了问题,此时,对tomcat的监控就显得尤为重要,下面就详细介绍下如何通过zabbix监控tomcat实例的运行状态。
这里我们以tomcat8.x版本为例,客户端主机为172.16.213.239,来看看怎么部署对tomcat的监控。tomcat的安装就不再介绍了,下面先介绍下zabbix对tomcat的监控流程。
zabbix监控tomcat,首先需要在zabbix_server上开启java poller, 还需要开启zabbx_java进程,开启zabbx_java后,其实相当于开启了一个JavaGateway,端口为10052,最后,还需要在Tomcat服务器上开启12345端口,提供性能数据输出。
因此,zabbix监控tomcat数据获取流程为:java poller–>JavaGateway:10052–>Tomcat:12345,如下图所示:
2.1、配置Tomcat JMX
首选在需要监控的tomcat服务器(172.16.213.239)上,编辑catalina.sh,加入如下配置:
CATALINA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.16.213.232 -Dcom.sun.management.jmxremote.port=12345"
这里需要注意,必须增加-Djava.rmi.server.hostname选项,并且后面的IP就是tomcat服务器的IP。
最后,执行如下命令,重启tomcat服务:
[root@localhost ~]#/usr/local/tomcat/bin/startup.sh
2.2、编译zabbix server,加入java支持
默认情况下,zabbix server一般是没有加入java支持的,所以要让zabbix监控tomcat,就需要开启zabbix监控java的专用服务zabbix-java。
注意,在启用java监控支持之前,zabbix server服务器上需要安装JDK,并需要设置JAVA_HOME,以让系统能够识别到jdk的路径。
在zabbix server服务器上,编译安装zabbix server,需要加上–enable-java,以支持jmx监控,如果之前的zabbix server没加此选项,那么需要重新编译安装,编译参数如下:
./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --enable-java --with-libxml2
如果不想编译,也可以去下载对应版本的zabbix-java-gateway的rpm包,这里我们采用下载rpm包方式安装,下载地址为:
https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/
这里下载的包为zabbix-java-gateway-4.0.0-2.el7.x86_64.rpm,然后直接安装即可:
[root@localhost zabbix]#rpm -ivh zabbix-java-gateway-4.0.0-2.el7.x86_64.rpm
安装完毕后,会生成一个/usr/sbin/zabbix_java_gateway脚本,这个脚本后面要用到。
2.3、在zabbix server上启动zabbix_java
上面刚刚安装好了zabbix-java-gateway服务,接下来就可以在zabbix server服务器上启动zabbix_java服务了,开启10052端口:
[root@localhost zabbix]#/usr/sbin/zabbix_java_gateway
[root@localhost zabbix]# netstat -antlp|grep 10052
tcp6 0 0 :::10052 :::* LISTEN 2145/java
执行上面脚本后,会启动一个10052端口,这个就是JavaGateway启动的端口。
2.4、修改zabbix server配置
默认情况下,zabbix server未启用JavaPollers,所以需要修改zabbix_server.conf,增加如下配置:
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
修改完成后,重新启动zabbix server服务。
2.5、Zabbix图形界面配置jmx监控
zabbix默认自带了tomcat的监控模板,但是这个模板有些问题,这里推荐使用我们编写好的模板供,可以从如下地址下载tomcat zabbix模板:
[root@iivey /]# wget https://www.ixdba.net/zabbix/zbx_tomcat_templates.zip
模板下载完成后,要导入新的模板,还需要先删除之前旧的模板,点击zabbix web导航上面的“配置”选项,然后选择“模板”,找到系统默认的tomcat模板“Template App Apache Tomcat JMX”,然后选中,点击下面的“删除”按钮,删除这个默认模板。
接着,点击右上角“导入”按钮,开始导入新的tomcat模板到zabbix中。模板导入后,点击web上面的“设置”选项,然后选择“模板”,找到“Tomcat JMX”模板,可以看到此模板包含16个监控项,4个图形,5个应用集,重点看一下监控项和键值信息,如下图所示:
接着,还需要将此模板链接到需要监控的主机下,点击web导航上面的“配置”选项,然后选择“主机”,接着点开172.16.213.239主机链接,然后选择“模板”这个二级选项,通过“链接指示器”选择一个模板“Tomcat JMX”,添加进去即可。如下图所示:
最后,最重要的是,还要在172.16.213.239主机中添加JMX接口,通过此接口接收tomcat下的状态数据,添加方式如下图所示:
注意这里JMX接口的IP地址就是tomcat服务器IP,端口默认就是12345。
好啦,到此为止,zabbix监控tomcat就配置好了。
要查看zabbix是否能获取到数据, 点击web上面的“监测中”选项,然后选择“最新数据”,根据过滤器指定条件,即可看到172.16.213.239主机下每个监控项是否获取到了最新数据,如下图所示:
下面是堆叠图形:
可以看到,这是对tomcat的JVM运行状态的监控,将多个监控项都放在一个图形中展示出来了。
三、zabbix监控Redis实例应用实战
Redis有自带的redis-cli客户端,通过redis的info命令可以查询到redis的运行状态,那么zabbix对redis的监控就是通过客户端redis-cli登录redis,然后根据info命令去获取状态数据的,根据这个思路,我们可以编写一个脚本,然后让zabbix调用这个脚本,这样就实现了对redis的监控。
3.1、redis中info命令的使用
要获得redis的当前情况,可以通过redis-cli工具登录到redis命令行,然后通过info命令查看。
redis-cli命令格式:
redis-cli -h [hostname] -p [port] -a [password] info [参数]
可以通过以下的可选参数,选择查看特定分段的服务器信息:
server:Redis服务器相关的通用信息
clients:客户端连接的相关信息
memory:内存消耗的相关信息
persistence:RDB(Redis DataBase)和AOF(Append-Only File)的相关信息
stats:通用统计数据
replication:主/从复制的相关信息
cpu:CPU消耗的统计数据
commandstats:Redis命令的统计数据
cluster:Redis集群的相关信息
keyspace:数据库相关的统计数据
INFO命令还可以使用以下参数:
all:返回所有的服务器信息
default:只返回默认的信息集合
例如,要查询redis server的信息,可执行如下命令:
[root@redis-server ~]#redis-cli -h 127.0.0.1 -a xxxxxx -p 6379 info server
# Server
redis_version:3.2.12
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:3dc3425a3049d2ef
redis_mode:standalone
os:Linux 3.10.0-862.2.3.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:7003
run_id:fe7db38ba0c22a6e2672b4095ce143455b96d2cc
tcp_port:6379
uptime_in_seconds:18577
uptime_in_days:0
hz:10
lru_clock:15029358
executable:/etc/zabbix/redis-server
config_file:/etc/redis.conf
输出每个选项含义如下:
redis_version : Redis服务器版本
redis_git_sha1 : Git SHA1
redis_git_dirty : Git dirty flag
os : Redis 服务器的宿主操作系统
arch_bits : 架构(32 或 64 位)
multiplexing_api : Redis所使用的事件处理机制
gcc_version : 编译Redis时所使用的 GCC 版本
process_id : 服务器进程的PID
run_id : Redis 服务器的随机标识符(用于 Sentinel 和集群)
tcp_port : TCP/IP 监听端口
uptime_in_seconds : 自 Redis 服务器启动以来,经过的秒数
uptime_in_days : 自 Redis 服务器启动以来,经过的天数
lru_clock : 以分钟为单位进行自增的时钟,用于 LRU 管理
要查询内存使用情况,可执行如下命令:
[root@redis-server ~]#redis-cli -h 127.0.0.1 -a xxxxxx -p 6379 info memory
# Memory
used_memory:88400584
used_memory_human:84.31M
used_memory_rss:91541504
used_memory_rss_human:87.30M
used_memory_peak:88401560
used_memory_peak_human:84.31M
total_system_memory:8201732096
total_system_memory_human:7.64G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1.04
mem_allocator:jemalloc-3.6.0
输出每个选项含义如下:
used_memory : 由Redis分配器分配的内存总量,以字节(byte)为单位
used_memory_human : 以人类可读的格式返回 Redis 分配的内存总量
used_memory_rss : 从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致。
used_memory_peak : Redis 的内存消耗峰值(以字节为单位)
used_memory_peak_human : 以人类可读的格式返回 Redis 的内存消耗峰值
used_memory_lua : Lua 引擎所使用的内存大小(以字节为单位)
mem_fragmentation_ratio : used_memory_rss和used_memory之间的比率
mem_allocator : 在编译时指定的, Redis所使用的内存分配器。可以是libc 、 jemalloc或者tcmalloc 。
查询客户端连接情况,执行如下命令:
[root@redis-server ~]# redis-cli -h 127.0.0.1 -a xxxxxx -p 6379 info clients
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
输出每个选项含义如下:
connected_clients : 已连接客户端的数量(不包括通过从属服务器连接的客户端)
client_longest_output_list : 当前连接的客户端当中,最长的输出列表
client_longest_input_buf : 当前连接的客户端当中,最大输入缓存
blocked_clients : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
查询CPU使用情况,执行如下命令:
[root@tomcatserver1 ~]# redis-cli -h 127.0.0.1 -a xxxxxx -p 6379 info cpu
# CPU
used_cpu_sys:17.24
used_cpu_user:18.10
used_cpu_sys_children:0.12
used_cpu_user_children:0.88
输出每个选项含义如下:
used_cpu_sys : Redis 服务器耗费的系统CPU 。
used_cpu_user : Redis 服务器耗费的用户CPU 。
used_cpu_sys_children : 后台进程耗费的系统CPU 。
used_cpu_user_children : 后台进程耗费的用户CPU 。
查询一般统计信息,执行如下命令:
[root@tomcatserver1 ~]# redis-cli -h 127.0.0.1 -a xxxxxx -p 6379 info Stats
# Stats
total_connections_received:26
total_commands_processed:1000082
instantaneous_ops_per_sec:0
total_net_input_bytes:26841333
total_net_output_bytes:13826427
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:2502
migrate_cached_sockets:0
输出每个选项含义如下:
total_connections_received : 服务器已接受的连接请求数量。
total_commands_processed : 服务器已执行的命令数量。
instantaneous_ops_per_sec : 服务器每秒钟执行的命令数量。
rejected_connections : 因为最大客户端数量限制而被拒绝的连接请求数量。
expired_keys : 因为过期而被自动删除的数据库键数量。
evicted_keys : 因为最大内存容量限制而被驱逐(evict)的键数量。
keyspace_hits : 查找数据库键成功的次数。
keyspace_misses : 查找数据库键失败的次数。
pubsub_channels : 目前被订阅的频道数量。
pubsub_patterns : 目前被订阅的模式数量。
latest_fork_usec : 最近一次 fork() 操作耗费的毫秒数。
查询redis主从复制信息,执行如下命令:
[root@tomcatserver1 ~]# redis-cli -h 127.0.0.1 -a xxxxxx -p 6379 info Replication
# Replication
role:master
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
输出每个选项含义如下:
role : 如果当前服务器没有在复制任何其他服务器,那么这个域的值就是master ;否则的话,这个域的值就是slave 。注意,在创建复制链的时候,一个从服务器也可能是另一个服务器的主服务器。
connected_slaves:已连接的Redis从机的数量。
master_repl_offset:全局的复制偏移量。
repl_backlog_active:表示Redis服务器是否为部分同步开启复制备份日志(backlog)功能的标志。
repl_backlog_size:表示backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。backlog设置的越大,slave可以失连的时间就越长。
repl_backlog_first_byte_offset:备份日志缓冲区中的首个字节的复制偏移量。
repl_backlog_histlen:备份日志的实际数据长度。
如果当前服务器是一个从服务器的话,那么这个部分还会加上以下内容:
master_host : 主服务器的 IP 地址。
master_port : 主服务器的 TCP 监听端口号。
master_link_status : 复制连接当前的状态, up 表示连接正常, down 表示连接断开。
master_last_io_seconds_ago : 距离最近一次与主服务器进行通信已经过去了多少秒钟。
master_sync_in_progress : 一个标志值,记录了主服务器是否正在与这个从服务器进行同步。
如果同步操作正在进行,那么这个部分还会加上以下内容:
master_sync_left_bytes : 距离同步完成还缺少多少字节数据。
master_sync_last_io_seconds_ago : 距离最近一次因为 SYNC 操作而进行 I/O 已经过去了多少秒。
如果主从服务器之间的连接处于断线状态,那么这个部分还会加上以下内容:
master_link_down_since_seconds : 主从服务器连接断开了多少秒。
3.2、编写监控redis状态的脚本与模板
知道了redis-cli以及info命令的用法后,就可以轻松编写redis状态脚本了,脚本代码较多,大家可直接从如下地址下载即可:
[root@iivey /]# wget https://www.ixdba.net/zabbix/zbx-redis-template.zip
接着,就是编写redis的zabbix监控模板了,zabbix默认没有自带redis的监控模板,需要自己编写,这里我们直接将编写好的模板供大家下载,可以从如
下地址下载redis zabbix模板:
[root@iivey /]# wget https://www.ixdba.net/zabbix/zbx-redis-template.zip
3.3、zabbix agent上自定义redis监控项
这里假定redis服务器为172.16.213.232,redis版本为redis3.2,已经在redis服务器安装了zabbix agent,接下来还需要添加自定义监控项。
要添加自定义监控项,可分为两个步骤完成,第一个步骤是将redis监控脚本放到需要监控的redis服务器上的/etc/zabbix/shell目录下,如果没有shell目录,自行创建一个即可。然后执行授权:
[root@iivey shell]#chmod 755 redis_status
此脚本的用法是可接受一个或两个输入参数,例如:
获取redis内存状态,输入一个参数:
[root@redis-server ~]# /etc/zabbix/shell/redis_status used_memory
192766416
获取redis keys信息,需要输入两个参数:
[root@redis-server ~]# /etc/zabbix/shell/redis_status db0 keys
2000008
接着,第二个步骤是在redis服务器上的/etc/zabbix/zabbix_agentd.d目录下创建userparameter_redis.conf文件,内容如下:
UserParameter=Redis.Info[*],/etc/zabbix/shell/redis_status $1 $2
UserParameter=Redis.Status,/usr/bin/redis-cli -h 127.0.0.1 -p 6379 ping|grep -c PONG
注意这里/etc/zabbix/shell/redis_status的路径。最后,重启zabbix-agent服务完成agent端的配置:
[root@redis-server ~]# systemctl start zabbix-agent
3.4、Zabbix图形界面配置redis监控
有了redis模板后,就需要导入redis模板,点击zabbix web导航上面的“配置”选项,然后选择“模板”,接着,点击右上角“导入”按钮,开始导入redis模板到zabbix中。
模板导入后,点击web上面的“设置”选项,然后选择“模板”,找到“Template DB Redis”模板,可以看到此模板包含19个监控项,5个图形,1个触发器,5个应用集,重点看一下监控项和键值信息,如下图所示:
接着,还需要将此模板链接到需要监控的主机下,点击web导航上面的“配置”选项,然后选择“主机”,接着点开172.16.213.232主机链接,然后选择“模板”这个二级选项,通过“链接指示器”选择一个模板“Template DB Redis”,添加进去即可。如下图所示:
好啦,到此为止,zabbix监控redis就配置好了。
要查看zabbix是否能获取到数据, 点击web上面的“监测中”选项,然后选择“最新数据”,根据过滤器指定条件,即可看到172.16.213.232主机下每个监控项是否获取到了最新数据,如下图所示:
上图中演示了要想查看多个监控项的堆叠数据图,可选中多个监控项,然后选择下面的“显示堆叠数据图”即可,这样显示的图形就是多个图形的集合,如下图所示:
到这里为止,zabbix监控redis配置完成了。