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

news2024/10/6 22:28:37


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


目录

  • 1 监控操作系统日志
  • 2 监控业务系统日志
    • 具体要求:
    • 分析:
    • 操作:
  • 3 监控日志文件大小
    • (1)在被管主机当中安装agent
    • (2)在以下zabbix官网中下载对应操作系统的agent包
    • (3)将下载的agent包上传到操作系统,解压缩,并运行安装命令
    • (4) 在agent配置文件添加自定义键值
    • (5) 到zabbix server界面添加监控项
    • (6)查看最新数据
  • 4 多行日志监控- Python脚本优化


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多行日志监控

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第五天(渐变)

文章目录笔记第五章 ⻚⾯布局5.1弹性盒⼦练习题目&#xff08;使用实现学校官网的首页面&#xff09;效果截图项目反思&#xff1a;笔记 其他效果 渐变<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><s…

「JVS低代码开发平台」设备维保到期自动提醒配置介绍

配置需求 构建一个 对设备管理的界面&#xff0c;在新增设备时&#xff0c;能录入设备到期的时间&#xff0c;发起维保后&#xff0c;能修改下次设备到期的时间&#xff0c;维保的状态系统自动根据当前时间和维保到期时间&#xff0c;自动调整。 整体配置思路 1、配置设备管理…

leecode#x平方根#爬楼梯

题目描述&#xff1a; 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0…

stm32cubemx hal学习记录:FreeRTOS信号量

一、基本配置 1、配置RCC、USART1、时钟84MHz 2、配置SYS&#xff0c;将Timebase Source修改为除滴答定时器外的其他定时器。 3、初始化LED的两个引脚、两个按键引脚 4、开启FreeRTOS&#xff0c;v1与v2版本不同&#xff0c;一般选用v1即可 5、创建二值信号量Binary Semap…

IPv6通信实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 实验命令指南 1&#xff09;配置ip地址 在r2上&#xff1a; 在r3上&#xff1a;…

TDengine

目录1、在linux上安装服务端2、在本地安装客户端3、通过Idea连接服务端4、控制台基本使用5、流式计算1、在linux上安装服务端 1、首先下载服务端&#xff0c;我下载的是&#xff1a; TDengine-server-2.6.0.30-Linux-x64.tar.gz 下载地址 2、下载过后传到虚拟机。并解压 3、运…

当有一天TCP/IP没有了TCP

前几天我在给NetDAM可靠传输想更好的算法&#xff0c;发现我自己也傻x了&#xff0c;最根本的原因是要抛弃滑动窗口呀&#xff0c;解耦保序才是关键. 本来想明年愚人节写如果有一天TCP/IP没了IP&#xff0c;那么只能TCP over RDMA了...但是也不排除为了兼容以太网只能TCP over…

C语言中,可变参数函数调用的过程?!

以下是一位同学&#xff0c;发送给我的问题。 如下图&#xff0c;是学生在学习完指针章节后&#xff0c;写的测试代码。 他的疑问是&#xff1a;pa为什么指向a[3]的地址啊&#xff1f; 查看程序的输出后&#xff0c;知道他想问的是&#xff1a;为什么第二个printf语句输出的分…

嵌入式开发:从C语言成功过渡的3个技巧

当谈到嵌入式系统编程语言时&#xff0c;毫无疑问&#xff0c;C是主导语言。在过去的几十年里&#xff0c;有无数次尝试改变&#xff0c;但当尘埃落定时&#xff0c;C编程语言似乎永远是屹立不倒的语言。近年来&#xff0c;关于用其他语言取代C语言的争论再次出现。无论潜在的篡…

A-Level经济例题解析及练习Analysis of trade

今日知识点&#xff1a;Analysis of trade 例题Without trade, PD $3000, Q 400; in world markets, PW $1500 Under free trade, how many TVs will the country import or export? Identify consumer surplus, producer surplus, and total surplus without trade, and w…

Golang标准库限流器rate使用

限流就是限制系统的输入和输出流量来达到保护系统的目的&#xff0c;限流在实际场景中应用十分广泛&#xff0c;尤其在高并发场景下&#xff0c;为了保证系统的可以用性&#xff0c;我们需要采取一些限流措施降级&#xff0c;一旦达到限制的阈值&#xff0c;就需要限制流量并采…

Vue-admin-template新增TagViews标签页功能,附完整代码

前言 vue-admin-template里面本身是没有TagViews标签页的&#xff0c;只有完整版的vue-element-admin才有&#xff0c;翻找网上的其他教程&#xff0c;要么代码不完整&#xff0c;要么有bug&#xff0c;本篇文章就教大家如何在vue-admin-template的基础上新增TagViews 步骤 …

分布式应用kafka + EFLFK集群部署

前言 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xff09;…

骨传导耳机优缺点有哪些?骨传导耳机科普与推荐

骨传导耳机是一种可以开放耳朵的耳机&#xff0c;所以对于耳朵比较敏感的人来说&#xff0c;这种耳机是比较友好的&#xff0c;同时因为它的佩戴方式&#xff0c;在运动圈内也很受欢迎。只不过骨传导耳机是一种新兴的耳机&#xff0c;所以很多人并不太了解它的优缺点。 我作为…

书店销售管理系统----数据库原理及应用综合实验

枯木逢春犹再发&#xff0c;人无两度再少年&#x1f342; 系统主要模块如下&#xff1a; &#xff08;1&#xff09; 书店销售管理系统设计与实现—图书入库管理及查询统计 图书入库管理&#xff1a;维护入库图书信息&#xff08;如图书编号、书名、作者、价格、图书分类、出版…

vue-element-admin后台前端解决方案(基于 vue 和 element-ui)

vue-element-admin后台前端解决方案参考文档下载安装目录结构参考文档 vue-element-admin官网&#xff0c;更多详细内容可以查看社区学习文档。 下载安装 可以把 vue-element-admin当做工具箱或者集成方案仓库&#xff0c;在 vue-admin-template 的基础上进行二次开发&#…

Java 8 给我们更好的消灭空指针解决方案

前言 大家好&#xff0c;在平时的业务开发中&#xff0c;空指针是我们经常遇到的问题&#xff0c; 他可能会导致我们的流程无法正常进行或者一些意外情况的发生。 这就是我们需要避免空指针的原因&#xff0c;那我们有哪些方式去解决这个问题呢&#xff1f; 空指针场景 包装…

Linux系统安装DB2数据库的详细步骤

1、DB2数据库的安装 一、将DB2的安装介质上传至/home目录&#xff0c;并解压&#xff1a; tar –zxvf v9.5fp3_linuxx64_server.tar.gz 二、执行LANGC 三、进入解压后的server目录&#xff08;cd server/&#xff09;&#xff0c;执行./db2setup,步骤如下&#xff1a; # cd…

数据结构-线性表与链性表(二)

目录 一、学习背景 二、简绍 三、线性表 一、什么是线性表 二、操作 1、插入 2、删除 3、查询 三、数组应用案例中源码分析 1、插入 2、删除 3、get与set 4、扩容 二、单向链表 单向链表结构 循环链表 三、数组和链表比较 1、时间复杂度角度 2、其他维度 3、…

【JS】原生js实现矩形框的绘制/拖动/缩放

1、要点及功能描述 通过js监听mouse事件来实现矩形框的绘制&#xff0c;再通过区分点击的是边角还是其他位置来实现矩形框的缩放和拖动&#xff0c;并且在拖动和缩放时&#xff0c;都做了边界限制&#xff0c;当缩放或拖动 到边界时&#xff0c;就不能继续拉缩放拖动了。当然在…