zabbix监控日志文件

需求说明

监控/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 ~]# 

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43154788/article/details/83068186