ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用 Bash 脚本解析并汇总 NGINX 与 Apache 访问日志:Introduction to Bash Scripting 实战章节解析

用 Bash 脚本解析并汇总 NGINX 与 Apache 访问日志:Introduction to Bash Scripting 实战章节解析 用 Bash 脚本解析并汇总 NGINX 与 Apache 访问日志Introduction to Bash Scripting 实战章节解析【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting本篇技术指南对应开源电子书《Introduction to Bash Scripting》中用 Bash 脚本汇总 NGINX 与 Apache 访问日志的实战章节西班牙语版英文原版。当服务器 CPU 飙高、进程列表里出现大量 Apache/Nginx 进程时一个不依赖任何额外软件的 Bash 脚本就能把动辄数百 MB 的 access log 汇总成 Top 20 POST 页面、Top 20 GET 页面与 Top 20 IP 及地理位置帮助运维快速定位暴力破解与异常流量。读完本文你将掌握此类日志分析脚本的需求拆解方法、下载运行方式、输出解读技巧以及如何把它与电子书中其他章节告警、DDoS 防护串联成自动化运维闭环。章节定位从基础语法到真实运维场景在整个电子书的章节体系中前 13 章聚焦 Bash 语法基础从第 15 章开始进入真实脚本实战阶段。本章节020-nginx-and-apache-log-parser.md正是这批实战章节中的典型代表它把前面学过的循环、条件判断、位置参数等内容凝结成一个能直接用于生产环境的日志汇总脚本。章节索引可见 README.md。在动手之前建议先回顾与本章节强相关的几个基础章节它们构成了理解本脚本的前置知识Bash 位置参数脚本通过$1接收日志文件路径参数Bash 条件表达式与条件判断脚本内部需要区分 GET/POST 等请求方法Bash 循环逐行或逐项遍历日志记录、统计计数都依赖循环调试与测试脚本异常时可用bash -x或 ShellCheck 排查。值得一提的是本仓库自带了 scripts/shellcheck-ebook.sh它会自动提取电子书 markdown 文件中的 bash 代码块并逐一运行 ShellCheck 静态检查排除SC2034、SC2154等教学代码常见误报。这从侧面说明本书的每一个脚本示例都遵循可被静态检查通过的质量门槛读者完全可以信任文中命令的语法规范性并把同样的检查习惯带入自己的脚本开发。为什么需要汇总访问日志CPU 尖峰排查场景原文档开篇给出的是一个非常真实的运维场景当 Linux 服务器出现高 CPU 占用时第一反应通常是执行top或htop查看进程列表如果发现大量 Apache 或 Nginx 进程下一步就是立刻检查访问日志access log判断到底是什么请求导致了 CPU 尖峰或者服务器是否正在遭受恶意攻击。直接阅读原始日志有两个痛点日志体积巨大生产环境的 access log 动辄几 GB人工翻阅耗时极长原始格式难读默认的 combined 日志格式一条记录包含客户端 IP、时间戳、请求方法、请求路径、HTTP 状态码、响应字节数、Referer、User-Agent 等字段对经验不足的运维人员而言信息密度过高、难以快速提取要点。因此本章节被设计成一个挑战型练习要求读者编写一个简短 Bash 脚本在不安装任何额外软件的前提下将整个访问日志自动汇总成易读的统计结果。这个约束意味着脚本只能依赖 Bash 自带语法与 Linux 标准命令工具如sort、uniq、head、awk等这正是纯 Bash 方案的最大价值——在任何 Linux 发行版上开箱即用。脚本需求拆解根据原文档这个脚本需要解析并汇总访问日志输出三类高价值信息输出项说明运维价值Top 20 POST 请求页面请求方法为 POST 且出现次数最多的前 20 个页面路径POST 常用于登录、表单提交高频 POST 往往是暴力破解或扫描特征Top 20 GET 请求页面请求方法为 GET 且出现次数最多的前 20 个页面路径反映正常流量热点也可发现爬虫与扫描器Top 20 IP 地址及地理位置访问次数最多的前 20 个客户端 IP并附带其地理位置快速识别异常来源地区与攻击源 IP从这三项需求可以推断脚本的实现思路日志按空格分割后IP 位于第一个字段、请求方法与路径位于请求行字段中先用条件筛选出 GET 或 POST 记录再对目标字段做sort | uniq -c | sort -rn | head -20的标准统计管道即可得到前 20 排行IP 地理位置则需要借助 IP 查询逻辑逐条映射。具体的统计实现细节可在下载演示脚本后自行审阅源码原文档也明确建议下载后先检查脚本内容再运行。获取演示脚本原文档作者已经准备好一个演示脚本spike_check作为参考。文档特别强调强烈建议读者先尝试自己编写脚本再对照作者的实现——这也是本电子书实战章节的一贯风格。获取脚本有两种方式通过git clone克隆作者配套的演示仓库quick_access_logs_summary脚本包含在其中或通过wget直接把spike_check脚本下载到当前目录。无论采用哪种方式脚本本身不会对系统做任何修改它只读取访问日志内容并输出汇总结果。但安全起见下载完成后务必先自行审阅脚本内容确认无误后再执行——这是处理任何来源不明的脚本都应遵循的基本习惯。运行脚本下载完成后只需两步即可运行先赋予可执行权限再执行脚本并传入日志路径。# 赋予可执行权限 chmod x spike_check # 运行脚本把 /path/to/your/access_log 替换为真实日志路径 ./spike_check /path/to/your/access_log把路径参数换成实际环境中的日志位置即可。例如在 Ubuntu 服务器上使用 Apache默认访问日志路径为./spike_check /var/log/apache2/access.log如果使用 Nginx命令几乎完全相同只是日志路径不同./spike_check /var/log/nginx/access.log注意脚本执行耗时取决于日志文件的大小日志越大统计时间越长这是正常的。若日志轮转logrotate较频繁也可以把脚本接入 cron 定时执行让汇总结果周期性产出关于 cron 与守护式脚本的组合方式可参考同书的 Cloudflare API 章节其中展示了如何用两条 cron 任务实现每 30 秒一次的周期性检查。理解输出从统计结果中识别恶意流量脚本运行后会输出上述三类 Top 20 排行。原文档用一张真实的汇总输出截图演示了如何解读这些数字其核心观察点在于把统计结果与安全常识结合识别潜在攻击异常的 POST 集中爆发示例输出显示有 16 次 POST 请求打到了xmlrpc.php文件。这是一个非常典型的攻击信号——xmlrpc.php是 WordPress 的 XML-RPC 接口攻击者常利用它尝试大量用户名与密码组合对 WordPress 站点发起暴力破解。16 次请求虽然不是大规模攻击但这是一个早期预警信号提示管理员应当及时采取措施如封禁来源 IP、禁用 XML-RPC、配置限流避免演变成更大规模的攻击。来源地区异常输出中出现了若干俄罗斯 IP 地址。如果业务预期中并不包含来自该地区的流量那么这些 IP 就值得警惕可以考虑在防火墙或 CDN 层面直接封禁。地理位置维度让日志汇总从看到数字升级为看到威胁来源这正是需求中要求输出地理位置的意义所在。把日志汇总脚本接入自动化运维闭环原文档指出这个脚本的价值在于快速汇总访问日志并判断是否有恶意行为。更进一步本电子书的章节设计可以把它与其他实战脚本无缝组合形成完整的自动化响应链路检测到攻击后自动防护本章节定位是发现异常而 Cloudflare API 章节展示了响应异常——当 CPU 负载异常升高时自动调用 Cloudflare API 开启 DDoS 防护。两个脚本结合即可实现从日志检测到云端防护的自动化闭环异常结果邮件告警使用 SSMTP 发送邮件章节演示了如何用mail命令发送告警邮件。把日志汇总脚本的输出管道给邮件命令就能实现发现 Top IP 异常时自动通知管理员JSON 化处理如果希望把日志统计结果进一步交给监控系统或消息机器人处理可以参考 使用 jq 处理 JSON 章节用jq把汇总结果序列化成结构化数据。这种检测脚本 防护脚本 通知脚本的串联方式正是 Bash 运维自动化思想的完整体现每个脚本解决一个具体问题再用管道、cron 和标准命令把它们粘合成系统。结论本章节给出的不仅是一个脚本更是一套完整的运维排查方法论先通过top/htop定位进程异常再用纯 Bash 脚本把海量 access log 压缩成可读的 Top 排行最后结合业务预期解读异常信号。整个方案零额外依赖、可复制、可扩展。当然脚本汇总不能完全替代人工审阅日志——自动化负责快速缩小排查范围人工负责对可疑线索做最终判断。但正如原文档所说尝试用 Bash 把这个过程自动化本身就是一个极佳的实战练习它把变量、参数、循环、管道、文本处理等基础知识全部融进了一个能在真实服务器上救命的脚本里。如需继续深入可以直接阅读本仓库中的 英文原版章节与西班牙语版章节并使用 scripts/shellcheck-ebook.sh 对自写脚本做静态检查确保脚本质量达到与本书示例一致的标准。【免费下载链接】introduction-to-bash-scriptingFree Introduction to Bash Scripting eBook项目地址: https://gitcode.com/GitHub_Trending/in/introduction-to-bash-scripting创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表