使用zabbix监测作业运行
1. 概述
本片博客主要介绍如何实现zabbix监测作业运行和报警
2. 脚本编辑部分
2.1 背景介绍
在年中的时候,本人基于对作业调度命令bjobs的分析,通过python语言编写了一个jobcheck的作业检测脚本。
该脚本主要通过监测作业的输出文件是否更新,输出文件是否含有常见的错误信息来判断作业是否异常。
前期的操作是日常检查,手动确认,然后通知相关人员确认和处理。
今天研究了一下利用Zabbix的LLD自动发现规则,来实现作业的自动监测和报警。通过对zabbix的自动发现LLD研究,
2.2 生成LLD检查对象
这里具体指的是利用python脚本,来生成LLD的监测对象,即json格式的对象
脚本命名为:discover_job.py。源码如下:
#!/usr/bin/env python2
# -*- coding:UTF-8 -*-
# zabbix LLD scripts for sunway jobs running.
import subprocess
import json
def returnDict(joblist):
j = []
for job in joblist:
j_d = {"{#JOBID}":job}
j.append(j_d)
return j
bjobscmd = "bjobs -r -q q_sw_share|egrep '^[0-9]'|awk '{print $1}'"
bjobsrtn = subprocess.Popen(bjobscmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
if bjobsrtn.returncode is None:
jobidlist = bjobsrtn.stdout.read().strip('\n').split('\n')
data = {"data":returnDict(jobidlist)}
print(json.dumps(data))执行上述的脚本,生成如下的结果
{"data": [{"{#JOBID}": "46402467"}, {"{#JOBID}": "46403257"}, {"{#JOBID}": "46409131"}, {"{#JOBID}": "46409533"}, {"{#JOBID}": "46409660"}, {"{#JOBID}": "46412614"}, {"{#JOBID}": "46415348"}, {"{#JOBID}": "46415815"}, {"{#JOBID}": "46419212"}, {"{#JOBID}": "46419538"}, {"{#JOBID}": "46419584"}, {"{#JOBID}": "46419596"}, {"{#JOBID}": "46420331"}, {"{#JOBID}": "46421979"}, {"{#JOBID}": "46425218"}, {"{#JOBID}": "46425219"}, {"{#JOBID}": "46425636"}, {"{#JOBID}": "46425863"}, {"{#JOBID}": "46426011"}, {"{#JOBID}": "46426058"}, {"{#JOBID}": "46426069"}]}说明
这里只是生成了一个宏(zabbix里面的概念),实际上可以通过修改代码,生成更多的宏,比如作业用户账号和单位信息
2.3 创建监测脚本
这里的作业监测脚本,主要是修改了之前的jobcheck脚本的输出内容。对正常的作业,输入True,异常的作业,输出False
3. zabbix配置部分
3.1 创建模板
首先在【配置】-【模板】中,创建“新模板”,命名为“作业监测”,群组选择“集群作业调度”,因为这个脚本主要放在“集群作业调度”这台机器上
3.2 配置模板
点击“作业监测”模板,进入设置。
首先设置“自动发现规则“,然后“创建发现规则”,命名一个“getjob”的自动发现规则。
getjob里面的键值,是自定义的jobcheck.getjob,更新时间为60s,资源周期不足1d(表示发现的监控项目消失后,多久删除)。
注意:过滤器选择宏{#JOBID},点击更新
然后点击“监控项原型”,创建“作业号$1",键值为"jobcheck.checkjob[{#JOBID}],更新时间间隔为60s,历史数据为7d
然后点击”触发器类型“,配置触发条件等
3.3 配置主机
主要在”集群作业调度“节点上,链接上述模板
浙公网安备 33010602011771号