二次开发:zabbix 进程和命令

zabbix 进程构成

了解完 zabbix 特性之后,本该进入 zabbix 安装教程,但是我觉得在安装之前我们很有必要了解一下 zabbix 进程组成结构,默认情况下 zabbix 包含 5 个程序:zabbix_agentdzabbix_getzabbix_proxyzabbix_senderzabbix_server,另外 zabbix_java_gateway 是可选,需要另外安装。下面来分别介绍下他们各自的作用。

zabbix_agentd

客户端守护进程,收集客户端数据,例如 cpu 负载、内存、硬盘使用情况等

zabbix_get

zabbix 工具,单独使用的命令,通常在 server 或者 proxy 端执行,用户获取被监控端数据,通常用于排错。例

如在 server 端获取不到客户端的内存数据,我们可以使用 zabbix_get 获取客户端的内容的方式来做故障排查。

 zabbix_sender

zabbix 工具,用于发送数据给 server 或者 proxy,通常用于耗时比较长的 check,并且与 trapper 配合使用。生存环境中,个别非常耗时间 check 经常导致 zabbix 超时。于是我们在脚本执行完毕之后,使用 sender 主动提交数据。

 zabbix_server

zabbix 服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway 的数据最终都是提交到 server

备注:当然不是数据都是主动提交给 zabbix_server,大多数情况下都是 server 主动去取数据。

 zabbix_proxy

zabbix 代理守护进程。功能类似 server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交

到 server 里。一般跨机房、地区的环境需要用到 proxy。

 zabbix_java_gateway

zabbix2.0 之后引入的一个功能。顾名思义:Java 网关,类似 agentd,但是只用于 Java 方面。需要特别注意的

是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者 proxy。

Zabbix 命令

zabbix 协议概述

zabbix_server建立TCP连接到10050端口,请求具体的某个key值, zabbix_agentd对请求的进行数据的响应,下面用telent来进行模拟测试

[root@zabbix ~]# telnet 127.0.0.1 10050
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
agent.version
Connection closed by foreign host.

 上述语句中,请求key是agent.version,响应的数据是ZBXD口3.0.0rc13,用zabbix_get程序获取到的数据

[root@zabbix ~]# zabbix_get -s 127.0.0.1 -p 100k agent.version
3.0.13

 Agent响应的数据中有一个头部信息ZCXD如下图所示

Zabbix Agent的数据发送格式如下:

<HEADER><DATALEN><DATA>

解释如下

HEADER: "ZBXD\X01"(5字节)
DATALEN: 数据长度(8字节),1将被格式化为01/00/00/00/00/00/00/00(十六进制8字节,64位数字)
DATA:大小有限制。为了不耗尽zabbix_server的内存,在zabbix_server将单个数据的带下限制在64MB
zabbix2.2.0以前的版本为128MB,在zabbix2.0.3版本之前对大小无任何限制,在zabbix2.2.3中,改为128MB
的大小限制,在64MB限制的版本中将会丢弃超过64MB大小限制数据

更加详尽地解释了上面的数据格式如下图:

 

zabbix_server

介绍

zabbix 可以没有 zabbix_agentd,也可以没用 snmp、也可以没有 proxy,但是 zabbix_server 那是绝对不能少,它是 zabbix 最核心的东西。获取数据、配置主机、发送邮件等等众多事情都是由 zabbix_server 完成,zabbix_server 绝对

是日理万机废寝忘食的好员工。

兼容系统

虽然和 zabbix_agentd 相比,zabbix_server 支持的系统少一点,但是它还是支持着众多操作系统。最遗憾的是它不支持 windows 系统。windows sa 们可以哭一会儿。支持的系统如下:

Linux
Solaris
AIX
HP-UX
Mac OS X
FreeBSD
OpenBSD
NetBSD
SCO Open Server
Tru64/OSF1

命令详解

使用语法

zabbix_server [-hV] [-c <file>] [-n <nodeid>] [-R <option>]

命令选项

-c --config <file>              配置文件路径
-n --new-nodeid <nodeid>        将数据转为 nodeid,如果当前服务器想作为一个 nodeid 需要使用名,切记,操作不可逆
-R --runtime-control <option>   执行管理功能,如:config_cache_reload

Runtime 控制项:
config_cache_reload             reload 配置缓存

zabbix_server 命令实例

启动 zabbix server

/usr/local/zabbix-2.2.1/sbin/zabbix_server -c  /usr/local/zabbix-2.2.1/etc/zabbix_server.conf

转为 node 模式(只做转换,不会启动 server)

/usr/local/zabbix-2.2.1/sbin/zabbix_server -c  /usr/local/zabbix-2.2.1/etc/zabbix_server.conf -n 12

reload 配置缓存

/usr/local/zabbix-2.2.1/sbin/zabbix_server -c  /usr/local/zabbix-2.2.1/etc/zabbix_server.conf -R config_cache_reload

zabbix_get

zabbix_get 作用

总有人在群里提问,为什么 zabbix 获取不到数据,为什么 zabbix 提示 Not Support,怎么办?别老问,用 zabbix_get 试着获取数据即可。在 zabbix server 上执行 zabbix_get 命令来试着获取 item 值 zabbix_get 命令详解

命令在 zabbix 安装目录 bin 下,如果是 window 命令自然是 zabbix_get.exe,使用方法都是一样的。端口和源(绑定)

IP 是可选的,其他参数不能漏掉

[root@zabbix ~]# zabbix_get -h
usage:
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address]
                --tls-connect cert --tls-ca-file CA-file
                [--tls-crl-file CRL-file] [--tls-agent-cert-issuer cert-issuer]
                [--tls-agent-cert-subject cert-subject]
                --tls-cert-file cert-file --tls-key-file key-file -k item-key
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address]
                --tls-connect psk --tls-psk-identity PSK-identity
                --tls-psk-file PSK-file -k item-key
  zabbix_get -h
  zabbix_get -V

Get data from Zabbix agent.

General options:
  -s --host host-name-or-IP  Specify host name or IP address of a host
  -p --port port-number      Specify port number of agent running on the host
                             (default: 10050)
  -I --source-address IP-address   Specify source IP address

  -k --key item-key          Specify key of the item to retrieve value for

  -h --help                  Display this help message
  -V --version               Display version number

TLS connection options:
  --tls-connect value        How to connect to agent. Values:
                               unencrypted - connect without encryption
                                             (default)
                               psk         - connect using TLS and a pre-shared
                                             key
                               cert        - connect using TLS and a
                                             certificate

  --tls-ca-file CA-file      Full pathname of a file containing the top-level
                             CA(s) certificates for peer certificate
                             verification

  --tls-crl-file CRL-file    Full pathname of a file containing revoked
                             certificates

  --tls-agent-cert-issuer cert-issuer   Allowed agent certificate issuer

  --tls-agent-cert-subject cert-subject   Allowed agent certificate subject

  --tls-cert-file cert-file  Full pathname of a file containing the certificate
                             or certificate chain

  --tls-key-file key-file    Full pathname of a file containing the private key

  --tls-psk-identity PSK-identity   Unique, case sensitive string used to
                             identify the pre-shared key

  --tls-psk-file PSK-file    Full pathname of a file containing the pre-shared
                             key

Example(s):
  zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"

  zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]" \
    --tls-connect cert --tls-ca-file /home/zabbix/zabbix_ca_file \
    --tls-agent-cert-issuer \
    "CN=Signing CA,OU=IT operations,O=Example Corp,DC=example,DC=com" \
    --tls-agent-cert-subject \
    "CN=server1,OU=IT operations,O=Example Corp,DC=example,DC=com" \
    --tls-cert-file /home/zabbix/zabbix_get.crt \
    --tls-key-file /home/zabbix/zabbix_get.key

  zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]" \
    --tls-connect psk --tls-psk-identity "PSK ID Zabbix agentd" \
    --tls-psk-file /home/zabbix/zabbix_agentd.psk

Report bugs to: <https://support.zabbix.com>
Zabbix home page: <http://www.zabbix.com>
Documentation: <https://www.zabbix.com/documentation>
[root@zabbix ~]# zabbix_get -h
usage:
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address]
                --tls-connect cert --tls-ca-file CA-file
                [--tls-crl-file CRL-file] [--tls-agent-cert-issuer cert-issuer]
                [--tls-agent-cert-subject cert-subject]
                --tls-cert-file cert-file --tls-key-file key-file -k item-key
  zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address]
                --tls-connect psk --tls-psk-identity PSK-identity
                --tls-psk-file PSK-file -k item-key
  zabbix_get -h
  zabbix_get -V

Get data from Zabbix agent.

General options:
  -s --host host-name-or-IP  Specify host name or IP address of a host
  -p --port port-number      Specify port number of agent running on the host
                             (default: 10050)
  -I --source-address IP-address   Specify source IP address

  -k --key item-key          Specify key of the item to retrieve value for

  -h --help                  Display this help message
  -V --version               Display version number

TLS connection options:
  --tls-connect value        How to connect to agent. Values:
                               unencrypted - connect without encryption
                                             (default)
                               psk         - connect using TLS and a pre-shared
                                             key
                               cert        - connect using TLS and a
                                             certificate

  --tls-ca-file CA-file      Full pathname of a file containing the top-level
                             CA(s) certificates for peer certificate
                             verification

  --tls-crl-file CRL-file    Full pathname of a file containing revoked
                             certificates

  --tls-agent-cert-issuer cert-issuer   Allowed agent certificate issuer

  --tls-agent-cert-subject cert-subject   Allowed agent certificate subject

  --tls-cert-file cert-file  Full pathname of a file containing the certificate
                             or certificate chain

  --tls-key-file key-file    Full pathname of a file containing the private key

  --tls-psk-identity PSK-identity   Unique, case sensitive string used to
                             identify the pre-shared key

  --tls-psk-file PSK-file    Full pathname of a file containing the pre-shared
                             key

Example(s):
  zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"

  zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]" \
    --tls-connect cert --tls-ca-file /home/zabbix/zabbix_ca_file \
    --tls-agent-cert-issuer \
    "CN=Signing CA,OU=IT operations,O=Example Corp,DC=example,DC=com" \
    --tls-agent-cert-subject \
    "CN=server1,OU=IT operations,O=Example Corp,DC=example,DC=com" \
    --tls-cert-file /home/zabbix/zabbix_get.crt \
    --tls-key-file /home/zabbix/zabbix_get.key

  zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]" \
    --tls-connect psk --tls-psk-identity "PSK ID Zabbix agentd" \
    --tls-psk-file /home/zabbix/zabbix_agentd.psk

Report bugs to: <https://support.zabbix.com>
Zabbix home page: <http://www.zabbix.com>
Documentation: <https://www.zabbix.com/documentation>

  

参数说明:

-s –host: 指定客户端主机名或者 IP
-p –port:客户端端口,默认 10050
-I –source-address:指定源 IP,写上 zabbix server 的 ip 地址即可,一般留空,服务器如果有多 ip 的时候,你指定一个。
-k –key:你想获取的 key

至于使用长参数还是短的,自己选,我经常使用-s 而不是-host,太长了。来个例子咯

zabbix_get 获取数据

获取负载
[root@zabbix ~]# zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg15]"
0.050000
获取主机名
[root@zabbix ~]# zabbix_get -s 127.0.0.1 -p 10050 -I 127.0.0.1 -k "system.hostname"
zabbix

Zabbix 命令:zabbix_agentd

zabbix_agentd 用途

zabbix_agentd 非常非常重要,它是每个学习 zabbix 必须熟悉也必须接触到得东西,把 zabbix_agentd 安装到被监控服务器上,zabbix_server 便可以和 zabbix_agentd 通信来获取数据。下面来详细聊聊 zabbix_agentd。

兼容系统

作为一个跨平台的监控系统,zabbix_agentd 可以被安装到各式各样的系统中,如下:

Linux
IBM AIX
FreeBSD
NetBSD
OpenBSD
HP-UX
Mac OS X
Solaris: 9, 10, 11
Windows: 2000, Server 2003, XP, Vista, Server 2008, 7
命令详解(Linux

linux 和 windows 上略有不同,不过基本上差不多使用方法

usage: zabbix_agentd [-Vhp] [-c <config-file>] [-t <item key>]

参数

  -c --config <config-file>  配置文件绝对路径
  -p --print                 打印出所有的 item,然后退出
  -t --test <item key>       测试指定 item key,然后退出
  -h --help                  帮助
  -V --version              显示版本号

命令详解(Windows

基本上使用方法和 linux 一样,不过有些特殊,在 window 里,zabbix_agentd 多了服务这块。

  -i --install          安装为服务
  -d --uninstall        移除服务
  -s --start            启动服务 zabbix_agentd
  -x --stop             关闭 zabbix_agentd
  -m --multiple-agents  多个服务,服务名包含 agentd 的主机名(不常用)

实例测试

列出 items

# zabbix_agentd -p | grep uptime system.uptime                                 [u|15923945]

测试 key

# zabbix_agentd -t system.uptime -c /usr/local/zabbix-2.2.1/etc/zabbix_agentd.conf system.uptime                                 [u|15923992]

启动 zabbix_agentd

# zabbix_agentd  -c /usr/local/zabbix-2.2.1/etc/zabbix_agentd.conf

Zabbix 命令:zabbix_sender

zabbix_sender 用途

zabbix 获取 key 值有超时时间,如果自定义的 key 脚本一般需要执行很长时间,这根本没法去做监控,那怎么办呢?

使用 zabbix 监控类型 zabbix trapper,需要配合 zabbix_sender 给它传递数据。关于 trapper 的用法,我们来弄个实例。

执行超长时间脚本,如:脚本去几十台服务器拉去数据,每个日志都上 G,然后日志整合在一起,统计出返回值。这种脚本比如超时,所以我们必须改成让客户端提交数据的方式。

命令详解

语法

usage: zabbix_sender [-Vhv] {[-zpsI] -ko | [-zpI] -T -i <file> -r} [-c <file>]

使用参数

  -c --config <file>                   配置文件绝对路径
  -z --zabbix-server <server>          zabbix server 的 IP 地址
  -p --port <server port>              zabbix server 端口.默认 10051
  -s --host <hostname>                 主机名,zabbix 里面配置的主机名(不是服务器的 hostname),不能使用 ip 地址
  -I --source-address <IP address>     源 IP
  -k --key <key>                       监控项的 key
  -o --value <key value>               key 值
  -i --input-file <input file>         从文件里面读取 hostname、key、value 一行为一条数据,使用空格作为分隔符,

如果主机名带空格,那么请使用双引号包起来

  -T --with-timestamps              一行一条数据,空格作为分隔符: <hostname> <key> <timestamp> <value>,配合 --input-file option,timestamp 为 unix 时间戳
  -r --real-time                      将数据实时提交给服务器
  -v --verbose                         详细模式, -vv 更详细
 
使用实例
# zabbix_sender -s 127.0.0.1 -z 127.0.0.1 -k "ttlsa.trapper" -o 1 -r  info from server: "processed: 0; failed: 1; total: 1; seconds spent: 0.000024" sent: 1; skipped: 0; total: 1

ttlsa.trapper:是我们定义好的 key

-0 1:1 是 key 值

failed:错误数,说了-s 不能用 ip 地址,那么我们改成配置文件中得主机名吧

#zabbix_sender -s "Zabbix server" -z 127.0.0.1 -k "ttlsa.trapper" -o 1 -r  info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000035" sent: 1; skipped: 0; total: 1

zabbix_sender 批量传递 key 值

#cat f.txt
"Zabbix server" ttlsa.trapper 10
"Zabbix server" ttlsa.trapper 20
"Zabbix server" ttlsa.trapper 30
"Zabbix server" ttlsa.trapper 40
"Zabbix server" ttlsa.trapper 1 
# zabbix_sender -z 127.0.0.1 -i f.txt info from server: "processed: 5; failed: 0; total: 5; seconds spent: 0.000085" sent: 5; skipped: 0; total: 5

每行对应一个 key 值,一般是不同的主机名、不同的 key、不同的 key 值。这边方便测试,所以都用了同一个 key

zabbix_proxy

zabbix_proxy 介绍请看《zabbix proxy 分布式配置》  ,zabbix_proxy 收集被监控端的数据,先缓存到本地然后把数据传给 zabbix server,因为 zabbix_proxy 基本上是在收集数据,而不像 server 一样要处理数据,所以 zabbix_proxy 对硬件的要求相对不高,今天主要是来了解 zabbix_proxy 命令的,往下看吧。

兼容系统

和 zabbix server 基本一样,server 支持什么,proxy 就支持什么。请参考《zabbix_server 命令详解》

命令详解

使用语法

zabbix_proxy [-hV] [-c <file>] [-R <option>]

使用参数

  -c --config <file>              配置文件路径
  -R --runtime-control <option>   执行管理功能
  Runtime control options:
  config_cache_reload             Reload 配置缓存

启动 proxy

# /usr/local/zabbix-2.2.1/sbin/zabbix_proxy -c /usr/local/zabbix-2.2.1/etc/zabbix_proxy.conf

Rreload proxy 配置缓存

# /usr/local/zabbix-2.2.1/sbin/zabbix_proxy -c /usr/local/zabbix-2.2.1/etc/zabbix_proxy.conf  -R config_cache_reload

  

 

 

 

posted @ 2017-11-30 07:27  活的潇洒80  阅读(651)  评论(0编辑  收藏  举报