一, 自动发现与自动注册
Zabbix 的发现主要包括三种类型:
1)Zabbix 的自动网络发现
Zabbix 提供非常有利和灵活的自动网络发现功能. 通过网络发现, 可以实现加速 Zabbix 部署, 简化管理, 在不断变化的环境中使用 Zabbix 而不需要过多的管理;
zabbix 网络发现基于以下信息:
1)IP 段自动发现;
2)可用的外部服务(FTP,SSH,web,TCP 等);
3)从 Zabbix 客户端接收到信息;
4)从 SNMP 客户端接收到信息;
1)自动发现原理
网络发现主要由两个步骤组成: 发现和动作;
Zabbix 会周期性地扫描在网络发现规则中定义的 IP 地址段. 根据每一个规则配置自身的检查频率. 每一个规则都定义了一个对指定 IP 段的服务检查集合.
动作是对发现的主机进行相关的设置. 常用的动作有添加主机, 删除主机, 启用主机, 停用主机, 添加主机到某个主机组中, 发现通知等;
2)配置网络发现规则
如图:
综上所述, 这个字段发现规则的意思: zabbix 会自动扫描 192.168.1.1 到 192.168.1.254 这个 IP 地址段的所有 IP 地址, 以此连接这些 IP 的 10050 端口, 接着通过 "system.uname" 键值查看是否能获取数据, 如果可以获取到数据, 那么就把这个主机加入到自动发现规则中.
自动发现规则添加完成后, 接着, 就可以添加自动发现动作了, 如图:
经过以上的操作, zabbix 的自动发现配置已经完成, 稍等片刻, 就会有符合条件的主机自动添加到 zabbix Web 中.
2)主动客户端自动注册
自动注册功能主要用于 Agent 主动且自动向 Server 注册. 与前面的网络自动发现有同样的功能, 但是这个功能更适用于特定的环境, 当存在一个条件未知 (如 agent 端的 IP 地址段, agent 端的操作系统版本等信息) 时, Agent 去请求 Server 仍可实现主机自动添加到 zabbix Web 中的功能. 比如云环境下的监控. 云环境中, IP 分配就是随机的, 这个功能就可以很好的解决类似的问题.
配置主动客户端自动注册有两个步骤, 如下:
1)客户端修改配置文件
打开客户端配置文件, 修改如下配置:
- [[email protected] ~]# VIM /etc/zabbix/zabbix_agentd.conf
- Server=192.168.1.10 // 设置被动模式下的 zabbix 服务器的 IP 地址
- ServerActive=192.168.1.10 // 设置主动模式下的 zabbix 服务器的 IP 地址
- Hostname=192.168.1.8
- HostMetadata= Linux zabbix,lzj
- // 设置两个元数据, 一个声明为 Linux 服务器, 一个写一个通用的字符串
自动注册请求发生在每次客户端发送一个刷新主动检查请求到服务器时. 请求的延时在客户端中配置文件中的 "RefreshActiveChecks" 参数中指定. 第一次请求将在客户端重启之后立即发送.
2)配置网络自动注册规则
如图:
经过以上的操作, zabbix 的自动发现注册已经完成, 稍等片刻, 就会有符合条件的主机自动添加到 zabbix Web 中.
3)低级别发现 Low-level discovery(LLD)
在 Zabbix 中, 支持三种现成类型的数据项发现, 分别是:
1)文件系统发现;
2)网络接口发现;
3)SNMP OID 发现;
4)CPU 核和状态;
zabbix 自带的 LLD key, 如下:
)vfs.fs.discovery // 适用于 zabbix agent 监控方式 )snmp.discovery // 适用于 SNMP agent 监控方式 NET.if.discovery // 适用于 zabbix agent 监控方式 )system.CPU.discovery // 适用于 zabbix agent 监控方式
可以使用 zabbix_get 工具来获取 key 获取的数据, 对于 snmp, 不能通过 zabbix_get 工具进行验证, 只能在 Web 页面中进行配置使用.
比如:
[[email protected] ~]# zabbix_get -s 192.168.1.8 -k.NET.if.discovery { "data":[{ "{#IFNAME}":"lo" },{ "{#IFNAME}":"virbr0-nic" },{ "{#IFNAME}":"virbr0" },{ "{#IFNAME}":"ens33" }] }
其中,{#IFNAME}就是一个宏变量, 会返回系统中所有网卡的名称. 宏变量可以定义在主机, 模板以及全局, 宏变量都是大写的. 使用宏变量, 可以使 zabbix 功能更加强大.
在 LLD 中, 常用的内置宏变量如下:
){ #FSNAME }表示文件系统名称; ){ #FSTYPE }表示文件系统类型; ){ #IFNAME }表示网卡名称; ){ #SNMPINDEX }会获取 OID 中最后一个值;
宏级别有很多种, 其优先级由高到低顺序如下:
主机级别的宏优先级最高;
第一级模板中的宏;
第二级模板中的宏;
全局级别的宏;
因此, zabbix 查找宏的顺序为: 首先查找主机级别的宏, 如果在主机级别不存在宏设置, 那么 zabbix 就会去模板中查看是否设置有宏. 如果模板中也没有, 将会查找使用全局的宏. 若是在各级别中都没有找到宏, 将不使用宏.
二, zabbix 自定义监控项
有时当我们监控的项目在 zabbix 预定义的 key 中没有定义时, 这时我们可以通过编写 zabbix 用户参数的方法来监控我们要求的项目 item. 形象一点说 zabbix 代理端配置文件中 UserParameters 就相当于脚本获取要监控的值, 然后将相关的脚本或命令写入 UserParameters 中, 然后 zabbix server 读取配置文件中的返回值通过处理前端的方式返回给用户.
1)zabbix 端开启 UserParameters 指令
[[email protected] ~]# VIM /etc/zabbix/zabbix_agentd.conf UnsafeUserParameters=1 // 启用 agent 端自定义 item 功能, 设置此参数为 1 后, 就可以使用 UserParameters 指令了
UserParameters 用于自定义 itme. 语法格式为:
UserParameters=<key>,<command> //UserParameters: 为关键字; //key: 为用户自定义 key 名称; //command: 需运行的命令或脚本;
简单的例子, 如下:
UserParameters=ping, echo 1 // 代理程序将会永远返回 1 当我们在服务器端添加 item 的 key 为 ping 时
2)让 key 接受参数
让 key 也接受参数的方法使 item 添加时更具备了灵活性. 例如: 系统于定义 key:
vm.memory.size[<mode>] // 其中 mode 模式就是用户要接受的参数, 当我们填写为 free 时则返回的为内存的剩余大小, 如果我们填入的为 userd 时返回的内存是已经使用的大小.
语法如下:
UserParameters=key[*],command // 其中, key 的值在主机系统中必须是唯一的, 其中 * 代表命令中接受的参数, command 表示命令, 也就是客户端系统中可执行的命令
举例:
UserParameters=ping[*],echo $1 // 如果执行 ping[0], 那么将一致返回'0', 如果执行 ping[aaa], 将一直返回'aaa'
三, zabbix 的主动模式与被动模式
默认情况下, zabbix server 会直接去每个 agent 上抓取数据, 这对于 zabbix agent 来说, 是被动模式, 也是默认的一种获取数据的方式. 但是, 当 zabbix server 监控主机数量过多时, 由 zabbix server 端去抓取 agent 上的数据, zabbix server 会出现严重的性能问题. 主要表现如下:
)Web 界面操作卡顿, 容易出现 502 错误;
)监控图形中图层断裂;
)监控告警不及时;
所以优化主要从两个方面进行优化, 分别是:
)通过部署多个 zabbix proxy 模式做分布式监控;
)调整 zabbix agentd 为主动模式;
zabbix agentd 主动模式的含义是 agentd 端主动汇报自己收集到的数据给 zabbix server, 这样, zabbix server 就会空闲很多, 下面介绍如何开启 agent 的主动模式.
1)开启 agent 的主动模式
zabbix agent 端的配置:
[[email protected] ~]# VIM /etc/zabbix/zabbix_agentd.conf ServerActive=192.168.1.10 // 定义 agent 端收集的数据送往那个主机 Hostname=192.168.1.8 // 名称需与 Web 页面添加主机名时对应 StartAgents=1 //StartAgents 的默认值为 3, 如果需要关闭被动模式, 可设置值为 0 即可, 关闭被动模式后, agent 端的 10050 端口也关闭了, 为了兼容被动模式, 没有将值设为 0, 如果一开始就使用主动模式, 建议将值设置为 0, 关闭被动模式
zabbix server 端的配置
agent 如果开启了主动发送数据模式, 还需以下操作:
[[email protected] ~]# VIM /usr/local/zabbix/etc/zabbix_server.conf StartPollers=10 // 把 zabbix server 主动收集数据进程减少一些 StartTrappers=200 // 将负责处理 agent 推送来的数据进程开大些
调整模板
因为收集数据的模式发生了变化, 因此需要将所有的监控项的监控类型由原来的 "zabbix 客户端" 改为 "zabbix 客户端(主动式)".
经过以上操作, 就完成了主动模式的切换, 调整之后, 可以发现 zabbix server 端的负载, 应该会降低不少, 操作上卡顿的问题, 图形图层断裂的问题也就解决了!
来源: http://www.bubuko.com/infodetail-3395565.html