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