小生博客:http://xsboke.blog.51cto.com

        -------谢谢您的参考,如有疑问,欢迎交流

目录

  1. 宏(macros)
  2. 用户自定义参数
  3. 自定义参数示例:nginx status
  4. zabbix_get测试zabbix key
  5. 网络发现功能

一、宏(macros)

> 它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换
> 类似的,zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本
> Zabbix还有许多内置宏
> 宏就是保存了字符型的数据的变量,能够在编译器或解释器遇到的时候自动替换
> 为了更强的灵活性,zabbix还支持在全局,模板或主机级别使用用户自定义宏
> 用户自定义宏要使用“{$MACRO}”,这种特殊的语法
> 宏可以应用在item keys和descriptions、trigger名称和表达式、主机接口IP/DNS及端口、discovery机制和SNMP协议的相关信息中
> 宏的名称只能使用大写字母、数字和下划线
> 宏的替换次序:主机级别的宏  主机上一次模板中的宏  再接着是二级模板中的宏  最后是全局宏
> Zabbix如果无法查找到某主机定义使用的宏,则不会对其进行替换操作,要使用自定义宏,有一下两种配置途径
    1)  全局宏:“Adminitrator -> General -> Macros”
    2)  主机或模板级别的宏:编辑相应主机或模板的属性即可

二、用户自定义参数

> 在agent端自定义一个命令或脚本获取数据,然后返回给server端
> 在agent对应的配置文件“/etc/zabbix/zabbix_agentd.conf”中使用“UserParameter”关键字定义参数
    格式:UserParameter=,
    1)  多个command用分号分隔,但是需要确保只能有一个返回值,最后是只有最后一个command有返回值,这个值就会发送到server端
    2)  Key是不可以重复的
    3)  每一个KEY在agent端获取数据时,数据的大小不能超过512KB
    4)  默认使用/bin/sh解释器
    5)  对zabbix而言,执行成功返回1,失败返回0
    6)  如果命令太长,那么当Command使用脚本,那么一定要注意,脚本只能有一个返回值。
    7)  在zabbix server端,有一个约定的存放脚本的目录“$zabbix_path$/externalscripts”
    8)  如果是agent端需要定义脚本,在command指定脚本的绝对路径即可。

> 例:
    1)  vi /etc/zabbix/zabbix_agentd.conf
        UserParameter=memory.free,/usr/bin/free | awk ‘/^Men:/{print $4}’
        解释:
        Key为memory.free
        逗号“,”后面是commend
    2)  在server端可以执行:zabbix_get –s  {agent端IP}   -k  “memory.free”,命令测试自定义参数是否可用
    3)  然后在zabbix web GUI中新建items,在key中,填写“memory.free”即可
    4)  某些时候要注意zabbix的单位和linux的单位不同
> UserParameter也支持参数
    格式:UserParameter=,
    1)  Server端指定一个获得多个参数,然后agent使用commend进行操作,叫获取的数据返回给server端
    2)  Agent在调用参数时,使用位置参数$1/$2等等去调用,但是如果commend本身也有”$”,name就需要写为”$$”

    3)  例:
        UserParameter=memory.usage[*],/bin/cat /proc/meminfo | awk ‘/$1/{print $$2}’
        memory.usage[*]:[*]是用来让server端传递参数的,可以是一个或多个,当后面的commend调用时,使用位置参数”$1、$2..”进行调用,这个参数时server端在添加items时,写入的key的参数,多个参数用逗号“,”分隔。
        awk ‘/$1/{print $$2}’:第一个”$1”,是用来调用前面server端传过来的key的参数,后面的”$$2”,是用来过滤的,因为需要区分两个不同的”$”功能,所以commend自身的“$”就写为了两个
            在zabbix server端进行测试:
            zabbix_get –s  {agent端IP}   -k  “memory.usage[MemFree]”   :获取剩余内存
            zabbix_get –s  {agent端IP}   -k  “memory.usage[MemTotal]”   :获取总内存大小
            提示:在zabbix web gui添加items填写key时,写入“memory.usage[MemFree]”即可

三、自定义参数示例:nginx status

> nginx配置
    Server {
                ..
          Location /status {
             Stub_status on;
             Access_log off;
             Allow 192.168.0.0/24;   允许访问的IP
             Allow 127.0.0.1;
             Deny all;
          }
    }

> Status状态页面各项数据的意义:
    Active connections:当前Nginx 正处理的活动连接数
    Serveraccepts handled requests :总共处理了233851个连接,成功创建233851次握手(证明中间没有失败的连接),总共处理了687942个请求(平均每次握手处理2.94个数据请求)
    Reading : nginx读取到客户端的Header信息数
    Writing: nginx返回给客户端的Header信息数
    Waiting: 开启keep-alive的情况下,这个值等于active - (reading + writing),意思就是nginx已经处理完正在等候下一次请求指令的驻留连接。

> 使用curl请求status页面,通过awk过滤,$1和$2分别是主机名/域名/IP地址和端口
    活动的个数:UserParameter=Nginx.active[*],/usr/bin/curl –s http://$1:$2/status | awk ‘/^Active/ {print $NF}’
    正在接受连接的进程数:UserParameter=Nginx.reading[*],/usr/bin/curl –s http://$1:$2/status | grep ‘Reading’| cut –d” ” –f2
    UserParameter=Nginx.writing[*],/usr/bin/curl –s http://$1:$2/status | grep ‘Writing’| cut –d” ” –f4
    UserParameter=Nginx.waiting[*],/usr/bin/curl –s http://$1:$2/status | grep ‘Waiting’| cut –d” ” –f6
    总共处理的连接数:UserParameter=Nginx.accepted[*],/usr/bin/curl –s http://$1:$2/status | awk ‘/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$1}’
    成功握手的次数:UserParameter=Nginx.handled[*],/usr/bin/curl –s http://$1:$2/status | awk ‘/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$2}’
    总共处理的请求数:UserParameter=Nginx.requests[*],/usr/bin/curl –s http://$1:$2/status | awk ‘/^[ \t]+[0-9]+[ \t]+[0-9]+[ \t]+[0-9]+/ {print $$3}’

四、zabbix_get测试zabbix key

> 在zabbix server端使用zabbix_get命令测试“UserParameter”是否可用
    Zabbix_get –s  {agent端IP} –k “Nginx.accept[,]”

    确认可用后在zabbix web gui中添加items时,key填写为“Nginx.accepted[{HOST.IP},80]”,在这里主机IP用宏填写,这样这个items可以给更多的host使用(你也不想每添加一个host就写一个items对不对)

五、网络发现功能

> Action:
> Item:每一个item就是一个数据项  保存在 DATA STORE中  使用 web gui展示
> Key:server 向agent获取数据时发送的标示,如果key可以接受参数,一个key可以生成多个item
    1)  用户参数:UserParameter=,
    2)  接受参数的key,在command中可以通过“$1、$2..”接受参数
> Trigger:定义某个item的域值,超过域值后触发“动作”,而item的定义是由key完成的
> 动作:condition(条件),operation(操作)(remote command,send message)