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