1.通过shell或者python写redis监控脚本。
2.下载zabbix-redis模板,官网或者博客等寻址下载或者也可以自己写。
3.监控指定主机并且导入模板确认各项功能都支持。
4.关联主机测试监控项。
zabbix-server 192.168.169.131
zabbix-clent 192.168.169.226
1.在被监控端编写获取redis的value值脚本
[root@client ~]# cat /etc/zabbix/scripts/redis_info_value.sh
#!/bin/bash
Info_Parameter="$1" #位置变量
Redis_Port="6379" #Redis端口
Redis_Host="192.168.169.226" #Redis地址
Redis_Password="123456" #Redis密码
Info_File="/tmp/info.txt" #状态文件存放路径
/usr/local/bin/redis-cli -h $Redis_Host -p 6379 -a $Redis_Password 2>/dev/null "info" >$Info_File #获取redis状态信息并存放到指定文件
#定义一个名为Info_Values的函数
Info_Values(){
Info_Value=$(grep "$Info_Parameter"\: $Info_File|awk -F ":" {'print $NF'})
echo "$Info_Value"
}
1.1 创建上面脚本对应的目录和文件:
chmod 777 /etc/zabbix/scripts/redis_info_value.sh
touch /tmp/info.txt && chmod 777 /tmp/info.txt
1.2 编写自定义的key:
[root@client ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf
UserParameter=redis.info.value[*],/bin/bash /etc/zabbix/scripts/redis_info_value.sh "$1"
redis.info.value //为key在后面zabbix监控项会用到。
[*] //为value,通过$1传参进去
“$1” //这里的$1就是上面脚本定义的Info_Parameter,通过输入需要获取的key来得到value。
例如:/bin/bash /etc/zabbix/scripts/redis_info_value.sh ”maxmemory_human“
1.3 重启客户端服务:
[root@client ~]# systemctl restart zabbix-agent.service
1.4 在服务端通过proxy操作获取client端的值
[root@server ~]# /usr/bin/zabbix_get -s 192.168.169.226 -k redis.info.value[maxmemory_human]
0B
[root@server ~]# /usr/bin/zabbix_get -s 192.168.169.226 -k redis.info.value[used_cpu_user]
18.04
2.下载zabbix-redis模板,官网或者博客等寻址下载或者也可以自己写。
2.1 创建redis模板:
群组根据自己需求进行添加。
创建应用集
1.应用集一般配合监控项使用,它相当于多个同类型的监控项的分类目录
2.添加应用集
(1)配置—》模板—》需要调整的模板—》应用集
(2)添加应用集
(3)
(4)查看应用集
2.2 创建监控项:
1.监控项(iterm)就是你要监控的指标,比如cpu利用率,cpu负载,内存使用率等等。
2.添加监控项
(1)配置—》模板—》需要添加监控项的模板—》监控项
#首先info里面的好多信息是没用的,另外好多参数是将上面的参数转换成可读的形式,例如,used_memory_peak和used_memory_peak_human,显然我们就要前面的就可以了,因为你用后面是一个字符型,你客户端还要写脚本再转回成字节类型,所以类似于这种就直接在服务器取字节的形式然后转换就行了。如下图:
#然后又得又不是整数型,是浮点数的类型,如果你选择成整数类型的话,又获取不到值,如下图:
注意:
信息类型:根据监控项类型不同有所不同
键值: 可直接跟参数或参考官网
#像这种CPU就不需要转换了,因为本身你也不可能有太多的CPU占用。
3.监控指定主机并且导入模板确认各项功能都支持。
4.关联主机测试监控项。
创建图形
配置——主机——选择名称主机——图形——创建图形
创建触发器
帮助文档:https://www.zabbix.com/documentation/3.4/zh/manual/config/triggers/expression
触发器示例:
触发器名称:“Redis超过的内存阀值,请检查”。触发器表达式如下:
“{192.168.169.226:redis.info.value[used_memory].last()}>9000000”
{192.168.169.226:redis.info.value[used_memory]” 给出了被监控对象参数的简短名称。它指定了服务器是“192.168.169.226”,监控项的键值是“redis.info.value[used_memory]”。通过使用函数“last()”获取最近一次获取的值。最后,“>9000000”表示来自主机192.168.169.226的最后一次获取的负载值大于5时触发器就会进入严重状态。
键值为zabbix_agent里面自定义的key。
创建zabbix报警项
1.邮件脚本报警
在 Zabbix 服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送
报警邮件到指定邮箱。
具体操作:
以下操作在 Zabbix 监控服务端进行
下载 sendemail 软件
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
然后安装那两个依赖包,命令是:
yum install perl-Net-SSLeay perl-IO-Socket-SSL -y
解压软件,然后将 sendemail 复制到/usr/local/bin/目录下,并加上可执行权限,然后修改用
户和群组。
ar zxf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56/
cp sendEmail /usr/local/bin/sendEmail
chown zabbix:zabbix /usr/local/bin/sendEmail
# 执行/usr/local/bin/sendEmail -h 查看 sendEmail 的帮助
[root@server ~]# /usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.sina.com -u "heelo world" -o message-content-type=html -o message-charset=utf8 -xu [email protected] -xp 20001023.wzb -m "abcdefg"
命令主要选项说明:
/usr/local/bin/sendEmail //命令程序
-f //发件人邮箱
-t //收件人邮箱
-s //发件人邮箱的smtp服务器
-u "heelo world" //邮件标题
-o message-content-type=html //邮件内容的格式,html表示它是html格式
-o message-charset=utf8 //邮件内容编码
-xu //发件人邮箱的用户名
-xp //发件人邮箱密码
-m //邮件具体内容
进入/usr/lib/zabbix/alertscripts/目录,然后在这个目录下创建报警脚本 mail.sh
赋权chmod +x mail.sh
执行脚本测试发邮件
[root@server alertscripts]# ./mail.sh [email protected] test 123
*******************************************************************
Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
together with SSL_ca_file|SSL_ca_path for verification.
If you really don't want to verify the certificate and keep the
connection open to Man-In-The-Middle attacks please set
SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
at /usr/local/bin/sendEmail line 1906.
invalid SSL_version specified at
/usr/share/perl5/vendor_perl/IO/Socket/SSL.pm line 415
注: 进行发送邮件测试时,出现了第一个报错
原因是 sendemail 软件和 perl5 里面的 ssl 版本不兼容导致的,通过修改 sendemail 里面的内
容可以解决这个问题。
解决方法:
在 sendemail 中 1906 行的内容,从
if (! IO::Socket::SSL->start_SSL($SERVER, SSL_version => 'SSLv3 TLSv1')) {
修改为
if (! IO::Socket::SSL->start_SSL($SERVER)) {
即不指定 SSL 的版本,让程序来自己选择
不管你使用的是 163/126 邮箱还是 qq 邮箱,你都必须开通 pop3 服务,而且 126/qq 邮箱还
要求使用第三方客户端发送邮件是必须使用授权码登录,使用账号密码验证时,会出现下面
图片中的错误。
sendEmail[5102]: ERROR => ERROR => SMTP-AUTH: Authentication to smtp.126.com:25 failed.
至于邮箱的授权码, 自己登录邮箱去设置就好
经过上面两个问题的处理后就可以正常发送邮件如下所示显示成功提示
zabbix web 端配置
上面的邮件脚本配置好后,就要在 web 端添加报警媒介,在 web 页面的管理,报警媒介类
型页面,点击右边的创建媒体类型
进入创建页面,然后输入名称“邮件报警”,类型选择脚本,名称选择 mail.sh,点击添加
按钮,添加三个脚本参数,分别是{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESAGE},分别对于 mail.sh 中的 to、 subject 和 body。添加完成后点下面的添加按钮,我们的报警媒介就创建
完成了。
{ALERT.SENDTO}:收件人邮箱
{ALERT.SUBJECT}:邮件标题
{ALERT.MESSAGE}:实体内容
zabbix支持的宏:
https://www.zabbix.com/documentation/3.4/manual/appendix/macros/supported_by_location
创建好报警媒介后,就需要将报警媒介关联到我们的用户。点击管理,用户,然后选择我们
的用户 admin 也可新建一个用户,点击用户名就进入到用户配置界面。点击报警媒介,然
后点添加,选择我们上一步创建的邮件报警脚本,输入收件人,选择报警时间和类型,然后
点击添加,就将创建好的报警媒介关联到我们的用户上面了。
现在需要做的是,创建一个触发动作,即系统出现故障时,触发这个动作,然后给我们的邮
箱发送报警邮件。点击配置,选择动作,然后点击右边的创建动作。
在动作这一页名称中写入我们定义的动作名以及触发条件
设置“操作”
{TRIGGER.STATUS}:{TRIGGER.NAME} //标题
告警主机:{HOST.NAME}
告警地址:{HOST.IP}
监控项目:{ITEM.NAME}
监控取值:{ITEM.LASTVALUE}
告警等级:{TRIGGER.SEVERITY}
当前状态:{TRIGGER.STATUS}
告警信息:{TRIGGER.NAME}
告警时间:{EVENT.DATE} {EVENT.TIME}
事件ID:{EVENT.ID}
步骤是 1-3,也即是从 1 开始到 3 结束。一旦故障发生,就是执行 Email.sh 脚本发生报警邮件
给 zabbix 用户。
假如故障持续了 1 个小时,它也只发送 3 次,第 1-3 次(即前 3 次)邮箱发送给 zabbix 用户,
时间间隔为 0 秒。如果改成 1-0, 0 是表示不限制.无限发送
设置“恢复操作”
添加好以后就可以看到我们添加的动作名,以及该动作已启用的状态
报警测试
调整redis的触发器设置使其触发报警发送邮件。
配置——主机——redis-169.226——触发器
将该值调整使其高或低指定的阀值。
恢复测试
模板文件下载地址:
https://pan.baidu.com/s/1fg3eHBD6jCmCFahNfwJ9ng
帮助文档:
https://www.cnblogs.com/hjfeng1988/p/9645028.html