這個站 blog.gslin.org 掛了三個多小時:
先連機器 SSH 看起來是正常的,但習慣性的 w
看一下情況發現 CPU load 有 6.x,用 top
看一下就看到幾隻 php82-fpm
跑滿 CPU,心裡大概有底是被砍站了...
先把 nginx 停下來,瞄了一下 /var/log/nginx
下面的 log 就知道是 ClaudeBot 造成的,看起來都是從 AWS 的 us-east-1
機器打過來的。
然後翻一下 log 看看什麼時候開始打的,先看 log 已經被 gzip 起來的這些:
$ echo /var/log/nginx/blog.gslin.org_ssl-access.log.{?,??}.gz | xargs -n1 | xargs -n1 -I% sh -c "echo %; zgrep ClaudeBot % | wc" /var/log/nginx/blog.gslin.org_ssl-access.log.2.gz 13031 169403 1986719 /var/log/nginx/blog.gslin.org_ssl-access.log.3.gz 459 5967 85350 /var/log/nginx/blog.gslin.org_ssl-access.log.4.gz 14533 188929 2219819 /var/log/nginx/blog.gslin.org_ssl-access.log.5.gz 6502 84526 1026178 /var/log/nginx/blog.gslin.org_ssl-access.log.6.gz 32483 422279 4905919 /var/log/nginx/blog.gslin.org_ssl-access.log.7.gz 21304 276952 3221877 /var/log/nginx/blog.gslin.org_ssl-access.log.8.gz 7921 102973 1199356 /var/log/nginx/blog.gslin.org_ssl-access.log.9.gz 0 0 0 /var/log/nginx/blog.gslin.org_ssl-access.log.10.gz 0 0 0 /var/log/nginx/blog.gslin.org_ssl-access.log.11.gz 0 0 0 /var/log/nginx/blog.gslin.org_ssl-access.log.12.gz 0 0 0 /var/log/nginx/blog.gslin.org_ssl-access.log.13.gz 0 0 0 /var/log/nginx/blog.gslin.org_ssl-access.log.14.gz 0 0 0
看起來是從 blog.gslin.org_ssl-access.log.8.gz
這邊開始的,大概是 1/25 開始 (機器上面是 UTC 時間):
-rw-r----- 1 www-data adm 1894325 Jan 26 00:00 /var/log/nginx/blog.gslin.org_ssl-access.log.8.gz
然後再來看一下最近的 log,看起來是這兩天打的特別重,到五萬多:
$ echo /var/log/nginx/blog.gslin.org_ssl-access.log{,.?} | xargs -n1 | xargs -n1 -I% sh -c "echo %; grep ClaudeBot % | wc" /var/log/nginx/blog.gslin.org_ssl-access.log 29436 382668 4387703 /var/log/nginx/blog.gslin.org_ssl-access.log.1 51712 672256 7852345
拉了 AWS 的圖來看跟預期的差不多:
機器是 t4g.micro
而且沒開 burstable,先前差不多都是略低於 10% 的線在跑,剛好利用 CPU credit 的概念,這幾天看起來就是被打而跑上去。