云监控短信在上午 10:34 砸进来 web01 的出网量凌晨翻了平日一倍一夜淌出去 2.1G。 前一晚这条报警其实吭过一声我睡沉了早上才瞧见。机器是熟的那台 CentOS 7.9流水线的事我先搁置。 面板曲线只答得出出去多少。 我一般回机器问 access 日志它一行一个来路。五段串一条先给 IP 排座次沿袭〈systemctl status 只给 3 行真错我是在 journalctl 里挖出来的〉那篇练出的习惯 先让日志开口再拍结论。 应用侧今晨 03:30 轮切出 access.log.1640M 上下窗口正罩住昨晨到今晨。# awk {print $1} /var/log/app/access.log.1 | sort | uniq -c | sort -rn | head -10 31684 10.32.5.77 4815 203.119.24.18 4290 116.62.141.97 4102 121.40.49.203 3977 223.104.63.118 3644 10.32.5.90 3511 117.136.38.22 3389 220.181.54.31 3120 36.7.153.66 2988 60.12.34.77TOP10 相加六万五千有余头名独自逼近一半。 细看榜首 10.32.5.77归属自家内网——外敌作案的假设当场作废。每一段在干什么顺带把列号验了列号要站得住得请原始行先出场# head -1 /var/log/app/access.log.1 10.32.5.77 - - [12/Oct/2026:03:30:07 0800] GET /api/goods/detail?sku88410 HTTP/1.1 200 41880格式是应用自己定的common 底子尾巴缀一列响应字节。 $1 存客户端 IP$4 从方括号起头的时间$7 路径$9 状态码$10 字节数。 awk 不给 -F 就按空白剁块print $1 落的就是 IP。四根竖线后头是流水作业。 sort 把散落的 IP 堆拢相同的凑一窝uniq -c 挨窝点数 sort -rn 再来一遍-n 认数值、-r 倒放大数冒尖head -10 截前十字。sort 在前 uniq 在后天条一样不能翻。 uniq 眼里只有紧邻的重复跳过 sort 直接怼生日志数出来一排排全是 1。 我早年就在这栽过一度信了IP 个个不重样。管道这套我敲得熟生的是列号这一关拼之前先跑 NF# awk {print NF} /var/log/app/access.log.1 | sort -u 10条条不多不少 10 段$1 的位置焊死是 IP这才敢续后头。 awk 挨饿不叫没验过的文件照吞错列照样给数一声不报。 这套在 nginx 那份日志上翻过车UA 自带空格$10 整个挤错位数出来的满看不成。 列号拿不准NF 那一眼值得先花。榜首现了原形是自家脚本在搬库10.32.5.77 是自家地盘上的地址不是外头杀进来的生面孔。 顺着地址 ssh 摸到源头机器ps 敲下去进程名直接摆在 CMD 列里# ps -fp $(pgrep -f price-sync) UID PID PPID C STIME TTY STAT TIME CMD zhang 21366 1 8 03:20 ? S 4:12 /usr/bin/python3 /opt/price-sync/main.py --all新放出来的是 zhang 的比价脚本三点整起一轮把全量 SKU 挨个过一遍。 回身再拿 grep 点一遍数和 awk 的口径完全咬合# grep -c ^10\.32\.5\.77 /var/log/app/access.log.1 31684 # grep ^10\.32\.5\.77 /var/log/app/access.log.1 | awk {s$10} END{print s} 1489661184一点四 G 摊到 31684 行头上单行平均 47K。 这路数不是手指头点出来的是程序在扛整库。 外送的 2.1G 里它一家吃掉 1.4G凌晨那笔糊涂账立时对平。再掀它戳的都是哪些路径# grep ^10\.32\.5\.77 /var/log/app/access.log.1 | awk {print $7} | sort | uniq -c | sort -rn | head -2 31502 /api/goods/detail 164 /api/goods/list光 detail 一条就占了 31502 回list 只有 164。 这份日志瘫在 sda 上640M 让 awk 从头碾到尾要走四十秒上下。 就是这块盘能把 wa 拱上 38整读一轮几斤几两我心里有数。 那四十秒我的手一直没离开 CtrlC。处置的办法不用讨论脚本挪去白天跑、卡限次、补一层缓存。 榜上那些公网地址都悬在三四千到五千之间一家一块饼的量是真人用户随他们去。 内网另有个 10.32.5.90 在成批拉数据。 追过去是台刚上线的报表机归口业务点头之后这条才算销账。两条一行式抄进备忘当天存进备忘两条一行式日后照敲。 先看 404 都是谁刷的# awk $9404{print $1} /var/log/app/access.log.1 | sort | uniq -c | sort -rn | head -3 1204 10.32.5.77 342 203.119.24.18 218 116.62.141.97把筛选条件挂在 awk 引号开头$9 这列存的是状态码命中 404 的行才许往下走。 这 1204 个 404 全挂在比价名下原因是下架 SKU 没人兜底不是外人扫库扫出来的。另一条把请求量铺进分钟格# awk -F\[ {print $2} /var/log/app/access.log.1 | cut -c1-17 | sort | uniq -c | sort -rn | head -3 214 12/Oct/2026:03:41 198 12/Oct/2026:03:55 187 12/Oct/2026:04:03-F[ 用反斜杠把左方括号钉成普通字符漏了它就按字符类解析全盘乱。 第二段开头正是时间串cut 掐前 17 个字符尾巴刚好收到分钟。 顶高的那一分钟 214 个请求合到每秒约三个。掐掉脚本以后白天带宽肉眼见了回落。 业务那头又递来新话白天接口时不时卡一下超时一天摊上两三次。 流量这一层排除了嫌疑剩下没查的只有连接层。
阅读完成 · 觉得有帮助?