Claude Codeでログ解析を自動化する方法(Linux)
- 作成日 2026.05.14
- その他
Linuxサーバーでは、Apache、Nginx、PHP、MySQL、アプリケーションログなど、さまざまなログを確認する場面があります。Claude Codeを使うと、ログの抽出、集計、異常検知、原因調査、レポート化までを効率化できます。
- 1. ログ解析を自動化するメリット
- 2. Claude Codeに任せやすいログ解析作業
- 3. まず確認したい代表的なログ
- 4. Claude Codeへの基本的な依頼文
- 5. HTTPステータスコードを集計する
- 6. アクセス数の多いURLを集計する
- 7. アクセス数の多いIPアドレスを確認する
- 8. 500番台エラーを抽出する
- 9. PHPエラーを調査する
- 10. journalctlでサービスログを確認する
- 11. 不審なアクセスを抽出する
- 12. ログ解析スクリプトを自動生成する
- 13. cronで定期レポート化する
- 14. 解析結果をメールやチャット通知に使う
- 15. Claude Codeに解析結果を読ませる
- 16. 安全にログ解析を自動化する注意点
- 17. まとめ
ログ解析を自動化するメリット
ログ解析は、障害調査、アクセス状況の確認、セキュリティチェック、パフォーマンス改善に欠かせない作業です。しかし、毎回grep、awk、sed、tail、journalctlなどを手作業で組み合わせると時間がかかります。
Claude Codeを使えば、「どのログを見ればよいか」「どのコマンドで抽出すればよいか」「どのように集計すればよいか」を自然言語で整理できます。定型的な調査はスクリプト化できるため、作業の属人化も防ぎやすくなります。
Claude Codeに任せやすいログ解析作業
Claude Codeは、ログファイルの場所、形式、見たい条件を伝えることで、解析用コマンドやシェルスクリプトを作りやすくなります。
エラーログの抽出
特定IPアドレスのアクセス確認
HTTPステータスコード別の集計
アクセス数の多いURLの集計
直近のエラー傾向の確認
ログイン失敗回数の確認
不審なアクセスの抽出
PHPエラーの原因調査
MySQLのスロークエリ確認
systemdサービスの異常確認
まず確認したい代表的なログ
Linuxでは、サービスごとにログの場所が異なります。Claude Codeへ依頼する前に、対象サービスとログファイルの場所を整理しておくと、解析の精度が上がります。
Nginxアクセスログ:
/var/log/nginx/access.log
Nginxエラーログ:
/var/log/nginx/error.log
Apacheアクセスログ:
/var/log/apache2/access.log
Apacheエラーログ:
/var/log/apache2/error.log
PHP-FPMログ:
/var/log/php*-fpm.log
MySQLログ:
/var/log/mysql/error.log
systemdログ:
journalctl
認証ログ:
/var/log/auth.log
システムログ:
/var/log/syslog
サーバー環境によってログの場所は変わります。最初はfindやlsで確認します。
ls -lah /var/log
sudo find /var/log -type f | head -50
Claude Codeへの基本的な依頼文
ログ解析を依頼するときは、対象ログ、調べたい内容、期間、出力形式を明確にします。いきなり修正を依頼せず、まず調査コマンドを作らせる流れが安全です。
Linuxサーバーのログ解析をしたいです。
対象ログ:
/var/log/nginx/access.log
調べたい内容:
– HTTPステータスコード別の件数
– アクセス数が多いURL上位20件
– アクセス数が多いIPアドレス上位20件
– 500番台エラーの詳細
条件:
– まず確認用コマンドを作成してください
– ファイルの変更はしないでください
– 結果の見方もまとめてください
HTTPステータスコードを集計する
NginxやApacheのアクセスログでは、200、301、404、500などのHTTPステータスコードを集計することで、サイトの状態を把握できます。
awk ‘{print $9}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr
Claude Codeには、ログ形式が異なる可能性も考慮して依頼します。
/var/log/nginx/access.log からHTTPステータスコード別の件数を集計したいです。
Nginx標準ログ形式を前提に、awkコマンドを作成してください。
もしログ形式が違う場合の確認方法も出してください。
直近1000行だけを対象にする場合は、tailを組み合わせます。
tail -1000 /var/log/nginx/access.log | awk ‘{print $9}’ | sort | uniq -c | sort -nr
アクセス数の多いURLを集計する
アクセスが集中しているURLを確認すると、人気ページ、クローラーの集中、不審なアクセス、負荷原因を把握しやすくなります。
awk ‘{print $7}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
Claude Codeには、除外条件も含めて依頼できます。
Nginxアクセスログからアクセス数の多いURLを上位20件集計してください。
条件:
– 画像、CSS、JavaScriptは除外する
– クエリ文字列は除外して集計する
– 件数が多い順に表示する
– コマンドと意味をまとめる
静的ファイルを除外する例です。
awk ‘{print $7}’ /var/log/nginx/access.log \
| sed ‘s/?[^ ]*//’ \
| grep -Ev ‘\.(css|js|png|jpg|jpeg|gif|svg|ico|webp)$’ \
| sort \
| uniq -c \
| sort -nr \
| head -20
アクセス数の多いIPアドレスを確認する
特定IPから大量アクセスがある場合、クローラー、攻撃、監視ツール、社内アクセスなどの可能性があります。まずはIP別の件数を確認します。
awk ‘{print $1}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
Claude Codeへの依頼例です。
Nginxアクセスログからアクセス数が多いIPアドレスを上位20件抽出してください。
そのIPがアクセスしているURL、ステータスコード、User-Agentも確認できるコマンドを作ってください。
特定IPのアクセス内容を確認する例です。
grep ‘^123.123.123.123 ‘ /var/log/nginx/access.log | tail -100
500番台エラーを抽出する
500、502、503、504などのエラーは、アプリケーション、PHP-FPM、DB、上流サーバー、タイムアウトなどが原因になることがあります。まずアクセスログから発生状況を確認します。
awk ‘$9 ~ /^5/ {print}’ /var/log/nginx/access.log | tail -50
発生件数をステータスコード別に集計します。
awk ‘$9 ~ /^5/ {print $9}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr
Claude Codeには、アクセスログとエラーログを関連づける依頼ができます。
Nginxで500番台エラーが発生しています。
access.log と error.log を使って原因を調査したいです。
対象:
/var/log/nginx/access.log
/var/log/nginx/error.log
条件:
– 500番台エラーの発生時刻を抽出
– 同じ時間帯のerror.logを確認
– 原因候補を整理
– 追加で確認すべきコマンドを出す
PHPエラーを調査する
PHPサイトでは、Fatal error、Warning、Notice、Deprecated、memory exhaustedなどが原因で不具合が起きることがあります。Claude Codeにエラーログの見方を整理させると、調査が早くなります。
grep -iE ‘fatal error|warning|notice|deprecated|memory exhausted|uncaught’ /var/log/php*-fpm.log | tail -100
WordPressやPHPアプリの調査では、ログの場所が複数ある場合があります。
sudo find /var/log -type f | grep -i php
sudo find /var/www -type f -name “debug.log”
Claude Codeへの依頼例です。
PHPのエラーログから直近の重大エラーを抽出したいです。
条件:
– Fatal error
– Uncaught
– memory exhausted
– Permission denied
– failed to open stream
上記を対象に、確認コマンドと原因の見方をまとめてください。
journalctlでサービスログを確認する
systemd管理のサービスでは、journalctlでログを確認します。Nginx、Apache、PHP-FPM、MySQL、独自アプリのサービス状態を調べるときに有効です。
sudo journalctl -u nginx –since “1 hour ago”
直近のエラーだけを見る場合です。
sudo journalctl -u nginx -p err –since “today”
Claude Codeには、対象サービス名を渡して調査コマンドを作らせます。
systemdで動いている myapp.service のログを調査したいです。
条件:
– 直近1時間のログを見る
– エラーだけ抽出する
– サービスの起動失敗原因を確認する
– 再起動履歴も確認する
– 必要なコマンドを順番に出してください
不審なアクセスを抽出する
ログ解析では、管理画面への総当たり、存在しないURLへの大量アクセス、特定User-Agentの集中、海外IPからの大量リクエストなどを確認することがあります。
grep -Ei ‘wp-login.php|xmlrpc.php|admin|phpmyadmin|.env|config.php’ /var/log/nginx/access.log | tail -100
Claude Codeへの依頼例です。
Nginxアクセスログから不審なアクセスを抽出したいです。
確認したいもの:
– wp-login.php への大量アクセス
– xmlrpc.php へのアクセス
– .env へのアクセス
– phpmyadmin へのアクセス
– 存在しないPHPファイルへのアクセス
– 404が大量に出ているIP
集計コマンドと確認手順を作成してください。
404が多いIPを確認する例です。
awk ‘$9 == 404 {print $1}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -20
ログ解析スクリプトを自動生成する
毎回コマンドを打つのが面倒な場合は、Claude Codeにログ解析スクリプトを作らせます。引数でログファイルを指定できる形にすると、複数サーバーや複数サイトで使い回しやすくなります。
以下の条件でNginxアクセスログ解析用のbashスクリプトを作成してください。
条件:
– 引数でログファイルのパスを受け取る
– ログファイルが存在しない場合はエラー表示
– HTTPステータスコード別の件数を表示
– アクセス数が多いIP上位20件を表示
– アクセス数が多いURL上位20件を表示
– 500番台エラーを直近20件表示
– 404が多いIP上位20件を表示
– ファイルの変更や削除はしない
– set -euo pipefail を使う
生成されるスクリプトの例です。
#!/bin/bash
set -euo pipefail
LOG_FILE=”${1:-}”
if [ -z “$LOG_FILE” ]; then
echo “Usage: $0 /path/to/access.log”
exit 1
fi
if [ ! -f “$LOG_FILE” ]; then
echo “ERROR: Log file not found: $LOG_FILE”
exit 1
fi
echo “=== Status Code Count ===”
awk ‘{print $9}’ “$LOG_FILE” | sort | uniq -c | sort -nr
echo
echo “=== Top IP Addresses ===”
awk ‘{print $1}’ “$LOG_FILE” | sort | uniq -c | sort -nr | head -20
echo
echo “=== Top URLs ===”
awk ‘{print $7}’ “$LOG_FILE” | sed ‘s/?[^ ]*//’ | sort | uniq -c | sort -nr | head -20
echo
echo “=== Recent 5xx Errors ===”
awk ‘$9 ~ /^5/ {print}’ “$LOG_FILE” | tail -20
echo
echo “=== Top IPs with 404 ===”
awk ‘$9 == 404 {print $1}’ “$LOG_FILE” | sort | uniq -c | sort -nr | head -20
実行例です。
chmod +x analyze_nginx_log.sh
./analyze_nginx_log.sh /var/log/nginx/access.log
cronで定期レポート化する
ログ解析を毎日行う場合は、cronで定期実行し、結果をレポートファイルに保存すると便利です。異常が起きてから確認するだけでなく、日々の傾向を追いやすくなります。
mkdir -p /var/log/report
毎日朝6時に解析結果を保存する例です。
crontab -e
0 6 * * * /usr/local/bin/analyze_nginx_log.sh /var/log/nginx/access.log > /var/log/report/nginx_daily_report_$(date +\%Y\%m\%d).txt 2>&1
Claude Codeには、cron環境で動くように絶対パスを使う条件を入れます。
このログ解析スクリプトをcronで毎日実行したいです。
cron用の設定例を作成してください。
条件:
– コマンドは絶対パスで書く
– レポートファイル名に日付を入れる
– 標準エラーも保存する
– cronで失敗しやすい点もまとめる
解析結果をメールやチャット通知に使う
ログ解析結果をファイルに保存するだけでなく、メールやチャットへ通知すると障害対応が早くなります。最初は通知しすぎないように、500番台エラーが一定数を超えた場合だけ通知するなどの条件を入れると運用しやすくなります。
以下の条件でログ監視スクリプトを作成してください。
対象:
/var/log/nginx/access.log
条件:
– 直近1000行を確認する
– 500番台エラーの件数を数える
– 10件以上あれば警告メッセージを表示する
– 10件未満なら正常メッセージを表示する
– 将来的にメール通知を追加しやすい構成にする
件数確認の基本コマンドです。
tail -1000 /var/log/nginx/access.log | awk ‘$9 ~ /^5/ {count++} END {print count+0}’
Claude Codeに解析結果を読ませる
ログの抽出結果をClaude Codeに渡すと、原因候補や次に確認すべきポイントを整理できます。ただし、秘密情報、個人情報、認証トークン、IPアドレスの扱いには注意が必要です。
以下はNginxの500番台エラーの抽出結果です。
原因候補を整理し、次に確認すべきログやコマンドを出してください。
【ここにログの一部を貼り付ける】
ログを貼り付ける前に、不要な情報をマスクしておくと安全です。
IPアドレス、メールアドレス、トークン、Cookie、Authorizationヘッダーはマスクしてから解析してください。
安全にログ解析を自動化する注意点
ログには、IPアドレス、URLパラメータ、メールアドレス、セッションID、トークンなどが含まれる場合があります。自動解析や外部共有を行う前に、機密情報が含まれていないか確認します。
また、巨大なログファイルをそのまま処理するとサーバー負荷が高くなる場合があります。最初はtailで直近行だけを見る、期間を絞る、集計対象を限定するなど、負荷を抑えた解析から始めるのが安全です。
tail -1000 /var/log/nginx/access.log
grep “12/May/2026” /var/log/nginx/access.log
本番サーバーでは、ログ解析スクリプトがファイルを削除したり、ログを上書きしたりしないようにします。解析専用のスクリプトは、基本的に読み取り専用で作る方が安全です。
まとめ
Claude Codeを使うと、Linuxサーバーのログ解析を効率化できます。アクセスログ、エラーログ、PHPログ、systemdログを対象に、抽出、集計、異常検知、レポート化までを自然言語から組み立てられます。
重要なのは、対象ログ、調べたい内容、期間、出力形式を明確にすることです。さらに、削除や上書きを行わない読み取り専用の方針にしておけば、本番環境でも安全に扱いやすくなります。
Claude Codeでログ解析コマンドやスクリプトを作成し、cronで定期実行すれば、障害の早期発見、原因調査の短縮、サーバー運用の標準化につながります。
-
前の記事
Claude CodeでReactコンポーネントを生成する方法 2026.05.13
-
次の記事
Claude CodeでAPI設計を効率化する方法 2026.05.14
コメントを書く