はじめに

この実践的な Lab へようこそ。本 Lab は Loki の設定に焦点を当てます。Loki は Prometheus にインスパイアされた、水平スケーラブルで高可用性、マルチテナントなログ集約システムです。非常にコスト効率が高く、運用が容易になるように設計されています。

この実験(Lab)では、ログを収集し表示するための完全な基本ワークフローに焦点を当てます。以下の 3 つの主要コンポーネントを使用します。

  • Loki: ログの保存と処理を担当するメインサーバー。
  • Promtail: ローカルのログファイルを検出し、Loki インスタンスに出荷するエージェント。
  • Grafana: Loki に接続し、ログを探索・クエリするために使用する可視化プラットフォーム。

この実験環境では、Loki と Grafana のコンテナはすでに起動されています。あなたのタスクは、Promtail を設定・実行してシステムログを Loki に送信し、その後 Grafana でそれらを可視化することです。

ログ収集のための Promtail Docker イメージのプル

このステップでは、Promtail の公式 Docker イメージをダウンロードします。Promtail は、ログファイルを検出し、その内容を Loki に送信する責任を負うエージェントです。セットアップをクリーンかつ分離された状態に保つため、Docker コンテナとして実行します。

Promtail イメージを Docker Hub からプルするには、ターミナルで以下のコマンドを実行してください。

docker pull grafana/promtail

イメージの各レイヤーのダウンロード進捗を示す出力が表示されます。完了すると、イメージがローカルマシンで利用可能になります。

Using default tag: latest
latest: Pulling from grafana/promtail
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/promtail
docker.io/grafana/promtail

イメージが手に入ったので、次のステップで設定ファイルを作成する作業に進むことができます。

システムログをスクレイピングするための promtail.yml の作成

このステップでは、Promtail の設定ファイルを作成します。この YAML ファイルは、Loki サーバーの場所と、監視すべきログファイルを Promtail に指示します。すべての作業は ~/project ディレクトリ内で行ってください。

まず、nano エディタを使用して promtail.yml という名前の新しいファイルを作成します。

nano promtail.yml

次に、以下の設定を nano エディタにコピー&ペーストします。

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: varlogs
    static_configs:
      - targets:
          - localhost
        labels:
          job: varlogs
          __path__: /var/log/*.log

この設定について解説します。

  • server: Promtail 自身のウェブサーバーを設定しますが、この実験(Lab)では使用しません。
  • positions: Promtail が再起動時に古いログを再送信しないように、各ログファイルの最後に読み取った位置を記録するファイルを指定します。
  • clients: Loki インスタンスのアドレスを定義します。Promtail と Loki は同じ Docker ネットワーク上で実行され、コンテナ名が loki であるため、http://loki:3100 を使用します。
  • scrape_configs: これがコアセクションです。/var/log/ ディレクトリ内の .log で終わるすべてのファイルをスクレイピングする varlogs という名前の job を定義します。

内容を貼り付けた後、Ctrl+X、次に Y、最後に Enter を押してファイルを保存し、nano を終了します。

Loki を指す Promtail コンテナの実行

このステップでは、作成したばかりの設定ファイルを使用して Promtail コンテナを起動します。このコマンドは、設定ファイルとホストのログディレクトリの両方をコンテナにマウントします。

Promtail を起動するには、以下の docker run コマンドを実行します。

docker run -d --name promtail --network monitoring-net -v $(pwd)/promtail.yml:/etc/promtail/config.yml -v /var/log:/var/log grafana/promtail -config.file=/etc/promtail/config.yml

コマンドのフラグについて説明します。

  • -d: コンテナをデタッチモード(バックグラウンド)で実行します。
  • --name promtail: コンテナに名前を割り当て、参照しやすくします。
  • --network monitoring-net: コンテナを Loki および Grafana と同じネットワークに接続します。
  • -v $(pwd)/promtail.yml:/etc/promtail/config.yml: ローカルの promtail.yml をコンテナ内の期待される場所(/etc/promtail/config.yml)にマウントします。
  • -v /var/log:/var/log: ホストの /var/log ディレクトリをコンテナにマウントし、Promtail がログファイルを読み取れるようにします。
  • -config.file=/etc/promtail/config.yml: コンテナ内の Promtail プロセスに対し、使用する設定ファイルを指定します。

コマンド実行後、Docker は新しいコンテナの一意な ID を出力します。docker ps コマンドでコンテナが実行中であることを確認できます。

docker ps

実行中のコンテナのリストに promtaillokigrafana が表示されるはずです。

CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS                                       NAMES
...            grafana/promtail        "/usr/bin/promtail -c…"   A few seconds ago   Up a few seconds   0.0.0.0:9080->9080/tcp                      promtail
...            grafana/grafana         "/run.sh"                About a minute ago  Up About a minute  0.0.0.0:8080->3000/tcp                      grafana
...            grafana/loki            "/usr/bin/loki -conf…"   About a minute ago  Up About a minute  0.0.0.0:3100->3100/tcp, 9095/tcp            loki

Grafana への Loki のデータソースとしての追加

このステップでは、Grafana が Loki をデータソースとして使用するように設定します。これにより、Promtail が Loki に送信しているログをクエリ(問い合わせ)および視覚化できるようになります。

以下の手順に注意深く従ってください。

  1. LabEx VM のリバースプロキシ設定のため、デスクトップインターフェースに切り替え、左上隅にある Firefox ブラウザをクリックし、アドレスバーに http://localhost:8080 と入力します。Grafana のログインページが表示されるはずです。

  2. Grafana にログインします。ユーザー名に admin、パスワードに admin を使用します。パスワードの変更を求められる場合がありますが、この実験(Lab)ではスキップして構いません。

  3. 左側のメニューで、Connections アイコン(プラグまたはコネクタのようなアイコン)をクリックします。

  4. Connections ページで、Data sources をクリックします。

  5. Data sources ページで、Add new data source ボタンをクリックします。

  6. 利用可能なデータソースタイプのリストから、Loki を選択します。

  7. 検索ボックスに Loki と入力し、表示された Loki データソースオプションをクリックします。

  8. Loki データソースの設定ページに移動します。HTTP セクションの URL フィールドに、次のアドレスを入力します。

    http://loki:3100

    ホスト名に loki を使用するのは、Grafana コンテナと Loki コンテナが同じ Docker ネットワーク(monitoring-net)上にあり、同じネットワーク上のコンテナ間では Docker が DNS 解決を提供するためです。

  9. 一番下までスクロールし、Save & test ボタンをクリックします。

Add Loki as Data Source in Grafana

すべて正しく設定されていれば、「Data source is working」というメッセージが表示された緑色のバナーが表示されます。これで、Grafana と Loki インスタンスの接続が正常に完了しました。

Grafana Explore ビューでの基本ログのクエリ実行

最後のステップとして、Grafana の「Explore」ビューを使用して簡単なクエリを実行し、Promtail が環境から送信しているログを確認します。

  1. Grafana UI で、左側のサイドバーに移動し、コンパスアイコン(Explore)をクリックします。

  2. Explore ページの左上隅に、データソースを選択するためのドロップダウンメニューがあります。まだ選択されていない場合は、Loki を選択します。

  3. 「Log browser」という入力フィールドが表示されます。ここに LogQL クエリを記述します。

  4. Code ボタンをクリックして、コードエディタに切り替えます。

  5. 入力フィールドに次のクエリを入力します。

    {job="varlogs"}

    この LogQL クエリは、ラベル job の値が varlogs であるすべてのログストリームを選択します。このラベルは promtail.yml ファイルで定義しました。

  6. Shift+Enter を押すか、画面右側にある青い Run query ボタンをクリックします。

Query Basic Logs in Grafana Explore View

クエリを実行すると、クエリエディタの下にあるメインパネルにログ行が表示されるはずです。/var/log 内のさまざまなファイルからのログが表示されます。これは、Promtail が正常にログをスクレイピングして Loki に送信しており、Grafana がそれらをクエリできることを確認しています。

まとめ

おめでとうございます!Loki、Promtail、Grafana を使用した基本的なロギングパイプラインの設定に成功しました。

この実験(Lab)では、以下の方法を学習しました。

  • Promtail のようなログ処理ツールのための Docker コンテナのプルと実行。
  • Loki サーバーの指定とログスクレイピングジョブの定義を行うための Promtail 設定ファイルの作成。
  • Docker ネットワーキングを使用してサービス(Promtail、Loki、Grafana)を接続する方法。
  • Grafana ユーザーインターフェース内で Loki をデータソースとして追加する方法。
  • Grafana の Explore ビューで基本的な LogQL クエリを実行し、ログを見つけて検査する方法。

このセットアップは、強力でスケーラブル、かつコスト効率の高いログ集約システムの基盤となります。ここから、より高度な LogQL クエリ、ログのパース、Grafana でのログ内容に基づいたアラート設定などを探求することができます。