热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

CloudStack4.2内置的SNMP监控功能深入解析

CloudStack4.2版本发布在即,相信不久后对4.2版本新功能(共有13个)的介绍会逐渐多起来。因为无论是从架构底层的重构还从构建更灵活的IAAS功能上,CloudStack又上了一个新台阶。在这诸多的更新中,我想介绍一下CloudStack对事件机制的增强,使用SNMP协议

CloudStack 4.2 版本发布在即,相信不久后对 4.2 版本新功能(共有13个)的介绍会逐渐多起来。因为无论是从架构底层的重构还从构建更灵活的IAAS功能上,CloudStack又上了一个新台阶。在这诸多的更新中,我想介绍一下CloudStack对事件机制的增强,使用SNMP协议对CloudStack进行监控。可能这个改进比较小,或者对SNMP机制的支持还不够彻底,以至于4.2版本的ChangeLog里都没有提及它。毕竟对云平台运维的监控无论怎么强调其重要性都不过分,多一个监控视角就多一分运维保障。

在CloudStack 4.2之前的版本中事件/警告是在CloudStack内部完成生产和消费的,通过CloudStack Dashboard 和 Events菜单查看(如下图)。由于功能耦合度太高,不能把事件输出到CloudStack以外第三方监控系统中。在CloudStack支持插件机制后,与第三方监控系统的集成就能很方便实现了,目前CloudStack默认实现事件对SNMP和Syslog的输出。

CloudStack DashBoard

CloudStack DashBoard 

SNMP基础原理介绍:

SNMP(Simple Network Management Protocol的简称)是Internet协议家族的标准成员,工作在TCP/IP模型的应用层。几乎所有的主流监控软件(Zenoss,Cacti)都内置了对SNMP的支持,国内做监控服务很好的监控宝甚至提供了在线SNMP测试:http://www.jiankongbao.com/labs/snmp 。

一个SNMP管理系统的有以下必备组件(如下图):

1、被监控管理的设备;
2、SNMP Agent  运行在被监控设备上的代理软件;
SNMP Agent 使用UPD协议在161端口上接收请求。
3、SNMP Manager 运行在管理服务设备上的软件:
Network management system (NMS)
SNMP manager可以使用任意端口向Agent发出请求。SNMP Manager使用162端口接收请求。

SNMP监控网络中各角色的通信方式如下(如下图):

1、Manager可以对Agent发起:GET/SET请求(读/写)
2、Agent可以对Manager发起:  GET/SET请求
3、Agent可以对Manager发起:Trap请求 (异步方式)

 

 

以上三种通信方式有不同的使用场景。

在日常运维监控系统中一般使用SNMP的GET(读)请求了解被监控方的内部运行数据,也就是第一种通信方式中的GET请求,由监控系统把数据Pull拉过来。其实也可以使用第二/三种通讯方式,由被监控方主动把数据Push推到管理服务器中。

CloudStack使用SNMP向监控系统提供事件类非连续的字符消息事件,最合适的通信方式是使用第三种Trap方式,当有事件发生时主动把事件Push推到外部第三方监控系统中。

由于被管理设备种类繁多,每个设备可以有不同的被管理对象,并且生产设备是一种市场行为,这导致SNMP协议本身不可能预先指定被管理设备对象的识别代码。因此SNMP把设备识别的标准定义工作外包给了第三方机构IETF和IEEE 。这就是MIB数据库(management information base)。

MIB是树状结构组成的,在最末端的叶子节点是OID( object identifiers ),每一个OID对应唯一的变量名。SNMP网络中的管理方和被管理方就是靠这些唯一的变量名进行交换数据的。既然MIB是一个数据库,自然可以对预先指定的被管理对象进行浏览,查询。推荐给大家一个工具:snmpB http://sourceforge.net/projects/snmpb/ 。

CloudStack使用的MIB分支是:1.3.6.1.4.1.18060.15 ,其中 18060 是分配给apache的代码,15是分配给CloudStack的根代码,所有CloudStack的SNMP OID代码都在1.3.6.1.4.1.18060.15 分支下 。

 

CloudStack中Trap事件的SNMP映射定义:

在CloudStack发送的事件消息中每个Trap消息都包含以下共同的数据:

message

podId

dataCenterId

clusterId

generationTime

在CloudStack 4.2中共定义了如下trap消息:(所有数据都以全局配置阈值为基准)

availableMemory : 可用内存

availableCpu :  未分配的cpu

availableStorage :  可用存储

remainingStorageAllocated : 保留的未分配存储

unallocatedVirtualNetworkpublicIp : 未分配的public IP数量

unallocatedPrivateIp :未分配的私有IP数量

availableSecondaryStorage : 二级存储中可用量

host : 与主机相关的警告

userVmState : 用户虚拟机异常停止

domainRouterVmState : Domain Router 虚拟机异常停止

consoleProxyVmState : CPVM异常停止

routingConnection : 与默认路由的链接丢失

storageIssueSystemVms : 系统虚拟机中存储有问题

usageServerStatus : usage server未运行

managmentNode : 管理网络CIDR没有配置

domainRouterMigrate : Domain Router 虚拟机迁移不成功

consoleProxyMigrate : CPVM迁移不成功

userVmMigrate  : 用户虚拟机迁移不成功

unallocatedVlan : 未分配的VLan数

ssvmStopped : SSVM异常停止

usageServerResult :  Usage job failed

storageDelete : 删除存储池失败

updateResourceCount : 更新资源计数失败

usageSanityResult : 使用合理性检查

unallocatedDirectAttachedPublicIp :未分配的共享网络IP数

unallocatedLocalStorage : 剩余的未分配本地存储

resourceLimitExceeded : 超过限制的资源数

以availableMemory为例,SNMP OID的原始消息描述如下:

availableMemory NOTIFICATION-TYPE
OBJECTS {
dataCenterId,
podId,
clusterId,
message,
generationTime
}
STATUS current
DESCRIPTION
“Available Memory below configured threshold”
::= { csAlertTraps 1 }

详情查看:https://cwiki.apache.org/confluence/download/attachments/30747160/CS-ROOT-MIB.mib?version=1&modificatiOnDate=1362442825000

CloudStack SNMP 事件机制的设计需求(原文):

-          生成可被外部监控系统识别的SNMP traps,外部设备包括SCOM/OpenView等 。
-          生成的traps要兼容SNMP v1、v2,优先支持v2。
-          提供必须需的MIB信息
-          能够指定trap消息发送的接收方,即trap listener。
-          traps消息包含事件严重级别和SNMP 警告的条件实体。
-          可指定多大20个外部traps listener 。
-          支持根据事件严重级别,配置相应的traps listener。
-          支持通过api进行注册traps listener和警告类型。

 

CloudStack中cloud-plugin-snmp-alerts项目介绍:

eclipse中项目名称:cloud-plugin-snmp-alerts

代码文件路径:[GITDIR]/cloudstack/plugins/alert-handlers/snmp-alerts/

SNMP相关类:

SnmpHelper

CsSnmpConstants

SnmpEnhancedPatternLayout

SnmpTrapInfo

SnmpTrapAppender

以上五个Java类的关系是:

1、根据log4j中appender的配置,由SnmpTrapAppender 接收Log4j的LoggingEvent日志事件;
2、根据SnmpEnhancedPatternLayout的描述转换成SNMP需要的SnmpTrapInfo格式;
3、使用SnmpHelper发送给外部的SNMP Manager;
4、CsSnmpConstants是辅助类,提供静态的MIB OID配置信息;

CloudStack中的事件输出是由日志驱动的,对log4j日志文件的修改如下:
文件名:log4j-cloud.xml
修改内容:
SnmpTrapAppender”>




SnmpEnhancedPatternLayout”>



本文从SNMP运行原理的角度介绍了CloudStack使用SNMP把事件输出到第三方外部监控系统的集成方法。希望能对关心CloudStack运维关心的朋友有所帮助。下一篇将介绍SNMP监控的实例演示。


推荐阅读
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 项目运行环境配置及可行性分析
    本文介绍了项目运行环境配置的要求,包括Jdk1.8、Tomcat7.0、Mysql、HBuilderX等工具的使用。同时对项目的技术可行性、操作可行性、经济可行性、时间可行性和法律可行性进行了分析。通过对数据库的设计和功能模块的设计,确保系统的完整性和安全性。在系统登录、系统功能模块、管理员功能模块等方面进行了详细的介绍和展示。最后提供了JAVA毕设帮助、指导、源码分享和调试部署的服务。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • Struts2+Sring+Hibernate简单配置
    2019独角兽企业重金招聘Python工程师标准Struts2SpringHibernate搭建全解!Struts2SpringHibernate是J2EE的最 ... [详细]
author-avatar
无可奈何花落去
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有