Loki のインストール

DockerBeginner
オンラインで実践に進む

はじめに

Grafana Loki は、Prometheus にインスパイアされた、水平スケーラブルで高可用性を持つマルチテナントのログ集約システムです。非常にコスト効率が高く、運用が容易になるように設計されています。他のロギングシステムとは異なり、Loki はログの内容ではなく、各ログストリームのラベルセットをインデックス化します。

この実験(Lab)では、Grafana Loki の公式 Docker イメージを使用して基本的なインストールを実行します。最小限の設定ファイルを作成し、Loki サービスをコンテナとして起動する方法を学びます。これは、Loki を使用した完全なロギングスタックを構築するための最初の基本的なステップとなります。

Loki Docker イメージのプル

このステップでは、Docker Hub から公式の Grafana Loki Docker イメージをダウンロードします。docker pull コマンドは、レジストリからイメージまたはリポジトリを取得します。あなたの実験(Lab)環境には、すでに Docker がインストールされ、設定されています。

最新の Loki イメージをプルするには、ターミナルで以下のコマンドを実行します。

docker pull grafana/loki

ダウンロードの進行状況を示す出力が表示されます。Docker はデフォルトで latest タグのイメージをプルします。

期待される出力(バージョン番号は異なる場合があります):

latest: Pulling from grafana/loki
a48641c1b8a9: Pull complete
...
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for grafana/loki
docker.io/grafana/loki

基本的な loki-config.yaml ファイルの作成

このステップでは、Loki のための最小限の設定ファイルを作成します。このファイル loki-config.yaml は、Loki がどのように動作するか、データをどこに保存するか、どのスキーマを使用するかを指示します。この実験(Lab)では、Loki がストレージにローカルファイルシステムを使用するように設定します。

nano テキストエディタを使用してファイルを作成します。loki-config.yaml という名前の新しいファイルを開くために、以下のコマンドを実行します。

nano loki-config.yaml

次に、以下の YAML コンテンツを nano エディタにコピー&ペーストします。

auth_enabled: false

server:
  http_listen_port: 3100

common:
  path_prefix: /tmp/loki
  storage:
    filesystem:
      chunks_directory: /tmp/loki/chunks
      rules_directory: /tmp/loki/rules
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

storage_config:
  boltdb_shipper:
    active_index_directory: /tmp/loki/index
    cache_location: /tmp/loki/cache
  filesystem:
    directory: /tmp/loki/chunks

ruler:
  alertmanager_url: http://localhost:9093

limits_config:
  allow_structured_metadata: false

この設定により、コンテナ内の /tmp/loki の下に Loki が必要とするすべてのものが格納され、権限の問題を回避し、セットアップを理解しやすく保ちます。認証は無効化され、シングルノードでの使用のためにインメモリのリングが有効になり、ブロックとインデックスはローカルファイルシステムに保存されます。

ファイル内の各セクションの機能は以下の通りです。

  • auth_enabled: false: 認証をオフにし、追加の認証情報なしで Loki と通信できるようにします。これによりローカルテストが簡単になります。本番環境では認証を有効にする必要があります。
  • server.http_listen_port: 3100: Loki がポート 3100 で HTTP リクエストをリッスンするように指示します。localhost:3100curl すると、このポートにアクセスすることになります。
  • common.path_prefix: コンテナ内で Loki が一時データを保存する基本フォルダを設定します。このファイル内の他のすべてのパスは /tmp/loki から構築されるため、すべてが一箇所にまとまります。
  • common.storage.filesystem: ログデータのチャンクとルールファイルを保存するための 2 つのフォルダを Loki に指示します。コンテナに特別なマウントを行わないため、/tmp/loki を使用することで権限の問題を回避できます。
  • common.ring.kvstore.store: inmemory: メンバーシップ情報をメモリ内に保持します。シングルノードの実験(Lab)ではこれが最適です。実際のクラスタでは、Consul や etcd のような共有ストアを使用します。
  • schema_config: Loki がログデータのインデックスをどのように配置するかを定義します。開始日を設定し、boltdb-shipper ストアを選択し、インデックスをファイルシステム上に保持します。prefixperiod は、ファイルの命名方法と、新しいインデックスファイルが作成される頻度(24 時間ごと)を制御します。
  • storage_config: boltdb-shipper インデックス(active_index_directory および cache_location)と生チャンクストレージの正確なフォルダを提供します。すべてが /tmp/loki の下に配置され、整理されています。
  • ruler.alertmanager_url: Loki のルーラーコンポーネントが、http://localhost:9093 の Alertmanager にアラートを送信できるように準備します。Alertmanager が実行されていなくても何も壊れません。Loki はアラートを送信しようとしたときに警告をログに出力するだけです。
  • limits_config.allow_structured_metadata: false: 高度な機能を無効にし、Loki が初心者が期待する、より単純なプレーンテキストのログメタデータに留まるようにします。

Ctrl+X を押して終了し、Y を押して保存を確認し、最後に Enter を押してファイル名 loki-config.yaml で保存します。

設定ファイルを使用してポート 3100 で Loki コンテナを実行

Loki イメージと設定ファイルが用意できたので、Loki を Docker コンテナとして実行します。docker run コマンドを使用してコンテナを起動し、設定ファイルをマウントし、必要なポートを公開します。

以下のコマンドを実行します。

docker run -d --name loki -v $(pwd)/loki-config.yaml:/etc/loki/config.yml -p 3100:3100 grafana/loki -config.file=/etc/loki/config.yml

このコマンドの内訳は以下の通りです。

  • -d: コンテナをデタッチモード(バックグラウンド)で実行します。
  • --name loki: コンテナに loki という名前を付け、参照しやすくします。
  • -v $(pwd)/loki-config.yaml:/etc/loki/config.yml: ローカルの loki-config.yaml ファイルをコンテナ内の /etc/loki/config.yml にマウントします。Loki はこのファイルから設定を読み込みます。
  • -p 3100:3100: ホストマシンのポート 3100 をコンテナ内のポート 3100 にマッピングし、Loki API へのアクセスを可能にします。
  • grafana/loki: コンテナに使用するイメージです。
  • -config.file=/etc/loki/config.yml: Loki プロセスに渡されるコマンドライン引数で、設定ファイルの場所を指示します。

コマンド実行後、Docker は新しく作成されたコンテナの一意な ID を出力します。

e8a9f2b1c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0

localhost:3100/ready で Loki の Ready エンドポイントを確認

このステップでは、Loki サーバーが正常に起動し、動作していることを確認するためにヘルスチェックを実行します。Loki はこの目的のために使用できる /ready HTTP エンドポイントを公開しています。成功した応答は、サーバーがリクエストを受け入れる準備ができていることを示します。

curl コマンドを使用して、このエンドポイントにリクエストを送信します。前のステップでポート 3100 をマッピングしたので、localhost:3100 経由でアクセスできます。

curl http://localhost:3100/ready

Loki が正常に起動した場合、HTTP 200 OK ステータスコードと共に ready というテキストで応答します。

期待される出力:

ready

Loki 起動確認のためにログをチェック

Loki が正常に起動したことを確認する別の方法は、コンテナのログを調べることです。これは、設定の問題やその他の起動時の問題をデバッグするのに役立ちます。docker logs コマンドはコンテナのログを取得します。

loki コンテナのログを表示するには、次のコマンドを使用します。

docker logs loki

起動プロセスに関する詳細な出力が表示されるはずです。接続をリッスンしていることを確認する行を探してください。これにより、サービスが重大なエラーなしに初期化されたことが確認されます。

期待される出力スニペット(ログの詳細は異なる場合があります):

level=info ts=... caller=server.go:299 http=[::]:3100 grpc=[::]:9096 msg="server listening on addresses"
level=info ts=... caller=loki.go:372 msg="Loki started"

まとめ

おめでとうございます!この実験(Lab)は無事に完了しました。

この実験(Lab)では、Grafana Loki インスタンスを起動し、動作させるための基本的な手順を学習しました。具体的には、以下のことを行いました。

  • Docker Hub から公式の Loki Docker イメージをプルしました。
  • サーバーとストレージの設定を定義するために、基本的な loki-config.yaml ファイルを作成しました。
  • 設定をマウントし、API ポートを公開して、Loki を Docker コンテナ内で起動しました。
  • Loki の /ready エンドポイントを使用し、コンテナログを確認することで、Loki インスタンスが実行中で正常であることを検証しました。

この基本的なセットアップは、より複雑で堅牢なロギングアーキテクチャを構築するための基盤となります。ここから、Promtail のようなログ転送エージェントを設定してログを Loki に送信し、Grafana を使用してそれらをクエリおよび視覚化する作業に進むことができます。