写点什么

用 SNMP 协议实现系统监控

  • 2012-07-16
  • 本文字数:5252 字

    阅读完需:约 17 分钟

系统监测的基本概念及分类:

a.系统监测的概述:

如何对现有 IT 架构的整体以及细节运行情况进行科学、系统和高效地监测是目前各企业运维和管理部门一项非常重要的工作内容。随着当前企业 IT 环境中服务器、应用数量和类型的不断地增加,运维部门需要通过科学和高效的手段尽可能详细、实时和准确地获取整个架构中具体到每个服务器、每个系统甚至每个应用程序工作的细节,并且会对所获取到的原始数据进行分析、绘图和统计,以便为后续的性能调优、建构调整以及各类型排错建立参考依据。

常见的监测对象基本上涵盖了 IT 运行环境的方方面面,包括机房环境、硬件、网络等,而每一个方面所涉及的监测项目则种类繁多。例如对硬件环境的监测中,所涵盖内容就会包括服务器的工作温度、风扇转速等指标;针对系统环境的监测,将包括基本的操作系统运行环境,如 CPU、内存、I/O、存储空间使用状况、网络吞吐量、进程数量和状态等情况;针对具体的应用情况,涉及监测的内容可能会更多,而且也会有很多专门针对应用的指标。

除了监测的内容需要尽量全面之外,同时我们还希望所使用的监测解决方案能够灵活和具备更多扩展功能。例如有效地支持 IT 架构的变化和扩展,在监测量增加的情况下能够尽可能少地占用资源,拥有强大的事件通知机制等等。

今天本文所涉及的内容,主要是针对操作系统以及软件环境的监测,而且尤其是针对 Linux 操作系统的运行情况监测。尽管目前有很多的商用软件以及解决方案来实现相关的功能,但是实际上我们也有很多开源的解决方案可以起到相同的作用,而且效果也非常不错。下面的内容中,我们将会对这些解决方案的实现方法进行详细描述。

b.基于 Linux 上系统监测的基本原理以及种类:

在 Linux 系统上的系统监测所采用的方式基本上有两种:

第一种,通过 SNMP 协议结合数据采集软件来实现:

这种方法所涉及的架构一般包括两部分,其中一部分是被监测服务器,另外一部分则是网管工作站。至于实现方法具体来说就是在 Linux 服务器上启动 SNMP 简单网络管理协议的进程 snpmd 来动态提供服务器在软件甚至硬件各方面的运行参数,这样服务器就成为了一个被监测的节点。然后在其他的网管工作站上的客户端软件应该具备两个功能:采集 SNMP 数据以及汇总统计信息。在绝大多数情况下,网管工作站上的监测软件都会基于 Web 页面方式提供系统运行状态图,而且涵盖了各种运行指标。同时新的状态信息能够动态更新到 Web 页面。

这种类型的监测所获得的数据格式标准而且全面,配置简单,所以从综合监测的角度看是一个不错的方案。

第二种,通过编写脚本调用系统状态监测的命令,并结合数据采集软件来实现:

在某些情况下 SNMP 协议的配置会相对比较麻烦,而且获取 SNMP 信息往往需要考虑选择不同的监测软件。从另外一个角度讲,其实 Linux 操作系统本身就提供了很多非常好用的状态获取工具,如 sar(可实现多个指标的监测),iostat(专用于 I/O 使用率监测),vmstat(专用于 cpu 和内存使用情况监测)以及 free 命令等工具。这些工具都可以通过结合系统任务计划以及自编脚本进行周期性调用,这就给监测提供了相当的便利。因为可以将这些命令嵌入到脚本中以周期性生成系统监测软件所需要的数据,最终一样可以通过这些数据结合绘图软件绘制出直观的统计图。这种类型的监测所获得的信息更加灵活和精确,对于一些熟悉脚本编程的用户来说,使用起来更是得心应手。

另外采用这种方式的情况下,利用命令监测可以无限制扩展,用户可以通过各种管道来获得和定制自己的监测脚本。

所以综上所述,这两种监测方案各有优势。因此我们会在下文中针对两种方案各提供一些案例和操作方法由易到难分别进行说明和演示。

各种系统监测手段在企业中部署和实现方法:

a.snmp 协议的配置以及在 Linux 下和 Windows 上的测试方法:

首先我们来介绍一下第一种方法,即通过 SNMP 协议和数据采集软件来实现的系统运行监测方案。因为在相当多的情况下绝大多数企业都倾向于选择通过 SNMP 来获取服务器运行的各种信息,毕竟因为 SNMP 协议是业界实现监测的重要标准。

因此我们花点时间来介绍一下 SNMP 协议的基本概念以及工作原理。

简单网络管理协议 SNMP 是一种广泛用于监测网络设备(计算机、路由器)甚至其他设备(例如 UPS)的网络协议,也是专门设计用于在 IP 网络管理网络节点(包括服务器、工作站、路由器、交换机及 HUBS 等)的一种标准,属于应用层协议。SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告),网络管理系统将获知网络出现的各种问题。

SNMP 管理的网络有三个主要组成部分:被管理的设备(Managed Device)、代理(Agent)和网络管理系统(Network Management Station 即 NMS)。

被管理的设备是一个网络节点,包含 ANMP 代理并处在管理网络之中,有时也称为网络单元,用于收集并存储网络信息,通过 SNMP、NMS 能得到这些信息。被管理的设备可能是路由器、访问服务器,交换机和网桥、HUBS、主机或打印机等。

SNMP 代理是被管理设备上的一个网络管理软件模块。SNMP 代理拥有本地的相关管理信息,并将他们转换成与 SNMP 兼容的格式。

NMS 运行应用程序以实现监测被管理设备。此外,NMS 还为网络管理提供了大量的处理程序及必须的储存资源。任何受管理的网络至少需要一个或多个 NMS。

目前,SNMP 有 3 种不同的版本:SNMPv1、SNMPv2 和 SNMPv3。第 1 版和第 2 版没有太大差距,但 SNMPv2 是增强版本,包含了其他协议操作。前两种 snmp 协议主要使用基于团体名称(community)的方式来实现网管工作站对代理的访问认证,与前两种相比 SNMPv3 则包含更多安全机制和远程配置手段, 在认证方面可以使用基于某种对称和非对称加密协议来加密的用户名和密码来实现网管工作站对代理的访问认证。而且为解决不同 SNMP 版本间的不兼容问题,RFC3584 定义了三者共存策略。

另外 SNMP 协议包括了四种基本的动作:

Get:

如果网络管理系统需要获得被监测的设备信息,则会执行 get 动作。

GetNext:

如果要获得的某个项目信息是一个项目列表中多个项目之一,网络管理系统会执行 getnext 获得相关所有项目信息。

Set:

网络管理系统使用 set 命令来改变被管理项目的某个值。

Trap:

如果被管理设备需要通知网络管理系统某些信息,需要执行 trap 命令。

最后需要说明的一点是在 Red Hat Enterprise Linux 中已经提供了 SNMP 相关的所有软件包,在这些软件包中提供了全部的 MIB 信息,信息文件存储于 /usr/share/snmp/mibs。所谓 MIB 是关于某个设备层次化的数据库(Management Information Base)。而且对于这个设备的每个值都采用唯一的 Object Identifier 即 OID 表示,OID 格式包括可用名称,前缀或者数字。

如果在系统中安装了 net-snmp-utils 包,则 snmp 中的 MIB 和 OID 信息可以通过 snmptranslate 命令来显示出整个 MIB 树以及其上 OID 的信息(如图所示)

snmptranslate 主要用于转换以文字名称或者数字 ID 显示的 OID 信息以及列出 snmp 的 MIB 结构树。

刚才我们已经用不少的篇幅介绍了 SNMP 简单网络管理协议的基本原理和组成。现在我们即将以红帽最新 的企业版操作系统 Red Hat Enterprise Linux 5 Update 8(简称 RHEL 5u8)为例来演示如何配置和实现 SNMP 服务。

在 RHEL 5u8 中提供了一个叫做 net-snmp 的 rpm 包,net-snmp 是在 IPv4 和 IPv6 上执行 SNMP 的 v1,v2 和 v3 版本协议的一组程序。

需要特意说明一下的是,由于在大多数环境下针对企业应用都会使用稳定版本的 Red Hat Enterprise Linux 操作系统,所以后面所有操作所使用的 Linux 平台也都是 RHEL,但是那些对技术体验感兴趣的用户也可以使用 Fedora 或者其他类型的 Linux 发行版来实现上述所有的操作。

在该例子中,假设服务器 192.168.1.10 是被监测的系统,我们将在其上分别配置和启用基于 v1 和 v3 版本的 snmp 服务,而另外一台主机 192.168.1.100 权充当管理工作站,并且用 snmp 命令来获得被监测系统的详细信息。

在服务器 192.168.1.10 上,基本信息如下图所示(如图所示)

首先配置 v1 版本的 SNMP 协议:

挂载 DVD 安装光盘,并从光盘中安装 snmp 相关的软件包:lm_sensor,net-snmp,snmp-utils。关于 net-snmp 包的作用刚才已介绍,而至于 net-snmp-utils 主要提供了使用 snmp 协议管理网络的一系列工具 (如图所示)。

装完所需要的软件包之后,我们可以直接修改 snmp 的主配置文件 /etc/snmp/snmpd.conf 并重启服务来直接启用 SNMPv1。所做的修改如图所示:(如图所示)。

采用 SNMPv1 版本的重要标志之一就是使网络管理设备访问代理时需要使用基于 Community 的团体的验证方式。这里的 Community 使用默认的 public,当然也可以根据自己的需求去修改为任意一个字符串。完成之后保存该档并运行命令重启服务:

复制代码
# service snmpd start [ Enter ]
# chkconfig snmpd on [ Enter ]

为了监测是否能够正确获得整个系统中每个 MIB 的 OID 值,可以运行 snmpwalk 命令以获得响应的结果(Screenshot07.png),snmpwalk 命令可通过 snmp 的 GETNEXT 动作自动获得 MIB 树上的管理信息。例如,在这种情况下执行如下信息,表示获取全部 mib 和 oid 信息:

复制代码
# snmpwalkv1cpublic 192.168.1.10 [ Enter ]

至此为止,被监测对象上的 snmp 就算配置完成了。为了说明结果,我找了一个运行于 Windows 的操作系统上的利用 snmp 协议的监测软件来看看效果。在 Windows 平台上能够实现该功能的软件有很多,例如 Whatsup,Solawins 等等。这里以 Whatsup 为例,我的监测主机上操作系统选用的是 Windows Server 2003 Enterprise Edition。IP 地址是 192.168.1.100。按照图示的步骤安装 Whatsup 软件,方法很简单,只要秉承 Windows 软件的安装风格——一路回车即可搞定(如图所示)。

由于我安装的是一个 30 天的免费试用版本,所以需要在启动产品的时候选择“Activate Later”(如图所示)

并且在“Device Discovery Method”中选择“IP Range Scan”(如图所示)。

之后起始地址都填入被监测设备的地址 192.168.1.10(如图所示)

按照在 /etc/snmp/snmpd.conf 档中的内容输入团体名称“public”按照下图确定扫描内容并开始扫描,扫描时间需要根据设备的数量决定(如图所示)。

在“Action Policy Selection”中选择“Do Not Apply an Action Policy”并结束扫描(如图所示)。

最后通过“Report View”标签选择“Device Reports”并最终获得所有设备的 Health 状况(如图所示)。

在众多的系统监测软件中 Whatsup 的功能相对比较强大,而且设置方便,界面友好。在很多企业的服务监测中是一个不错的选择,而且 Whatsup 的其他视图模式和功能也比较多。至于其他的例如 Solawins 等类似的软件,在配置方面的步骤基本大同小异,所以这里就不花时间详述了。

在使用 v1 版本的 SNMP 协议之后,下面我们将介绍如何配置和使用 v3 版本的 SNMP 协议来实现相同的效果: 与 v1 版本的 SNMP 协议不一样,v3 版本最重要的特征是更强的安全性。实际上 v1 版本的 SNMP 在安全性方面是有一些欠缺的,因为 v1 版本的团体信息在网络上是以明文形式传送的。因此 v3 版本不再使用明文的团体信息来实现认证,而是采用对称或者非对称加密方式加密用户名和密码实现认证。所以安全方面自然要比 v1 版本的高很多,不过在配置方面也显然会比 v1 版本的更加麻烦。所幸的是系统自带的 net-snmp-utils 工具包为我们准备了另外一个强有力的 SNMP 配置工具——net-snmp-config,因此一般用户仍然可以通过他非常方便地实现 v3 版本的 SNMP 配置。下面是配置方法:

我们先切换到光盘,由于 net-snmp-config 工具由 net-snmp-devel 包提供,所以在安装一系列依赖包包括 beecrypt,elfutils-devel,elfutils-devel-static 后,最后还是要安装 net-snmp-devel 包。之后将 snmpd 服务停止并备份其主配置文件,然后运行命令:

复制代码
# net-snmp-config --create-snmpv3-user -A 12345678 -X 12345678 -a MD5 -x DES admin [ Enter ]

关于这条命令使用的参数说明如下:

复制代码
--create-snmpv3-user [-A authpass] [-X privpass] [-a MD5|SHA] [-x DES|AES] [username]

该命令执行之后将自动建立新的配置文件 snmpd.conf,而内容也十分简单。只有用户名和权限,而关于认证方式的信息则会存储在系统 /var/net-snmp/snmpd.conf 文件中(如图所示)。

最后重启 snmpd 服务,并再次用 snmpwalk 指明通过 v3 的认证方式获取 MIB 上的 OID 信息(如图所示)。

命令是:

复制代码
# snmpwalk -v3 -u admin -l auth -a MD5 -x DES -A 12345678 -X 12345678 192.168.1.10 [ Enter ]

如果要验证配置的信息是否 OK,还是可以通过 Windows 下的 Whatsup 来监测信息,步骤基本上和上例一样,只不过更改一下 SNMP 版本并填入相应的认证信息即可。这里不再赘述。


给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-07-16 00:0028386

评论

发布
暂无评论
发现更多内容

双指针算法之同向双指针

泽睿

Java 数据结构 面试 双指针算法

一名优秀的技术Leader是如何炼成的?

架构精进之路

管理 技术管理 引航计划 内容合集

Kubernetes环境Traefik部署与应用

Galen Suen

Kubernetes Helm Traefik

区块链不是用来解决现实社会问题 而是为了建立一个全新的平行世界而生

CECBC

Typora+PicGo+Gitee搭建博客写作环境

Simon郎

Typora PicGo markdown编辑器 免费图床

Vue进阶(幺零八):npm run build 错误 (node:7852) UnhandledPromiseRejectionWarning: CssSyntaxError:xxxx. 解决分析

No Silver Bullet

Vue 9月日更

性能测试中集合点和多阶段问题初探

FunTester

性能测试 接口测试 测试框架 测试开发 FunTester

Scrum Patterns:冲刺目标(译)

Bruce Talk

敏捷 译文 Agile Scrum Patterns

科技的进步会造福人类吗--闲聊科幻

姬翔

9月日更

写给互联网工程师的5G书 | 1. 简介

俞凡

架构 5G

三分钟带你入门-redis-高可用架构之哨兵,大厂Java高级面试题汇总解答

Java 程序员 后端

深入理解Java中的不可变对象,这可能是目前最全的

Java 程序员 后端

深入理解Java虚拟机-虚拟机执行子系统,字节跳动超高难度三面java程序员面经

Java 程序员 后端

深入理解 Java 多线程核心知识:跳槽面试必备,Java算法基础面试题

Java 程序员 后端

深入理解Java中的不可变对象(1),面试加分项

Java 程序员 后端

谷歌工程师是怎么写工程设计文档的?

俞凡

Google 大厂实践

区块链,不是元宇宙的全部

CECBC

Context 和 struct

Rayjun

struct Context Go 语言

Redis核心原理与实践--列表实现原理之ziplist结构

binecy

redis 源码分析

写给互联网工程师的5G书 | 0. 前言

俞凡

架构 5G

Mybatis Plus 的 @SqlParser 的说明与替代注解

玄兴梦影

注解 过滤器 Mybatis-Plus

服务注册与发现的原理和实现

万俊峰Kevin

微服务 服务注册与发现 microservice 服务发现 Go 语言

【LeetCode】有效的括号字符串Java题解

Albert

算法 LeetCode 9月日更

OpenSL ES

Changing Lin

9月日更

深入理解JAVA虚拟机原理之垃圾回收器机制(一),Java开发6年了

Java 程序员 后端

不同 GC 和 堆内存总结

大海

JVM 垃圾回收机制 垃圾回收算法 垃圾回收器

架构实战营 模块八作业

孫影

架构实战营 #架构实战营

攀岩时代:HMS Core 6.0与移动开发之路

脑极体

计算机操作系统学习笔记 | 操作系统特征

Regan Yue

学习 操作系统 9月日更

深入了解QueryDSL

邱学喆

type Configuration Expression SqlSerializer visitor

架构实战营 - 模块三作业

en

架构实战营

用SNMP协议实现系统监控_Linux_王基立_InfoQ精选文章