GrafanaLoki入門

公開: 2021-05-01

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

実稼働環境では、ダウンタイムは許容できません。 それは、ビジネスの収益と評判の大幅な低下につながる可能性があります。 ただし、適切なログ記録および監視システムが導入されている場合は、ダウンタイムにつながるそのようなシナリオをデバッグする方法を理解できます。

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

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

Grafana Lokiとは何ですか?

Grafana Lokiは、2018年にGrafanaによって開始され、Apache2.0ライセンスの下でリリースされたマルチテナントログ集約システムです。 このシステムは、プロメテウスに触発されて開発されました。 これは主にクラウドプロバイダーやPrometheusやGrafanaなどのツールで使用されます。

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

ロキのメリット

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

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

ロキ建築

ロキ建築-オタクフレア

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

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

Lokiのユースケース

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

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

LokiとPromtailのインストール

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

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

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

 [email protected]:~$ mkdir loki [email protected]:~$ mv loki-linux-amd64 promtail-linux-amd64 loki [email protected]:~$ cd loki/ [email protected]:~/loki$ ls loki-linux-amd64 promtail-linux-amd64

次に、LokiとPromtailの汎用構成ファイルをダウンロードします。

 [email protected]:~/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]
 [email protected]:~/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]
 [email protected]:~/loki$ ls loki-linux-amd64 loki-local-config.yaml promtail-linux-amd64 promtail-local-config.yaml

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

 [email protected]:~/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が必要です。

 [email protected]:~/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構成に移動し、「データソース」をクリックします。

grafana

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

構成

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

ロキを追加

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

lokiデータソース

下部にある[テストして保存]ボタンをクリックします。 Lokiのセットアップを正しく行うと、緑色のボックスに以下のメッセージが表示されます。

保存してテストする

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

grafanaログ

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

詳細ログ

綺麗に見えますね。

だから、それはすべて始めることについてでした。 Lokiでの可観測性を説明する以下のウェビナービデオをさらにチェックすることを強くお勧めします。

結論

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

LokiはGrafanaCloudからも入手できます。インストールプロセスを実行したくない場合は、試してみるとよいでしょう。

次に、GrafanaTempoについて理解します。