|
Grafana Phlareは、継続的なプロファイリングデータを集約するためのオープンソースソフトウェアプロジェクトです。Grafana PhlareはGrafanaと完全に統合されており、他の観測可能なシグナルとの相関分析が可能です。 継続的なプロファイリングとは何ですか?この概念は貴重です。プロファイリングは、プログラムがどのようにリソースを使用しているかを把握するのに役立ち、ひいてはパフォーマンスとコストの最適化に役立ちます。しかし、分散型クラウドネイティブアーキテクチャへの移行により、このプロセスはさらに複雑化しており、コンピューティングインフラストラクチャ全体でリソース使用状況に関する情報を定期的に自動収集し、圧縮して時系列データとして保存する継続的な分析の必要性が生じています。これにより、時間の経過に伴う変化を視覚化し、関心のある期間に一致するプロファイル(例えば、ピーク使用率時のCPU時間など)を拡大表示できます。 継続的分析は、それがもたらす価値の観点から、可観測性の 4 番目の柱 (メトリック、ログ、トレースの後) であると考えられています。 Grafana Labsでは、Grafana Cloudを支えるソフトウェア(Grafana Loki、Grafana Mimir、Grafana Tempo、Grafanaなど)のパフォーマンスを把握するために、継続的な分析の活用を検討し始めました。例えば、Mimirで遅いクエリをページングする場合、分析を使用することで、Mimirのコードベース内でそのクエリが最も時間がかかっている場所を把握できます。Grafanaがメモリ不足エラーで繰り返しクラッシュしている場合は、メモリプロファイルを調べて、クラッシュ前にどのオブジェクトが最も多くのメモリを消費していたかを確認します。 継続的分析データの保存とクエリに利用できるオープンソースプロジェクトはいくつかありますが、私たちは調査を重ねた結果、Grafana Labsが求めるレベルの継続的分析をサポートするために必要なスケーラビリティ、信頼性、そしてパフォーマンス要件を満たすプロジェクトを見つけるべく尽力しました。全社規模のハッカソンでは、エンジニアチームがプロジェクトを主導し、メトリクス、ログ、トレースに接続したデータ分析の価値を実証しました。これにより、あらゆる環境に継続的分析を展開したいという私たちの思いがさらに高まりました。 そのため、私たちは、他のオープンソースの可観測性バックエンドである Loki、Tempo、Mimir を成功に導いた設計原則、つまり水平にスケーラブルなアーキテクチャとオブジェクト ストレージの使用に基づいて、テレメトリの継続的な分析のためのデータベースを作成することにしました。 コア機能Grafana Phlareは、水平スケーラブルで高可用性、長期保存、そして分析データクエリ機能を提供します。Prometheusと同様に、単一のバイナリファイルだけで簡単にインストールでき、追加の依存関係は不要です。Phlareはオブジェクトストレージを使用するため、大きなコストをかけずに必要なすべての履歴データを保存できます。ネイティブのマルチテナント機能と分離機能により、複数の独立したチームや事業部門が単一のデータベースを実行できます。Grafana Phlareのコア機能は次のとおりです。
建築Grafana Phlareはマイクロサービスベースのアーキテクチャを採用しており、複数の水平スケーラブルなマイクロサービスが個別に、また並列に実行可能です。これらのマイクロサービスはコンポーネントと呼ばれます。Grafana Phlareは、すべてのコンポーネントコードを単一のバイナリファイルにコンパイルするように設計されています。`-target`パラメータは、Grafana Lokiと同様に、単一のバイナリファイルがどのコンポーネントとして実行されるかを制御します。迅速な操作を求めるユーザー向けに、Grafana Phlareはモノリシックモードで実行することもできます。モノリシックモードでは、すべてのコンポーネントが単一プロセスで同時に実行されます。 Grafana Phlareのほとんどのコンポーネントはステートレスであり、プロセスの再起動間でデータを保持する必要がありません。一部のコンポーネントはステートフルであり、プロセスの再起動間のデータ損失を防ぐために、データ損失が発生しにくいストレージに依存しています。Grafana Phlareは、Distributor、Ingester、Querierという、相互作用してクラスターを形成する一連のコンポーネントで構成されています。 単一ユニットモードモノリシックモードは、必要なすべてのコンポーネントを単一プロセスで実行し、デフォルトの動作モードです。「-target=all」パラメータを指定することで設定できます。モノリシックモードはGrafana Phlareをデプロイする最も簡単な方法であり、すぐに使い始めたい場合や開発環境でGrafana Phlareを使用したい場合に非常に便利です。「-target」を「all」に設定した場合に実行されているコンポーネントのリストを確認するには、「-modules」フラグを指定してGrafana Phlareを実行してください。 ./phlare -モジュール マイクロサービスモデルマイクロサービスモデルでは、コンポーネントは複数のプロセスにまたがってデプロイされます。スケーリングはコンポーネントごとに行われるため、スケーリングの柔軟性が向上し、障害ドメインの細分化が可能になります。マイクロサービスモデルは本番環境へのデプロイに適したアプローチですが、最も複雑でもあります。 マイクロサービスモードでは、各Grafana Phlareプロセスが呼び出され、その-targetパラメータが特定のGrafana Phlareコンポーネント(例:-target=ingester、-target=distributor)に設定されます。動作するGrafana Phlareインスタンスを取得するには、必要な各コンポーネントをデプロイする必要があります。マイクロサービスモードでGrafana Phlareをデプロイする場合は、Kubernetesを強くお勧めします。 展開するここでは、使用可能な Kubernetes クラスターがあり、kubectl と helm が構成されていることを前提に、Helm Chart メソッドを使用して Kubernetes クラスターにデプロイします。 まず、phlare-test という名前の名前空間を作成し、この名前空間内にアプリケーション全体をデプロイします。 ☸ ➜ kubectl で名前空間 phlare-test を作成します 次に、Phare の Helm Chart リポジトリを追加します。 ☸ ➜ helm リポジトリ追加 grafana https://grafana.github.io/helm-charts 次に、Helm を使用してインストールします。 デフォルトの単一ユニット方式を使用してインストールする場合は、ワンクリック インストールのために次のコマンドを実行するだけです。 ☸ ➜ helm -n phlare-test install phlare grafana/phlare Grafana Phlareをマイクロサービスモードでインストールする場合は、まず公式ドキュメントで提供されているデフォルト値の設定ファイルを取得します。 # マイクロサービスのデフォルト設定を収集します ☸ ➜ curl -LO values-micro-services.yaml https://raw.githubusercontent.com/grafana/phlare/main/operations/phlare/helm/phlare/values-micro-services.yaml Grafana Phlareをインストールするには、上記の値ファイルを使用する必要があります。クラスターの実際の状況に応じて設定を調整することもできます。例えば、ingesterで設定されているリソース要求は、memory: 6Gi、cpu: 1です。私のクラスターのリソースは不足しているので、少し減らし、レプリカ数を一時的に1に設定することができます(テスト目的のみ)。そうしないと、スケジューリングが成功しません。 次に、次のコマンドを使用してインストールを開始します。 ☸ ➜ helm -n phlare-test アップグレード --install phlare grafana/phlare -f values-micro-services.yaml デプロイ後、Pod のステータスが正常かどうかを確認します。 ☸ ➜ kubectl get pods -n phlare-test すべてのポッドが実行中または完了状態になると、デプロイは完了します。 使用次に、Grafana を設定してプロファイルデータをクエリします。ここでは、Phlare がインストールされているのと同じ Kubernetes クラスターに Grafana をインストールします。これは 1 つのコマンドで実行できます。 ☸ ➜ helm テンプレート -n phlare-test grafana grafana/grafana \ デプロイ後、phrare-test 名前空間全体の Pod のリストは次のようになります。 ☸ ➜ kubectl get pods -n phlare-test 次のコマンドを使用して、Grafana サービスをローカルに転送できます。 ☸ ➜ kubectl port-forward -n phlare-test サービス/grafana 3000:80 次に、ブラウザで http://localhost:3000 を開いて Grafana サービスにアクセスします。 ページの左側で、[構成] -> [データ ソース] をクリックしてプロファイルのデータ ソースを追加し、phlare タイプのデータ ソースを選択します。 データ ソース URL を http://phlare-querier.phlare-test.svc.cluster.local.:4100/ に設定します。 「Save & Test」をクリックして変更を保存します。データソースを追加すると、Grafana Explorerでプロファイルファイルが表示されるはずです。使い方はLokiやPrometheusとほぼ同じです。以下に示すように、GrafanaアプリケーションのCPU使用率を照会できます。 PhlareはGrafanaとネイティブに統合されているため、プロファイルデータをメトリクス、ロギング、トレースと並べて可視化し、スタック全体を包括的に把握できます。また、Grafanaにフレームグラフパネルを追加し、Grafanaで可視化された数百もの異なるデータソースのデータと分析結果を表示するダッシュボードを構築できるようになりました。 Phare の Helm Charts はデフォルトの設定を使用し、エージェントは正しいアノテーションが付与されている限り Pod を取得します。この機能は relabel_config と kubernetes_sd_config を使用します。これらは Prometheus や Grafna エージェントの設定に似ている可能性があります。 Phlare がポッドをクロールできるようにするには、ポッドに次の注釈を追加する必要があります。 メタデータ: `phlare.grafana.com/port` は、ポッドが `/debug/pprof/` エンドポイントを提供するために使用するポートに設定する必要があります。`phlare.grafana.io/scrape` と `phlare.grafana.io/port` の値は、文字列として表現されるように二重引用符で囲む必要があることに注意してください。 Grafanaのインストール時にこれら2つのアノテーションを設定したので、Phlareを使用してGrafanaアプリケーションからプロファイルデータを継続的に取得できます。これにより、上記のGrafanaプロファイルデータをフィルタリングすることができました。 参考リンク
|