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
留言