サーバーが1台なら、SSHでログインして`tail -f /var/log/nginx/access.log`で十分。でもサーバーが5台、10台と増えると、全サーバーをSSHで回ってログを見るのは無理ゲーになる。
ELKスタック(Elasticsearch + Logstash + Kibana)は、複数サーバーのログを一箇所に集めて検索・可視化する仕組み。でも本家ELKは重い。今は軽量版のLoki + Promtail + Grafanaの方が現実的。
ログ管理のモダンスタック(PLG):
- Promtail — 各サーバーに入れるエージェント。ログファイルを監視してLokiに送信。
- Loki — ログを蓄積するデータベース。Elasticsearchより遥かに軽量。インデックスを作らずラベルで検索。
- Grafana — ダッシュボード。Lokiにクエリを投げてログを表示。メトリクス(Prometheus)とログ(Loki)を同じ画面で見られる。
Lokiのクエリ(LogQL)の例:
{job="nginx"} |= "500" # nginxのログから500エラーだけ
{job="app"} |~ "error|panic" # アプリのログからerrorかpanicを含む行
{job="nginx"} | json | status > 499 # JSONパースしてstatusが500以上
個人サーバーならDockerで全部動かせる:
docker compose up -d # promtail + loki + grafana
これで「どのサーバーでいつエラーが出たか」がブラウザから一発で検索できる。トラブルシュートの時間が1/10になる。ログ管理は「面倒だけど一度やれば一生もの」の典型。