什么是插件式监控平台

插件式监控平台是监控宝提供的一种监控数据采集的开放式服务平台, 能够以开放源代码的嵌入方式实现用户内网监控数据的稳定收集和传输, 给用户提供更灵活更稳定的插件式服务监控。

为什么使用插件式监控平台

插件式监控平台支持对内网的服务器及服务进行监控,插件通过内部网络获取监控数据, 多个插件的数据汇总给采集器,采集器将这些数据提交到监控宝的中心服务器, 这样只需要采集器所在的服务器与外网连通即可实现对局域网内的服务进行监控, 解决了通过外部网络无法获取内网数据的问题。 插件式监控平台支持更稳定的数据传输,减少网络不稳定带来的问题。

例如:监控宝产品中原有的服务器监控数据采集利用的是SNMP协议,在SNMP中 用得最多的协议是UDP,由于UDP的不稳定造成服务器监控经常出现获取不到数据的情况, 利用插件平台所提供的SNMP插件能够很好的解决这一问题。

插件式监控平台提供了一种可以扩展的开发机制,所有插件都是即插即用的, 监控宝官方会持续开发新的监控插件,用户可以根据自己特定的需求开发针新的监控插件, 不论是官方提供的还是自行开发的插件,采集器都能够加载并驱动。插件式监控平台支持分布式的部署, 采集器不是唯一的,用户可以根据自己的网络条件和应用部署情况创建并部署多个采集器, 这些采集器之间是互不干扰的,各自管理各自的插件实例,最终的数据都会发送到监控宝的中心服务器。

插件式监控平台的构成与工作原理

整个平台是一种可扩展的数据采集及传输环境,主要包括三个部分组成: 数据采集器(Agent) 数据采集插件(Plugin) 数据接收处理服务。

数据采集插件是一种可插入式的专门采集某种数据的小应用。 比如针对MongoDB、Apache、Memecache等应用,利用SNMP、HTTP等协议获取数据; 数据采集器(Agent)则会根据用户的需求调度相应的Plugin来采集相应的数据, 然后负责将这些数据包装并采用HTTP协议发送给数据处理服务, 数据采集插件和数据采集器都是运行在用户本地的环境中。 数据接收处理服务能够接受部署在不同用户环境中的数据采集器发送过来的数据, 并保存到数据库中。目前Agent和Plugin都是采用Python编写的。 Agent的用户设置及配置参数传输都经过了加密,以保证数据安全性。

插件式监控平台的环境配置

采集器下载和部署配置步骤

下载采集器

下载采集器,包括Linux版本和Windows版本,解压缩即可

下载和安装Python运行环境

目前监控宝完全支持Python的2.4/2.6/2.7/3.2版本,安装过程如下:

1、若要使用服务器性能监控,需要安装net-snmp;
2、若要使用mysql性能监控,需要安装Python的MySQLdb扩展件;
3、采集器运行需要文件的增删改权限。因采集器的自动更新和日志生成功能需要用到。
4、采集器会向监控宝提交采集到的数据,运行采集的服务器要有外网的访问能力。
5、使用Windows版的用户若要使用安装Windows服务功能,需要安装pywin32扩展件。
6、若使用python2.4时,需要装hashlib、ctypes、simplejson内库
  http://pypi.python.org/pypi/hashlib
  http://pypi.python.org/pypi/ctypes
  http://pypi.python.org/packages/source/s/simplejson/simplejson-1.1.tar.gz

采集器和插件的代码说明

采集器主进程是jkbAgent。而jkbMaster是采集器的守护进程,负责启动,重启,更新jkbAgent。

jkbAgent启动后会通过读取用户的插件配置信息,加载初始化插件,插件以jkbAgent线程的方式运行, 插件之间的运行是并行互不干扰的。采集器会按时通过postData()方法向监控宝提交采集到的数据, 数据以json格式提交。 插件返回给采集器的数据格式如下:

  {'agentType':self.agentType,
   'taskId':self.taskId,
   'pluginId':self.pluginId,
   'code':self.code, 
   'time':time.time(),
   'data':redata, 
   'error_info':self.error_info}
   

采集器的进程id会被记录在tmp文件夹下的agentpid.pid和masterpid.pid中,采集器的运行日志会按天自动生成在log目录下, 可以通过log分析采集器的运行情况。插件运行连续多次出错时会被设为停止状态,此时应通过日志分析插件的出错原因,也可以联系我们。

如何开发新的插件

目前我们的自定义监控配合采集器的使用,支持用户开发自己的插件。开发出满足用户需求的插件。 开发插件时应该要遵守下规则: 新插件要放于plugin目录下,插件抱含一个名为CustomClass的类,和一个名为run()的入口方法。 类的初始化方法应带有接收调用对像的实例。数据返回 return 数组 (在python里准确是叫字典),可以仿照custom_daemon.py 进行开发。 下面是记录插件错误信息的方法:

  self.obj.logger.error(traceback.format_exc())
  self.obj.errorInfoDone(traceback.format_exc())

插件代码示例如下:

  #类名必定义为CustomClass
  class CustomClass():
  def __init__(self,obj):
  #接收调用对像的实例
  self.obj=obj
  #必须有个run的入口方法
  def run(self):
      redata={}
      try:
    #数据收集开始
          redata['val1']=455
          redata['val2']=52662
          redata['val4']='descff'
    #数据收集结束
      except Exception :
    #下面是处理插件错误信息的方法
          self.obj.logger.error(traceback.format_exc())
          self.obj.errorInfoDone(traceback.format_exc());
      finally:
          #最终要把数据以字典格式返回
          return redata

常见问题及解决方法

如何添加插件

在利用插件平台进行项目监控之前,首先需要将监控宝提供的插件添加到自己的插件列表中,通过菜单“插件”→“插件列表”,在列表中所需要的插件后面点击“添加使用”即可。

如何创建采集器

通过菜单“插件”→“插件使用”→“采集器”察看已创建的采集器列表,点击“创建采集器”后进入采集器编辑界面,如果已经添加过插件,则输入采集器名称并选择插件后创建一个采集器,创建成功后返回采集器列表。如果要采集器能够工作,还需要下载采集器到本地并进行部署、配置,启动后即可。

如何关联监控项目

采集器和插件只是负责监控项目的数据采集工作,需要匹配相应的监控项目才能完成整个监控。目前平台支持两种方式来完成他们直接的关联,一种是在创建服务器或是服务监控项目时,在页面选择“使用Agent获取数据”,利用已有的Agent和插件完成项目数据的采集;另一种是在采集器列表中选择一个采集器,在其下面所控制的插件上面直接创建监控项目。

如何控制采集器和插件

在采集器列表中可以选择一个采集器点击重启图标,在完成重启之前会提示正在restart中,同样可以点击停止图标使采集器不再工作。

采集器运行时出错

采集器的运行日志会按天自动生成在log目录下,可以通过log分析采集器的运行情况; 插件运行连续多次出错时会被设为停止状态,此时应通过日志分析插件的出错原因,也可以联系我们。

采集器正常运行,但获取不到数据

查看config下的jkbConfig.py,里面的jkbKey值是否和你创建的任务key一致。在agent实例列表能找到任务的key值。两key值应保持一致。

Python版本不符合

若当前python版本不符合,运行start.sh/start.bat时,采集器启动失败,可以去在log目录下的日志里查看出错信息。

服务器性能监控获取不到数据

我们的采集器需要通过snmpwalk命令去获得被监测机器的数据,所以请确认安装了必要的工具

1、请确认安装采集器的服务器装上了net-snmp及MIBS库

 a、ubuntu/debian 需要安装如下包:apt-get install snmp snmp-mibs-downloader
    并清空文件/etc/snmp/snmp.conf:  #>/etc/snmp/snmp.conf
 b、centos/RHEL 需要安装如下包:net-snmp-utils
 c、windows机器 需要安装snmpwalk.exe 请下载安装并重启采集器所在的机器
 http://jaist.dl.sourceforge.net/project/net-snmp/net-snmp%20binaries/5.6.1.1-binaries/net-snmp-5.6.1.1-1.x86.exe
 如果以上链接失效请到官方网站下载对应版本的exe文件 http://www.net-snmp.org/download.html  

2、请确认被监控服务器安装上了net-snmp

具体安装方式请参考SNMPD配置手册

3、测试是否成功

如果您在SNMP中采用的是v2c验证方式,并且community字符串假设为“public”,那么测试方法为:

 snmpwalk -v 2c -c public your_ip_here:161 sysDescr #your_ip_here 为被监控的服务器IP。您使用的是采集器,通常您会在此处填写内网IP。

如果您的SNMP中采用的v3验证方式,用户名为“user”,密码为“pass”,加密方式为“MD5”,那么测试方法为:

 snmpwalk -v 3 -l authNoPriv -a MD5 -u user -A pass your_ip_here:161 sysDescr

在命令行输入这些语句后,如果服务器SNMP正常开启的话,您应该可以获得以下类似的反馈:

 SNMPv2-MIB::sysDescr.0 = STRING: Linux host1 2.6.27.19-5-default #1 SMP 2009-02-28 04:40:21 +0100 x86_64

如果测试中无法获得类似的正确反馈,则说明SNMP安装或者设置存在问题,您可以参考随后的错误信息分析。

Timeout: No Response from X.X.X.X

通常使用SNMP协议版本v2c时会遇到这类错误,可能的原因有:

  • community字符串填写错误?请仔细核对 -c 参数后的值,比如是不是1和l、0和O写混了,大小写弄错了等。
  • IP地址访问不到?您可以使用 ping, traceroute/tracert 测试该IP。
  • 端口访问不到? 您可以 netstat 查看该端口是否正常监听, Linux下 ps 查看 snmpd 进程是否运行, windows 下看服务是否开启
  • 防火墙没有开放该端口?尝试关掉防火墙试试,如果关掉防火墙能成功,则说明是防火墙的问题,具体防火墙配置的方法请查询防火墙相关资料。

备注:Linux下查看snmpd进程是否运行,可以通过以下命令:

$ ps afx | grep snmpd$
 4889 ?        S     42:44 /usr/local/snmp/sbin/snmpd

Windows下查看SNMP服务是否运行,可以在“运行”菜单中输入“services.msc”,找到“SNMP Service”,应该是“启动”的状态。

snmpwalk: Timeout (Sub-id not found: (top) -> sysDescr)

通常使用SNMP协议版本v3时会遇到这类错误,可能的原因有:

  • IP地址访问不到?您可以使用 ping, traceroute/tracert 测试该IP。
  • 端口访问不到? 您可以 netstat 查看该端口是否正常监听, Linux下 ps 查看 snmpd 进程是否允许, windows 下看服务是否开启。
  • 防火墙没有开放该端口?尝试关掉防火墙试试,如果关掉防火墙能成功,则说明是防火墙的问题,具体防火墙配置的方法请查询防火墙相关资

snmpwalk: Authentication failure (incorrect password, community or key) (Sub-id not found: (top) -> sysDescr)

通常使用SNMP协议版本v3时会遇到这类错误,可能的原因有:

  • 密码填写错误?
  • 加密方法 (MD5/SHA) 填写错误?

snmpwalk: Unknown user name (Sub-id not found: (top) -> sysDescr)

通常使用SNMP协议版本v3时会遇到这类错误,可能的原因有:

  • 用户名填写错误

其它

在本机测试中,如果您需要更详细的信息,在前面的 snmpwalk 测试命令中可以加上 -d 选项,打开 debug 信息,这样您可以看到收发的数据包。

插件式监控平台操作指南

文档/插件式监控平台.txt · 最后更改: 2013-11-06 16:18 (外部编辑)
 
 
©2008 Another cool website by 80KV