Grafana Loki の入門


マルチテナントのログ集約システムである Grafana Loki の基礎を学びましょう。

実稼働環境では、ダウンタイムは許容できません。これは、ビジネスの収益と評判に多大な損失をもたらす可能性があります。しかし、適切なログ記録および監視システムを導入していれば、ダウンタイムにつながるこのようなシナリオをデバッグする方法がわかります。

コストを節約し、将来発生する可能性のある問題を特定するのに役立ちます。

現在、あらゆる規模の組織が DevOps の原則とツールを使用しています。コンテナと Kubernetes が最も人気があります。このようなシステムの監視は、Prometheus を使用すると非常に効率的に行われます。しかし、Prometheus が遅れているのはログの部分です。集中ログ システムは提供されていないため、ここで Loki が登場します。

グラファナ・ロキとは何ですか?

Grafana Loki は、2018 年に Grafana によって開始され、Apache 2.0 ライセンスに基づいてリリースされたマルチテナント ログ集約システムです。このシステムはプロメテウスからインスピレーションを得て開発されました。主にクラウド プロバイダーや、Prometheus や Grafana などのツールで使用されます。

Loki は ELK/EFK スタックに似ていますが、セットアップと操作がより簡単で、機能が優れています。 Loki はログの内容にインデックスを付けず、ログ ストリームのタイムスタンプとラベルのセットにインデックスを付けます。これによりインデックスが小さくなり、操作が簡素化され、最終的にコストが削減されます。

ロキの利点

スタックで Loki を使用する利点は次のとおりです。

  • メタデータのみにインデックスを作成するため、Loki は非常にコスト効率が高くなります。フルテキスト処理のためにインデックスを実行するには、非常に高価な大容量の RAM インスタンスが必要です。 S3 のように保存されたオブジェクトにログを保存すると、コストが非常に安くなります。
  • tenantID を使用してマルチテナントをサポートしているため、テナントはデータを個別に保存できます。
  • Loki をローカルで実行して小規模な操作を行うことも、簡単に水平方向に拡張して大規模な操作を行うこともできます。
  • ダイナモ スタイルを使用して、読み取りおよび書き込み操作のクォーラムの一貫性を確保します。
  • デフォルトでは、プロセスのクラッシュやログが失われる突然の終了のリスクに対処するために、ログのレプリカを 3 つ持つように構成されています。はい、多少の追加費用は発生しますが、それほど高額ではありません。データの整合性の方がより重要です。
  • Kubernetes、Prometheus、Grafana の視覚化などの一般的なツールと簡単に接続できます。

ロキの建築

ロキアーキテクチャ - オタクフレア
ロキアーキテクチャ – オタクフレア

Loki アーキテクチャには、 PromtailLokiGrafanaの 3 つのコンポーネントがあります。

Promtail は、アプリケーションまたはサービスを実行している各ノードにインストールする必要があるエージェントです。 Promtail の主な役割は、ターゲットを検出し、ポッドからの LO ストリームにラベルを付加し、それらのログを Loki インスタンスにプッシュすることです。エージェント promtail はローカル ファイル システムからログを追跡し、そのログを Loki の中央サーバーにプッシュします。この後、Grafana を使用してログをクエリバックできます。

Loki の使用例

以下は、Loki のようなログ システムを使用する一般的なユース ケースです。

  • ビジネス インテリジェンス:これは常緑のユースケースであり、ログ データから実用的な洞察を作成することは常に非常に役立ちます。 Loki はログ データの理解に役立ち、ビジネス成長のための新しい戦略を作成できるようになります。たとえば、組織のログ データを通じて、広告チャネルからのコンバージョン率を知るのに役立ちます。
  • モニタリング: Prometheus は業界でモニタリングによく使用されています。ただし、Loki などのツールを使用してログを監視することで、多くのことを特定できます。ログを調べ、しきい値を超えた場合にアラートを送信することで、Web サイトのエラー率を監視するのに役立ちます。
  • デバッグとトラブルシューティング: Loki は、アプリがいつクラッシュしたか、クラッシュの理由、クラッシュ前の最後のステータスなどの簡単な答えを提供して DevOps チームを支援します。
  • サイバー セキュリティ: 過去数年間で、電子商取引ポータルに対するサイバー攻撃が急激に増加しました。 Loki を利用すると、ログを確認して、組織のシステム内で発生している脅威や問題、悪意のあるアクティビティを特定できます。ハッキングが成功した場合でも、Loki はフォレンジック チームがシステム内で何が起こったのかを詳細に理解するのに役立つ可能性があります。それはハッカーを追跡するのに役立ちます。
  • コンプライアンス:業界の規制に準拠するには、組織は監査ログを最長 7 年間保存する必要があります。地方自治体はいつでもログを監査できます。 Loki は監査ログを安全に保存できます。

Loki と Promtail のインストール

Grafana にログをインストールして視覚化する方法を簡単に見てみましょう。このデモでは、 /var/log/*logからログを収集する一般的な構成を使用します。

Loki リリースページに移動し、Assets まで下にスクロールすると、ここに複数の Loki および Promtail パッケージがあります。使用しているシステムに応じて Loki パッケージをダウンロードします。 cli または Canary Loki パッケージをダウンロードしないでください。 Ubuntu システム用にloki-linux-amd64.zippromtail-linux-amd64.zipをダウンロードしています。

ダウンロードが完了したら、Loki と Promtail のファイルを抽出し、単一のディレクトリに配置します。

 @:~$ mkdir loki
@:~$ mv loki-linux-amd64 promtail-linux-amd64 loki
@:~$ cd loki/
@:~/loki$ ls
loki-linux-amd64 promtail-linux-amd64

ここで、 LokiPromtailの汎用構成ファイルをダウンロードします。

 @:~/loki$ wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
--2021-04-30 12:00:51-- https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1832 (1.8K) [text/plain]
Saving to: ‘loki-local-config.yaml’

loki-local-config.yaml 100%[===============================================================================================>] 1.79K --.-KB/s in 0s

2021-04-30 12:00:51 (16.6 MB/s) - ‘loki-local-config.yaml’ saved [1832/1832]
 @:~/loki$ wget https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
--2021-04-30 12:05:07--  https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
Resolving github.com (github.com)... 13.234.210.38
Connecting to github.com (github.com)|13.234.210.38|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Saving to: ‘promtail-local-config.yaml’

promtail-local-config.yaml                        [ <=>                                                                                            ] 109.16K  --.-KB/s    in 0.002s  

2021-04-30 12:05:08 (66.8 MB/s) - ‘promtail-local-config.yaml’ saved [111779]
 @:~/loki$ ls
loki-linux-amd64  loki-local-config.yaml  promtail-linux-amd64  promtail-local-config.yaml

Loki を起動するには、Loki 設定ファイルを使用して以下のコマンドを実行します。これにより、Loki が起動し、ターミナルに Loki ログが表示されます。

 @:~/loki$ ./loki-linux-amd64 -config.file=loki-local-config.yaml
level=info ts=2021-04-30T16:08:37.990311491Z caller=main.go:130 msg="Starting Loki" version="(version=2.2.1, branch=HEAD, revision=babea82e)"
level=info ts=2021-04-30T16:08:37.990856871Z caller=server.go:229 http=[::]:3100 grpc=[::]:9096 msg="server listening on addresses"
level=info ts=2021-04-30T16:08:37.991613443Z caller=shipper_index_client.go:100 msg="starting boltdb shipper in 0 mode"
level=info ts=2021-04-30T16:08:37.992568288Z caller=mapper.go:38 msg="cleaning up mapped rules directory" path=/tmp/loki/rules-temp
level=error ts=2021-04-30T16:08:37.992623632Z caller=mapper.go:42 msg="unable to read rules directory" path=/tmp/loki/rules-temp err="open /tmp/loki/rules-temp: no such file or directory"
level=info ts=2021-04-30T16:08:37.993520927Z caller=table_manager.go:171 msg="uploading tables"
level=info ts=2021-04-30T16:08:37.993941099Z caller=module_service.go:59 msg=initialising module=store
level=info ts=2021-04-30T16:08:37.994011839Z caller=module_service.go:59 msg=initialising module=memberlist-kv
level=info ts=2021-04-30T16:08:37.99412775Z caller=module_service.go:59 msg=initialising module=server
level=info ts=2021-04-30T16:08:37.994379648Z caller=module_service.go:59 msg=initialising module=ingester
level=info ts=2021-04-30T16:08:37.994415984Z caller=ingester.go:241 msg="recovering from checkpoint"

Promtail を開始するには、Promtail 構成ファイルを使用して以下のコマンドを実行します。 Loki にログを取得するには Promtail が必要です。

 @:~/loki$ ./promtail-linux-amd64 -config.file=promtail-local-config.yaml
level=info ts=2021-04-30T16:35:52.775998059Z caller=server.go:229 http=[::]:9080 grpc=[::]:42557 msg="server listening on addresses"
level=info ts=2021-04-30T16:35:52.776283661Z caller=main.go:112 msg="Starting Promtail" version="(version=2.2.1, branch=HEAD, revision=babea82e)"
level=info ts=2021-04-30T16:35:57.776226323Z caller=filetargetmanager.go:254 msg="Adding target" key="{job=\"varlogs\"}"
ts=2021-04-30T16:35:57.776902427Z caller=log.go:124 level=info msg="Seeked /var/log/fontconfig.log - &{Offset:11055 Whence:0}"
level=info ts=2021-04-30T16:35:57.776983546Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/auth.log
level=info ts=2021-04-30T16:35:57.777009023Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/fontconfig.log
ts=2021-04-30T16:35:57.777094698Z caller=log.go:124 level=info msg="Seeked /var/log/lastlog - &{Offset:0 Whence:0}"
ts=2021-04-30T16:35:57.777712594Z caller=log.go:124 level=info msg="Seeked /var/log/apport.log - &{Offset:0 Whence:0}"
ts=2021-04-30T16:35:57.778200383Z caller=log.go:124 level=info msg="Seeked /var/log/alternatives.log - &{Offset:456 Whence:0}"
ts=2021-04-30T16:35:57.780467419Z caller=log.go:124 level=info msg="Seeked /var/log/syslog - &{Offset:56911 Whence:0}"
level=info ts=2021-04-30T16:35:57.780646032Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/kern.log
level=info ts=2021-04-30T16:35:57.781289004Z caller=filetargetmanager.go:254 msg="Adding target" key="{job=\"varlogs\"}"
level=info ts=2021-04-30T16:35:57.787770104Z caller=tailer.go:125 component=tailer msg="tail routine: started" path=/var/log/grafana/grafana.log
ts=2021-04-30T16:35:57.782276009Z caller=log.go:124 level=info msg="Seeked /var/log/grafana/grafana.log - &{Offset:0 Whence:0}"

Loki と Grafana を使用してログを視覚化する

Grafana は Loki の組み込みサポートを提供します。 Loki は Grafana のデータ ソースにすでに存在しています。

ステップ 1: Grafana 設定に移動し、「データ ソース」をクリックします。

グラファナ
グラファナ

ステップ 2: [データ ソース] で、名前またはタイプでソースを検索できます。

構成
構成

ステップ 3: Loki という名前で検索します。このデータ ソースがすでに Grafana に存在していることがわかります。 「選択」をクリックします。

ロキを追加
ロキを追加

ステップ 4:データ ソースに付ける名前を入力し、ポートで Loki を起動しているため、URL にhttp://localhost:3100 (Loki が Grafana とは異なるサーバーで実行されている場合は、これをサーバー IP に変更します) を入力します。 3100。

ロキデータソース
ロキデータソース

下部にある「テストして保存」ボタンをクリックします。 Loki のセットアップが正しく行われている場合は、緑色のボックス内に以下のメッセージが表示されます。

保存してテストする
保存してテストする

ステップ 5:左側の「探索」タブをクリックします。データ ソース選択のドロップダウンから Loki を選択します。ここで、Grafana ログのアクティビティを可視化してみたいと思います。これを行うには、ログ ブラウザにクエリ<em>{filename="/var/log/grafana/grafana.log"}</em>追加する必要があります。以下の緑色のバーは、ログ ファイル内のイベントのエントリです。

グラファナログ
グラファナログ

ダッシュボードに視覚化を表示する時間範囲を選択できます。また、クエリが再実行されるまでのクエリの更新間隔を設定することもできます。ログの詳細を確認するには、下にスクロールしてログ エントリの 1 つをクリックすると、ログに関連するあらゆる種類の情報が表示されます。

詳細ログ
詳細ログ

綺麗ですね。

ということで、以上が始まりでした。 Loki の可観測性について説明している以下のウェビナー ビデオをさらに確認することを強くお勧めします。

結論

分散システムは多くのアプリケーションまたはマイクロサービスで構成され、それぞれに大量のログが含まれます。ログを収集し、保存して使用するためのコスト効率の高い方法が必要です。 Loki はそのような場合に最適なソリューションです。実際、Loki を運用環境に統合することで、ロギングとモニタリングのコストを約 75% 削減できます。

Loki はGrafana Cloudからも入手できます。インストール プロセスを実行したくない場合は、試してみることをお勧めします。

次に、Grafana Tempo について学びましょう。

「 Grafana Loki の入門」についてわかりやすく解説!絶対に観るべきベスト2動画

Mastering Grafana Loki: Complete Guide to Installation, Configuration, and Integration | Part 1
Getting started with Grafana Loki (Grafana Office Hours #09)