插件式监控平台是监控宝提供的一种监控数据采集的开放式服务平台, 能够以开放源代码的嵌入方式实现用户内网监控数据的稳定收集和传输, 给用户提供更灵活更稳定的插件式服务监控。
插件式监控平台支持对内网的服务器及服务进行监控,插件通过内部网络获取监控数据, 多个插件的数据汇总给采集器,采集器将这些数据提交到监控宝的中心服务器, 这样只需要采集器所在的服务器与外网连通即可实现对局域网内的服务进行监控, 解决了通过外部网络无法获取内网数据的问题。 插件式监控平台支持更稳定的数据传输,减少网络不稳定带来的问题。
例如:监控宝产品中原有的服务器监控数据采集利用的是SNMP协议,在SNMP中 用得最多的协议是UDP,由于UDP的不稳定造成服务器监控经常出现获取不到数据的情况, 利用插件平台所提供的SNMP插件能够很好的解决这一问题。
插件式监控平台提供了一种可以扩展的开发机制,所有插件都是即插即用的, 监控宝官方会持续开发新的监控插件,用户可以根据自己特定的需求开发针新的监控插件, 不论是官方提供的还是自行开发的插件,采集器都能够加载并驱动。插件式监控平台支持分布式的部署, 采集器不是唯一的,用户可以根据自己的网络条件和应用部署情况创建并部署多个采集器, 这些采集器之间是互不干扰的,各自管理各自的插件实例,最终的数据都会发送到监控宝的中心服务器。
整个平台是一种可扩展的数据采集及传输环境,主要包括三个部分组成: 数据采集器(Agent) 数据采集插件(Plugin) 数据接收处理服务。
数据采集插件是一种可插入式的专门采集某种数据的小应用。 比如针对MongoDB、Apache、Memecache等应用,利用SNMP、HTTP等协议获取数据; 数据采集器(Agent)则会根据用户的需求调度相应的Plugin来采集相应的数据, 然后负责将这些数据包装并采用HTTP协议发送给数据处理服务, 数据采集插件和数据采集器都是运行在用户本地的环境中。 数据接收处理服务能够接受部署在不同用户环境中的数据采集器发送过来的数据, 并保存到数据库中。目前Agent和Plugin都是采用Python编写的。Agent的用户设置及配置参数传输都经过了加密,以保证数据安全性。
下载采集器,包括Linux版本和Windows版本,解压缩即可
目前监控宝完全支持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版本不符合,运行start.sh/start.bat时,采集器启动失败,可以去在log目录下的日志里查看出错信息。
请确定服务装上了net-snmp。若报oid错误,请确保MIBS库己装上。
有话要说