zabbix 使用进阶(五)
===============================================================================
概述:
本章内容具体如下:
自定义key不带参数;
自定义key可传递参数;
在agent端自定义可传递参数的key,来获取nginx的状态信息:
基于SNMP监控的创建和和使用;
===============================================================================
回顾:
----------------------------------------------------------------------------------------
自定义key:
★定义:
在zabbix agent端的配置文件中由用户通过UserParameter指令定义用户自定义参数;
★格式:
UserParamter=<key>,<command> //不能传递参数
UserParamter=<key[*]>,<command> $1...$9 //可传递参数
注意:
类似awk命令自带$1...$9,需要改写为$$1, $$2, ...$$9;
演示1:
在agent端自定义key,并通过传递参数来获取相应的数据。
-------------------------------------------------------------------------------
1.自定义key不带参数
1)首先获取CentOS 7.2-2 agent端的内存相关信息
[root@centos7 ~]# cat /proc/meminfo MemTotal: 1001332 kB MemFree: 700136 kB MemAvailable: 713904 kB Buffers: 1344 kB Cached: 104448 kB SwapCached: 0 kB Active: 84720 kB Inactive: 81396 kB Active(anon): 60732 kB Inactive(anon): 6620 kB Active(file): 23988 kB Inactive(file): 74776 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 2098172 kB SwapFree: 2098172 kB Dirty: 8 kB Writeback: 0 kB AnonPages: 60356 kB
2)编辑agent端(CentOS 7.2-2)的配置文件/etc/zabbix/zabbix_agentd.conf在UserParameter中定义获取空余内存的key,如下:
3)重启agent端的zabbix-agent服务,在zabbix-server端使用get可以正常获取数据,说明我们在agent端自定义的key起作用了;
3)现在,我们就可以在zabbix-web端使用在agent端自定义的key来监控CentOS 7.2-2主机上的空闲内存大小了,如下:
---------------------------------------------------------------------------------------------
2.自定义key可传递参数:
1)上面我们定义的key不可传递参数,这样的话使用就不太灵活,比如在同一个监控项中有不同的指标(内存中有空闲内存,可用内存,总内存),所以能够传递参数的话,就可灵活的获取不同的指标。
如下,还是编辑agent的配置文件,自定义有关内存相关的key,并且可以传递参数;
2)重启agent端的zabbix-agent服务,在zabbix-server端使用get可以正常获取传递不同参数下的对应的数据,如下:
演示2:
在agent端自定义可传递参数的key,来获取nginx的状态信息:
-------------------------------------------------------------------------------
1.首先在agent端主机,编辑其nginx的配置文件/etc/nginx/conf.d/default.conf,添加能够获取status的locations,如下:
获取nginx状态信息如下:
[root@centos7 ~]# curl http://192.168.1.19/ngxstatus Active connections: 1 server accepts handled requests 6 6 4 Reading: 0 Writing: 1 Waiting: 0 [root@centos7 ~]# curl -s http://localhost/ngxstatus |awk '/^Active/{print $3}' //获取Active信息 1 [root@centos7 ~]# curl -s http://localhost/ngxstatus |awk 'NR==3{print $1}' //获取accepts信息 20
2.如上,我们要想监控agent端nginx服务的一个状态信息,很容易实现,只需要在其agent的配置文件中定义key即可实现;但是如果想要监控nginx服务的所有状态信息(上面的7项)就需要在key中传递参数了,我们这里可以通过定义脚本传递参数来实现,如下:
[root@centos7 ~]# vim /usr/bin/ngxstatus.sh #!/bin/bash #description:获取nginx的状态信息 # host='127.0.0.1' port='80' statusurl='/ngxstatus' active() { curl -s http://${host}:${port}${statusurl} | awk '/^Active/{print $3}' } accepts() { curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $1}' } handled() { curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $2}' } requests() { curl -s http://${host}:${port}${statusurl} | awk 'NR==3{print $3}' } reading() { curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $2}' } writing() { curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $4}' } waiting() { curl -s http://${host}:${port}${statusurl} | awk 'NR==4{print $6}' } $1 //传递的参数 [root@centos7 ~]# chmod +x /usr/bin/ngxstatus.sh
脚本测试如下:
[root@centos7 ~]# ngxstatus.sh active 1 [root@centos7 ~]# ngxstatus.sh accepts 27 [root@centos7 ~]# ngxstatus.sh handled 28 [root@centos7 ~]# ngxstatus.sh requests 27 [root@centos7 ~]# ngxstatus.sh reading 0 [root@centos7 ~]# ngxstatus.sh writing 1 [root@centos7 ~]# ngxstatus.sh waiting 0
3)如上,脚本已经定义好了,现在我们去定义zabbix-agent的配置文件,自定义key来调用脚本来获取nginx的状态信息,如下:
4)重启agent端的zabbix-agent服务,在zabbix-server端使用get可以正常获取传递不同参数下的对应的数据,如下:
5)这样我们就可以在zabbix-web端添加有关nginx的监控项,也可以做成模板,图形,聚合图形,方便监控,如下:
主动/被动检测:
★被动监控:
★主动监控:
ServerActive=
Hostname=
主动监测配置文件:
基于SNMP监控:
---SNMP:简单网络管理协议;基于UDP协议;能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。
★支持的功能:
读(get, getnext), 写(set), 陷阱(trap)(等待agent端报告数据)
★监听端口
161/udp(agent), 162/udp
★协议版本
v1:1989
v2c:1993
v3:1998
★相关术语
☉MIB: Management Information Base //管理信息库
任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。每个SNMP设备(Agent)都有自己的MIB。MIB也可以看作是NMS(网管系统)和Agent之间的沟通桥梁。
☉OID: Object ID //对象标识符
唯一标识一个MIB对象
演示:
1.Linux主机要想支持SNMP功能,要首安装SNMP的程序包
[root@centos7 ~]# yum install net-snmp net-snmp-utils -y
2.编辑配置文件
[root@centos7 ~]# cd /etc/snmp/ [root@centos7 snmp]# ls snmpd.conf(agent端) snmptrapd.conf(服务端,监控端)
3.启动snmp服务,查看agent端监听的端口161/udp,并尝试获取数据
[root@centos7 snmp]# systemctl start snmpd.service [root@centos7 snmp]# ss -unl State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:68 *:* UNCONN 0 0 *:161 *:* UNCONN 0 0 *:65283 *:* UNCONN 0 0 127.0.0.1:323 *:*
获取信息如下:
[root@centos7 ~]# snmpwalk -c public -v 2c 10.1.252.153 .1.3.6.1.2.1.1.1 SNMPv2-MIB::sysDescr.0 = STRING: Linux centos7 3.18.41-1.0-Taolinux #1 SMP Mon Sep 19 12:23:56 CST 2016 x86_64 [root@centos7 ~]# snmpwalk -c public -v 2c 10.1.252.153 .1.3.6.1.2.1.1 //向上一级获取信息 SNMPv2-MIB::sysDescr.0 = STRING: Linux centos7 3.18.41-1.0-Taolinux #1 SMP Mon Sep 19 12:23:56 CST 2016 x86_64 SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (39611) 0:06:36.11 SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf) SNMPv2-MIB::sysName.0 = STRING: centos7 SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf) SNMPv2-MIB::sysORLastChange.0 = Timeticks: (10) 0:00:00.10 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: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.2 = Timeticks: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.3 = Timeticks: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.4 = Timeticks: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.5 = Timeticks: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.6 = Timeticks: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.7 = Timeticks: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.8 = Timeticks: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.9 = Timeticks: (10) 0:00:00.10 SNMPv2-MIB::sysORUpTime.10 = Timeticks: (10) 0:00:00.10
4.在zabbix-web端,在CentOS 7.2-2主机上添加基于snmp监控,如下:
现在,我们通过模板去添加CentOS 7.2-2的snmp监控项,如下:
发现CentOS 7.2-2 基于snmp监控已经启用,如下:
在监测中可以看到snmp uptime已经有数据了,如下:
注意snmp在监控项中使用的是自定义宏,系统在全局宏中已经定义好了的,如下: