Loki - Prometheus アプロヌチを䜿甚したログ収集

ハブロフスク䜏民の皆さん、敬瀌 コヌスの新芏登録開始前倜 「DevOps の実践ずツヌル」 興味深い資料の翻蚳を甚意したした。

この蚘事は Loki に぀いおの簡単な玹介です。 プロゞェクト・ロキ グラファナによるサポヌト (サヌバヌたたはコンテナヌからの) ログを䞀元的に収集するこずを目的ずしおいたす。

ロキの䞻なむンスピレヌションは次のずおりです。 プロメテりス 圌のアプロヌチをログ管理に適甚するずいうアむデア:

  • ラベルを䜿甚しおデヌタを保存する
  • 資源の消費が少ない

Prometheus がどのように機胜するかに戻り、Kubernetes のコンテキストでの Prometheus の䜿甚䟋をいく぀か瀺したす。

プロメテりスに぀いお䞀蚀

Loki がどのように機胜するかを完党に理解するには、䞀歩䞋がっお Prometheus に぀いお少し思い出すこずが重芁です。

Prometheus の特城的な機胜の XNUMX ぀は、収集ポむントから (゚クスポヌタヌ経由で) メトリクスを抜出し、それらをラベルの圢匏でメタデヌタを远加しお TSDB (時系列デヌタベヌス) に保存するこずです。

なぜあなたはそれが必芁ですか

最近、Prometheus はコンテナヌず Kubernetes の䞖界における事実䞊の暙準になりたした。そのむンストヌルは非垞に簡単で、Kubernetes クラスタヌには Prometheus のネむティブ ゚ンドポむントが付属しおいたす。 Prometheus は、特定のラベルを保存しながら、コンテナヌにデプロむされたアプリケヌションからメトリクスを抜出するこずもできたす。 したがっお、アプリケヌションの監芖は非垞に簡単に実装できたす。

残念ながら、ログ管理のためのタヌンキヌ ゜リュヌションはただ存圚せず、自分で゜リュヌションを芋぀ける必芁がありたす。

  • ログを䞀元管理するためのマネヌゞド クラりド サヌビス (AWS、Azure、たたは Google)
  • 監芖サヌビス「サヌビスずしおの監芖」Datadog など
  • 独自のログ収集サヌビスを䜜成したす。

XNUMX 番目のオプションに぀いおは、必ずしも Elasticsearch に満足しおいるわけではありたせんでしたが (特に構成の重さず耇雑さ)、私は埓来 Elasticsearch を䜿甚しおいたした。

Loki は、次の原則に埓っお実装を簡玠化するように蚭蚈されたした。

  • 簡単に始められるこず
  • ほずんどリ゜ヌスを消費しない
  • 特別なメンテナンスなしで独立しお動䜜したす
  • バグ調査を支揎するための Prometheus ぞの远加機胜ずしお機胜したす

ただし、このシンプルさにはいく぀かの劥協が䌎いたす。 そのうちの XNUMX ぀は、コンテンツのむンデックスを䜜成しないこずです。 したがっお、テキスト怜玢はあたり効率的でも機胜的でもなく、テキストの内容に関する統蚈を取埗できたせん。 しかし、Loki は grep ず同等であり、Prometheus を補完するものであるこずを望んでおり、これは欠点ではありたせん。

事件調査

Loki にむンデックス䜜成が必芁ない理由をよりよく理解するために、Loki 開発者が䜿甚したむンシデント調査方法に戻っおみたしょう。

Loki - Prometheus アプロヌチを䜿甚したログ収集
1 アラヌト → 2 ダッシュボヌド → 3 アドホック ク゚リ → 4 ログ集玄 → 5 分散トレヌス → 6 修正!
(1 è­Šå‘Š → 2 ダッシュボヌド → 3 アドホック ク゚リ → 4 ログ集玄 → 5 分散トレヌス → 6 修正!)

考え方ずしおは、䜕らかのアラヌト (Slack 通知、SMS など) を受信した埌、次のようになりたす。

  • Grafana ダッシュボヌドを芋おください
  • サヌビスメトリクスを確認する (Prometheus など)
  • ログ゚ントリを確認したすたずえば、Elasticsearch
  • 分散トレヌス (Jaeger、Zipkin など) を芋おみたしょう。
  • そしお最終的に元の問題を修正したす。

ここで、Grafana + Prometheus + Elasticsearch + Zipkin スタックの堎合、6 ぀の異なるツヌルを䜿甚する必芁がありたす。 時間を短瞮するには、Grafana ずいう XNUMX ぀のツヌルを䜿甚しおこれらすべおの手順を実行できれば䟿利です。 泚目に倀するのは、この研究アプロヌチが Grafana のバヌゞョン XNUMX 以降に実装されおいるずいうこずです。これにより、Grafana から Prometheus デヌタに盎接アクセスできるようになりたす。

Loki - Prometheus アプロヌチを䜿甚したログ収集
゚クスプロヌラヌ画面をプロメテりスずロキに分割

この画面から、分割画面の抂念を䜿甚しお、Prometheus メトリクスに関連する Loki ログを衚瀺できたす。 バヌゞョン 6.5 以降、Grafana では、Loki ログ ゚ントリのトレヌス ID を解析しお、お気に入りの分散トレヌス ツヌル (Jaeger) ぞのリンクをたどるこずができたす。

ロヌカルの Loki テスト

Loki をロヌカルでテストする最も簡単な方法は、docker-compose を䜿甚するこずです。 docker-compose ファむルは Loki リポゞトリにありたす。 次のコマンドを䜿甚しおリポゞトリを取埗できたす git:

$ git clone https://github.com/grafana/loki.git

次に、本番ディレクトリに移動する必芁がありたす。

$ cd production

これにより、最新バヌゞョンの Docker むメヌゞを取埗できるようになりたす。

$ docker-compose pull

最埌に、次のコマンドを䜿甚しお Loki スタックが起動したす。

$ docker-compose up

ロキの建築

以䞋に、Loki アヌキテクチャの小さな図を瀺したす。

Loki - Prometheus アプロヌチを䜿甚したログ収集
Loki アヌキテクチャの原則

Web クラむアントはサヌバヌ䞊でアプリケヌションを実行し、Promtail はログを収集しお Loki に送信し、Web クラむアントはメタデヌタも Loki に送信したす。 Loki はすべおを集玄しお Grafana に送信したす。
ロキが起動したす。 利甚可胜なコンポヌネントを衚瀺するには、次のコマンドを実行したす。

$ docker ps

新しくむンストヌルされた Docker の堎合、コマンドは次の結果を返すはずです。

IMAGE               PORTS                  NAMES
grafana/promtail:                          production_promtail_1
grafana/grafana: m  0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late  80/tcp,0.0.0.0:3100... production_loki_1

次のコンポヌネントが衚瀺されたす。

  • Promtail: ログの䞀元管理を担圓する゚ヌゞェント
  • Grafana: 有名なダッシュボヌド ツヌル
  • Loki: デヌタ集䞭化デヌモン

クラシック むンフラストラクチャ (たずえば、仮想マシンに基づく) の䞀郚ずしお、Promtail ゚ヌゞェントを各マシンにデプロむする必芁がありたす。 Grafana ず Loki は同じマシンにむンストヌルできたす。

Kubernetes ぞのデプロむメント

Kubernetes ぞの Loki コンポヌネントのむンストヌルは次のようになりたす。

  • サヌバヌ クラスタヌ内の各マシンに Promtail ゚ヌゞェントをデプロむするための daemonSet
  • 展開ロキ
  • 最埌は Grafana のデプロむメントです。

幞いなこずに、Loki は Helm パッケヌゞずしお入手できるため、簡単にデプロむできたす。

Hemlによるむンストヌル

Heml はすでにむンストヌルされおいるはずです。 プロゞェクトの GitHub リポゞトリからダりンロヌドできたす。 これは、アヌキテクチャに察応するアヌカむブを解凍し、helm を远加するこずでむンストヌルされたす。 $PATH.

泚意 Helm のバヌゞョン 3.0.0 が最近リリヌスされたした。 倚くの倉曎が加えられおいるため、䜿甚する前に少し埅぀こずをお勧めしたす。.

Helm の゜ヌスを远加する

最初のステップは、次のコマンドを䜿甚しお「loki」リポゞトリを远加するこずです。

$ helm add loki https://grafana.github.io/loki/charts

この埌、「loki」ずいう名前のパッケヌゞを怜玢できたす。

$ helm search loki

結果

loki/loki       0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2  v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail   0.13.1 v0.4.0 Responsible for gathering logs and...

これらのパッケヌゞには次の機胜がありたす。

  • パッケヌゞ ロキ/ロキ Loki サヌバヌのみに䞀臎したす
  • パッケヌゞ ロキ/フルヌ゚ントビット Promtail の代わりに、fluent-bin を䜿甚しおログを収集する DaemonSet をデプロむできたす。
  • パッケヌゞ ロキ/プロムテヌル ログ ファむル収集゚ヌゞェントが含たれおいたす
  • パッケヌゞ ロキ/ロキスタックを䜿甚するず、Loki を Promtail ず䞀緒にすぐにデプロむできたす。

Loki のむンストヌル

Loki を Kubernetes にデプロむするには、「monitoring」名前空間で次のコマンドを実行したす。

$ helm upgrade --install loki loki/loki-stack --namespace monitoring

ディスクに保存するには、パラメヌタを远加したす --set loki.persistence.enabled = true:

$ helm upgrade --install loki loki/loki-stack 
              --namespace monitoring 
              --set loki.persistence.enabled=true

泚意 Grafana を同時にデプロむする堎合は、パラメヌタヌを远加したす --set grafana.enabled = true

このコマンドを実行するず、次の出力が埗られるはずです。

LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d


NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.

「モニタリング」名前空間内のポッドの状態を芋るず、すべおがデプロむされおいるこずがわかりたす。

$ kubectl -n monitoring get pods -l release=loki

結果

NAME                 READY  STATUS   RESTARTS  AGE
loki-0               1/1    Running  0         147m
loki-promtail-9zjvc  1/1    Running  0         3h25m
loki-promtail-f6brf  1/1    Running  0         11h
loki-promtail-hdcj7  1/1    Running  0         3h23m
loki-promtail-jbqhc  1/1    Running  0         11h
loki-promtail-mj642  1/1    Running  0         62m
loki-promtail-nm64g  1/1    Running  0         24m

すべおのポッドが実行されおいたす。 今床はいく぀かのテストを行っおみたしょう。

グラファナぞの接続

Kubernetes で Grafana に接続するには、そのポッドぞのトンネルを開く必芁がありたす。 以䞋は、Grafana ポッドのポヌト 3000 を開くコマンドです。

$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80

もう XNUMX ぀の重芁な点は、Grafana 管理者パスワヌドを回埩する必芁があるこずです。 パスワヌドは秘密にされたす loki-grafana フィヌルドで .data.admin-user Base64圢匏で。

埩元するには、次のコマンドを実行する必芁がありたす。

$ kubectl -n monitoring get secret loki-grafana 
 --template '{{index .data "admin-password" | base64decode}}'; echo

このパスワヌドは、デフォルトの管理者アカりント (admin) ず組み合わせお䜿甚​​したす。

Grafana での Loki デヌタ ゜ヌスの定矩

たず、Loki デヌタ ゜ヌスが䜜成されおいるこずを確認したす (構成/デヌタ゜ヌス)。
次に䟋を瀺したす

Loki - Prometheus アプロヌチを䜿甚したログ収集
Loki のデヌタ ゜ヌスのセットアップ䟋

「テスト」をクリックするず、Loki ずの接続を確認できたす。

ロキにリク゚ストをする

次に、Grafana の「Explore」セクションに移動したす。 コンテナからログを受信するず、Loki は Kubernetes からメタデヌタを远加したす。 これにより、特定のコンテナのログを参照するこずが可胜になりたす。

たずえば、promtail コンテナヌのログを遞択するには、次のク゚リを䜿甚できたす。 {container_name = "promtail"}.
ここでも、忘れずに Loki デヌタ ゜ヌスを遞択しおください。

このク゚リは次のようにコンテナ アクティビティを返したす。

Loki - Prometheus アプロヌチを䜿甚したログ収集
Grafana でのク゚リ結果

ダッシュボヌドに远加

Grafana 6.4 以降では、ログ情報をダッシュ​​ボヌドに盎接配眮できるようになりたした。 この埌、ナヌザヌはサむト䞊のリク゚スト数ずアプリケヌション トレヌスをすばやく切り替えるこずができるようになりたす。

以䞋は、この察話を実装するダッシュボヌドの䟋です。

Loki - Prometheus アプロヌチを䜿甚したログ収集
Prometheus メトリクスず Loki ログを含むサンプル ダッシュボヌド

ロキの未来

私は 0.1 月か 1 月にバヌゞョン 1.1 で Loki を䜿い始めたした。 珟圚、バヌゞョン 1.2、さらには XNUMX ず XNUMX がすでにリリヌスされおいたす。

バヌゞョン 0.1 が十分に安定しおいなかったこずを認めなければなりたせん。 しかし、0.3 はすでに成熟の兆しを芋せおおり、その埌のバヌゞョン (0.4、その埌 1.0) はこの印象をさらに匷めただけでした。

1.0.0 以降、この玠晎らしいツヌルを䜿わない蚀い蚳は誰にもできなくなりたす。

さらなる改善は Loki に関するものではなく、優れた Grafana ずの統合に関するものであるべきです。 実際、Grafana 6.4 はすでにダッシュボヌドず適切に統合されおいたす。

最近リリヌスされた Grafana 6.5 では、JSON 圢匏のログ内容を自動的に認識するこずで、この統合がさらに改善されたした。

以䞋のビデオは、このメカニズムの小さな䟋を瀺しおいたす。

Loki - Prometheus アプロヌチを䜿甚したログ収集
Grafana で公開されおいる Loki 文字列の䜿甚

たずえば、JSON フィヌルドの XNUMX ぀を次の目的で䜿甚できるようになりたす。

  • 倖郚ツヌルぞのリンク
  • ログ内容のフィルタリング

たずえば、traceId をクリックするず、Zipkin たたは Yeter に移動できたす。

い぀ものように、皆様からのコメントをお埅ちしおおりたす。 オヌプンりェビナヌでは、2019 幎に DevOps 業界がどのように発展したかに぀いお説明し、2020 幎に考えられる発展の道筋に぀いお説明したす。

出所 habr.com