每天上班的时候刚有新任务需要搭个节点或者实现某个需求之时,总会忘记这玩意怎么搞来着,搞到明明之前做过的东西还得百度一次才会,没用啊没用啊,还是自己写个归纳好一点,免得以后一个一个翻了。

Zabbix-Agent/Proxy 开不了服务

先关掉 SELinux ,不然无法启动,命令如下。

#临时关闭
setenforce 0
#永久关闭
vi /etc/selinux/config
SELINUX=disable

#查看情况,如果输出结果为 0 则关闭成功
getenfoce

但如果关闭了 SELinux 也无法解决问题,请检查配置文件有无问题(当初我删了个注释就无法启动服务,很烦)。

配置相关

主动式监控

Zabbix 默认用被动式监控,即 Server 向各个地方的 Agent 请求数据,Agent 再发给 Server,这样做初期没什么问题,但一旦业务量开始多起来就很消耗 Server 的网络资源,为了节省网络资源,主动式监控才是我们的选择

先修改 /etc/zabbix/zabbix_agentd.conf ,更改以下内容

StartAgents=0
ServerActive=[ServerIP]

监控项也要改,可以先把被动模板克隆出来,把所有监控项选中,在点击 批量更新 后,将类型全改成主动式才可以。

jiankongxiang.jpg

当然,如果自己要添加监控项,也要改成主动式才能生效。(注:更改主动式后,ZBX 的图标会变成红色,因为绿色状态是被动式监控,要验证是否能获得数据请看最新数据)

active.jpg

加快 proxy 的同步配置速度

在简单检查的监控项,只能在 Server 或 Proxy 端工作,而不能在 Agent 端工作。但如果做分布式节点的话,主要还是交给 Proxy 处理简单检查的监控项。但有时候我们配置好了相关规则,过了半个小时才出图或结果,原因是 proxy 获取 server 的配置数据的等待时间太长了(注:不是说网络问题,而是 proxy 每次获取数据都有时间间隔,默认1小时获取一次)。

我们只需修改 Proxy 的获取数据时间间隔,就能加快同步速度了。

参数名称必须?范围默认值描述信息
ConfigFrequency1-6048003600每隔多少秒 proxy 从 Zabbix server 获取配置数据。 该参数只有主动 proxy才会使用,proxy 工作模式由参数 ProxyMode 决定。
[root@localhost ~]# cat /etc/zabbix/zabbix_proxy.conf | grep ConfigFr
### Option: ConfigFrequency
ConfigFrequency=600

重启服务即生效

监控项方面

自定义监控项

自定义监控项可以使用自己写的脚本获取数值,首先要先修改 /etc/zabbix/zabbix_agentd.conf ,更改以下内容

EnableRemoteCommands=1
Include=/etc/zabbix/zabbix_agentd.d/*.conf

我不会在配置文件中设置自定义监控项,太麻烦了,我在 /etc/zabbix/zabbix_agentd.d/ 目录随便弄个配置文件就行了

[root@localhost ~]# cat /etc/zabbix/zabbix_agentd.d/user.conf
UserParameter=dnscheck,/home/ping.sh
#如果需要传递参数的话,要这样。
UserParameter=nscheck[*],/home/ns.sh $1

重启 Agent 服务,在 Zabbix 的监控项使用这个键值就行了。关于键值与自定义监控项更多内容请查阅官方手册 1

监控 1 分钟之内的 CPU 负载

Zabbix 本身自带对 CPU 负载的监控,但那个太儿戏了,是监测每一个线程的负载,而不是全部线程的负载情况,需要修改 Processor load (1 min average per core),将键值改成 system.cpu.load[all,avg1]

常用宏

以下内容摘自官方文档 2,先把经常会用到的宏列出来

MACRO作用
{HOST.IP}显示监控主机的 IP 地址
{HOST.NAME}显示监控主机的主机名称
$1在触发器中显示当前监控项的值
{ITEM.VALUE}同上

SNMP 自动发现交换机相关监控项

Zabbix 的交换机模板的自动发现只有网络接口(Network Interfaces)发现,其他就只能靠自己发挥了,不过大概原理也很简单,先轮询交换机所有接口的索引号,再基于索引号找该接口的速率(ifSpeed)/错误包(ifErrors) 等 OID 信息。如果我要弄一个自动发现接口收发光的话,大概步骤就跟上面差不多。

发现规律

查阅交换机厂商官方文档找到相关的 MIB 信息(毕竟深入一些的 OID 是厂商私有),使用 SNMPWALK 跑一遍。这里我找的是华三(H3C)交换机的 SNMP OID,现在 snmpwalk 跑一下这个 OID 前缀试试。

snmwalk -v 2c -c public IP地址 1.3.6.1.4.1.25506.2.70.1.1.1.12

snmpwalkresult.jpg

查询完毕后,可以看到,OID 最后一个数值就是接口的索引号(图就不放了,请自己walk一遍 IF-MIB::ifDescr),也就是说 zabbix 只需要探测到接口的索引号再加到这个收发光 OID 最后就可以获得数据了。

创建规则

规则如图所示

  • 名称:随意
  • 类型:SNMPv2 客户端
  • 键值:ifDescrRR(如果直接使用 ifDescr 会与接口发现规则冲突,不重名即可)
  • SNMP OID:discovery[{#SNMPVALUE},IF-MIB::ifDescr] (跟接口发现一样,目的只是找索引号)
  • 团队名:请查询自己的交换机

autodiscorvyrule.jpg

还有一步,{#SNMPVALUE} 本身是一个宏,在这里起一个过滤器的作用,规则填好后,点击 过滤器 标签页。根据需求,收发光只需要发现万兆口即可,千兆口和百兆口基本都是电口为主(SFP 插槽另外再算),所以我们只需要找万兆口的名称即可。当然如果想所有物理端口也能找到就改成 Ethernet,要发现逻辑接口就 {Vlanif|Eth-trunk}。

filter.jpg

配置自动发现监控项原型

发光和收光不可能用一个监控项就能输出两个,只能一分二。那就先配置监控项吧。

  • 名称:

    • Rx - {#SNMPVALUE} 的收光
    • Tx - {#SNMPVALUE} 的发光
    • 该宏会自动补充接口的名称
  • 类型:SNMP v2 客户端
  • 键值:

    • 收光:1.3.6.1.4.1.25506.2.70.1.1.1.12.{#SNMPINDEX}
    • 发光:1.3.6.1.4.1.25506.2.70.1.1.1.9.{#SNMPINDEX}
  • SNMP community:public
  • 信息类型:浮点数 (真实的光衰不可能是整数)
  • 自定义倍数:0.01 (看上面的 snmpwalk 的截图,获取的数据都是整数,实际上没有加上小数点)

jiankongxiang2.jpg

结果

怎么加模板或者开启自动发现我就不说了,在 Proxy 接收到来自 Server 的配置信息后就会开始工作。

(图就不放了,公司业务的 Zabbix 不好发出来。)

待补全

真的待补全,我还有一堆笔记还没归纳好,会持续更新