zabbix之零碎补充(七)

监控报警 靠谱运维 941℃ 0评论

一、SNMP监控方式

snmp监控方式也是一个很重要的监控方式,如果集群比较庞大的话,交换机也少不了,这就需要snmp健康方式了。

官方文档:https://www.zabbix.com/documentation/3.2/manual/config/items/itemtypes/snmp

1.1 snmp概述

SNMP是简单网络管理协议,cacti用的,大家已经不陌生了。简单网络管理包括两部分:管理进程和被管理设备。

管理端和被管理端的通信方式有如下三种:

Bash
被管理端向管理端发送数据
管理端向北管理端请求获取数据
管理端向被管理端请求改变数据。

基于TCP/IP的网络管理包含以下三个组成部分。

Bash
管理信息库(MIB):包含所有代理进程的可被查询和修改的参数
管理信息结构(SMI):关于MIB的一套公用结构和表示符号。
简单网络管理协议(SNMP):管理进程和代理进程之间的通信协议。

1.2 SNMP协议的运行

SNMP协议在OSI参考模型的应用层(第七层)运行,支持多种操作,主要有以下几种基本操作:

Bash
Get操作:NMS使用该操作从Agent获取一个或多个参数值
GetNext操作:NMS使用该操作从Agent获取一个或多个参数的下一个参数值。
Set操作:NMS使用该操作设置Agent一个或多个参数值。
Response操作:Agent返回一个或多个参数值。该操作是前面三种操作的响应。
Trap操作:Agent主动发出的操作,通知NMS有某些事情发生。

SNMP协议在执行前四种操作时,使用UDP协议,采用161端口发送报文;执行Trap操作时,设备使用UDP协议,采用162端口发送报文。由于收发采用不同的端口号,所以一台设备可以同时作为Agent和NMS。

这里就不去解释SNMP1、2、3版本的区别了,常用的还是snmp2版本。

1.3 MIB简介

MIB的含义

任何一个被管理的资源都表示为一个对象,称为被管理的对象。MIB是被管理对象的集合,它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个Agent都有自己的MIB。MIB也可以看作是NMS和Agent之间的一个接口,通过这个接口,NMS可以对Agent中的每一个被管理对象进行读/写操作,从而达到管理和监控设备的目录。不过一般我们就让其有读操作。

MIB视图

MIB视图是MIB的子集合,配置Agent时,用户可以将团体名/用户名和MIB视图绑定,从而限制NMS能够访问的MIB对象。用户可以配置MIB视图内的对象为excluded或included。excluded表示当前视图不包括该MIB子树的所有节点;included表示当前视图包括该MIB子树的所有节点。

OID和子树

MIB是以树状结构进行存储的。树的节点表示被管理对象,它可以用从根开始的一条路径唯一地识别,这条路径就被称为OID。

图片.png

#如上图所示,管理对象system可以用一串数字{1.3.6.1.2.1.1}唯一表示,这串数字就是system的OID。子树可以用该子树根节点的OID来标识。如以private为根节点的子树的OID为private的OID–{1.3.6.1.4}

子树掩码

子树掩码可以和子树OID共同来确定一个视图的范围。子树掩码用十六进制格式表示,转化成二进制后,每个比特位对应OID中的一个小节,其中,

Bash
1表示精确匹配,即要访问的节点OID与MIB对象子树OID对应小节的值必须相等;
0表示通配,即要访问的节点OID与MIB对象子树OID对应小节的值可以不相等。

例如:子树掩码为0xDB(二进制格式为11011011),子树OID为1.3.6.1.6.1.2.1,则对应关系如下图所示,所确定的视图就包括子树OID为1.3.*.1.6.*.2.1(*表示可为任意数字)的子树下的所有节点。

图片.png

说明:

若子树掩码的bit数目大于子树OID的小节数,则匹配时,子树掩码的第一位与子树OID的第一小节对齐,第二位与第二小节对齐,以此类推,子树掩码中多出的bit位将被忽略
若子树掩码的bit数目小于子树OID的小节数,则匹配时,子树掩码的第一位与子树OID的第一小节对齐,第二位与第二小节对齐,以此类推,子树掩码中不足的bit位将自动设置为1;
如果没有指定子树掩码,则使用缺省子树掩码(全1)。

1.4 snmp的命令以及常用命令

snmp的相关工具

Bash
snmpget      #模拟snmp的GetRequest操作的工具。用来获取一个或几个管理信息。用来读取管理信息的内容。
snmpgetnext  #模拟snmp的GetNextRequest操作的工具。用来获取一个管理信息实例的下一个可用实例数据。一般用来遍历SNMP中的表格数据。
snmpset      #模拟snmp的SetRequest操作的工具。用来设置可以写的管理信息。一般用来配置设备或对设备执行操作。
snmpbulkget  #模拟snmp的GetBulkRequest操作的工具。用来获取大块的数据。一般在大量读取大块数据时使用,以提高带宽利用率,并且比使用snmpget、snmpgetnext及snmpwalk有更强的容错能力,代理会返回尽可能多的数据,比其它命令更有保证。
snmpwalk     #利用GetNextRequest对给定的管理树进行遍历的工具。一般用来对表格类型管理信息进行遍历。
snmptrap     #模拟trap的工具。用来发送模拟trap。一般用来测试管理站安装和配置是否正确,或者用来验证开发的Trap接收程序是否可以正常工作。
snmptrapd    #接收并显示trap的工具。一般在代理的开发过程中,接收代理发来的Trap,并将PDU细节打印出来,也来测试Trap发送功能是否正常。
snmpinform   #模拟发送InformRequest的工具。跟snmptrap类似,用来发送模拟的带应答的Trap,以测试管理站或自己开发的接收程序。
snmptable    #使用GetNextRequest 和 GetBulkRequest操作读取表信息,以列表形式显示的工具。
snmpstatus   #从SNMP实体读取几个重要的管理信息以确定设备状态的工具。用来简单测定设备状态。
snmpbulkwalk #利用GetBulkRequest实现对给定管理树进行遍历的工具。对表格类型的管理信息进行遍历读取。
snmpdelta    #用来监视Integer类型的管理对象,会及时报告值改变情况的工具。用于监测一个设备或开发中的代理。
snmptest     #是一个复杂的工具,可以监测和管理一个网络实体的信息,通过SNMP请求操作与管理实体通信。
snmptranslate #将对象名字和标识符相互转换的工具。用于数据格式的对象标识和可读式字符串的数据名称的转换。类似于域名与IP地址的关系。
snmpusm      #SNMPv3 USM配置工具。用于SNMPv3的用户管理。
snmpvacm     #为一个网络实体创建和维护SNMPv3的基于视图访问控制参数的工具。用于维护SNMPv3的视图访问控制。
snmpconf     #生成snmpd配置文件的工具。用于生成snmpd的各种配置文件,用作模板,以生成用户级配置文件。
snmpd        #Net-snmp开发的主代理程序,包括众多标准MIB的实现。还可以使用子代理对其进行扩展,是一个功能强大的SNMP代理。Linux、Unix和Windows系统运行snmpd后,直接具备了SNMP协议支持,可以被管理站管理。许多商业化的Linux中使用snmpd作为系统的SNMP代理。
snmpdf       #通过SNMP访问并显示网络实体磁盘利用情况的工具。用来监测网络实体的磁盘。

snmp常用命令

snmpget命令

# snmpget -v 2c -c public 192.168.1.101 system.sysDescr.0  #获取设备的描述信息,而后面的 <object>.<instance>格式的是在对端snmpd.conf文件里面定义的

图片.png

snmpwalk/snmpbulkwalk 命令

snmpbulkwalk命令: 获取snmp服务器的mib-2各种资讯,snmpbulkwalk用于通过SNMPv2 的SNMP GET BULK请求命令与其它网络实体通信,只能用于snmpv2,速度快于snmpwalk

# snmpbulkwalk  -v  2c  -c public 192.168.1.101  #等同于# snmpbulkwalk  -v  2c  -c public 192.168.1.101 .1.3.6.1.2.1.1  #等同于# snmpwalk -v 2c -c public 192.168.1.101 system

Bash
SNMPv2-MIB::sysDescr.0 = STRING: Linux master.salt 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (56854) 0:09:28.54
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: master.salt
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORID.1 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORID.9 = OID: SNMP-NOTIFICATION-MIB::snmpNotifyFullCompliance
SNMPv2-MIB::sysORID.10 = OID: NOTIFICATION-LOG-MIB::notificationLogMIB
SNMPv2-MIB::sysORDescr.1 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.2 = STRING: The management information definitions for the SNMP User-based Security Model.
SNMPv2-MIB::sysORDescr.3 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORDescr.9 = STRING: The MIB modules for managing SNMP Notification, plus filtering.
SNMPv2-MIB::sysORDescr.10 = STRING: The MIB module for logging SNMP Notifications.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (11) 0:00:00.11
SNMPv2-MIB::sysORUpTime.9 = Timeticks: (11) 0:00:00.11

snmptranslate 命令

此命令就是在MIB OID 在数字和文字名称之间进行转换。

# snmptranslate -On -IR HOST-RESOURCES-MIB::hrSystem

Bash
.1.3.6.1.2.1.25.1

#用snmptranslate把symbol 格式的HOST-RESOURCES-MIB::hrSystem 转换为 numberic 格式的oid,用-On(输出数字格式的oid),使用 -IR(允许“随机”访问 MIB)

# snmptranslate -Onf -IR HOST-RESOURCES-MIB::hrSystem

Bash
.iso.org.dod.internet.mgmt.mib-2.host.hrSystem

#用snmptranslate把symbol 格式的HOST-RESOURCES-MIB::hrSystem 转换为symbol 格式的 oid,用-Onf(输出符号格式的oid)

# snmptranslate -Td iso.org.dod.internet.mgmt.mib-2

Bash
SNMPv2-SMI::mib-2
mib-2 OBJECT-TYPE
  -- FROM    SNMPv2-SMI
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) 1 }

#用snmptranslate输出该对象(iso.org.dod.internet.mgmt.mib-2)的详细定义,用-Td(包括文字名称、所属 MIB、类型、状态、读写权限、描述信息,数字格式的 OID)

#snmptranslate -Tp iso.org.dod.internet.mgmt.mib-2  #用snmptranslate打印从指定OID(.1.3.6.1.2.1)开始一直到该OID(.1.3.6.1.2.1)所属的 MIB 子树末端的树型结构信息

#snmptranslate -Ta  #用snmptranslate导出所有已经加载的 MIB 的数据,每个对象一行

#snmptranslate -Tl   #用snmptranslate导出所有已经加载的 MIB 的对象,并且输出完整的 oid 路径

#snmptranslate -To  #用snmptranslate导出已经加载的所有 MIB 的数字格式的 oid ,不含值和类型,仅仅有 oid 而已

#snmptranslate -Ts  #用snmptranslate只输出文字格式的 OID 名称而已

1.5 zabbix以snmp方式监控

编译的时候要带上–with-snmp

我这里就直接以添加交换机的端口来举例了,比如我们想把交换机的出口流量记录下来。
找出对应的OID值:

#snmpwalk -v 2c -c public 192.168.1.254 .1.3.6.1.2.1.2.2.1.2   #假设192.168.1.254就是我们现在的交换机IP,.1.3.6.1.2.1.2.2.1.2 这个OID是取出交换机有哪些接口

Bash
IF-MIB::ifDescr.54 = STRING: XGigabitEthernet1/0/21
IF-MIB::ifDescr.55 = STRING: XGigabitEthernet1/0/22
IF-MIB::ifDescr.56 = STRING: XGigabitEthernet1/0/23
IF-MIB::ifDescr.57 = STRING: XGigabitEthernet1/0/24

#但是得出来的是上面的这种形式,显然还不够,还不是我们想要的OID。假设1/0/24这个接口就是我们的出口,我们怎么获取它的OID值呢?不过通过上面我们找到1/0/24端口对应的ifDescr值是57.

#snmpwalk -On -v 2c -c public 192.168.1.254  IF-MIB::ifHCInOctets.57  #就用到snmpwalk -On的形式,将IF-MIB::ifHCInOctets.57 转换成对应的OID值,注意这只是交换机1/0/24接口的入流量。

#snmpwalk -On -v 2c -c public 192.168.1.254  IF-MIB::ifHCOutOctets.57  #获取1/0/24接口的流出流量。

注意:IF-MIB:ifInOctets、IF-MIB:ifOutOctets和IF-MIB::ifHCInOctets和IF-MIB::ifHCOutOctets的区别,前面就相当于cacti添加流量时候的32位字节,当流量图一超过几百M就不准了,所以对于交换机我们要选择后面的,这个就表示64位字节,显示上G的流量图也能显示也不会乱。

zabbix server上面添加:

主机的添加就不截图了,就是要选择snmp方式,端口一般就是161.

然后就是创建两个项目了:一个接口流入items,一个接口流出items。

键值位置:自定义一个有代表性的

SNMP OID: 这里就是我们上面通过snmpwalk -On 取到的对应的OID值。

SNMP community : 就是类似于public这个口令了,一般用宏变量。

图片.png

#这里数字是浮点类型,单位bps(zabbix就会去按1000去换算),因为采集的流量值是字节的形式,然后字节相当于8位,所以我们这里想直接去看流量是多少兆而非兆B,所以这里要倍数为8.

图片.png

#因为交换机的出口流量毕竟比较少,数据空间占用上还是有限的,所以流失数据保留的长了一点,然后储蓄值那里是差量,因为采集的流量是累加的形式,所以你的取差值。

zabbix server添加图形:

这里说的添加图形不是指流出和流入的图在一起的一张图,cacti上面的流量图不就是这种嘛。这种图形要定义的,直接查看最新数据右边的图不行的。

Granps的图形名称自己定义,最好是交换机的名称和接口的形式。

图片.png

然后再项目里面将两个项目加一下:

图片.png

最后查看下效果图:

图片.png

#注(关于找交换机CPU使用率的小技巧):

不同厂商的CPU使用率的OID,以及不同型号交换的CPU使用率的OID都可能不一样,华为交换(实时CPU使用率、1分钟使用率、5分钟使用率),H3C(1分钟使用率)

当然关于cacti博客里面已经记录了如何找OID的方法,那种找官网去OID库里面找也挺麻烦的,这里用一个笨方法,也不百分百好使。下面以H3C交换为例:

Bash
#snmpwalk  -v 2c -c public 192.168.1.2 .1.3.6.1.4.1   #这范围就大了,这是根据OID那个树图,会将好多内容输出出来,CPU使用率就在这里,那么哪条是呢?

#通过上面的命令会有很多的输出,如:

Bash
SNMPv2-SMI::enterprises.25506.2.3.1.1.2.1.0 = INTEGER: 2  #可见.1.3.6.1.4.1后面跟的是.25506,并且可以看到.25506后面是2开头的,也就是说后面2,3,4,5,6,7,8,9可能会有值

#snmpwalk  -v 2c -c public 192.168.1.2 .1.3.6.1.4.1.25506.3|more  #如分别通过snmpwalk  -v 2c -c public 192.168.1.2 .1.3.6.1.4.1.25506.6|more  #来实验一下将没用的取不到值的数字去掉

#snmpwalk  -v 2c -c public 192.168.1.2  .1.3.6.1.4.1.25506.2|grep “INTEGER: 10$”   #这是一个例子,到这里就得结合交换机上面查看的值了,比如交换机上面查看到CPU1分钟使用率是10%。
#上面不是已经排查出25506后面又哪几个数值有用了吗,然后依次试着过来下,找到如下面的值:

Bash
SNMPv2-SMI::enterprises.25506.2.4.1.1.4.0 = INTEGER: 10

#snmpwalk -On -v 2c -c public 192.168.1.2 SNMPv2-SMI::enterprises.25506.2.4.1.1.4.0  #然后转换成对应的OID值,如下面:

Bash
.1.3.6.1.4.1.25506.2.4.1.1.4.0 = INTEGER: 10

#然后取不出几条,然后等着交换机的CPU再次发送变化的时候,依次执行一下这几个OID,看看哪个能对上就可以了,然后就是多观察几次,所以说这是一个笨方法。

#华为交换机CPU使用率OID:.1.3.6.1.4.1.2011.6.3.4.1  #这个是列出CPU的使用率,到底哪个代表1分钟使用率哪个代表5分钟使用率还要登录交换机对比核一下。

#H3C交换机CPU使用率OID:.1.3.6.1.4.1.25506.2.4.1.1.4  #如果这个值不对的话,就将尾部的数字去掉,把范围扩大,用我的笨方法找一下。

二、Screens(筛选/屏幕)

Screen将多种信息放在一起展示,便于集中展示某个Host的多个信息,或者将多个Hosts的同一种信息放在一起显示,这些信息可以为Graphs、Maps、Sercer info等,几乎涵盖了zabbix所有的监控信息。

官网链接:https://www.zabbix.com/documentation/3.2/manual/config/visualisation/screens

这个功能是要用到的,比如你将所有虚拟机和宿主机的CPU的使用情况放到一个Screen里面,或者将所有主机的性能图标放到一起,或者将所有交换机的出口流量图放到一个Screen里面。好多东西你不能一个个点过去吧,那要猴年马月去了,而且没有对比性。

创建Screen:

图片.png

图片.png

#上图中参数的意思:

Bash
Owner:选择屏幕所有者。
Name:Screen的名称,最好有标示性,要创建多了的话,一眼也能认出来你这个Screen是干嘛的
Columns:一行可以插入几个图
Rows : 一列可以插入几个图

图片.png

#上图中参数的意思:

Bash
Type : 选择屏幕类型:Private--仅对选定的用户组和用户可见,Public--公共屏幕对所有人都是可见的
List of user group shares : 选择屏幕可访问的用户组。您可以允许只读或读写访问。
List of user shares : 选择屏幕可访问的用户。您可以允许只读或读写访问。

编辑Screen:

图片.png

图片.png

图片.png

#上图中的参数的意思:

Bash
Resource : 选择要显示的类型
Horizontal align : 水平对齐
Vertical align : 垂直对齐
Column span : 将单元格扩展到多个列,与HTML列跨越的方式相同。1就是不扩展就在一个框框里面
Row span : 将单元格扩展到多行,与HTML行跨越的方式相同。1也就是在本框框里面

查看效果:

图片.png

#如你可以把这个理解为一大票虚拟机的宿主机的性能列表放在一起,可以很直观的看出哪些机器负载比较大,哪些负载比较小。或者是交换机出口,可以很直观的看到哪个机房流量比较大等等。

当然也可以添加到登录页面那里:

图片.png

下面是效果图:

图片.png

Side shows的配置:

图片.png

查看效果:

图片.png

三、报表和维护

图片.png

#很直观可以看到一些统计信息

图片.png

#前面创建触发器的时候第一条就是这个主机不在维护期间,就是为了防止主机因为某些原因因为维护而导致误报警。

#官方文档:https://www.zabbix.com/documentation/3.2/manual/maintenance

四、zabbix通过fping检测主机网络状态

4.1 zabbix fping检测部署

之前记录过smokeping,如果我们像让zabbix也调用fping,然后ping主机,查看是否存活,以及到此主机的丢包率和延时的话,可以这样做一下。

fping的官方网站:http://www.fping.org/

官网指定的github的地址:https://github.com/schweikert/fping/tags    #fping要单独下载安装的

下载fping并安装:

#wget https://github.com/schweikert/fping/archive/v4.0.tar.gz

#tar zxf v4.0.tar.gz
#cd fping-4.0

#./autoclean.sh

#./autogen.sh

#./configure  –disable-ipv4

#make && make install

zabbix的配置:

#which fping

/usr/local/sbin/fping

#vim /etc/zabbix/zabbix_server.conf

Bash
FpingLocation=/usr/local/sbin/fping   #如果fping的位置跟配置文件不一致要改一下

#chmod u+s /usr/local/sbin/fping  #要做下这个授权,不然的话会有报错

~(RY)SCLOUR)@7R6V8]$OI3.png

fping failed: /usr/local/sbin/fping: can’t create socket (must run as root?) : Permission denied

测试:

#su – zabbix

$fping  218.92.231.1  #用zabbix用户fping一下ip出现下面的结果表示表示fping可以使用了
218.92.231.1 is alive
zabbix添加主机并关联模板:

图片.png

图片.png

图片.png

添加图形:

图片.png

#模板里面是没有图形的,可以根据自己的需求做图形,比如对丢包率做图形或者丢包率和延时做到一起啊,状态其实没有必要做成图形的,做成触发器就行了。比如把所有的丢包率做成一个拓扑图啊,zabbix_server端到各个机房主交换的网络状态来作为主机触发器的依赖条件,可以减少误报率。

最后查看下效果:

图片.png

4.2 zabbix fping补充

基本检测格式:

icmpping(ICMP ping监控项引用):

格式:icmpping[<target>,<packets>,<interval>,<size>,<timeout>]

作用:检测是否存活,0-ICMP ping失败,1-ICMP ping 成功。

参数的意思:target-主机IP或者域名;packets-包数量;interval-连续的数据包之间的时间间隔,以毫秒为单位;size-包大小,以字节为单位;timeout-超时时间,以毫秒为单位;

icmppingloss(ICMP loss监控项引用):

格式:icmppingloss[<target>,<packets>,<interval>,<size>,<timeout>]

作用:丢包率,返回百分比

参数的意思:target-主机IP或者域名;packets-包数量;interval-连续的数据包之间的时间间隔,以毫秒为单位;size-包大小,以字节为单位;timeout-超时时间,以毫秒为单位;

icmppingsec(ICMP response time监控项引用):

格式:icmppingsec[<target>,<packets>,<interval>,<size>,<timeout>,<mode>]
作用:返回ICMP响应时间,返回值是秒(s)。

参数的意思:target-主机IP或者域名;packets-包数量;interval-连续的数据包之间的时间间隔,以毫秒为单位;size-包大小,以字节为单位;timeout-超时时间,以毫秒为单位;mode-min, max, avg (默认值);

ICMP检测默认参数:

参数 描述 fping flag Min Max
packets 3 包数量 -C 1 1000
interval 1000 毫秒, “fping” 默认   -p 20
size 56 or 68 字节, “fping” 默认; x86使用56字节, x86_64使用68字节 -b 24 65507
timeout 500 毫秒, “fping” 默认 -t 50

更改检测发包数量:

从上面的表格可以看出默认是发3个包,也就是说一分钟ping一次,发三个包每个包之间的间隔是20毫秒。

smokeping是发送20个包,显然一分钟3个包的检测反应的网络情况并不是太精准。

图片.png

#所以根据参数的格式,[,10] 改为了一分钟检测发送10个包而非3个包,因为IP是根据主机来的,这里是模板,所以第一个选项是空的,这里,10代表第二个选项是10.

另外:

net.tcp.service[service,<ip>,<port>]  #是检测一个服务的端口是否接受tcp的连接

net.tcp.service.perf[service,<ip>,<port>]  #是检测连接的秒数

4.3 ping触发器补充

网络环境,尤其是多机房的网络监测,尤其是联通电信线路这种,进行网络监测如果触发器写的过于简单的话,可能会频繁的报警导致报警邮件形成骚扰邮件。网络监测一般最简单的判断质量的标准1是延时2是丢包率。

首先补个坑

虽然取值延时是毫秒的形式但是设置触发器的时候要将延时换算成秒的形式,比如100毫秒就触发报警就要设为0.1.

image.png

#根据上图可以看出虽然值是毫秒的形式,但是设置触发器要转换成秒的形式。当然这玩意自己测测就出来了。

然后就是依赖关系

首先你所检测的设备是存活状态或者可以ping通才有意义吧,不然触发的报警毫无意义啊,而且如果取不到值还是不报警的,因为取不到值就是空,空跟数据没法比较啊,不能比较得到结果就是FALSE,触发器是TRUE才报警。

image.png

image.png

#它这个依赖关系有点绕啊,不是与的关系,是(shell里面“|”)非这种关系,也就是说我依赖的关系,它触发了我就不触发,也就是说我依赖的也是一个触发器,如果我依赖的关系里的触发器它报警了,我就不报警了,也就是说只有它的判断结果是FALSE的时候,我这里这个触发器判断结果True,也就是满足我的触发条件了,我才会报警。

最后是网络质量触发器

image.png

#上图就是一个不紧不松的触发规则,用到了触发几次才报警,用到了多重判断标准,以及要定义恢复表达式。这只是一个例子,根据自己的实际情况定义就可以了。主要是还是要理解zabbix怎么玩。

五、导出和导入功能

想想我们一般什么时候会用到导出导入功能,可能最想到的是模板的导出和导入。真要需要这个功能的时候确实很省事情。举一个场景来阐述一下。

还是跟上面的icmp结合的一个场景,机房之间的网络连通状况一般是我们比较关心的,因为网络如果有问题就直接导致网站的响应出现延时更严重直接就出现了问题,用户的体验会受到影响。

之前提到的smokeping在不同的机房建一个smokeping然后检测到其他机房的网络状况,当然因为是专门做这个的,图出的比较好,但是如果我们想在一个页面就将某个机房到其他机房的延时以及丢包情况,这就需要用到zabbix的聚合图形的功能了。

那么如何实现在一个zabbix服务器上面呈现某个机房到其他所有机房的网络状况,然后依次类推,最后就是每个机房到其他机房的网络状况都能检测到呢?这就需要用到了zabbix_proxy的功能了,每个机房不是都有zabbix_proxy节点嘛,直接将机房网关的ping检测交给proxy代理服务器,但是呢因为主机名是不能重名的,所以就需要规划一下了。

比如:兆维机房的proxy去检测其他机房,就要创建一波其他机房的主机,比如:zwidc_114.112.41.1_zw,这就相当于zw机房的proxy去检测114.112.41.1这个网关地址,然后如果是上海机房呢?就是zwidc_114.112.41.1_sh。

图片.png

#然后就是上图这里是一致的,然后主机名就是以proxy代理所在的机房为后缀,名称前面都是一致的,然后agent代理那里选择对应的代理,比如是zwidc_114.112.41.1_sh主机名,就选择sh的代理。

主机的导出和导入

比如我们要检测10几个网关地址,手工创建10几个还好,但是是机房之间互相ping的,沃日10几个乘以10几个,就是一百多个主机,加的想死啊。所以这时候就需要导出和导入功能了。注意我们定义的主机格式都是比较有规律的的,名称前面都是一致的,就是最后有个_sh这样的后缀,那么如果是天津机房我就把主机名改为_tj不就好了嘛,然后还有一个地方就是proxy代理那里的选择。

那么现在先把兆维proxy所要监控的网关地址添加完毕。

图片.png

#这样选择一下更精准一点,确保是_zw后缀的,然后全部选择,点击页面最下方的导出。

图片.png

#然后你会发现导出的是一个xml的文件,然后现在要做的就是更改这个xml文件。

#然后只需要用到文本工具的替换功能,替换两个地方:比如你现在要添加sh机房检测所有的网关地址,就把_zw改为_sh,然后将zw_proxy_121全部改为sh_proxy_121.

#上面提到的zw_proxy_121是兆维的proxy节点在zabbix服务器端里的名称,因为是主动方式嘛。sh_proxy_121是上海的proxy节点在zabbix服务器端的名称。

#好了这样就完事了,文本保存一下。

图片.png

#然后再弹出的页面中最上面点击浏览,选择我们修改后的xml文件,然后点击最下方的导入。然后你就会发现10几台主机一下子就创建成功了,而且主机名后缀是_sh,proxy也是sh的proxy。

#如果够熟练的话2分钟左右100多台主机就创建完毕了。省了很多事情当然也可以用在其他地方。

聚合图形的导出和导入

主机添加完毕了,图也出了,那么我们就该按照机房,将本机房检测到其他机房网关的的网络状态添加到一张聚合图形里面了吧。

添加过可以再检测中那栏直接可以查看的聚合图形还挺麻烦的,要选择对应的图形,好的我们先将zw机房检测的所有机房网关的网络状态图添加到一个聚合图形了,我靠一张聚合图形还行,后面还有十几张聚合图形要做,而且内存基本一致,就是主机名不一致,哎不一致的地方就是_zw或者_sh这种后缀。

这时候我们将添加的那张聚合图形导出一下。就是以:zbx_export_screens命名的xml文件。

这时候我们又需要修改这个导出的xml文件,还是需要修改两个地方:

图片.png

#这是第一个地方,因为这个地方是聚合图形的名称,每个机房的监控图形名称肯定不一样。比如改成:上海到各机房网络状况。

第二个地方就是比如郑州替换成上海,将_zz批量替换成_sh。因为剩下的不一致的地方就是<host>这个地方了,而主机名称前面都一致,可就后缀_sh不一致嘛,代表各个机房的proxy节点。

图片.png

#还是在弹出框,点击浏览,选择我们修改后的xml文件,点击最下方的导入,这样我们又迅速的创建了一个上海机房到各个机房的网络状态聚合图。

#依次类推2分钟左右又迅速的创建了10几张不同机房到所有机房的网络状态聚合图,省了好大的事。

六、zabbix的性能相关

6.1 zabbix性能低下的表现以及解决方案:

表现

Bash
zabbix队列中有太多被延迟的Item,通过菜单项查看:Administration->Queue查看
zabbix绘图中经常出现断图,一些Item没有数据,网络原因除外
带有nodate()函数的触发器出现False
前端页面无响应,或者相应很慢

解决方案

Bash
不使用默认的模板,定制自己的模板
数据库调优
架构优化,使用分布式,客户端主动形式,各服务器功能独立
Items,Trigger调优
更换更好的硬件,有的时候确实是磁盘写入压力太大了要更换SSD等之类的。

6.2 zabbix(服务端)配置参数的优化

Bash
StartPollers=160
StartPollersUnreacheable=80
StartTrappers=20
StartPingers=100
StartDiscoverers=120
Cachesize=1024M
startDBSyncers=16
HistoryCacheSize=1024M
TrendCacheSize=1024M
HIstoryTextCacheSize=512M

#就是对进程的数量、缓存的大小、超时的时间进行优化,这个还是根据自己的实际情况来,把参数列出来,就是举例哪些参数可以调优一下。

6.3 zabbix架构优化

Node模式已经取消了,所以就剩下server/proxy模式了,这也是比较好的模式。

另外Items默认是被动模式,应该改为主动模式来提高Server的性能。Trigger中正则表达式函数last()、nodata()的速度是最快的,min()、max()、avg()是最慢的,尽量使用速度快的函数。在Trigger的配置中,很可能出现由于一个函数的逻辑错误导致数据库查询较慢的现象。

6.4 zabbix的数据库优化

使用高版本的mysql,使用inondb引擎。

对数据库参数进行调优配置。

数据库对history之类的大表进行分表操作。

mysql的慢查询功能应该是一直开启的,对慢查询的记录进行调优,慢查询默认是10秒,可以调小点,如调成1000(毫秒)。

#注:

当然还有很多小功能自己玩起来吧,这都是记录了一些基本的操作,好玩的是通过zabbix_api进行各种自定义的开发,各种调用自己写的程序这才是牛逼的呢。

以前帮人处理过一个zabbix_ssh客户端的方式,总是时好时坏,之前也没用过这种形式,后来观察发现是ssh timeout的问题,调大点就可以了,小问题,小小的记录一下。

关于zabbix的就先记录到这里以后有时间再补充。

转载请注明:靠谱运维 » zabbix之零碎补充(七)

喜欢 (2)or分享 (0)
发表我的评论
取消评论

表情