深入理解zabbix(二)
深入理解zabbix(二)
链接:https://pan.baidu.com/s/1q5YwJMTcZLcS5OQ0iOu44A
提取码:8gdi
复制这段内容后打开百度网盘手机App,操作更方便哦
1.Zabbix Web操作深入
1.1 Zabbix Web下的主机和模版以及监控项的添加方式
(1)创建一个模版
我们所有的功能几乎都是在模版中定义的
我们再点进新创建的模版查看,模版里几乎可以设定我们需要的所有功能
(2)在模版里创建应用集
应用集的作用就是将众多的监控项进行一个分类,方便我们的管理
(3)在模版里创建一个zabbix自带的监控项
(4)监控项里的键值我们到底要如何写?我们需要学会照葫芦画瓢
我们选择一个系统模版Template OS Linux查看
当然我们也可以自定义监控项的键值,但是并不推荐这样。因为,都是自己写太慢了。系统自带了很多键值我们要学会利用
1.2 Zabbix Web下触发器与表达式的编写方法
1.2.1 avg
- 参数:秒或#num
- 支持类型:float,int
- 作用:返回一段时间的平均值
举例:
avg(5):最后5秒的平均值
avg(#5):表示最近5次得到值的平均值
avg(3600,86400):表示一天前的一个小时的平均值
如果仅有一个参数,表示指定时间的平均值,从现在开始算起,如果有第二个参数,表示漂移,从第二个参数前开始算时间,#n表示最近n次的值
1.2.2 last
- 参数:秒或#num
- 支持值类型:float,int,str,text,log
- 作用:最近的值,如果为秒,则忽略,#num表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的。
last(0)等价于last(#1)
last(#3)表示最近第3个值(并不是最近的三个值)
本函数也支持第二个参数time_shift,例如last(0,86400)返回一天前的最近的值。
如果在history中同一秒中有多个值存在看,Zabbix不保证值的精确顺序#num从Zabbix1.6.2起开始支持,timeshift从1.8.2起开始支持,可以查询avg()函数获取它的使用方法
1.2.3 max
- 参数:秒或#num
- 支持值类型:float,int
- 描述:返回指定时间间隔的最大值。时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#)。从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法。
- 例如:max(#3)=0 返回3次值如果都是0则触发告警
1.2.4 min
- 参数:秒或#num
- 支持值类型:float,int
- 描述:返回指定时间间隔的最小值。时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#)。从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法。
1.2.5 nodata
- 参数:秒
- 支持值类型:any
- 描述:当返回值为1表示指定的间隔(间隔不应小于30秒)没有接收到数据,0表示获取到了。
- 例:nodata(5m)=1 ===>5分钟之内获取不到数据就告警
1.2.6 prev
- 参数:忽略
- 支持值类型:float,int,str,text,log
- 描述:返回之前的值,类似于last(#2)
1.2.7 sum
- 参数:秒或#num
- 支持值类型:float,int
- 描述:返回指定时间间隔中收集到的值的总和,时间间隔作为第一个参数支持秒或收集值的数目(以#开始).从Zabbix1.8.2开始,本函数支持time_shift作为第二个参数。可以查看avg函数获取它的用法。
1.2.8 change
- 参数:忽略
- 支持类型:float,int,str,text,log
- 作用:返回最近获得值与之前获得值的差值,对于字符串0表示相等,1表示不同
- change(0)>n:忽略参数一般输入0,表示最近得到的值与上一个值的差值大于n
1.2.9 diff
- 参数:忽略
- 支持值类型:float,init,str,text,log
- 作用:返回值为1,表示最近的值与之前的值不同,0为相同。
- 例如:diff(0)>0 ===>表示现在获取的值如果和之前的不同就告警
例如:
1.3 Zabbix Web创建触发器过程以及触发器与监控项对应关系
创建一个触发器,我们之前已经创建了一个检测内存剩余大小的监控项,现在我们给这个监控项加一个触发器。当内存小于20M时,触发报警
(2)进行表达器测试
表达式测试成功后,我们创建完毕即可
(3)在服务端进行监控项数据获取测试
监控项表达式说明
{aaaa:vm.memory.size[available].last()}<20M
aaaa:模版名
vm.memory.size:zabbix监控端向被监控端发送的代号
.last()<20 :last()<=>last(0)<=>last(#1)
[root@Zabbix-Server /]# zabbix_get -s 192.168.200.84 -k "vm.memory.size"
1021906944 #获取对应IP的全部内存总量
[root@Zabbix-Server /]# zabbix_get -s 192.168.200.84 -k "vm.memory.size[available]"
517849088 #获取对应IP的剩余内存总量
1.4 再创建一个监控项同时创建它的触发器
(1)快速创建一个Agent_ping监控项
(2)在监控端测试监控项的键值
[root@Zabbix-Server /]# zabbix_get -s 192.168.200.84 -k "agent.ping"
1
[root@Zabbix-Server /]# zabbix_get -s 192.168.200.85 -k "agent.ping"
1
[root@Zabbix-Server /]# zabbix_get -s 192.168.200.86 -k "agent.ping"
zabbix_get [52229]: Get value error: cannot connect to [[192.168.200.86]:10050]: [113] No route to host
我们发现如果对方服务器IP能ping通,则返回值是1。反之不是1就有问题
(3)创建监控项的告警触发器
2. Zabbix常用模版与触发器功能详解
(1){Template App Zabbix Agent:agent.version.diff(0)}>0
解释:如果当前获取的agent客户端的版本号大于前一次的不同,那么触发告警
(2){Template App Zabbix Agent:agent.ping.nodata(5m)}=1
解释:如果ping客户端在5分钟内都没有数据,那么触发告警
(3){Template OS AIX:vm.memory.size[available].last(0)}<20M
解释:如果最后一次获取的空闲内存大小得值小于20M,那么触发告警
(4){Template App SSH Service:net.tcp.service[ssh].max(#3)}=0
解释:如果ssh远程连接连续获取的3次值的最大值都是0,那么触发告警
(5){Template ICMP Ping:icmppingloss.min(5m)}>20
解释:如果连续5分钟里获取的最小值都大于20,那么触发告警
(6){Template ICMP Ping:icmppingsec.avg(5m)}>0.15
解释:如果连续5分钟内的平均值大于0.15,那么触发告警
3. Zabbix报警媒介类型设置和告警动作、频率设置
3.1 QQ邮件告警平台
3.1.1 安装sendmail
[root@Zabbix-Server yuanmabao]# yum -y install perl-Net-SSLeay perl-IO-Socket-SSL
[root@Zabbix-Server yuanmabao]# rpm -qa perl-Net-SSLeay perl-IO-Socket-SSL
perl-IO-Socket-SSL-1.94-7.el7.noarch
perl-Net-SSLeay-1.55-6.el7.x86_64
[root@Zabbix-Server yuanmabao]# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
[root@Zabbix-Server yuanmabao]# tar xf sendEmail-v1.56.tar.gz -C /usr/local/
[root@Zabbix-Server yuanmabao]# cd /usr/local/sendEmail-v1.56/
[root@Zabbix-Server sendEmail-v1.56]# /bin/cp -ra sendEmail /usr/local/bin/
[root@Zabbix-Server sendEmail-v1.56]# chmod +x /usr/local/bin/sendEmail
[root@Zabbix-Server sendEmail-v1.56]# which sendmail
/usr/sbin/sendmail
3.1.2 sendmail命令使用说明
命令/参数 | 内容 | 解释说明 |
---|---|---|
/usr/local/bin/sendEmail | 无 | 命令主程序 |
-f | from@163.com | 发件人邮箱 |
-t | to@163.com | 收件人邮箱 |
-s | smtp.163.com | 发件人邮箱的smtp服务器 |
-u | "我是邮件主题" | 邮件的标题 |
-o | message-content-type=html | 邮件内容的格式,html表示它是html格式 |
-o | message-charset=utf8 | 邮件内容编码 |
-xu | from@163.com | 发件人邮箱的用户名 |
-xp | 123456 | 发件人邮箱密码(授权码) |
-m | "我是邮件内容" | 邮件的具体内容 |
3.1.3 调整QQ邮箱设置
3.1.4 测试邮件发送
[root@Zabbix-Server sendEmail-v1.56]# sendEmail -f 1773464408@qq.com -t 1773464408@qq.com -u "zabbix_server" -s smtp.qq.com -o message-content-type=html -o message-charset=utf8 -xu 1773464408@qq.com -xp qmbblgrfwjsngeef -m "邮件发送成功"
Sep 20 23:29:09 zabbix-server sendEmail[24645]: Email was sent successfully!
3.1.5 编写QQ邮件平台报警脚本
[root@Zabbix-Server alertscripts]# pwd
/usr/local/zabbix/share/zabbix/alertscripts
[root@Zabbix-Server alertscripts]# cat sendmail.sh
#!/bin/bash
# author:Mr.yang
to=$1
subject=$2
body=$3
from=1773464408@qq.com
smtp=smtp.qq.com
passwd=qmbblgrfwjsngeef
/usr/local/bin/sendEmail -f "$from" -t "$to" -s "$smtp" -u "$subject" -o message-content-type=html -o message-charset=utf8 -xu "$from" -xp "$passwd" -m "$body"
[root@Zabbix-Server alertscripts]# chmod +x sendmail.sh
[root@Zabbix-Server alertscripts]# chown zabbix.zabbix sendmail.sh
3.1.6 脚本测试
[root@Zabbix-Server alertscripts]# sh sendmail.sh 1773464408@qq.com "hello world" "加油"
Sep 20 23:36:21 zabbix-server sendEmail[24784]: Email was sent successfully!
3.1.7 修改zabbix_server.conf配置文件
[root@Zabbix-Server /]# cat -n /usr/local/zabbix/etc/zabbix_server.conf | grep "447"
447 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
[root@Zabbix-Server /]# /etc/init.d/zabbix_server restart
Shutting down zabbix_server: [ OK ]
Starting zabbix_server: [ OK ]
3.1.8 创建报警媒介
3.1.9 创建报警动作
- 步骤1-3也就是从1开始到3结束。一旦发生故障,就是执行sendmail.sh脚本发生报警邮件给zabbix用户。
- 假如故障持续了1个小时,它也只发送3次,第1-3次(即前3次)邮箱发送给zabbix用户,时间间隔为0秒。
- 如果改成1-0,0是表示不限制,无限发送。
3.1.10 QQ邮件报警测试
给自定义监控项nginx.avtive创建一个触发器,如下
利用Web进行访问,增加活动连接数,触发报警
3.2 微信报警平台
3.2.1 注册微信报警平台并绑定微信号
3.2.2 编写微信平台报警脚本
编写脚本前,我们需要先记住3个关键的参数
(1)企业的CorpID
(2)企业的Secret
(3)部门ID号
(4) 然后我们就可以编写微信告警脚本了,如下:
[root@Zabbix-Server alertscripts]# pwd
/usr/local/zabbix/share/zabbix/alertscripts
[root@Zabbix-Server alertscripts]# cat weixin.sh
#!/bin/bash
# author:Mr.yang
CropID="ww45df4e64ff22e4ac" #这里填写我们的应用的CropID
Secret="oLTRwXIQ4Ej5KpAntL5dmonfq59wsUY-EuN3jdUM-Vs"
#这里是应用的Secret
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=`/usr/bin/curl -s -G $GURL | awk -F\" '{print $10}'`
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
function body() {
local int AppID=1000002 #这里是创建的应用ID
local UserID=$1 #接收消息用户,系统传参
local PartyID=1 #接收消息的部门ID
local Msg=`echo "$@" | cut -d" " -f3-`
printf '{\n'
printf '\t"touser": "'"$UserID"\"",\n"
printf '\t"toparty": "'"$PartyID"\"",\n"
printf '\t"msgtype": "text",\n'
printf '\t"agentid": "'" $AppID "\"",\n"
printf '\t"text": {\n'
printf '\t\t"content": "'"$Msg"\""\n"
printf '\t},\n'
printf '\t"safe":"0"\n'
printf '}\n'
}
/usr/bin/curl --data-ascii "$(body $1 $2 $3)" $PURL
3.2.3 脚本测试
[root@Zabbix-Server alertscripts]# chmod +x weixin.sh
[root@Zabbix-Server alertscripts]# chown zabbix.zabbix weixin.sh
[root@Zabbix-Server alertscripts]# sh weixin.sh yangwenbo19971108 "题目" "报警内容"
#yangwenbo19971108是手机微信号,必须下载手机版的企业微信
3.2.4 创建微信报警媒介类型
4. 用户参数User parameters
4.1 概述
有时候当我们监控的项目在Zabbix预定义的key中没有定义时,这时候我们可以通过编写Zabbix的用户参数的方法来监控我们要求的项目item。形象一点说Zabbix代理端配置文件中的User parameters就相当于通过脚本获取要监控的值,然后把相关的脚本或者命令写入到配置文件中的User parameter中,然后Zabbix server读取配置文件中的返回值通过处理前端的方式返回给用户。
(1)用户参数的语法
UserParameter=<key>,<command>
其中,Userparameter为关键字,key为用户自定义key名字可以随便起,为我们要运行的命令或者脚本。
(2)一个简单的例子:
UserParameter=ping,echo 1
代理程序将会永远的返回1,当我们在服务器端添加item的key为ping的时候
(3)稍微复杂的例子:
UserParameter=mysql.ping,/usr/local/mysql/bin/mysqladmin ping | grep -c alive
- 当我们执行mysqladmin -uroot ping命令的时候如果mysql存活要返回mysqld is alive,我们通过grep -c来计算mysqld is alive的个数,如果mysql存活着,则个数为1,如果不存活很明显mysqld is alive的个数为0,通过这种方法我们可以来判断mysql的存活状态。
- 当我们在服务器端添加item的key为mysql.ping时候,对于Zabbix代理程序,如果mysql存活,则状态将返回1,否则,状态将返回0。
4.2 让key接受参数
让key也接受参数的方法使item添加时更具备了灵活性,例如系统预定义key:vm.memory.size[],其中的mode模式就是用户要接受的参数,当我们填写为free时则返回的为内存的剩余大小,如果我们填入的为userd时这返回的是内存已经使用的大小。
相关语法:
UserParameter=key[*],command
#描述:
key:key的值在主机系统中必须是唯一的,其中*代表命令中接受的参数
command:客户端系统中可执行的命令
#举例:
UserParameter=ping[*],echo $1
ping[0]:此时0就是*,也就是传入参数是0,$1也就是0,因此表达式将一直返回‘0’
ping[aaa]:此时aaa就是*,也就是传入参数是aaa,$1也就是aaa,因此表达式将一直返回‘aaa’
4.3 让我们自定义一个可以传递参数的监控项
我们做一个可以根据条件获取内存数值大小的监控项mem_check
- 当我们键值为mem_check[free]时,获取剩余可用内存大小
- 当我们键值为mem_check[used]时,获取实际占用内存大小
- 当我们键值为mem_check时,获取总内存大小
4.3.1 我们先制作一个获取数据的脚本
[root@Zabbix-Server /]# mkdir -p /server/scripts
[root@Zabbix-Server /]# cd /server/scripts/
[root@Zabbix-Server scripts]# cat mem_check
#!/bin/bash
# author:Mr.yang
case $1 in
free)
echo "`free | awk 'NR==3{print $4}'`"
;;
used)
echo "`free | awk 'NR==3{print $3}'`"
;;
*)
echo "`free | awk 'NR==2{print $2}'`"
;;
esac
4.3.2 测试脚本
[root@Zabbix-Server scripts]# chmod +x mem_check
[root@Zabbix-Server scripts]# chown zabbix.zabbix mem_check
[root@Zabbix-Server scripts]# sh mem_check
1004412
[root@Zabbix-Server scripts]# sh mem_check free
720928
[root@Zabbix-Server scripts]# sh mem_check used
283596
4.3.3 后台自定义一个监控项的键值
[root@Zabbix-Server /]# cd /etc/zabbix/zabbix_agentd.d/
[root@Zabbix-Server zabbix_agentd.d]# cat mem_check.conf
UserParameter=mem.check[*],/server/scripts/mem_check $1
4.3.4 测试自定义的键值
#重启zabbix-agent客户端
[root@Zabbix-Server zabbix_agentd.d]# /etc/init.d/zabbix-agent restart
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ]
[root@Zabbix-Server zabbix_agentd.d]# zabbix_get -s 192.168.200.89 -p 10050 -k "mem.check"
1004412
[root@Zabbix-Server zabbix_agentd.d]# zabbix_get -s 192.168.200.89 -p 10050 -k "mem.check[free]"
720564
[root@Zabbix-Server zabbix_agentd.d]# zabbix_get -s 192.168.200.89 -p 10050 -k "mem.check[used]"
283916
4.3.5 前台自定义一个监控项及触发器
5. Agentd主动模式与被动模式
(1)默认情况下,zabbix server会直接去每个agent上抓取数据,这对于agent来说,是被动模式,也是默认的一种获取数据的方式,但是,当zabbix server监控主机数量过多的时候,由server端去抓取agent上的数据,zabbix server会出现严重的性能问题,主要表现如下:
- Web操作很卡,容易出现502
- 图层断裂
- 开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题
(2)所以,下面主要往两个优化方向考虑:
- 用Proxy或者Node模式做分布式监控
- 调整Agentd为主动模式
5.1 Agentd的配置调整
修改zabbix_agentd.conf配置文件,注意是打开如下参数:
ServerActive=192.168.200.89
Hostname=192.168.200.89
StartAgents=1
ServerActive是指定Agentd收集的数据往哪里发送,Hostname是必须要和zabbix web端添加主机时的主机名对应起来,这样zabbix server端接收到数据才能找到对应关系,这里为了兼容被动模式,没有把StartAgents设为0,如果一开始就是使用主动模式的话建议把StartAgents设为0,关闭被动模式。
5.2 zabbix Server端配置调整
如果开启了agent端的主动发送数据模式,需要在zabbix Server端修改如下两个参数,保证性能。
StartPollers=10 #把这个zabbix Server主动收集数据进程减少一些。
StartTrappers=200 #把这个负责处理Agentd推送过来的数据的进程开大一些。
5.3 调整模版
- 因此收集数据的模式发生了变化,因此需要把所有的监控项的类型由原来的“zabbix客户端”改成“zabbix客户端(主动式)”。
- 这样,只需要简单的几步,就完成了主动模式的切换,调整之后服务器不卡了,图层不裂了,进程也少了。
深入理解zabbix(二)的更多相关文章
- 深入理解OOP(二):多态和继承(继承)
本文是深入浅出OOP第二篇,主要说说继承的话题. 深入理解OOP(一):多态和继承(初期绑定和编译时多态) 深入理解OOP(二):多态和继承(继承) 深入理解OOP(三):多态和继承(动态绑定和运行时 ...
- C++ 中类的构造函数理解(二)
C++ 中类的构造函数理解(二) 写在前面 上次的笔记中简要的探索了一下C++中类的构造函数的一些特性,这篇笔记将做进一步的探索.主要是复制构造函数的使用. 复制构造函数 复制构造函数也称拷贝构造函数 ...
- ppp 完全理解(二)【转】
转自:https://blog.csdn.net/tianruxishui/article/details/44057717 ppp 完全理解(二) pppd 协议及代码分析 作者:李圳均 日期:20 ...
- Zabbix二次开发_02获取数据
最近准备写一个zabbix二次页面的呈现.打算调用zabbix api接口来进行展示. 具体流程以及获取的数据. 1. 获得认证密钥 2. 获取zabbix所有的主机组 3. 获取单 ...
- Java 反射理解(二)-- 动态加载类
Java 反射理解(二)-- 动态加载类 概念 在获得类类型中,有一种方法是 Class.forName("类的全称"),有以下要点: 不仅表示了类的类类型,还代表了动态加载类 编 ...
- Linux实战教学笔记50:Zabbix监控平台3.2.4(二)深入理解zabbix
https://www.cnblogs.com/chensiqiqi/p/9162986.html 一,Zabbix Web操作深入 1.1 Zabbix Web下的主机和模版以及监控项的添加方式 ( ...
- Zabbix监控平台3.2.4(二)深入理解zabbix
一,Zabbix Web操作深入 1.1 Zabbix Web下的主机和模版以及监控项的添加方式 (1)创建一个模版 我们所有的功能几乎都是在模版中定义的 我们再点进新创建的模版查看 模版里几乎可 ...
- [C# 基础知识系列]专题八: 深入理解泛型(二)
引言: 本专题主要是承接上一个专题要继续介绍泛型的其他内容,这里就不多说了,就直接进入本专题的内容的. 一.类型推断 在我们写泛型代码的时候经常有大量的"<"和"& ...
- Zabbix二次开发_01基础
最近有个想法:想做一个zabbix数据的二次呈现,所以来写一下Zabbix的api的内容. 先说下zabbix api的认证基础. Zabbix API简介 Zabbix API开始扮演着越来越重要的 ...
随机推荐
- Flask+elasticsearch实现搜索引擎入门教程+Curl调试
前几天,在github上看到了一个关于elasticsearch的小项目,有点小兴趣,于是就结合着Flask,研究了一下,分享给大家. 准备资料: 1.安装elasticsearch 参考教程:htt ...
- crontab+selenium不能定时执行测试的原因
上一篇我提到用无界面selenium实现网页的自动签到.本来测试好好 的没问题,但是加进crontab定时任务却一点动静页没有,后来发现是浏览器的显示问题,自动任务要这样写: 12 3 * * * e ...
- django中动态生成二级菜单
一.动态显示二级菜单 1.修改权限表结构 (1)分析需求,要求左侧菜单如下显示: 客户管理: 客户列表 账单管理: 账单列表 (2)修改rbac下的models.py,修改后代码如下: from dj ...
- 六、SpringBoot配置@ConfigurationProperties与@Value区别
1.@Value的使用 三种用法 // ${key} 从环境变量.配置文件中取值 @Value("${person.last-name}") private String last ...
- 【LeetCode】Array
[11] Container With Most Water [Medium] O(n^2)的暴力解法直接TLE. 正确的解法是Two Pointers. O(n)的复杂度.保持两个指针i,j:分别指 ...
- ECUST_Algorithm_2019_2
简要题意及解析 1001 \(N\)个数分为\(K+8\)组,每组三个,记为\((a,b,c)\),方便起见要求\(a \leq b \leq c\),每组的代价是\((a-b)^2\),总代价为每组 ...
- spring 获取url参数
1. usl格式: http://localhost:8080/contact/delete/3 java代码 @RequestMapping(value="/delete/{id}&quo ...
- ubuntu下oracle 数据库安装
环境:腾讯云 一. 由于腾讯云直接下载oracle太慢,先安装docker 1.sudo apt update 2.接下来,使用apt安装一些允许通过HTTPS才能使用的软件包: sudo apt i ...
- OpenCV常用基本处理函数(2)图像基本操作
可以根据像素的行和列的坐标获取他的像素值.对 BGR 图像而言,返回值为 B,G,R 例如获取蓝色的像素值: img=cv2.imread('messi5.jpg')px=img[100,100]bl ...
- 怀旧浪潮来袭,小霸王游戏、windows95......曾经的经典哪些能戳中你的心怀?
随着前两天上架的 Rewound 在 iPhone 上复刻了 iPod Classic为大家掀起一场怀旧浪潮,那么除了 Rewound还有什么经典?今天我们就来怀旧一下那些曾经的经典.80经典小霸王游 ...