【入門編】Grafana Lokiで実現する軽量ログ監視!Promtailを使ったログ収集の基礎 – 運用監視・オブザーバビリティ活用バイブル

こんにちは。オブザーバビリティの世界へようこそ。

「ログ監視」と聞くと、多くの人が巨大なストレージと複雑なインデックス構築に悩まされる「重苦しい作業」を想像します。しかし、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でクエリを叩いてみてください。

その手軽さと強力さに触れたとき、あなたの運用スキルは一つ上のレベルに到達しています。応援していますよ!

タイトルとURLをコピーしました