手机网站制作时应该注意的问题,网站介绍流程,杭州两网建设,react用于做PC网站Linux日志分析工具及应用 —语法详解与实战案例系统环境#xff1a;CentOS Stream 9 / RHEL 9 / Ubuntu 24.04
核心工具#xff1a;rsyslog, logrotate, logwatch, Bash, Python
目标#xff1a;掌握 Linux 日志管理、轮替、分析、监控全流程一、Linux 日志文件的类型
Linux…Linux日志分析工具及应用 —语法详解与实战案例系统环境CentOS Stream 9 / RHEL 9 / Ubuntu 24.04核心工具rsyslog, logrotate, logwatch, Bash, Python目标掌握 Linux 日志管理、轮替、分析、监控全流程一、Linux 日志文件的类型Linux 系统日志主要分为以下几类类型说明默认路径示例文件系统日志内核、系统服务、启动过程日志/var/log/messages,dmesg,boot.log安全日志登录、认证、sudo、fail2ban/var/log/secureRHEL,auth.logUbuntu应用日志Nginx, Apache, MySQL, Docker 等/var/log/或自定义路径nginx/access.log,mysql/error.log审计日志系统审计auditd/var/log/audit/audit.log计划任务日志cron 任务执行记录/var/log/cron邮件日志postfix/sendmail 邮件系统/var/log/maillog✅ 查看常见日志路径# RHEL/CentOSls-l /var/log/messages /var/log/secure /var/log/cron /var/log/maillog# Ubuntu/Debianls-l /var/log/syslog /var/log/auth.log /var/log/cron.log /var/log/mail.log✅ 实时查看日志tail -f# 实时监控系统日志tail-f /var/log/messages# 监控安全日志登录尝试tail-f /var/log/secure# 监控 cron 任务tail-f /var/log/cron二、系统服务日志 —— rsyslogd 详解2.1 rsyslogd 简介rsyslogd是 Linux 默认的日志守护进程负责接收、过滤、转发系统和应用程序日志。支持本地日志记录远程日志服务器TCP/UDP数据库写入MySQL, PostgreSQL模板自定义格式TLS 加密传输✅ 查看 rsyslog 状态systemctl status rsyslog✅ 配置文件路径/etc/rsyslog.conf# 主配置文件/etc/rsyslog.d/*.conf# 模块化配置推荐2.2 rsyslogd 配置语法详解✅ 基础语法格式facility.priority actionfacility日志来源auth, cron, kern, mail, user, local0-7 等priority日志级别debug, info, notice, warning, err, crit, alert, emergaction输出目标文件、用户、远程主机、数据库等✅ 示例/etc/rsyslog.conf片段# 记录所有 mail 服务的 warning 及以上级别日志到 /var/log/mail.warn mail.warning /var/log/mail.warn # 记录所有 cron 服务的日志到 /var/log/mycron.log cron.* /var/log/mycron.log # 将所有 local0 设施的日志发送到远程日志服务器 192.168.1.100 UDP 514 local0.* 192.168.1.100:514 # 使用 TCP更可靠 local0.* 192.168.1.100:514 # 发送给指定用户需在线 *.emerg :omusrmsg:* # 使用模板自定义格式见下文✅ 常用 facilityfacility说明auth / authpriv认证相关如 ssh, sudocron定时任务daemon系统守护进程kern内核消息mail邮件系统user用户进程local0 - local7自定义应用日志推荐使用✅ 常用 priority从低到高debug info notice warning err crit alert emerg✅ 通配符*所有级别none不记录!不等于某级别;分隔多个规则2.3 rsyslogd 实战配置案例✅ 案例1为自定义应用如 myapp配置 local3 日志# 创建日志目录sudomkdir-p /var/log/myapp# 创建配置文件 /etc/rsyslog.d/10-myapp.confsudotee/etc/rsyslog.d/10-myapp.confEOF # 记录 local3 所有日志到 /var/log/myapp/app.log local3.* /var/log/myapp/app.log # 同时记录 warning 及以上到单独文件 local3.warning /var/log/myapp/app.warn # 重启 rsyslog 生效 EOF# 重启服务sudosystemctl restart rsyslog# 测试写入日志logger 命令logger -p local3.infoThis is an INFO message from myapplogger -p local3.errThis is an ERROR message from myapp# 查看日志tail/var/log/myapp/app.logtail/var/log/myapp/app.warn✅ 案例2配置远程日志服务器客户端# /etc/rsyslog.d/20-remote.conf # 发送所有日志到远程服务器UDP *.* 192.168.1.100:514 # 或使用 TCP更可靠 # *.* 192.168.1.100:514 # 重启 sudo systemctl restart rsyslog✅ 案例3使用模板自定义日志格式# /etc/rsyslog.d/30-template.conf # 定义模板 template(nameMyTemplate typestring string%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%\n) # 应用模板 local3.* /var/log/myapp/app.log;MyTemplate # 重启 sudo systemctl restart rsyslog输出示例2025-09-16T16:30:4508:00 myserver myapp[1234]: This is a test message三、日志的轮替 —— logrotate 详解3.1 logrotate 简介logrotate是 Linux 系统默认的日志轮替工具用于防止日志文件无限增长按时间/大小自动切割压缩旧日志删除过期日志执行 postrotate 脚本如重启服务✅ 默认配置目录/etc/logrotate.conf# 主配置/etc/logrotate.d/# 服务专属配置推荐✅ 手动执行轮替测试用sudologrotate-vf /etc/logrotate.conf参数说明-vverbose显示详细过程-fforce强制执行即使未到轮替时间3.2 logrotate 配置语法详解✅ 基础语法结构/path/to/logfile { option1 option2 ... postrotate command endscript }✅ 常用选项选项说明daily/weekly/monthly轮替周期size 100M按大小轮替如 100M, 1Grotate 5保留最近 5 个归档compress压缩旧日志gzipdelaycompress延迟压缩保留最新一个不压缩missingok日志文件不存在时不报错notifempty日志为空时不轮替create 644 root root轮替后创建新文件权限、属主sharedscripts多个日志文件共享 postrotate 脚本postrotate ... endscript轮替后执行的脚本3.3 logrotate 实战配置案例✅ 案例1为自定义应用日志配置轮替# 创建配置文件 /etc/logrotate.d/myappsudotee/etc/logrotate.d/myappEOF /var/log/myapp/*.log { daily # 每天轮替 rotate 7 # 保留7份 compress # 压缩 delaycompress # 延迟压缩最新一份不压缩 missingok # 文件不存在不报错 notifempty # 文件为空不轮替 create 644 root root # 创建新文件权限644属主root sharedscripts # 多个日志共享脚本 postrotate /usr/bin/systemctl reload rsyslog /dev/null 21 || true endscript } EOF# 测试配置语法sudologrotate-d /etc/logrotate.d/myapp# 强制执行轮替测试sudologrotate-vf /etc/logrotate.d/myapp# 查看结果ls-l /var/log/myapp/# 应出现 app.log.1, app.log.2.gz 等✅ 案例2按大小轮替适合高流量应用/var/log/nginx/access.log { size 1G # 超过1G就轮替 rotate 10 compress delaycompress missingok notifempty create 644 nginx nginx postrotate /usr/bin/kill -USR1 $(cat /run/nginx.pid 2/dev/null) 2/dev/null || true endscript }✅ 案例3多日志文件 自定义脚本/var/log/myapp/app.log /var/log/myapp/error.log { weekly rotate 4 compress create 644 appuser appgroup postrotate echo [$(date)] Log rotated for myapp /var/log/myapp/rotate.log /usr/local/bin/notify-admin.sh # 自定义通知脚本 endscript }四、日志分析脚本4.1 Bash 脚本案例统计失败登录次数✅ 脚本/usr/local/bin/analyze-secure.sh#!/bin/bash# 功能分析 /var/log/secure统计失败登录IP和次数# 适用RHEL/CentOSLOG_FILE/var/log/secureOUTPUT_FILE/tmp/failed_logins_$(date%Y%m%d).txtecho Failed SSH Login Attempts $OUTPUT_FILEechoGenerated on:$(date)$OUTPUT_FILEecho$OUTPUT_FILE# 提取包含 Failed password 的行提取IP排序统计grepFailed password$LOG_FILE|\awk{for(i1;iNF;i) if($i~ /^[0-9]\.[0-9]\.[0-9]\.[0-9]$/) print$i}|\sort|uniq-c|sort-nr$OUTPUT_FILEechoAnalysis complete. Report saved to:$OUTPUT_FILEcat$OUTPUT_FILE✅ 设置可执行权限并运行sudochmodx /usr/local/bin/analyze-secure.shsudo/usr/local/bin/analyze-secure.sh输出示例 Failed SSH Login Attempts Generated on: Tue Sep 16 16:45:00 CST 2025 120 192.168.1.100 45 203.0.113.5 12 198.51.100.224.2 Python 脚本案例实时监控日志并告警✅ 脚本/usr/local/bin/log-monitor.py#!/usr/bin/env python3# -*- coding: utf-8 -*- 功能实时监控日志文件发现关键词如 ERROR, CRITICAL时发送告警 支持邮件、企业微信、钉钉、Slack本例为打印到控制台 写入告警文件 importtimeimportosimportsys# 配置LOG_FILE/var/log/messagesALERT_FILE/tmp/log_alerts.txtKEYWORDS[ERROR,CRITICAL,FAILED,DENIED]deffollow(file):生成器类似 tail -ffile.seek(0,os.SEEK_END)# 移动到文件末尾whileTrue:linefile.readline()ifnotline:time.sleep(0.1)# 无新内容休眠continueyieldlinedefsend_alert(message):发送告警此处简化为写入文件和打印alert_msgf[{time.strftime(%Y-%m-%d %H:%M:%S)}] ALERT:{message}print(alert_msg)withopen(ALERT_FILE,a)asf:f.write(alert_msg\n)defmain():print(f开始监控日志文件:{LOG_FILE})print(f关键词:{KEYWORDS})print(f告警将写入:{ALERT_FILE})print(-*50)try:withopen(LOG_FILE,r)asf:forlineinfollow(f):forkeywordinKEYWORDS:ifkeywordinline:send_alert(f发现关键词 {keyword} {line.strip()})break# 避免同一行多次触发exceptKeyboardInterrupt:print(\n监控已停止。)exceptFileNotFoundError:print(f错误日志文件{LOG_FILE}不存在)sys.exit(1)if__name____main__:main()✅ 设置权限并后台运行sudochmodx /usr/local/bin/log-monitor.py# 后台运行推荐使用 screen 或 systemdnohup/usr/local/bin/log-monitor.py/tmp/log-monitor.log21# 查看告警tail-f /tmp/log_alerts.txt五、logwatch 套件详解5.1 logwatch 简介logwatch是一个可定制的日志分析和报告工具每日自动分析系统日志并生成摘要报告邮件或控制台输出。分析内容包括SSH 登录统计磁盘空间安全事件服务状态httpd, nginx, mysql等系统重启/关机记录5.2 logwatch 安装✅ CentOS Stream 9 / RHEL 9sudodnfinstall-y logwatch✅ Ubuntu 24.04sudoaptupdatesudoaptinstall-y logwatch5.3 logwatch 配置详解✅ 主配置文件/usr/share/logwatch/default.conf/logwatch.conf✅ 用户自定义配置推荐sudomkdir-p /etc/logwatch/confsudocp/usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/✅ 常用配置项/etc/logwatch/conf/logwatch.conf# 输出格式text, html, mail Output mail # 发送给谁默认 root可改为 adminexample.com MailTo root # 报告详细程度Low, Medium, High Detail High # 分析哪一天的日志Yesterday, Today, All Range yesterday # 服务过滤只分析指定服务 Service sshd Service http Service kernel # 排除服务 Service -zz-network # 排除网络服务5.4 logwatch 使用案例✅ 手动生成今日报告输出到控制台sudologwatch --output stdout --format text --range today✅ 生成 HTML 报告并保存sudologwatch --outputfile--filename /tmp/report.html --format html --range today✅ 只分析 SSH 服务sudologwatch --service sshd --output stdout✅ 自定义时间范围如过去7天sudologwatch --rangebetween -7 days and today--output stdout✅ 示例输出片段################### Logwatch 8.0.1 (04/10/21) #################### Processing Initiated: Tue Sep 16 17:00:00 2025 Date Range Processed: yesterday ( 2025-Sep-15 ) Period is day. Detail Level of Output: 5 Type of Output: stdout Logfiles for Host: myserver.example.com ################################################################## --------------------- SSHD Begin ------------------------ Users logging in through sshd: root: 192.168.1.5 (ssh): 5 times 203.0.113.10: 1 time Failed logins from: 192.168.1.100: 120 times 203.0.113.5: 45 times ---------------------- SSHD End -------------------------✅ 设置定时任务每天早上7点发送邮件报告# 编辑 root 的 crontabsudocrontab-e# 添加以下行07* * * /usr/sbin/logwatch --output mail --format html --mailto adminexample.com六、综合性实战案例案例1自动化日志监控与告警系统目标每日自动轮替应用日志实时监控错误日志并发送告警每日生成安全报告邮件失败登录IP自动加入防火墙黑名单可选✅ 步骤1配置 logrotate如前所述✅ 步骤2部署 Python 监控脚本如前所述并注册为 systemd 服务# /etc/systemd/system/log-monitor.service [Unit] DescriptionLog Monitor Service Afternetwork.target [Service] Typesimple Userroot ExecStart/usr/local/bin/log-monitor.py Restartalways RestartSec10 [Install] WantedBymulti-user.targetsudosystemctl daemon-reloadsudosystemctlenablelog-monitor.servicesudosystemctl start log-monitor.service✅ 步骤3配置 logwatch 每日邮件报告如前所述✅ 步骤4可选自动封禁恶意IP需安装 fail2ban 或自定义脚本# 简单脚本从分析报告中提取IP并加入防火墙# /usr/local/bin/ban-ips.sh#!/bin/bashLOG/tmp/failed_logins_$(date%Y%m%d).txtif[-f$LOG];thengrep-E^[[:space:]][0-9]$LOG|whilereadcountiprest;doif[$count-gt10];then# 超过10次失败echoBlocking IP:$ip(failed$counttimes)sudofirewall-cmd --permanent --add-rich-rulerule familyipv4 source address$ip rejectfidonesudofirewall-cmd --reloadfi✅ 添加到 logwatch 后执行修改/etc/cron.daily/0logwatch# 在 logwatch 命令后添加/usr/local/bin/analyze-secure.sh /usr/local/bin/ban-ips.sh案例2集中式日志服务器rsyslog logrotate logwatch架构Client1 (rsyslog) ----\ Client2 (rsyslog) ----- Server (rsyslog logrotate logwatch) Client3 (rsyslog) ----/✅ 服务端配置/etc/rsyslog.conf# 启用 UDP/TCP 接收 module(loadimudp) input(typeimudp port514) module(loadimtcp) input(typeimtcp port514) # 按主机名分类存储 $template RemoteHost,/var/log/remote/%HOSTNAME%/%$YEAR%-%$MONTH%-%$DAY%.log *.* ?RemoteHost✅ 服务端 logrotate/etc/logrotate.d/remote/var/log/remote/*/*.log { daily rotate 30 compress delaycompress missingok notifempty create 644 root root sharedscripts postrotate /usr/bin/systemctl reload rsyslog /dev/null 21 || true endscript }✅ 服务端 logwatch 配置分析所有主机# /etc/logwatch/conf/logwatch.conf Service All Detail Medium MailTo nocexample.com✅ 本章小结 最佳实践日志分类管理不同应用使用不同 facility如 local0-local7轮替策略按时间和大小双重保障避免磁盘爆满权限安全日志文件设置合适权限640避免敏感信息泄露集中管理生产环境建议部署集中式日志服务器自动化分析结合 logwatch 自定义脚本 告警备份归档重要日志定期备份到异地或对象存储合规审计保留日志至少6个月根据行业法规 附录常用命令速查表功能命令查看系统日志tail -f /var/log/messages查看安全日志tail -f /var/log/secure手动写入日志logger -p local0.info Test message测试 logrotatesudo logrotate -vf /etc/logrotate.d/myapp生成 logwatch 报告sudo logwatch --output stdout --range today实时监控日志sudo /usr/local/bin/log-monitor.py查看 rsyslog 状态systemctl status rsyslog重载 rsyslogsudo systemctl reload rsyslog 扩展项目建议ELK Stack 集成Filebeat Logstash Elasticsearch Kibana日志审计系统对接审计数据库生成合规报告AI 异常检测Python Scikit-learn 分析日志模式可视化仪表盘Grafana Loki Promtail日志加密传输rsyslog TLS 配置这份文档覆盖了 Linux 日志管理的全部核心知识点 语法细节 配置说明 实用脚本 综合项目所有配置和代码均含详细注释可直接用于教学、自学或生产环境参考。