zabbix日志监控:操作系统业务系统文件大小多行日志

Posted 正月十六工作室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix日志监控:操作系统业务系统文件大小多行日志相关的知识,希望对你有一定的参考价值。


zabbix日志监控:操作系统、业务系统、文件大小、多行日志


目录


1 监控操作系统日志

监控Linux操作系统日志:以采集服务器的/var/VRTSvcs/log/engine_A.log举例:前提:采集服务器已部署agent,并且被监控的操作系统日志文件要赋予o+r权限

(1)确认采集服务器的监控状态

(2)为采集服务器制作自定义监控日志文件的模板

(3)在配置->主机位置填写宏,然后选择更新

(4)在监测中->最新数据查看结果

(5)可以在被监控的日志文件添加一个带有“error”的内容,测试监控日志是否成功。


2 监控业务系统日志

利用zabbix agent监控windows系统下的应用自增日志且按需配置关键字告警

场景概览:公司运维部门使用自建zabbix平台对公司某业务系统进行了监控。近段时间,该业务系统同事反映某应用平台提供服务时,经常发生应用页面404的情况,需要对该情况及时发现,并且能保留历史发生记录,希望运维人员协助他们进行此类日志监控。

具体要求:

(1) 日志文件以自增的方式产生,具有固定格式如ITSM-2022-09-26.log

(2) 需要对新增日志监控频率达到每分钟一次

(3)平台产生日志内容为 windows简体中文编码

分析:

(1)日志文件名每日更新,无法使用常用监控项log[*]

(2)日志文件产生的路径固定,且该路径下只有日志文件,文件名格式固定为ITSM-XXXX-XX-XX.log

(3)日志文件编码为windows简体中文,可预设为GB2312编码格式

操作:

(1) 新建模板

(2)创建监控项

(3) 主机关联此模板,然后填写宏,填入路径参数及关键字参数

(4) 等待监控数据

(5)如有需要,可对监控项配置触发器进行关键字告警


3 监控日志文件大小

下面将为大家讲解如何使用Zabbix创建自定义键值监控项,以监控系统日志文件大小。

(1)在被管主机当中安装agent

(2)在以下zabbix官网中下载对应操作系统的agent包

点击此处跳转

(3)将下载的agent包上传到操作系统,解压缩,并运行安装命令

① 解压agent包

[root@localhost sbin]# tar xvf zabbix_agent-6.2.2-linux-3.0-amd64-static.tar.gz

② 编写配置文件,修改参数

[root@localhost sbin]# vim /root/conf/zabbix_agentd.conf

其中参数含义:


Server=192.168.109.181 \\#zabbix server ip

ServerActive=192.168.109.181 \\# zabbix server ip

Hostname=192.168.109.149 \\#本主机名

HostMetadataItem=system.uname \\#获取自身操作系统参数信息

AllowRoot=1 \\#运行以root用户运行agent

③ 运行启动命令

[root@localhost sbin]\\# /root/sbin/zabbix_agentd -c /root/conf/zabbix_agentd.conf

④ 使用ss -tnl检测10050端口是否存在,若存在即安装成功

(4) 在agent配置文件添加自定义键值

① 在agent配置文件添加自定义键值

`[root@localhost sbin]\\# vim /root/conf/zabbix_agentd.conf`

其中参数含义:

test #自定义键值的名称

du -sh /var/log/messages|awk ‘print $1’ #获取数据所运行的命令或者是脚本,这里是命令

② 重启agent

[root@localhost sbin]\\# ps -ef\\|grep zabbix

[root@localhost sbin]\\# kill 11881

[root@localhost sbin]\\# /root/sbin/zabbix_agentd -c /root/conf/zabbix_agentd.conf

注:其他部署方式:如何快速部署zabbix-agent客户端

(5) 到zabbix server界面添加监控项

① 点击“配置”—> “主机” ,查询刚刚上线的被管节点的IP,最后点击监控项

② 点击“创建监控项”

“名称” 可以自定义

“类型” 选择zabbix客户端或者zabbix客户端(主动式)

“键值” 填写上面我们在agent配置文件填写的自定义键值的名称

最后点击“添加”

(6)查看最新数据

① 点击 “检测”à “最新数据” à 筛选刚刚添加的被管节点以及监控项

② 如图,Zabbix监控系统文件日志大小已成功实现


4 多行日志监控- Python脚本优化

通过Python对Zabbix进行日志监控,要求记录脚本日志位置避免出现重复告警,关键字的正则匹配和支持多关键字查询。

通过Python脚本实现日志监控,要求

(1)记录脚本检查日志位置,避免下次触发脚本的时候出现重复告警
(2)关键字匹配支持正则
(3)支持多个关键字查询,例如第一个关键字匹配到当之后在这个关键字的下N行再去匹配第二个关键字

具体传参格式:

python3 npar.py /u03/z.txt '(ORA-\\|REEOR),(04030\\|02011)' 2

第一个参数是日志路径,第二个参数是关键字,第三个参数为匹配到第一个表达式这种的关键字后再去地 N(2)行去匹配第二个关键词(04030|02011),具体脚本实现如下:

import os
import sys
logtxt="logtxt.txt"
def read_txt(files,start_line):
    data =[]
    data.append("")
    with open(str(files)+"", "r", encoding='UTF-8') as f:
        for line in f.readlines():
           line = line.strip('\\n')  #去掉列表中每一个元素的换行符
           data.append(line)
        #记录本次的行数
        wirte_log(len(data)-1)
    if len(data)>start_line:
       return data[start_line-1:]
    else:
        print("开始行数大于文本文件总行数!")
def wirte_log(lines):
    global logtxt
    with open(logtxt,"w") as file:   #”w"代表着每次运行都覆盖内容
            file.write(str(lines))
def read_log():
    global logtxt
    if not os.path.exists(logtxt):
         with open(logtxt,"w") as file:   #”w"代表着每次运行都覆盖内容
            file.write(str(1))
    with open(logtxt+"", "r", encoding='UTF-8') as f:
         s_lines = f.readlines()
    print("从第"+str(s_lines[0])+"行开始")
    return s_lines[0]
def deal_read_log(files, keyword, interval_line):
    keywords = keyword.replace("(","").replace(")","").replace("'","").replace('"','"').split(',')
    start_keywords=keywords[0].split("|")
    end_keywords = keywords[1].split("|")
    start_line=read_log()
    lines_data = read_txt(files,int(start_line))
    for_line=1
    while(for_line<len(lines_data)):
        #print(for_line)
        #print(lines_data[for_line])
        #if end_keywords in lines_data[for_line]:
        #      print(lines_data[for_line])
        #      print("-------------------")
        #      for_line = for_line+1
        #else:
            isexist = 0
            for sk in start_keywords:
                if sk in lines_data[for_line]:
                    isexist=1
                    break;
            if isexist==1:
            #if start_keywords[0] in lines_data[for_line] or start_keywords[1] in lines_data[for_line]:
                #当前行有end_keywords
                isexist2 = 0
                for sk in end_keywords:
                    if sk in lines_data[for_line]:
                        isexist2=1
                        break;
                if isexist2==1:
                        #print("行数="+str(start_line-1+for_line)+"-"+str(start_line-1+for_line))
                        print(lines_data[for_line])
                else:
                    #当前行没有end_keywords。往下interval_line行去寻找
                    #标记当前行数
                    flag_line = for_line
                    count=1
                    for_line = for_line+1
                    while(for_line<len(lines_data)):
                        isexist3 = 0
                        for sk in end_keywords:
                            if sk in lines_data[for_line]:
                                isexist3=1
                                break;
                        if isexist3==1:
                             #print("行数="+str(start_line-1+flag_line)+"-"+str(start_line-1+for_line))
                             for prin in range(flag_line,for_line+1):
                                  print(lines_data[prin])
                             break;
                        for_line = for_line+1
                        if count==int(interval_line):
                            break;
                        count = count+1
                    for_line = for_line-1  
            for_line = for_line+1
if __name__ == '__main__':
    files = sys.argv[1]
    if  '.log' in files:
      logtxt=files.replace(".log","_log.txt")
    else:
         logtxt=files.replace(".txt","_log.txt")
    #files="ora.txt"
    keywords = sys.argv[2]
    #keywords="'((04030|04000),ORA-)'"
    # 上下关联行数
    interval_line = int(sys.argv[3])
    #interval_line=10
deal_read_log(files, keywords, interval_line)

接下来就是添加监控了。

在agent的conf 文件里面添加UserParameter。

以上就是这一期zabbix日志监控的全部内容,谢谢观看。


排版: 玩具熊
初审: 王乐平
复审: 二月二

本文内容来源乐维社区文章,本工作室二次编辑,如有侵权,请联系我们。
参考来源:
zabbix监控操作系统日志
zabbix6.0监控业务日志
Zabbix技术分享——使用Zabbix监控系统日志文件大小
Python脚本优化-Zabbix多行日志监控

以上是关于zabbix日志监控:操作系统业务系统文件大小多行日志的主要内容,如果未能解决你的问题,请参考以下文章

Python脚本优化-----Zabbix多行日志监控

zabbix学习

linux系统安装zabbix监控之原理和配置需求

如何用好 Zabbix 的日志监控功能?

日志文件报警监控脚本(可用于zabbix监控文件)测试中...

运维监控 zabbix可以做哪些监控