为 Linux 编写插件
用 Python 或 Shell 编写您自己的插件,并以您想要的方式监控您需要的数据。为各个属性 设置阈值, 并在超出设置值时发出告警
- 插件输出格式
- 编写插件的步骤
- 单个插件脚本中的多个配置
- 编辑/修改添加的插件监视器
- 编辑插件模板
- Python 的示例插件 - 监控Linux服务器中打开的文件
- Shell 的示例插件 -- 监控 Linux 服务器中的文件和目录的数量
- 许可
- 故障排除提示
插件输出格式
插件脚本应该返回一个 JSON 对象。仅提供一级 JSON 数据作为键值对。要发布到 Site24x7 服务器的 JSON 数据应采用以下格式:
{
"plugin_version" : 1,
"heartbeat_required" : true,
"cpu" : 42.7,
"memory" : 65.8,
"network" : 156,
"units" :
{
"cpu" : "%" ,
"memory" : "%" ,
"network" : "MB"
}
}
"Key 1" : {"obj 1" : "value 1", "obj 2" : "value 2" ...},
"Key 2" : ["obj 1", "obj 2", .. ],
...
}
- plugin_version: 表示插件的版本号
- 这是必填字段
- 当 plugin_version 发生任何变化时,Site24x7 数据中心会更新模板并为该版本创建一个新模板
- 默认值为 1。如果对插件进行任何更改,用户必须将 plugin_version 增加 1
- plugin_version 只能是整数。例如 1,2,3...
- units: 监控属性的单位
- 这是个可选的选项
- 它是一个键值对,键是插件中监控的属性的名称,值是它们各自的单位s
- 例如,在监测插件单元中的 cpu 利用率百分比时:{'cpu':'%'}
units : {'cpu':'%'}
- msg: 监视器的消息
- 这是个可选的选项
- 如果监视器停机,配置的错误消息将显示在 Site24x7 Web 客户端中
- 该属性应与数据属性平行放置
编写插件的步骤
- 在您的服务器中下载并安装最新版本的 Site24x7 Linux 代理。
- 转到服务器>插件集成>写插件。
- 从任何可用格式下载示例代码: Shell 或 Python 脚本。
- 在下载的示例脚本中,找到名为 getData( ) 的方法并使用您自己的逻辑对其进行编辑以返回所需的性能数据。
- 在示例代码中,请不要删除#Mandatory Fields。
- 您可以通过在终端中手动执行来验证插件脚本的输出。示例:“python mysql.py”
- 在 /opt/site24x7/monagent/plugins/<foldername> 中创建一个文件夹,并将您的插件脚本文件放在此文件夹中。 确保文件名和文件夹名相同。例如,如果您正在为 Apache 编写插件,则插件脚本文件应为apache.py,文件夹名称应为 Apache。
对于Docker 代理,通过执行以下命令转到相应的容器:
docker exec -it site24x7-agent /bin/bash然后,在 /opt/site24x7/monagent/plugins/<foldername> 中创建一个文件夹,并将您的插件脚本文件放在此文件夹中。
在下一次代理数据收集中,插件将被发现并标记以进行监控。您可以在Server> Plugin Integrations下看到监视器。插件监视器也将列在相应服务器监视器的插件选项卡下(服务器>服务器监视器>服务器> 单击所需的服务器监视器 >插件)。您还可以设置阈值配置文件,并在超过配置值时收到告警。
单个插件脚本中的多个配置
当有多个配置用于执行一个插件时,为每个配置(具有不同的名称)创建一个新的监视器会变得既费时又费力。为了解决这个问题,Site24x7 插件监控支持使用单个插件脚本执行多个配置。
考虑在您的环境中运行多个 MySQL 实例,例如 production_master和 production_slave 。您可以使用单个插件脚本文件定义所有配置并执行它们,而不是使用多个 MySQL 插件。在开始之前,请确保安装了运行插件所需的依赖模块。然后,按照以下步骤操作:
- 创建一个文件夹mysql 并将插件脚本文件mysql.py放在文件夹中。
- 创建一个以插件命名的配置文件 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' - 在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 - 通过执行以下命令检查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=testEnsure the MySQL performance metrics are returned as JSON output. If any error occurs, fix the same and proceed to the next step. - 将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 并输入新密码。在下一次连续的数据收集期间,代理将检测配置更改,加密新值,并相应地更新文件。
考虑监控多个文件夹的文件或目录计数。您可以定义所有配置并使用单个插件脚本文件执行所有配置,而不是使用多个插件。为此,
- 创建一个文件夹check_file_count。
- 从我们的GitHub 存储库下载文件check_file_count.cfg和check_file_count.py并将其放在check_file_count文件夹下。
- 编辑check_file_count.cfg 文件以相应地更改配置。
默认情况下,文件中已经配置了两组文件夹配置。创建一个新部分来扩展它。
- 配置在文件或目录计数超过给定值时通知的阈值。在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 - 将check_file_count 文件夹复制粘贴到代理的插件目录 /opt/site24x7/monagent/plugins/。在下一次数据收集中,Linux 代理将执行check_file_count .py 文件并为 Site24x7 Web 客户端中的每个配置(在check_file_count .cfg文件中给出)添加一个新的插件监视器。
编辑/修改添加的插件监视器
- 成功添加插件监视器后,您可以转到服务器>插件> 单击已添加的插件监视器。
- 将鼠标悬停在显示名称旁边的图标上,然后单击编辑。
- 您可以在“编辑插件监视器”页面 中编辑现有显示名称或将其替换为新名称。
- 设置数据收集的轮询间隔,范围从一分钟到一天。
- 自定义插件脚本的 脚本执行超时。默认超时值为 30 秒。
- 在高级配置下,
- 阈值和可用性:保留默认阈值配置文件或从下拉列表中选择现有的配置文件或使用 (+) 图标添加新配置文件,并在资源超过配置的阈值时收到通知。
- 通知配置文件:保留默认配置文件或选择现有配置文件或添加新配置文件(使用 + 图标)并配置在停机时需要通知的时间和对象。
- 用户告警组:选择现有用户组或添加需要在中断期间发出告警的用户告警组。默认情况下将选择用户的管理员组。
- 与监视器组关联:选择现有的监视器组或创建一个新的监视器组。
- 标签:通过应用唯一标签对您帐户中的相关资源进行分类和排序。使用添加标签添加一个新标签。
- IT 自动化:从下拉列表中选择现有的自动化配置文件或添加自动化。当您想要执行该特定自动化时映射条件。
- 第三方集成:将 Site24x7 告警集成到首选第三方服务。
- 保存您的更改。
编辑插件模板
添加插件监视器后,可以编辑插件模板。转到管理> 服务器监视器> 插件模板配置> 编辑模板定义(或者) 服务器> 插件> 单击与模板关联的插件监视器 > 自定义视图。
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))
"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"
示例 JSON 输出:
plugin_version:1|heartbeat_required:false|file_count:18|dir_count:26|units:{file_count-count,dir_count-count}
Site24x7 仪表板中表示的数据:
许可
为服务器监视器添加的第一个插件是免费的。之后,每个插件监视器都被视为一个基本监视器。每个插件最多可以有 25 个属性。
故障排除提示
- Linux 插件未添加到我的 Site24x7 帐户的可能原因
- 在 Site24x7 中配置 Linux 插件的先决条件
- 插件的错误处理消息
- 调试插件监视器
- 如果您的插件处于挂起状态,可能要执行的步骤
- 如果我从 Site24x7 Web 客户端删除插件监视器会怎样?
- 在 Windows 服务器中运行 python 插件脚本
相关文章