Zabbix之六----Zabbix监控memcached、redis、nginx及邮件分级报警通知
实战一:Zabbix监控memcached缓存
1、环境准备:
192.168.7.100:zabbix-server服务器主机
192.168.7.101:memcached服务器
2、配置memcached服务
1、在node1主机上安装memcached服务(主动模式主机)
[root@node1 ~]# yum install memcached -y
2、修改memcached配置文件
[root@node1 ~]# vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="4096" # 最大连接数 CACHESIZE="1024" # 最大缓存 OPTIONS=""
3、启动memcached服务
[root@node1 ~]# systemctl start memcached
4、安装nc命令
[root@node1 ~]# yum install nc -y
5、用echo -e命令验证:取出线程数和当前连接数的取值效果
[root@node1 ~]# echo -e "stats\nquit" | nc 127.0.0.1 "11211" | grep "STAT threads" | awk '{print $3}' # 取出当前的线程数 4 [root@node1 ~]# echo -e "stats\nquit" | nc 127.0.0.1 "11211" | grep "STAT curr_connections" | awk '{print $3}' # 取出当前连接数 10 [root@node1 yum.repos.d]# echo -e "stats\nquit" | nc 127.0.0.1 "11211" # 查看所有的数据 STAT pid 111624 STAT uptime 2825 STAT time 1582536863 STAT version 1.4.15 STAT libevent 2.0.21-stable STAT pointer_size 64 STAT rusage_user 0.192507 STAT rusage_system 0.261260 STAT curr_connections 10 STAT total_connections 16 STAT connection_structures 11 STAT reserved_fds 20 STAT cmd_get 0 STAT cmd_set 0 STAT cmd_flush 0 STAT cmd_touch 0 STAT get_hits 0 STAT get_misses 0 STAT delete_misses 0 STAT delete_hits 0 STAT incr_misses 0 STAT incr_hits 0 STAT decr_misses 0 STAT decr_hits 0 STAT cas_misses 0 STAT cas_hits 0 STAT cas_badval 0 STAT touch_hits 0 STAT touch_misses 0 STAT auth_cmds 0 STAT auth_errors 0 STAT bytes_read 66 STAT bytes_written 5158 STAT limit_maxbytes 1073741824 STAT accepting_conns 1 STAT listen_disabled_num 0 STAT threads 4 STAT conn_yields 0 STAT hash_power_level 16 STAT hash_bytes 524288 STAT hash_is_expanding 0 STAT bytes 0 STAT curr_items 0 STAT total_items 0 STAT expired_unfetched 0 STAT evicted_unfetched 0 STAT evictions 0 STAT reclaimed 0 END
6、在/etc/zabbix/zabbix_agentd.d目录下书写memcached.sh脚本,并加上执行权限
[root@node1 zabbix_agentd.d]# cat memcached.sh #!/bin/bash memcached_status(){ M_PORT=$1 M_COMMAND=$2 echo -e "stats\nquit" | nc 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND" | awk '{print $3}' } main(){ case $1 in memcached_status) memcached_status $2 $3 ;; esac } main $1 $2 $3
加上执行权限
# chmod +x memcached.sh
7、验证脚本效果:
[root@node1 zabbix_agentd.d]# bash memcached.sh memcached_status 11211 curr_connections 10
8、编辑/etc/zabbix/zabbix_agentd.conf配置文件
Include=/etc/zabbix/zabbix_agentd.d/*.conf # 定义*.conf配置文件的存放目录,默认是打开的 # UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh $1 $2 # 将原来监控TCP连接数的注释掉,在Include指定的目录下进行创建新的以conf结尾的配置文件。
9、在/etc/zabbix/zabbix_agentd.d/目录下创建zabbix_agent_linux.conf配置文件,修改配置文件,调用memcached.sh脚本文件
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh $1 $2 # 这个是调用之前创建的TCP连接数的脚本 UserParameter=memcached_status[*],/etc/zabbix/zabbix_agentd.d/memcached.sh $1 $2 $3 # 调用最新的memcached.sh的脚本文件路径
10、重启zabbix-agent服务
[root@node1 zabbix_agentd.d]# systemctl restart zabbix-agent
11、在zabbix-server服务器端验证此时的memcached服务器是否正常,返回正常,就可以再zabbix网页上添加主机和模板
[root@zabbix ~]# zabbix_get -s 192.168.7.101 -p 10050 -k "memcached_status[memcached_status,11211,curr_connections]" 10
3、在zabbix网页上创建memcached模板
1、在zabbix网页上创建一个通用的memcached模板
2、在创建好的memcached_linux模板下,创建监控项和图形
4、创建图形
5、创建触发器
6、将触发器命名与监控项一致的名称
7、将之前创建好的主机进行关联模板(192.168.7.101)
8、关联创建的memcached_linux模板
4、在memcached模板的基础上创建线程数
1、在创建的当前连接数的基础上克隆,创建线程数的监控
2、修改为当前线程数监控项
3、创建线程数的图形
4、 添加监控项的线程数到图形配置里
5、查看创建的memcached_当前连接数图形状态
6、查看创建memcached_当前线程数的图形
实战二:Zabbix监控redis缓存
1、安装并配置redis服务器
(1)安装epel源及redis包
# yum install epel-release -y # yum install redis -y
(2)简单配置redis文件,将监听地址改为0.0.0.0,允许进行远程连接
# vim /etc/redis.conf bind 0.0.0.0 # systemctl restart redis # 重启redis服务器
用redis-cli命令进入到redis服务器中,输入info查看关键的键值信息,用来创建监控项:
[root@node1 zabbix_agentd.d]# redis-cli 127.0.0.1:6379> info # Server redis_version:3.2.12 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:7897e7d0e13773f redis_mode:standalone os:Linux 3.10.0-1062.el7.x86_64 x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:4.8.5 process_id:22078 run_id:d6a5acaec70bb2ea0c90add2a6e878b78d0f9c60 tcp_port:6379 uptime_in_seconds:2227 uptime_in_days:0 hz:10 lru_clock:5487366 executable:/usr/bin/redis-server config_file:/etc/redis.conf # Clients connected_clients:1 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:813440 used_memory_human:794.38K used_memory_rss:5926912 used_memory_rss_human:5.65M used_memory_peak:813440 used_memory_peak_human:794.38K total_system_memory:1907818496 total_system_memory_human:1.78G used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction mem_fragmentation_ratio:7.29 mem_allocator:jemalloc-3.6.0 # Persistence loading:0 rdb_changes_since_last_save:0 rdb_bgsave_in_progress:0 rdb_last_save_time:1582543443 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:-1 rdb_current_bgsave_time_sec:-1 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok # Stats total_connections_received:5 total_commands_processed:6 instantaneous_ops_per_sec:0 total_net_input_bytes:83 total_net_output_bytes:28399 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:0 migrate_cached_sockets:0 # 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 # CPU used_cpu_sys:2.75 used_cpu_user:1.16 used_cpu_sys_children:0.00 used_cpu_user_children:0.00 # Cluster cluster_enabled:0 # Keyspace
(3)创建redis采取关键信息脚本:/etc/zabbix/zabbix_agentd.d/目录下常见redis_status.sh脚本:
[root@node1 zabbix_agentd.d]# cat redis_status.sh #!/bin/bash redis_status(){ R_PORT=$1 R_COMMAND=$2 (echo -en "INFO \r\n";sleep 1;) | nc 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp #在/tmp目录下创建文件 REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2) echo $REDIS_STAT_VALUE } help(){ echo "${0} + redis_status + PORT + COMMAND" } main(){ case $1 in redis_status) redis_status $2 $3 ;; *) help ;; esac } main $1 $2 $3
(4)将脚本加上执行权限
[root@node1 zabbix_agentd.d]# chmod +x redis_status.sh
(5)验证脚本是否存在错误,在node1主机上执行脚本看能否取出数据
[root@node1 zabbix_agentd.d]# bash redis_status.sh redis_status 6379 used_cpu_sys # 可以生成数据 1.12 [root@node1 zabbix_agentd.d]# ll /tmp/redis_6379.tmp #生成的临时数据是root权限的,需要删除,因为zabbix是用zabbix启动的,此时的数据就会存在问题。 -rw-r--r-- 1 root root 2136 Feb 24 19:38 /tmp/redis_6379.tmp [root@node1 zabbix_agentd.d]# rm -rf /tmp/redis_6379.tmp -rw-r--r-- 1 root root 2136 Feb 24 19:38 /tmp/redis_6379.tmp
(6)将脚本的路径存放在前面创建的/etc/zabbix/zabbix_agentd.d/zabbix_agent_linux.conf配置文件中
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh $1 $2 UserParameter=memcached_status[*],/etc/zabbix/zabbix_agentd.d/memcached.sh $1 $2 $3 UserParameter=redis_status[*],/etc/zabbix/zabbix_agentd.d/redis_status.sh $1 $2 $3 # 新添加的redis服务器脚本路径
(7)重启node1主机的zabbix-agent服务
# systemctl restart zabbix-agent
(8)在zabbix-server服务端验证node1主机,是否可以获取到数据
[root@zabbix ~]# zabbix_get -s 192.168.7.101 -p 10050 -k "redis_status[redis_status,6379,used_cpu_sys]" 1.48
2、在zabbix网页上创建redis-CPU利用率
1、创建模板
2、命名redis模板名称并添加群组
3、针对redis-linux模板,创建监控项
配置redis-CPU监控项信息
4、创建图形
将监控项的关联到图形上
5、将创建的redis-linux模板关联到node1主机上
选择模板,关联redis_linux模板
3、在zabbix网页上创建redis服务器的连接数
1、将上面redis-CPU监控项进行克隆,节约时间创建新的监控项
2、配置redis客户端的监控项
3、创建图形
4、创建触发器
配置触发器信息
5、查看此时redis-CPU利用率情况
6、查看redis-客户端连接数
实战三:主动模式监控nginx服务
1、安装nginx服务,并配置状态页
(1)安装nginx服务,并配置状态页
# yum install nginx -y # 安装nginx服务 # vim /etc/nginx/nginx.conf # 在server段进行配置 location /nginx_status { stub_status; allow 127.0.0.1; deny all; }
(2)启动nginx服务
# systemctl start nginx
(3)在node1主机的/etc/zabbix/zabbix_agentd.d目录下创建一个nginx_status.sh脚本
[root@node1 zabbix_agentd.d]# chmod +x nginx_status.sh [root@node1 zabbix_agentd.d]# cat nginx_status.sh #!/bin/bash nginx_status_fun(){ #函数内容 NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号 NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令 nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到 /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}' } nginx_reading(){ #获取nginx_reading状态的数量 /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}' } nginx_writing(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}' } nginx_waiting(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}' } nginx_accepts(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $1}' } nginx_handled(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $2}' } nginx_requests(){ /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk '{print $3}' } case $NGINX_COMMAND in active) nginx_active; ;; reading) nginx_reading; ;; writing) nginx_writing; ;; waiting) nginx_waiting; ;; accepts) nginx_accepts; ;; handled) nginx_handled; ;; requests) nginx_requests; esac } main(){ #主函数内容 case $1 in #分支结构,用于判断用户的输入而进行响应的操作 nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数 nginx_status_fun $2 $3; ;; *) #其他的输入打印帮助信息 echo $"Usage: $0 {nginx_status key}" esac #分支结束符 } main $1 $2 $3
(4)加上可执行权限。
# chmod +x nginx_status.sh
(5)修改/etc/zabbix/zabbix_agentd.d/zabbix_agent_linux.conf配置文件,和监控的memcached、redis一样
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_conn.sh $1 $2 UserParameter=memcached_status[*],/etc/zabbix/zabbix_agentd.d/memcached.sh $1 $2 $3 UserParameter=redis_status[*],/etc/zabbix/zabbix_agentd.d/redis_status.sh $1 $2 $3 UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx_status.sh $1 $2 $3 # 添加最新监控的nginx脚本路径,由于自制的nginx模板是nginx.status,所以将此处也改为nginx.status
重启zabbix-agent服务: systemctl restart zabbix-agent
(6)在node1主机上验证脚本是否可以执行,返回一个数字,说明可以执行
[root@node1 zabbix_agentd.d]# bash nginx_status.sh nginx_status 80 active 1
(7)然后在zabbix-server服务器端验证node1上是否可以连接
[root@zabbix ~]# zabbix_get -s 192.168.7.101 -p 10050 -k "nginx_status[nginx_status,80,active]" 1
2、在zabbix网页上关联nginx状态页
(1)导入自制的nginx模板
(2)将导入的模板关联到node1主机上(192.168.7.101)上
(3)查看nginx客户端的连接数
(4)查看nginx服务端的连接数
实战四:创建邮件报警机制
(1)设置qq邮箱,在qq邮箱内开启POP3/SMTP功能,发送短信,获取授权码
(2)在zabbix网页上创建报警媒介类型
(3)配置报警媒介的邮件信息
(4)添加用户报警媒介
(5)添加报警媒介
(6)配置报警媒介
(7)创建一个超级用户(VIP),为下面创建多级发送邮件使用
(8)创建VIP超级用户
(9)添加第二个邮箱地址
(10)权限改为超级管理员
(11)创建动作
(12)创建动作
(13)创建动作---->操作,实现多级邮件发送(实际就是发送多个邮箱地址),此处是1-3个动作发邮件。
默认标题:业务报警{TRIGGER.STATUS} 消息内容:上海业务报警服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}
(14)使用上面创建的VIP用户,实现多级故障发邮件(3-5个动作发邮件)
创建业务恢复邮件发送机制:
默认标题:业务恢复 消息内容:上海业务恢复服务器:{HOST.NAME},IP:{HOSTNAME1},详情:{ITEM.NAME}:{ITEM.VALUE}
(15)模拟宕机nginx服务器
# systemctl stop nginx
(16)此时可以看到qq邮箱就收到了报警邮件
(17)添加的VIP用户关联的邮箱收到了qq邮箱发来的报警,实现了分级报警
(18)启动nginx服务:systemctl start nginx
(19)此时就又可以看到业务恢复的邮件