内网采集器的主进程是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