snmp监控网络设备
什么是snmp
snmp全称simple network manager protocol,简单网络管理协议
为何需要snmp
对于路由器、交换机、打印机等设备,仅支持snmp协议,只能通过snmp协议进行数据采集,监控
对于有些服务器,不允许安装zabbix agent,也可以通过snmp协议,对其数据进行采集,监控
snmp基本概念
在snmp中有一些基础概念需要我们了解,比如:OID、MIB
OID
什么是OID
内存的大小:.1.3.6.1.2.1.25.2.2.0
内存的剩余:.1.3.6.1.2.1.25.2.2.1
任何一个指标在snmp中都有一个唯一的值进行表示,而oid排列顺序是以树状信息排列

MIB
MIB库:统计所有的oid库(国际标准)
MIB以树状结构进行存储,树的叶子节点表示管理对象,它可以通过从根节点开始的一条惟一路径来识别,这也就是OID(Object Identifier)。

OID是由一些系列非负整数组成,中间以"."分割,用于唯一标识管理对象在MIB树中的位置。在上图的树形结构中,mgmt对象可以标识为:1.3.6.1.2,这种标识就叫做OID。iso.org.dod.internet.private.enterprises(1.3.6.1.4.1)这个标识,是给厂家自定义而预留的,比如华为的为1.3.6.1.4.1.2011,华三的为1.3.6.1.4.1.25506。
可以理解mib是域名,比较好记忆。oid是ip地址,不太好记忆。
snmp的版本
V1:不支持加密,任何人都可以取值,不安全
V2:简单加密版,通过口令才可以取值,通过community设定口令(使用最多)
V3:复杂加密,采集效率比较低
snmp监控网络设备实践
开启防火墙snmp
web登录防火墙,找到系统-->维护-->snmp,开启snmp功能
版本配置snmpv2c,只读团体名配置xxx

配置zabbix-web
单击配置-->主机-->添加主机-->选择类型为snmp

模板可以选用系统自带模板
Template Module EtherLike-MIB SNMP:duplex control only(半双工时触发告警)Template Module Interfaces SNMP:9个监控项原型- 1.
Inbound packets discarded - 2.
Interface type - 3.
Speed - 4.
Outbound packets discarded - 5.
Outbound packets with errors - 6.
Bits received - 7.
Bits sent - 8.
Inbound packets with errors - 9.
Operational status
- 1.
Template Module Generic SNMP
snmp监控linux实践
snmp服务安装
yum install net-snmp net-snmp-utils
snmp服务配置
vim /etc/snmp/snmpd.conf
# public是默认的团体名称,修改为实际的
com2sec notConfigUser default public
# 限制从mib哪个树枝开始取值,如果需要监控的信息,修改为从树的顶点 .1 开始
view systemview included .1.3.6.1.2.1.1
snmp服务启动
systemctl enable snmpd.service
systemctl start snmpd.service
获取客户端数据
# 服务端安装snmp工具
yum install net-snmp-utils
# OID获取数据方式
snmpwalk -v2c -c public 127.0.0.1 .1.3.6.1.2.1.25.2.2.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 7989768 KBytes
# MIB获取数据方式
snmpwalk -v2c -c public 127.0.0.1 hrMemorySize.0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 7989768 KBytes
配置zabbix-web
添加主机,配置团体名,关联Template OS Linux SNMP模板
zabbix监测web
web监测的概述
使用zabbix对网站进行多方面可用性监控,比如下载速度,响应时间,响应状态码等
- 访问资源
- 登录资源
- 检查登录是否成功
- 退出登录
- 检查是否退出成功
web监测如何实现
要使用web监控,需要先定义web场景,web场景包括一个或多个http请求步骤。
zabbix server会周期性的执行这些步骤
从zabbix2.2开始,web场景和监控项,触发器等一样,是依附在主机/模板上的。
这意味着web场景也可以创建到一个模板里,然后应用于多个主机。
web场景监测-curl
在实现web站点监测之前,我们需要先了解curl命令如何实现站点登录的,因为zabbix监控web站点底层使用的是curl命令来实现的,那使用curl命令登录站点如何实现
- 1.请求服务端,获取
session id - 2.请求服务端,携带
session id+username+password登录验证 - 3.可以直接访问服务端登录后的页面
# 1.使用curl命令请求web服务端,获取sessionid,并将其保存起来
curl -L -c cook -b cook 'http://blue.yn.cn/wp-login.php'
# -L 自动跳转。有的网址是自动跳转的,使用 -L 参数,curl 就会跳转到新的网址
# -c 将服务器 HTTP 回应所设置 Cookie 写入文本文件cook
# -b 读取本地文件 cook,里面是服务器设置的 Cookie(参见-c参数),将其发送到服务器
# 2.携带sessionid+用户名+密码登录网站
curl -L -c cook -b cook -d 'log=admin&pwd=xxx&rememberme=forever&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=http%3A%2F%2Fblue.yn.cn%2Fwp-admin%2F&testcookie=1' 'http://blue.yn.cn/wp-login.php'
# 3.请求web服务端,携带session即可,然后访问我们需要访问登陆后的资源
curl -L -c cook -b cook 'http://blue.yn.cn/wp-admin/edit.php'
web场景监测实战
使用zabbix web监控来监控wordpress的web界面,我们想知道它是否可用、是否正常工作以及其响应速度。
需要添加一个web监测场景来监控wordpress的web界面,该场景需要执行多个步骤
创建新的web场景
点击配置-->主机-->选择主机-->单击web监测-->创建web监测
在新的场景中,我们将场景命名为 监控腾讯云wordpress,并为其创建一个新的应用集Web_Monitor

步骤1-访问wordpress站点
定义场景的步骤:点击步骤-->点击添加按钮
步骤1:首先检查登录页面响应是否正确,返回http响应代码200,并包含Pale Blue Dot

步骤2-登录wordpress站点
通过edge开发者模式F12可以看到登录页面是提交的数据。

登录wordpress,提交用户名与密码
在url填入:http://blue.yn.cn/wp-login.php?log=admin&pwd=xxx&rememberme=forever&wp-submit=%E7%99%BB%E5%BD%95&redirect_to=http%3A%2F%2Fblue.yn.cn%2Fwp-admin%2F&testcookie=1,再点击分析
把分析出的字段填入发布字段中。
使用正则表达式提取会话ID:regex:name="_wpnonce" value="([0-9a-z]{10})",后续退出时需要使用。

步骤3-验证是否登录成功
登录后需要验证一下是否登录成功。为此检查一个仅在登陆后可见的字符串文章

步骤4-退出wordpress站点
退出时的F12截图如下:

验证后需要退出wordpress,否则wordpress数据库将被大量的开放会话记录所污染。
退出的url地址:http://blue.yn.cn/wp-admin/

步骤4也可实现判断是否退出成功,不成功返回的http响应代码是403
完整的配置如下:

监控结果如下:


web场景触发器
监控web站点失败场景
要创建web场景失败触发器,可以定义触发器表达式
# 触发器名称(并提供有用的问题描述)
监控腾讯云wordpress failed:{ITEM.VALUE}
# 触发器表达式
{139.199.79.133:web.test.fail[监控腾讯云wordpress].last()}<>0
# 恢复表达式
{139.199.79.133:web.test.fail[监控腾讯云wordpress].last()}=0
可以将网站的nginx服务给停止即可完成测试
监控web站点响应时间
监控项key:web.test.time[Scenario,Step,resp](以秒为单位),主要用于探测站点响应时间
#触发器名称(并提供有用的问题描述)
web"响应时间大于1s" timeout: {ITEM.VALUE}
# 触发器表达式
{139.199.79.133:web.test.time[监控腾讯云wordpress,访问腾讯云wordpress登陆页面,resp].last()}>3 or {139.199.79.133:web.test.time[监控腾讯云wordpress,登录腾讯云wordpress,resp].last()}>3 or {139.199.79.133:web.test.time[监控腾讯云wordpress,验证是否登录腾讯云wordpress,resp].last()}>3 or {139.199.79.133:web.test.time[监控腾讯云wordpress,退出腾讯云wordpress,resp].last()}>3
# 恢复表达式
{139.199.79.133:web.test.time[监控腾讯云wordpress,访问腾讯云wordpress登陆页面,resp].last()}<3 and {139.199.79.133:web.test.time[监控腾讯云wordpress,登录腾讯云wordpress,resp].last()}<3 and {139.199.79.133:web.test.time[监控腾讯云wordpress,验证是否登录腾讯云wordpress,resp].last()}<3 and {139.199.79.133:web.test.time[监控腾讯云wordpress,退出腾讯云wordpress,resp].last()}<3
监控web站点响应代码
监控项key: web.test.rspcode[Scenario,Step]用于收集监控项步骤的响应代码。
关闭php-fpm来测试
#触发器名称
web"响应状态码":{ITEM.VALUE}
# 触发器表达式
{139.199.79.133:web.test.rspcode[监控腾讯云wordpress,访问腾讯云wordpress登陆页面].last()}<>200 or {139.199.79.133:web.test.rspcode[监控腾讯云wordpress,登录腾讯云wordpress].last()}<>200
# 恢复表达式
{139.199.79.133:web.test.rspcode[监控腾讯云wordpress,访问腾讯云wordpress登陆页面].last()}=200 and {139.199.79.133:web.test.rspcode[监控腾讯云wordpress,登录腾讯云wordpress].last()}=200
留言