Linux 日志监控与报警系统实操

1.日志监控基础

  • 监控文件变化

    • tail -f:实时查看文件末尾的变化。

    • tail -n:指定查看最近的 N 行。

  • 结合管道过滤关键内容

    • 配合grep 提取特定关键字。

例子

tail -f /var/log/syslog | grep "error"

2.日志文件滚动

  • 了解日志文件的滚动机制(如日志按大小或时间切割)。

  • 使用logrotate 进行日志管理。

3.实时报警机制

  • 结合awk 提取特定模式并触发报警。

  • 邮件报警

    • 使用mail 或sendmail 命令发送邮件。

  • 终端提示

    • 使用echo 和notify-send

例子

tail -f application.log | awk '/ERROR/ {print "Error detected: "$0}'

4.复杂监控场景

  • 多关键字匹配与分级报警。

  • 监控多文件并聚合结果。


实验例子

实验 1: 简单日志监控

目标:实时监控一个日志文件并提取含有 "ERROR" 的行。

实验代码

#!/bin/bashlogfile="application.log"if [[ ! -f $logfile ]]; thenecho "Log file not found: $logfile"exit 1
fiecho "Monitoring $logfile for 'ERROR'..."
tail -f $logfile | grep "ERROR"

实验 2: 动态监控日志并发送报警

目标:检测日志文件中的错误信息,并在终端显示报警。

实验代码

#!/bin/bashlogfile="application.log"if [[ ! -f $logfile ]]; thenecho "Log file not found: $logfile"exit 1
fimonitor_log() {tail -f $logfile | while read line; doif echo "$line" | grep -q "ERROR"; thenecho "[ALERT] $(date): $line"fidone
}monitor_log

实验 3: 日志关键字分级报警

目标:根据日志内容分类报警,如 "ERROR" 触发高优先级报警,"WARNING" 触发普通报警。

实验代码

#!/bin/bashlogfile="application.log"if [[ ! -f $logfile ]]; thenecho "Log file not found: $logfile"exit 1
fitail -f $logfile | while read line; doif echo "$line" | grep -q "ERROR"; thenecho "[HIGH PRIORITY ALERT] $(date): $line"elif echo "$line" | grep -q "WARNING"; thenecho "[Warning] $(date): $line"fi
done

实验 4: 监控多日志文件

目标:同时监控多个日志文件,并合并结果。

实验代码

#!/bin/bashlogfiles=("/var/log/syslog" "/var/log/auth.log")for logfile in "${logfiles[@]}"; doif [[ -f $logfile ]]; thentail -f $logfile | awk -v log=$logfile '{print "["log"] "$0}' &elseecho "File not found: $logfile"fi
donewait

实验 5: 定制报警系统

目标:基于日志信息发送邮件通知。

实验代码

#!/bin/bashlogfile="application.log"
email="admin@example.com"if [[ ! -f $logfile ]]; thenecho "Log file not found: $logfile"exit 1
fitail -f $logfile | while read line; doif echo "$line" | grep -q "CRITICAL"; thenecho "Critical alert detected: $line" | mail -s "Critical Alert" $emailecho "Email sent for alert: $line"fi
done

实操

  • 编写脚本监控/var/log/syslog,提取含有 "Failed" 的行并统计次数。

#!/bin/bashlogfile="/var/log/syslog"
count=0if [[ ! -f $logfile ]]; thenecho "Log file not found: $logfile"exit 1
fiecho "Monitoring $logfile for 'Failed'..."tail -f $logfile | while read line; doif echo "$line" | grep -q "Failed"; thencount=$((count + 1))echo "$line"echo "Total 'Failed' entries: $count"fi
done
  • 实现一个脚本监控指定文件夹的文件增长情况。

#!/bin/bashmonitor_dir="/path/to/your/directory"if [[ ! -d $monitor_dir ]]; thenecho "Directory not found: $monitor_dir"exit 1
fiecho "Monitoring file changes in $monitor_dir..."
prev_count=$(ls "$monitor_dir" | wc -l)while true; docurrent_count=$(ls "$monitor_dir" | wc -l)if [[ $current_count -ne $prev_count ]]; thenecho "$(date): File count changed from $prev_count to $current_count"prev_count=$current_countfisleep 2
done
  • 将实验 3 的代码改进,支持通过配置文件指定关键字和报警级别。

#!/bin/bashlogfile="application.log"
config_file="keywords.conf"if [[ ! -f $logfile ]]; thenecho "Log file not found: $logfile"exit 1
fiif [[ ! -f $config_file ]]; thenecho "Config file not found: $config_file"exit 1
fideclare -A keywordswhile IFS=: read -r keyword level; dokeywords["$keyword"]=$level
done < "$config_file"tail -f $logfile | while read line; dofor keyword in "${!keywords[@]}"; doif echo "$line" | grep -q "$keyword"; thenecho "[${keywords[$keyword]} PRIORITY] $(date): $line"fidone
done
  • 使用tail -f 和awk 实现实时日志监控,统计日志中每分钟的访问次数。

#!/bin/bashlogfile="access.log"
if [[ ! -f $logfile ]]; thenecho "Log file not found: $logfile"exit 1
fiecho "Monitoring $logfile for access counts per minute..."tail -f $logfile | awk '
{timestamp = substr($4, 2, 17)  # 提取时间戳,格式化为 "dd/MMM/yyyy:HH:mm"split(timestamp, time_parts, ":")minute = time_parts[1] ":" time_parts[2]  # 仅保留到分钟access_counts[minute]++print "Access count for " minute ": " access_counts[minute]
}'
  • 编写脚本实现对超过指定大小的日志文件进行自动归档和压缩。

#!/bin/bashlogfile="application.log"
max_size=1048576  # 1 MB in bytes
archive_dir="archives"mkdir -p "$archive_dir"while true; doif [[ -f $logfile ]]; thenlog_size=$(stat -c%s "$logfile")if (( log_size > max_size )); thentimestamp=$(date +'%Y%m%d_%H%M%S')mv "$logfile" "$archive_dir/application_$timestamp.log"gzip "$archive_dir/application_$timestamp.log"echo "Archived and compressed $logfile at $timestamp"> "$logfile"  # 清空原日志文件fifisleep 10
done

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

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

相关文章

【人工智能视角下的计算机系统:硬件、操作系统与进程管理基础】

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 电脑硬件的基本常识电脑操作系统&#xff08;软件&#xff09;的基本常识进程进程操作PCB的属性PCB…

【AI大模型系列】提示词基础技巧(三)

目录 技巧一&#xff1a;提供充分的背景信息 技巧二&#xff1a;精准用词&#xff0c;避免误解 技巧三&#xff1a;角色扮演 技巧四&#xff1a;分布提问&#xff0c;循序渐进解决问题 技巧五&#xff1a;充分利用大语言模型的知识库 技巧一&#xff1a;提供充分的背景信息…

bash 中 ${-#*i} 是什么意思?

-------------------------------------------------- author: hjjdebug date: 2024年 12月 25日 星期三 17:43:45 CST description: bash 中 ${-#*i} 是什么意思? -------------------------------------------------- 在centos 的 /etc/profile 中有这样的语句 for i in /…

Flink源码解析之:如何根据算法生成StreamGraph过程

Flink源码解析之&#xff1a;如何根据算法生成StreamGraph过程 在我们日常编写Flink应用的时候&#xff0c;会首先创建一个StreamExecutionEnvironment.getExecutionEnvironment()对象&#xff0c;在添加一些自定义处理算子后&#xff0c;会调用env.execute来执行定义好的Flin…

IntelliJ IDEA Docker集成

一、概述 Docker是一种用于在隔离和可复制环境中部署和运行可执行文件的工具。这可能很有用&#xff0c;例如&#xff0c;在与生产相同的环境中测试代码。 IntelliJ IDEA集成了Docker功能&#xff0c;并为创建Docker映像、运行Docker容器、管理Docker Compose应用程序、使用公…

【closerAI ComfyUI】快速洗图!高效快速的提示词反推节点——cliption,让洗图出图快人一步不爆显存!

添加图片注释,不超过 140 字(可选) 【closerAI ComfyUI】快速洗图!高效快速的提示词反推节点——cliption,让洗图出图快人一步不爆显存! 大家好,我是Jimmy。反推提示词的节点有很多,像Florence2 、Joycaption2、喵手等。都是非常优秀的。但是呢,就是占用设备资源,加…

Pandas-数据组合

文章目录 一. 连接数据1.简介2. 加载数据1. 添加行① 添加行-DataFrame连接② 添加行-DataFrame和Series连接③ 添加行-append函数④ 添加行-重置索引 2. 添加列① 添加列-concat函数② 添加列-通过dataframe[列名] [值]③ 添加列-通过dataframe[列名] Series对象④ 添加列-重…

第四周枝节

一. reverse函数 ###在写回文题的时候有以下函数&#xff1a; 高精度反转&#xff1a; &#xff08;在计算高精度时&#xff0c;我们输入的是从高位到低位&#xff0c;但在计算时从低位到高位&#xff0c;因此需要反转&#xff09; void turn(int a[])//反转数字 {int j 0;…

软件架构设计——数据表状态切换开关—未来之窗行业应用跨平台架构

一、样式 二、样式 /*开关示例*/.东方仙盟_灵颜妙手 {position: relative;display: inline-block;width: 60px;height: 34px;border-radius: 17px; /* 添加圆角效果&#xff0c;使开关看起来更圆润美观 */box-shadow: 0 0 5px rgba(0, 0, 0, 0.2); /* 添加淡淡的阴影效果&…

django --递归查询评论

表数据 树状结构 action(methods(GET, ), detailFalse) def get_info_pinglun(self, request, *args, **kwargs) -> Response:根据评论id查所有回复params wenxian_pinglun_id --> 评论id;wenxian_pinglun_id self.request.GET.get(wenxian_pinglun_id)results se…

向量叉积浅讲

线段交叉 前提条件有三个点o,a,b,如何判断b在线段oa何方向&#xff0c;可以使用叉积; 1、向量的叉积公式 假设 -点o的坐标是 ( o x , o y ) (o_x, o_y) (ox​,oy​) -点a的坐标是 ( a x , a y ) (a_x, a_y) (ax​,ay​) -点b的坐标是 ( b x , b y ) (b_x, b_y) (bx​,by​) …

适用于项目经理的跨团队协作实践:Atlassian Jira与Confluence集成

适用于项目经理的跨团队协作实践&#xff1a;Atlassian Jira与Confluence集成 现代项目经理的核心职责是提供可视性、保持团队一致&#xff0c;并确保团队拥有交付出色工作所需的资源。在过去几年中&#xff0c;由于分布式团队的需求不断增加&#xff0c;项目经理这一角色已迅速…

基于JAVA+SpringBoot+Vue的问卷调查系统

基于JAVASpringBootVue的问卷调查系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈喽兄…

Vue开发环境搭建上篇:安装NVM和NPM(cpnm、pnpm)

文章目录 引言I 安装NVM1.1 Windows系统安装NVM,实现Node.js多版本管理1.2 配置下载镜像1.3 NVM常用操作命令II NPM永久使用淘宝源安装 cnpm安装pnpm【推荐】see also: vscode常用插件引言 淘宝镜像:http://npm.taobao.org 和 http://registry.npm.taobao.org 已在 2022.06.3…

杨天真高情商公式: 建立能量场

在现代社会中&#xff0c;我们常常听到“情商高的人更容易成功”&#xff0c;但情商到底是什么&#xff1f;如何培养高情商&#xff1f;其实&#xff0c;情商并不是天生的&#xff0c;它是可以通过训练和调整的。著名经纪人杨天真曾提到过她的一套“高情商公式”&#xff0c;其…

Kimi进行学术方向选择精讲!

目录 1.文献搜索 2.辅助选题 3.选题判断 在我们之前的文章中&#xff0c;小编都强调了选题在文章价值中的核心作用。一篇优秀的文章背后&#xff0c;肯定有一个精心挑选的选题。选题的好坏直接影响着文章能够发表的期刊等级。许多宝子们却采取了相反的做法&#xff0c;将大量…

vue.js 组件化开发 根组件

Vue.js是一个用于构建用户界面的渐进式JavaScript框架。组件化开发是Vue.js的核心理念之一&#xff0c;它允许开发者将部分代码封装为可重用的组件&#xff0c;从而提高代码的复用性和可维护性。而根组件是Vue.js应用的最顶层组件&#xff0c;它包含了其他所有的组件。 下面详…

YOLO系列正传(五)YOLOv4论文精解(上):从CSPNet、SPP、PANet到CSPDarknet-53

系列文章 YOLO系列基础 YOLO系列基础合集——小白也看得懂的论文精解-CSDN博客 YOLO系列正传 YOLO系列正传&#xff08;一&#xff09;类别损失与MSE损失函数、交叉熵损失函数-CSDN博客 YOLO系列正传&#xff08;二&#xff09;YOLOv3论文精解(上)——从FPN到darknet-53-C…

Vulnhub靶场-Driftingblues 6靶机(至获取shell)

靶机安装好后&#xff0c;照例扫描IP 端口 目录 首页为一个图片&#xff0c;没有什么信息 访问robots.txt&#xff0c;存在一个textpattern/textpattern目录&#xff0c;我们访问为一个登录窗口&#xff0c;sqlmap无法注入 提示我们扫目录时添加.zip扩展名&#xff0c;所以我们…

基于springboot的汽车租赁系统丨源码+数据库+万字文档+PPT

作者简介&#xff1a; 作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 技术框架 开发语言&#xff1a;Java 框架&#xff1a;spring…