Claude Codeでログ解析を自動化する方法(Linux)

Claude Codeでログ解析を自動化する方法(Linux)

Linuxサーバーでは、Apache、Nginx、PHP、MySQL、アプリケーションログなど、さまざまなログを確認する場面があります。Claude Codeを使うと、ログの抽出、集計、異常検知、原因調査、レポート化までを効率化できます。

ログ解析を自動化するメリット

ログ解析は、障害調査、アクセス状況の確認、セキュリティチェック、パフォーマンス改善に欠かせない作業です。しかし、毎回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で定期実行すれば、障害の早期発見、原因調査の短縮、サーバー運用の標準化につながります。