为 Linux 编写插件

用 Python 或 Shell 编写您自己的插件,并以您想要的方式监控您需要的数据。为各个属性 设置阈值, 并在超出设置值时发出告警

确保您的服务器中安装了最新版本的 Site24x7 Linux 监控代理

插件输出格式

插件脚本应该返回一个 JSON 对象。仅提供一级 JSON 数据作为键值对。要发布到 Site24x7 服务器的 JSON 数据应采用以下格式:

{

"plugin_version" : 1,

"heartbeat_required" : true,

"cpu" : 42.7,

"memory" : 65.8,

"network" : 156,

"units" :

{

"cpu" : "%" ,

"memory" : "%" ,

"network" : "MB"

}

}



不支持单个 JSON 对象中的 JSON 数组和多级对象。例如,不支持以下格式:
{
"Key 1" : {"obj 1" : "value 1", "obj 2" : "value 2" ...},
"Key 2" : ["obj 1", "obj 2", .. ],
...
}
  1. plugin_version: 表示插件的版本号
    • 这是必填字段
    • 当 plugin_version 发生任何变化时,Site24x7 数据中心会更新模板并为该版本创建一个新模板
    • 默认值为 1。如果对插件进行任何更改,用户必须将 plugin_version 增加 1
    • plugin_version 只能是整数。例如 1,2,3...
  2. units: 监控属性的单位
    • 这是个可选的选项
    • 它是一个键值对,键是插件中监控的属性的名称,值是它们各自的单位s
    • 例如,在监测插件单元中的 cpu 利用率百分比时:{'cpu':'%'}
      units : {'cpu':'%'}
  3. msg: 监视器的消息
    • 这是个可选的选项
    • 如果监视器停机,配置的错误消息将显示在 Site24x7 Web 客户端中
    • 该属性应与数据属性平行放置

编写插件的步骤 

  1. 在您的服务器中下载并安装最新版本的 Site24x7 Linux 代理
  2. 转到服务器>插件集成>写插件
  3. 从任何可用格式下载示例代码: Shell 或 Python 脚本。
  4. 在下载的示例脚本中,找到名为 getData( ) 的方法并使用您自己的逻辑对其进行编辑以返回所需的性能数据。
    • 在示例代码中,请不要删除#Mandatory Fields。
    • 您可以通过在终端中手动执行来验证插件脚本的输出。示例:“python mysql.py”
  5. 在 /opt/site24x7/monagent/plugins/<foldername> 中创建一个文件夹,并将您的插件脚本文件放在此文件夹中。 确保文件名和文件夹名相同。例如,如果您正在为 Apache 编写插件,则插件脚本文件应为apache.py,文件夹名称应为 Apache
    对于Docker 代理,通过执行以下命令转到相应的容器:
    docker exec -it site24x7-agent /bin/bash
    然后,在 /opt/site24x7/monagent/plugins/<foldername> 中创建一个文件夹,并将您的插件脚本文件放在此文件夹中。

在下一次代理数据收集中,插件将被发现并标记以进行监控。您可以在ServerPlugin Integrations下看到监视器。插件监视器也将列在相应服务器监视器的插件选项卡下(服务器>服务器监视器>服务器> 单击所需的服务器监视器 >插件)。您还可以设置阈值配置文件,并在超过配置值时收到告警。 

所有插件日志都捕获在代理日志目录下的文件 plugins.txt 中,可以访问该文件以对插件进行故障排除。在 opt/site24x7/monagent/logs/details 下找到日志文件

单个插件脚本中的多个配置

当有多个配置用于执行一个插件时,为每个配置(具有不同的名称)创建一个新的监视器会变得既费时又费力。为了解决这个问题,Site24x7 插件监控支持使用单个插件脚本执行多个配置。

示例 1:

考虑在您的环境中运行多个 MySQL 实例,例如 production_master和 production_slave 。您可以使用单个插件脚本文件定义所有配置并执行它们,而不是使用多个 MySQL 插件。在开始之前,请确保安装了运行插件所需的依赖模块。然后,按照以下步骤操作:

  1. 创建一个文件夹mysql 并将插件脚本文件mysql.py放在文件夹中。 
  2. 创建一个以插件命名的配置文件 mysql.cfg,并将其放在文件夹mysql中。在mysql.cfg文件中定义如下配置:
    [production_master]
    hostname='193.167.1.0'
    port = 3306
    username = 'test'
    password = 'test'

    [production_slave]
    hostname='194.168.2.0'
    port = 3306
    username = 'test'
    password = 'test'
  3. 在mysql.py 脚本文件的 main 函数中添加如下代码,读取mysql.cfg 文件中配置的参数。如果代码已经存在于插件脚本文件中,请忽略。 
    复制粘贴以下代码后,确保插件脚本文件中的缩进正确。

      import argparse
      parser = argparse.ArgumentParser()
      parser.add_argument('--host', help="mysql host",type=str)
      parser.add_argument('--port', help ="mysql port",type=str)
      parser.add_argument('--username', help='mysql username', type=str)
      parser.add_argument('--password', help='mysql password', type=str)

    args = parser.parse_args()

      if args.host:
         MYSQL_HOST = args.host
      if args.port:
         MYSQL_PORT = args.port
      if args.username:
         MYSQL_USERNAME = args.username
      if args.password:
         MYSQL_PASSWORD = args.password

  4. 通过执行以下命令检查mysql.cfg 中定义的配置是否按预期工作:
    /usr/bin/python mysql.py --host=192.168.1.0 --port=3306 --username=test --password=test
    /usr/bin/python mysql.py --host=192.168.2.0 --port=3306 --username=test --password=test
    Ensure the MySQL performance metrics are returned as JSON output. If any error occurs, fix the same and proceed to the next step.
  5. 将mysql文件夹复制粘贴到代理的插件目录 /opt/site24x7/monagent/plugins/。在下一次数据收集中,Linux 代理将加密.cfg文件中的值,执行 mysql.py 文件,并为 Site24x7 Web 客户端中的每个配置(在mysql.cfg 文件中给出)添加一个新的插件监视器。加密后的示例配置文件如下所示:
    [production_master]
    encrypted.password = ojhVVrdlXKdW/s3YPJuhzCKhBcQF8PIUThEvqGeUijI=

    [production_slave]
    encrypted.password = XzIGEreeTblUFrvUJWDcIArzN5qi0qHFxZVUt1KqjyY=

在 Site24x7 Web 客户端中,将添加三个插件监视器进行监视。Site24x7 Web 客户端中插件监视器的显示名称将采用<plugin_script_name>-<section_name_in_the_.cfg_file>-<server-hostname>格式。
例如:在上面的示例配置中,其中一个监视器的监视器显示名称将是 mysql.py-production_master-<server-hostname>

插件配置详细信息的加密:

默认情况下,Linux 服务器监控代理将加密插件配置文件中给出的“密码”字段。插件执行后,配置文件将更新如下:

[production_master]
host=192.168.1.0
port = 3306
username = 'test'
encrypted.password = ojhVVrdlXKdW/s3YPJuhzCKhBcQF8PIUThEvqGeUijI=

[production_slave]
host=192.168.2.0
port = 3306
username = 'test'
encrypted.password = XzIGEreeTblUFrvUJWDcIArzN5qi0qHFxZVUt1KqjyY=

如果任何其他字段需要与密码一起加密,请在mysql.cfg文件的global_configurations部分进行配置。

[global_configurations]
keys_to_encrypt=password,username

[production_master]
host=192.168.2.0
port = 3306
username = 'test'
password = 'test'

[production_slave]
host=192.168.2.0
port = 3306
username = 'test'
password = 'test'

编辑配置详细信息:

如果配置文件中提供的任何值发生变化,您可以通过删除“加密”来编辑它。来自定义键的参数。

例如,如果 [production_master] 部分的密码发生更改, 请通过删除参数“encrypted”来编辑mysql.cfg文件。从密钥 encrypted.passsword 并输入新密码。在下一次连续的数据收集期间,代理将检测配置更改,加密新值,并相应地更新文件。 

示例 2:

考虑监控多个文件夹的文件或目录计数。您可以定义所有配置并使用单个插件脚本文件执行所有配置,而不是使用多个插件。为此,

  1. 创建一个文件夹check_file_count。
  2. 从我们的GitHub 存储库下载文件check_file_count.cfgcheck_file_count.py并将其放在check_file_count文件夹下。
  3. 编辑check_file_count.cfg 文件以相应地更改配置。
    默认情况下,文件中已经配置了两组文件夹配置。创建一个新部分来扩展它。
  4. 配置在文件或目录计数超过给定值时通知的阈值。在check_file_count.cfg文件中,配置阈值如下:
    /usr/bin/python check_file_count.py --folder_name=/ --file_count_threshold=20 --directory_count_threshold=10
    /usr/bin/python check_file_count.py --folder_name=/选择 --file_count_threshold=20
  5. 将check_file_count 文件夹复制粘贴到代理的插件目录 /opt/site24x7/monagent/plugins/。在下一次数据收集中,Linux 代理将执行check_file_count .py 文件并为 Site24x7 Web 客户端中的每个配置(在check_file_count .cfg文件中给出)添加一个新的插件监视器。

编辑/修改添加的插件监视器

  1. 成功添加插件监视器后,您可以转到服务器>插件> 单击已添加的插件监视器。
  2. 将鼠标悬停在显示名称旁边的图标上,然后单击编辑
  3. 您可以在“编辑插件监视器”页面 中编辑现有显示名称或将其替换为新名称。
  4. 设置数据收集的轮询间隔,范围从一分钟到一天。
  5. 自定义插件脚本的 脚本执行超时。默认超时值为 30 秒。
  6. 高级配置下,
    • 阈值和可用性:保留默认阈值配置文件或从下拉列表中选择现有的配置文件或使用 (+) 图标添加新配置文件,并在资源超过配置的阈值时收到通知。
    • 通知配置文件:保留默认配置文件或选择现有配置文件或添加新配置文件(使用 + 图标)并配置在停机时需要通知的时间和对象。
    • 用户告警组:选择现有用户组或添加需要在中断期间发出告警的用户告警组。默认情况下将选择用户的管理员组。
    • 与监视器组关联:选择现有的监视器组或创建一个新的监视器组。 
    • 标签:通过应用唯一标签对您帐户中的相关资源进行分类和排序。使用添加标签添加一个新标签。
    • IT 自动化:从下拉列表中选择现有的自动化配置文件或添加自动化。当您想要执行该特定自动化时映射条件。 
    • 第三方集成:将 Site24x7 告警集成到首选第三方服务。
  7. 保存您的更改。

编辑插件模板

添加插件监视器后,可以编辑插件模板。转到管理服务器监视器插件模板配置编辑模板定义(或者) 服务器插件> 单击与模板关联的插件监视器 > 自定义视图。 

继续阅读以了解如何编辑模板 

Python 的示例插件 - 监控 Linux 服务器中的打开文件

#!/usr/bin/python3

import sys,json

#如果对此插件有任何影响更改,请在此处增加插件版本。
PLUGIN_VERSION = "1"

#将此设置为 true 将在将插件数据发布到服务器
HEARTBEAT="true"


PROC_FILE = "/proc/sys/fs/file-nr"

METRIC_UNITS = {'open_files': 'units', 'total_files': 'units'}

def metricCollector():
   data = {}
   data['plugin_version'] = PLUGIN_VERSION
   data['heartbeat_required']=HEARTBEAT 
   try:
        open_nr, free_nr, max = open(PROC_FILE).readline().split("\t")
        open_files = int(open_nr) - int(free_nr)
        data["open_files"] = open_files
        data["total_files"] = int(max)
        data["units"] = METRIC_UNITS
   except Exception as e:
        data["status"] = 0
        data["msg"] = str(e)
        
   return data

if __name__ == "__main__":
      result = metricCollector()
      print(json.dumps(result, indent=4, sort_keys=True))

    • #!/usr/bin/python:在插件文件的顶部提及“shebang 字符”(#!)。这将是执行插件文件的 Python 路径
    • Python 脚本应返回 JSON 数据

    JSON输出

{
   "open_files": 12512,
   "total_files": 1620019,
    "units": {
                   "open_files": "units",
                   "total_files": "units"
                  }
}

Site24x7 仪表板中表示的数据:

Shell 的示例插件 - 监控 Linux 服务器中的文件和目录的数量

#!/bin/bash

##### Site24x7 配置常量#####
PLUGIN_VERSION=1 # 设置使用的插件模板的版本。对于每个插件版本,都会有一组监控的指标。
HEARTBEAT=false # 设置是否在一段时间未收集数据时提醒插件


##### 插件输入常量#####
DIRNAME=。# 文件计数和目录计数的位置
SEARCH_LEVEL=1 # 到内部目录的哪个级别来计算目录和文件


##### 插件代码#####
PLUGIN_OUTPUT=""
PLUGIN_OUTPUT=$PLUGIN_OUTPUT"plugin_version:$PLUGIN_VERSION|"
PLUGIN_OUTPUT=$PLUGIN_OUTPUT"heartbeat_required:$HEARTBEAT|"


##### 获取文件和目录数量的插件逻辑
FILES=`find $DIRNAME -maxdepth $SEARCH_LEVEL -type f | wc -l`
DIRS=`find $DIRNAME/* -maxdepth $SEARCH_LEVEL -type d | 厕所-l`


##### 添加要监控的键和值
##### 将示例键替换为要监控的指标
##### 执行命令并将值存储在变量中
##### 替换带有监控变量的虚拟值
PLUGIN_OUTPUT=$PLUGIN_OUTPUT"file_count:$FILES|"
PLUGIN_OUTPUT=$PLUGIN_OUTPUT"dir_count:$DIRS"


##### 添加要监控的值的单位 #####
UNITS="units:{"
UNITS=$UNITS"file_count-count,"
UNITS=$UNITS"dir_count-count"
UNITS=$UNITS" }"

##### 如果不需要,请删除
PLUGIN_OUTPUT="$PLUGIN_OUTPUT|$UNITS"


##### 打印数据
echo "$PLUGIN_OUTPUT"

  • #!/bin/bash:在插件文件的顶部提及“shebang 字符”(#!)。这意味着脚本应始终使用 bash 运行
  • 输出将有一个键值对,由分隔符 (|) 与另一对分隔 

示例 JSON 输出:

plugin_version:1|heartbeat_required:false|file_count:18|dir_count:26|units:{file_count-count,dir_count-count}

Site24x7 仪表板中表示的数据:

许可

为服务器监视器添加的第一个插件是免费的。之后,每个插件监视器都被视为一个基本监视器。每个插件最多可以有 25 个属性。 

故障排除提示

写插件难?或者你有什么具体要求?不用担心!将其发布在我们的社区论坛中 ,我们将为您完成。

相关文章