设为首页 收藏本站
查看: 1636|回复: 0

[经验分享] zabbix active模式以及自定义key not Supported的解决

[复制链接]

尚未签到

发表于 2018-1-2 07:42:39 | 显示全部楼层 |阅读模式
zabbix active模式

active模式适用场景
  zabbix server端无法直连agent端,比如agent为内网机器,仅有内网ip,没有公网ip,但是内网机器能够访问server端
  active模式相比于agent模式,是agent端通过自己对server端进行访问,获取server端对数据抓取的类型,然后自己向server端发送相关的数据。

active的配置文件示例
  相比于agent端的配置文件设置,其配置文件主要变更在需要开启RefreshActiveChecks与ServerActive两个的值
  如下有一份zabbix active模式下agent端的配置文件,可作参考
  

[iyunv@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
DSC0000.jpg

  其相比于agent端中的item设定,需要将type变更为active选项
  2.批量建立active模式的item
  比如需要使用zabbix中常用的linux os templates,不太可能直接纯手动建立,我们可以通过复制的方式将item进行active模式的转化。
DSC0001.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=
  前面是键值,后面是命令。如下例:
  

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

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

[iyunv@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>  

      实例如下
      

    [iyunv@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>]  

      实际举例:
      

    [iyunv@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用户
      

    [iyunv@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

  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430699-1-1.html 上篇帖子: 分布式监控:zabbix-get的使用 下篇帖子: zabbix监控第一台服务器
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表