zabbix active模式以及自定义key not Supported的解决

zabbix active模式

active模式适用场景

zabbix server端无法直连agent端,比如agent为内网机器,仅有内网ip,没有公网ip,但是内网机器能够访问server端

active模式相比于agent模式,是agent端通过自己对server端进行访问,获取server端对数据抓取的类型,然后自己向server端发送相关的数据。

active的配置文件示例

相比于agent端的配置文件设置,其配置文件主要变更在需要开启RefreshActiveChecksServerActive两个的值

如下有一份zabbix active模式下agent端的配置文件,可作参考

[root@RHEL6-WEB03-BSSWEB zabbix]# grep -v ^# zabbix_agentd.conf 
UserParameter=tomcat.statuscode,sudo /etc/zabbix/monitorsmscode.sh
##自定义key,通过运行脚本获得
UserParameter=disk.free,sudo df -h | awk '/^\/dev\//{print $5}'  | awk -F% '{print $1}' | sort -n | tail -1
##自定义key,通过运行命令直接获得
PidFile=/var/run/zabbix/zabbix_agentd.pid
##默认的pid文件路径
LogFile=/var/log/zabbix/zabbix_agentd.log
##默认的log文件路径
LogFileSize=0
##不限制log文件大小
EnableRemoteCommands=1
##开启远程执行zabbix server端的命令,适用于action中的自动恢复处理
Server=123.56.78.170
##zabbix server端的ip地址(agent模式)
ListenPort=10050
##zabbix agent监控的port
ListenIP=0.0.0.0
##监听本机所有ip
ServerActive=123.56.78.170
##zabbix server端的ip地址(active模式,active模式下必须要开启)
Hostname=10.68.32.59
##主机名,务必与在web界面中的hostname一致,并非一定为ip
RefreshActiveChecks=120
##agent在active模式获取server端取值类型的刷新时间,稳定后可设定为最大值
Timeout=30
##agent发送监控项的超时时间,有些自定义key可能需要运行很长时间才能获取值,超时时间过短会出现数据发送失败
Include=/etc/zabbix/zabbix_agentd.d/
UnsafeUserParameters=1
##开启自定义key功能

active模式在server端web界面中item的设定

1.单个建立active模式item

TIM截图20170727120324.jpg

其相比于agent端中的item设定,需要将type变更为active选项

2.批量建立active模式的item

比如需要使用zabbix中常用的linux os templates,不太可能直接纯手动建立,我们可以通过复制的方式将item进行active模式的转化。

TIM截图20170727123640.jpg

如上图,先新建一个templates,然后进入linux os template中的item,选择所有,然后选择copy selected to,然后在新的界面中选择templates,选中我们新建的templates即可。

新建的templates中即有了linux os templates中的所有item,然后同样操作,选择所有item,然后选择mass update,在下一步中,将所有type变更为active模式即可

此即将有所有item导入为active模式下的item

但是在此并不推荐此种做法,因为在linux os templates中,除了item之外,还会有其它的设置,比如Discovery,screeen等,单纯的copy并不能将原先中所有参数设定变更为active模式中的参数。

在此推荐另外一种手法:

进入点击linux os templates进入templates,然后在下面选择clone,通过clone将原来的templates中的参数完成复制到另外一个templates中,然后再使用mass update将其中的type由agent模式变更为active模式

自定义key

1.自定义key的格式

UserParameter=<KeyName>,<Command>

前面是键值,后面是命令。如下例:

UserParameter=nginx.active,curl -s http://localhost/status | awk '/^Active/{print $3}'

2.自定义key中的参数传递与转义

在自定义key中的,一般在格式规整的查询中,需要多个查询的时候,可以直接使用变量进行传递即可以

如下

[root@iZ25b31bdp0Z zabbix]# cat /proc/meminfo 
MemTotal:        3620188 kB
MemFree:          588228 kB
MemAvailable:    1549608 kB
Buffers:          275780 kB
Cached:           509336 kB
SwapCached:            0 kB
Active:          2174808 kB
Inactive:         226312 kB
Active(anon):    1709644 kB
Inactive(anon):   159404 kB
Active(file):     465164 kB
Inactive(file):    66908 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               408 kB
Writeback:             0 kB
AnonPages:       1616100 kB
Mapped:           111140 kB
Shmem:            253044 kB
Slab:             552816 kB
SReclaimable:     513752 kB
SUnreclaim:        39064 kB
KernelStack:        4112 kB
PageTables:        30980 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1810092 kB
Committed_AS:    4482560 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7944 kB
VmallocChunk:   34359730291 kB
HardwareCorrupted:     0 kB
AnonHugePages:    483328 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      198656 kB
DirectMap2M:     3995648 kB

在/proc/meminfo中,需要查询多个值,但是又不想多次重复书写key值

可以使用如下

UserParameter=memory.useage[*],/usr/bin/awk '/^$1/{print $$2}' /proc/meminfo

然后在server端的web界面中,设置自定义key时,在key中将所需要查询的具体值,直接书写在userparameter中的[]中即可

如果要获取MemFree的值

在web中key的书写应该为memory.useage[MemFree]

在上述举例中,useage后面的参数,被传递给后面的$1位置 ,而后面的$$2,是因为awk语法中需要print $2所致,为了转义,使用$$2,否则awk无法执行

自定义key中的参数传递最多支持$1~$9,所有参数均写定在UserParameter后面的[]中,使用,进行分隔

多个参数传递的简单举例,如下

统计一个文件中有多少行被匹配?
UserParameter=wc[*],grep -c "$2" $1
如下方法将会返回文件中出现指定字符的行数
wc[/etc/passwd,root]
wc[/etc/services,zabbix]

3.自定义key的测试

在自定义key设置完成之后,需要检测自定义key获取的值正确与否,可以使用zabbix_get命令进行获取

3.1 agent模式

使用方法:在server端直接获取

zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key>

实例如下

[root@iZ25i0aaqmzZ ~]# zabbix_get -s 114.55.95.79  -k "mysql.status[Active]"
159

3.2 active模式

active模式因为server端无法直接get到agent端的信息,需要agent端自行将数据发送至server端,故zabbix_get是无法获取到值的

可以使用zabbix_agentd命令进行自我测试

 zabbix_agentd [-Vhp] [-R <runtime option>] [-c <config-file>] [-t <item key>]

实际举例:

[root@RHEL6-WEB03-BSSWEB ~]# zabbix_agentd -t tomcat.statuscode
tomcat.statuscode                             [t|1]

4.自定义key not supported

在自定义key设置ok后,经常会在web界面中显示自定义key not supported

总结大概可能有以下几种可能:

4.1 agent端发送数据超时

此处可以更改zabbix.conf中的Timeout时间,将其值修改大一些。

4.2 数据类型不一致

agent端发送的数据类型与server端web界面里面的数据类型不一致,如本来agent端发送的是text格式,但是定义的却是Numeric格式,此处也会出现not supported

4.3 zabbix用户没有权限执行自定义key中的命令或者脚本

如上述举例中有一个自定义key

UserParameter=tomcat.statuscode,sudo /etc/zabbix/monitorsmscode.sh

在此key中,因为执行该命令的用户为zabbix,而zabbix并没有sudo权限,故需要对/etc/sudoer中进行修改。相关修改如下:

Defaults    !requiretty
## 不需要使用tty终端即能执行sudo命令,action中使用自动恢复设定时必须开启
root    ALL=(ALL)   ALL
zabbix  ALL=(ALL)   NOPASSWD:ALL
## 开启zabbix sudo权限

在此类权限问题中,在active模式中对自定义key的值获取进行自行检测获取时,可以直接su至zabbix用户

[root@RHEL6-WEB03-BSSWEB ~]# su - zabbix -s /bin/bash -c "zabbix_agentd -t tomcat.statuscode"

因为zabbix的shell为nologin,故使用su入的时候使用bash,从而有了交互界面。

如果zabbix用户有权限问题,在此处即无法获取到值。

4.4 not supported的其它解决

如果以上几种方式都无法解决的话,可以通过将zabbix agent的debug日志打开。通过查看其中的日志,具体寻找问题所在。

如上述zabbix没有sudo用户权限的时候,在/var/log/zabbix/zabbix_agentd.log中可以查看到如此一样的记录

129440:20170727:145313.987 EXECUTE_STR() command:'sudo /etc/zabbix/monitorsmscode.sh' len:53 cmd_result:'sudo: no tty present'
129440:20170727:145313.987 for key [tomcat.statuscode] received value [sudo: no tty present and no askpass program specified]
129440:20170727:145313.987 In process_value() key:'10.68.32.59:tomcat.statuscode' value:'sudo: no tty present and no askpass program specified'

其中可以看到是因为zabbix没有sudo权限所致,无法获取到该自定义key的值。

打开zabbix debug日志收集,需要在/etc/zabbix/zabbix.conf中将DebugLevel的值设定为4

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容