Zabbix日志监控插件
#!/usr/bin/env python
# coding:utf-8
import re
import os
import sys
import logging
logging.basicConfig(level=logging.DEBUG, # 定义输出到文件的log级别,大于此级别的都被输出
format='%(asctime)s %(filename)s : %(levelname)s %(message)s', # 定义输出log的格式
datefmt='%Y-%m-%d %H:%M:%S', # 时间
filename='/etc/zabbix/scripts/check_log/check.log', # log文件名
filemode='a+')
logfile=sys.argv[1]
keyword=sys.argv[2]
statfile='/tmp/logfilestat.txt'
logging.info("======================================================Start======================================================")
logging.info('log_file: {0}, keyword: {1} '.format(logfile, keyword))
try:
f = open(statfile, 'r')
# 获取文件读取的offset
offset = f.readlines()
f.close()
except Exception,e:
logging.info('{0} file not exits,create stat file!'.format(statfile))
# 如果是第一次使用,文件读取状态不存在,这重置读取标志为空
offset = []
alter = []
with open(statfile, 'w+') as offwr:
with open(logfile, 'r') as f:
# 如果读取状态文件,为空,则重置为从头读取
if len(offset) == 0:
f.seek(0, 2)
elif len(offset) == 2:
# 判断文件是否为新文件
# 文件没有改变,则从上次读取的位置继续读取
if int(offset[1]) == int(os.stat(logfile)[1]):
logging.info("start_offset: {0}".format(offset[0].strip()))
f.seek(int(offset[0].strip()))
else:
# 如果文件改变了,则从头开始去读
logging.info("start_offset: 0")
f.seek(0)
for i in f.readlines():
# 将查询结果用0和1存入list中
if re.search(str(keyword), i.strip()):
logging.error("Find {0} the key!!".format(keyword))
alter.append(0)
else:
alter.append(1)
# 将文件读取位置和inode值写入状态文件
offwr.write(str(f.tell()))
offwr.write("\n")
offwr.write(str(os.stat(logfile)[1]))
f.close()
offwr.close()
logging.info("======================================================End======================================================")
# set是去重,如果list中包含1和2,则长度为2,应当报警
if len(set(alter)) == 1:
print 100
else:
print 200
Zabbix日志监控插件的更多相关文章
- zabbix日志监控
一般情况下,日志最先反映出应用当前的问题,在海量日志里面找到我们异常记录,例如监控系统日志.nginx.Apache.业务日志,然后记录下来,并且根据情况报警. 1.日志监控项介绍 最主要的是监控日志 ...
- zabbix oracle监控插件orabbix部署安装
1,下载orabbix插件包(插件包同时满足在大部分POSIX-linux及unix和大部分版本的windows下运行,玩转类似但不等同于Tomcat) wget http://www.smartma ...
- zabbix通过percona插件监控mysql
percona zabbix mysql-plugin是percona发布的一个使用zabbix监控mysql数据库的工具,这款工具比zabbix自带的监控模板要强大的多,毕竟percona是Mysq ...
- 转 zabbix debug and zabbix使用percona插件监控mysql
########## https://www.cnblogs.com/keithtt/p/8542987.html zabbix使用percona插件监控mysql 1.添加percona仓库. ...
- zabbix通过第三方插件percona监控mysql数据库
zabbix通过第三方插件percona监控mysql数据库 ...
- 24 Zabbix系统配置日志监控告警--关键字触发
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 24 Zabbix系统配置日志监控告警--关键字触发 trapper是被监控主机主动发送数据给za ...
- 采用link方式解决zabbix对于备份监控和ORACLE日志监控由于路径不统一的问题
#对于备份监控和ORACLE日志监控由于路径不统一,我们可以采用link的方式如:#ln -s 原路径 新路径(/zabbix/logs)#新路径统一放在/zabbix/logs下具体看模板指定. # ...
- 015.Zabbix的日志监控配置
一 日志监控概述 Zabbix可用于集中监控和分析日志,支持有日志轮询的日志监控分析.当日志中出现相关警告信息(如警告.报错等),可以发送通知给用户.日志监控功能,必须满足以下两个条件: Zabbix ...
- zabbix的日志监控
前提条件是该日志文件对于启动zabbix agent进程的用户开启了可读权限,而且该日志的路径对该用户开方x权限,让能取到这个日志文件 第一个参数可以不用引号,前提是zabbix用户可以进入文件路径, ...
随机推荐
- Kubernetes+Docker+Istio 容器云实践
随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云 ...
- HDU - 1512 Monkey King
Problem Description Once in a forest, there lived N aggressive monkeys. At the beginning, they each ...
- CONVERT用法指南,时间字段截取方法
语法: CONVERT(VARCHAR(7),<字段名称>,121) 时间转字符:select CONVERT(VARCHAR(7),dyxq,121),* from TBYPKC03-- ...
- strcpy()、strncpy()和memcpy()对比
strcpy()函数声明:char *strcpy(char *dest, const char *src)返回参数:指向最终的目标字符串 dest 的指针.注意事项:只能复制char类型的字符数组, ...
- Kali升级2018&&2019
0X01修改更新源 vim /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-f ...
- Express框架的整体感知
Express是基于node.js平台的快速.开放.极简的web开放框架,它的地位与作用有点类似于前端的jquery框架.它的英文官网地址为 http://expressjs.com,其对应的中文官网 ...
- 单调队列与DP
算是一个总结吧! 先来一个模板: TYVJ 1305 最大子序和 题目描述 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m ...
- php数组怎么根据其中的一个值进行排序?解决方法
有一个数组如下 我想对其进行一个排序,按照其“sort”的值的大小进行排序,3->4->7. 解决方法如下: 1.首先介绍php的两个方法 方法一:array_column() 返回输入数 ...
- 概率图模型(PGM):贝叶斯网(Bayesian network)初探
1. 从贝叶斯方法(思想)说起 - 我对世界的看法随世界变化而随时变化 用一句话概括贝叶斯方法创始人Thomas Bayes的观点就是:任何时候,我对世界总有一个主观的先验判断,但是这个判断会随着世界 ...
- python学习-正则表达式(十)
1.查看re模块的全部属性和函数 >>>import re,pprint >>>pprint.pprint(re.__all__) ['match', 'fullm ...