こんにちは。オブザーバビリティの世界へようこそ。
「ログ監視」と聞くと、多くの人が巨大なストレージと複雑なインデックス構築に悩まされる「重苦しい作業」を想像します。しかし、Grafana Lokiに出会えば、その概念は覆ります。
今日は、なぜLokiが現代のエンジニアに愛されるのか、そしてどうすれば最小の労力で「最強のログ可視化環境」を構築できるのかを、現場の視点から解説します。これをマスターすれば、障害調査のたびに数千行のログファイルをgrepして回る苦行からは卒業です。
—
1. なぜ今、Grafana Lokiなのか?(ELKとの決定的な違い)
従来のELKスタック(Elasticsearch, Logstash, Kibana)は非常に強力ですが、ログごとに「フルテキストインデックス」を作成するため、ストレージコストとCPU負荷が膨大になりがちです。
Lokiの哲学は「インデックスは最小限に、検索は賢く」です。
- ラベルのみをインデックス化: Lokiはログ本文をインデックス化しません。代わりに、Prometheusと同じ「ラベル(サービス名やホスト名など)」だけをインデックス化します。
- 「Prometheusのログ版」: メトリクスと同じラベル付けを使うことで、Grafana上でメトリクスとログをシームレスに行き来できます。「この急激なスパイクは何だ?」と思った瞬間に、その時間のログへワンクリックで飛べる体験。これがLokiの真骨頂です。
—
2. アーキテクチャ:Promtailという名の「運び屋」
Lokiが頭脳なら、Promtailは手足です。
Promtailの役割はシンプルです。「ログファイルを監視し、ラベルを付与して、Lokiに送り届ける」。
1. Discovery: ログファイルを特定し、追跡を開始。
2. Pipeline: ログの加工(パース、リラベル)。
3. Ship: LokiのAPIへプッシュ。
この一連の流れが、軽量かつ高速に実行されるのがPromtailの強みです。
—
3. 【実践】Dockerで構築するLoki環境
まずは手元で動かしてみましょう。以下の `docker-compose.yml` を作成してください。
version: ‘3’
services:
loki:
image: grafana/loki:latest
ports: [“3100:3100”]
command: -config.file=/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log:ro # ホストのログを読み取り専用でマウント
- ./promtail-config.yaml:/etc/promtail/config.yaml
command: -config.file=/etc/promtail/config.yaml
grafana:
image: grafana/grafana:latest
ports: [“3000:3000”]
promtail-config.yaml の肝
ここで「どのログをどう送るか」を指定します。
server:
http_listen_port: 9080
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/.log # 指定ディレクトリ内の全ログを収集
`docker-compose up -d` を実行すれば、準備完了です。Grafana(localhost:3000)を開き、データソースとして `http://loki:3100` を追加してください。
—
4. LogQL:ログを「料理」する魔法の言語
Lokiの検索言語 LogQL を使いこなすと、ログは宝の山に変わります。
基本の検索
ログの中から「error」という文字列を探す:
`{job=”varlogs”} |= “error”`
パイプライン処理(ログの数値化)
JSON形式のログから、レスポンスタイムを抽出して平均を出す:
`{job=”app”} | json | unwrap latency_ms | avg_over_time([5m])`
ここが重要:
LogQLを使えば、ログの中から特定の数値(レイテンシやステータスコード)を抜き出し、リアルタイムでグラフ化できます。「ログ監視」が「メトリクス監視」へと昇華する瞬間です。
—
先輩エンジニアからのアドバイス
初心者が陥りやすい罠は「とりあえず全部送る」ことです。
ログは宝の山ですが、ゴミも混ざっています。Promtailの `pipeline_stages` を使って、不要なスタックトレースを間引いたり、必要なフィールドだけ抽出する癖をつけてください。
Lokiを使い始めると、「なぜ今までgrepで消耗していたんだろう?」と必ず思うはずです。まずは自分のローカル環境の `/var/log/syslog` あたりをLokiに流し込んで、Grafanaでクエリを叩いてみてください。
その手軽さと強力さに触れたとき、あなたの運用スキルは一つ上のレベルに到達しています。応援していますよ!