一、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个应用集,重点看一下监控项和键值信息,如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

最后,还需要将此模板链接到需要监控的主机下,点击web导航上面的“配置”选项,然后选择“主机”,接着点开172.16.213.232主机链接,然后选择“模板”这个二级选项,通过“链接指示器”选择一个模板“Template App PHP-FPM”,添加进去即可。如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

模板添加后,172.16.213.232主机上php-fpm状态信息都已经纳入到了zabbix监控中了。如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

至此,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,如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

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个应用集,重点看一下监控项和键值信息,如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

接着,还需要将此模板链接到需要监控的主机下,点击web导航上面的“配置”选项,然后选择“主机”,接着点开172.16.213.239主机链接,然后选择“模板”这个二级选项,通过“链接指示器”选择一个模板“Tomcat JMX”,添加进去即可。如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

最后,最重要的是,还要在172.16.213.239主机中添加JMX接口,通过此接口接收tomcat下的状态数据,添加方式如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

注意这里JMX接口的IP地址就是tomcat服务器IP,端口默认就是12345。
好啦,到此为止,zabbix监控tomcat就配置好了。
要查看zabbix是否能获取到数据, 点击web上面的“监测中”选项,然后选择“最新数据”,根据过滤器指定条件,即可看到172.16.213.239主机下每个监控项是否获取到了最新数据,如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

下面是堆叠图形:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

可以看到,这是对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个应用集,重点看一下监控项和键值信息,如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

接着,还需要将此模板链接到需要监控的主机下,点击web导航上面的“配置”选项,然后选择“主机”,接着点开172.16.213.232主机链接,然后选择“模板”这个二级选项,通过“链接指示器”选择一个模板“Template DB Redis”,添加进去即可。如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

好啦,到此为止,zabbix监控redis就配置好了。

要查看zabbix是否能获取到数据, 点击web上面的“监测中”选项,然后选择“最新数据”,根据过滤器指定条件,即可看到172.16.213.232主机下每个监控项是否获取到了最新数据,如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

上图中演示了要想查看多个监控项的堆叠数据图,可选中多个监控项,然后选择下面的“显示堆叠数据图”即可,这样显示的图形就是多个图形的集合,如下图所示:

Zabbix 监控PHP-FTPM、Tomcat、Redis应用

到这里为止,zabbix监控redis配置完成了。