需求说明
监控/opt/a.log日志文件,并让其出现Error的时候就报警
操作环境
zabbix客户端和服务端都配置完成并可以正常使用,发送报警邮件配置配好
如何搭建zabbix环境和配置和服务端请戳这里——> 部署zabbix
如何配置报警邮件戳——> 本地用户发送报警邮件 脚本发送报警邮件
操作步骤
- 客户端
①.写一个监控日志的脚本并修改权限
[root@lizihan ~]# vim log.py
#!/usr/bin/env python3
import sys
import re
def prePos(seekfile):
global curpos
try:
cf = open(seekfile)
except IOError:
curpos = 0
return curpos
except FileNotFoundError:
curpos = 0
return curpos
else:
try:
curpos = int(cf.readline().strip())
except ValueError:
curpos = 0
cf.close()
return curpos
cf.close()
return curpos
def lastPos(filename):
with open(filename) as lfile:
if lfile.readline():
lfile.seek(0,2)
else:
return 0
lastPos = lfile.tell()
return lastPos
def getSeekFile():
try:
seekfile = sys.argv[2]
except IndexError:
seekfile = '/tmp/logseek'
return seekfile
def getKey():
try:
tagKey = str(sys.argv[3])
except IndexError:
tagKey = 'Error'
return tagKey
def getResult(filename,seekfile,tagkey):
destPos = prePos(seekfile)
curPos = lastPos(filename)
if curPos < destPos:
curpos = 0
try:
f = open(filename)
except IOError:
print('Could not open file: %s' % filename)
except FileNotFoundError:
print('Could not open file: %s' % filename)
else:
f.seek(destPos)
while curPos != 0 and f.tell() < curPos:
rresult = f.readline().strip()
global result
if re.search(tagkey, rresult):
result = 1
break
else:
result = 0
with open(seekfile,'w') as sf:
sf.write(str(curPos))
finally:
f.close()
return result
if __name__ == "__main__":
result = 0
curpos = 0
tagkey = getKey()
seekfile = getSeekFile()
result = getResult(sys.argv[1],seekfile,tagkey)
print(result)
[root@lizihan ~]# chmod +x /scripts/log.py
②.创建存放脚本的目录,并修改配置文件里面脚本的位置
[root@lizihan ~]# mkdir /scripts/
[root@lizihan ~]# chown -R zabbix.zabbix /scripts
[root@lizihan ~]# cp log.py /scripts/
[root@lizihan ~]# vim /etc/zabbix/zabbix_agentd.conf
UnsafeUserParameters=1 //修改为1
UserParameter=check_log,/usr/bin/python /scripts/log.py /opt/a.log /opt/logseek Error
//第一个参数代表要监控的日志文件
//第二个参数代表每次查看完日志文件缓存看到哪里了的日志文件
//第三个参数代表监控的关键字
③.修改/opt/的目录权限
[root@lizihan ~]# chown zabbix.zabbix /opt/
④.在服务端测试一下脚本
[root@zabbix ~]# zabbix_get -s 172.16.11.12 -k check_log
0
- web界面
创建监控项
添加触发器
添加动作
到这就配置完成可以测试了
- 客户端
①.在a.log里面添加内容,先不添加关键字,我们会发现记录查看到哪里的文件没有变化,监控没有报警
[root@lizihan ~]# cat >> a.log << EOF
> error
> a
> b
> c
> EOF
[root@lizihan ~]# cat /opt/logseek
0[root@lizihan ~]#
②.添加关键字内容,可以发现查看到哪里的日志文件有变化,监控也报警了,邮件也发送了
[root@lizihan ~]# echo 'Error' >> /opt/a.log
[root@lizihan ~]# cat /opt/logseek
6[root@lizihan ~]#