Dapr の可観測性メトリックとログ

Dapr の可観測性メトリックとログ

この記事では、インジケーターとログのサポートについて紹介します。

索引

メトリクスにより、アプリのパフォーマンスとリソース消費量を把握できます。舞台裏では、Dapr はさまざまなシステムおよびランタイム メトリックのコレクションを出力します。 Dapr はメトリクス標準として Prometheus を使用し、Dapr とシステム サービスはポート 9090 でメトリクス データを公開します。Prometheus スクレーパーは、定義済みの時間間隔でこのインターフェイスを呼び出して、インジケーター データを収集します。スクレーパーは、以下に示すように、インジケーターの値を監視バックエンドに送信します。

Prometheus メトリックをスクレイピングする

メトリック スクレーパーがメトリックを収集する場所をどのように認識するのか疑問に思うかもしれません。 Prometheus は、ターゲットのデプロイメント環境に組み込まれた検出メカニズムと統合できます。たとえば、Kubernetes で実行する場合、Prometheus は Kubernetes API と統合して、環境内で実行されている利用可能なすべての Kubernetes リソースを見つけることができます。

Dapr は、次の表に示すように、Dapr システム サービスとそのランタイムに関するさまざまなメトリックを生成します。

Dapr インジケーター

実行時に、Dapr コマンドに --enable-metrics=false 引数を含めることでメトリックの収集を無効にするか、--metrics-port 9090 引数を使用してメトリック エンドポイントの既定のポートを変更できます。

また、アプリケーションのデプロイメントに dapr.io/enable-metrics: "false" アノテーションを設定することで、特定のアプリケーションのメトリック エクスポーターを無効にすることもできます。メトリック エクスポーターを無効にすると、daprd はメトリック リスニング ポートを開きません。次の例では、ポートを 9090 として指定してメトリックを明示的に有効にしています。

 apiバージョン: アプリ/ v1
種類: デプロイメント
メタデータ:
名前: ノードアプリ
仕様:
セレクター:
マッチラベル:
アプリ: ノード
テンプレート
メタデータ:
ラベル:
アプリ: ノード
注釈:
ダップルio / 有効: "true"
dapr .io / アプリ- ID : "nodeapp"
dapr .io / アプリ- ポート: "3000"
dapr .io / 有効化- メトリック: "true"
dapr .io / メトリック- ポート: "9090"
仕様:
コンテナ:
- 名前: ノード
画像: dapriosamples / hello - k8s - node : 最新
ポート:
- コンテナポート: 3000
imagePullPolicy : 常に

Dapr 構成ファイルを使用して、ランタイム メトリックの収集を有効または無効にすることもできます。

 apiバージョン: dapr .io / v1alpha1
種類: 構成
メタデータ:
名前: dapr - config
仕様:
トレース:
サンプリングレート: "1"
メトリック:
有効: false

Prometheus スクレーパーがメトリックを収集し、監視バックエンドに公開した後、Grafana を使用して、Dapr システム サービスとサイドカーの監視を含むダッシュボードを作成できます。 Dapr を監視するために、Dapr が提供するダッシュボード テンプレートを直接インポートできます。アドレスは https://github.com/dapr/dapr/tree/master/grafana で、3 つのダッシュボードが含まれています。

  • Dapr システム サービス ステータス - dapr-operator、dapr-sidecar-injector、dapr-sentry、および dapr-placement
  • Dapr サイドカー ダッシュボード - サイドカーの健全性/リソース、HTTP および gRPC のスループット/レイテンシ、アクター、mTLS などを含む Dapr サイドカーのステータスを表示します。
  • Dapr アクター ダッシュボード - アクター呼び出しのスループット/レイテンシ、タイマー/リマインダー トリガー、ラウンドベースの同時実行性など、Dapr サイドカーのステータスを表示します。

したがって、まず Prometheus と Grafana をインストールし、Kubernetes に基づいて Prometheus の自動検出を構成し (エンドポイントとポッドの両方を構成する必要があります)、Prometheus を Grafana のデータ ソースとして構成する必要があります。ここでは、次の 2 つのアプリケーションをすでに導入しています。

 $ kubectl get svc - n kube - mon
名前タイプクラスタ- IP 外部- IP ポート( S ) 年齢
グラファナノードポート10.99 .209 .245 < なし> 3000 : 30403 / TCP 39 d
プロメテウスNodePort 10.100 .236 .253 < なし> 9090 : 31561 / TCP 81 d
$ kubectl ポッドの取得- n kube - mon
名前準備完了ステータス再起動年齢
grafana - d877667d6 - 4 vgnd 1 / 1 実行中25 ( 60 ) 39
ノード- エクスポーター- 49l 4f 1 / 1 実行中48 ( 60 ) 81
ノード- エクスポーター- khqls 1 / 1 実行中46 ( 60 ) 81
ノード- エクスポーター- wjwtb 1 / 1 実行中47 ( 60 ) 81
プロメテウス- 649968556 c - szb9c 1 / 1 実行中11 ( 60 ) 14

Prometheus は自動検出用に構成されているため、Dapr アプリケーションのメトリックはデフォルトで自動的にキャプチャされます。これらは Prometheus のターゲット リストで見つけることができます。

プロメテウスのターゲット

次に、https://github.com/dapr/dapr/tree/master/grafana で提供されている 3 つのダッシュボードをそれぞれ Grafana にインポートできます。

インポートダッシュボード

ただし、インポート後すぐにダッシュボードが表示されない場合があります。データ ソースを実際に構成されたデータ ソースに変更するには、いくつかの変更が必要です。

テンプレートを変更する

システムを構成すると、ダッシュボードのデータを正常に表示できるようになります。以下は、Dapr システム サービスのメトリックを表示するダッシュボードの例です。

ダッシュボード

ログ

ログにより、実行時にサービスで何が起こっているかを把握できます。アプリケーションを実行すると、Dapr は Dapr サイドカーおよび Dapr システム サービスからログ データを自動的に出力します。ただし、アプリケーション コードに記録されたログは自動的には含まれません。アプリケーション コードからログを出力するには、OpenTelemetry SDK などの特定の SDK をインポートできます。

Dapr は構造化されたログを出力し、各ログ エントリは次の形式になります。

dapr ログ形式

時間とレベルのフィールドは、トラブルシューティングの際に非常に役立ちます。時間フィールドではログ エントリが並べ替えられるため、特定の期間を正確に見つけることができます。トラブルシューティングを行う際、デバッグレベルのログ エントリによって、コードの動作に関する詳細な情報が提供されます。

また、デフォルトでは、Dapr は構造化されたログ データをプレーン テキスト形式で出力します。各ログエントリは、キーと値のペアを含む文字列としてフォーマットされます。以下はプレーンテキスト形式のログレコードの例です。

 time = "2020-03-11T17:08:48.303776-07:00" level = info msg = "Dapr ランタイムを開始しています -- バージョン 0.5.0-rc.3 -- コミット v0.3.0-rc.0-155-g5dfcf2e" instance = dapr - pod - xxxx scope = dapr . ランタイムタイプ= ログバージョン= 0.5 .0 -rc.3
time = "2020-03-11T17:08:48.303913-07:00" level = info msg = "ログ レベルが info に設定されました" instance = dapr - pod - xxxx scope = dapr . ランタイムタイプ= ログバージョン= 0.5 .0 - rc .3

この形式は単純ですが、解析するのは困難です。ログ収集ツールを使用する場合、JSON 形式のログの方が解析しやすくなります。 JSON エントリを使用する場合、ログ ツールは個々のフィールドにインデックスを付けてクエリを実行できます。以下は JSON 形式の同じログ エントリです。

 { "instance" : "dapr-pod-xxxx""level" : "info""msg" : "Dapr Runtime を開始しています -- バージョン 0.5.0-rc.3 -- コミット v0.3.0-rc.0-155-g5dfcf2e""scope" : "dapr.runtime""time" : "2020-03-11T17:09:45.788005Z""type" : "log""ver" : "0.5.0-rc.3" }
{ "instance" : "dapr-pod-xxxx""level" : "info""msg" : "ログ レベルが info に設定されました""scope" : "dapr.runtime""time" : "2020-03-11T17:09:45.788075Z""type" : "log""ver" : "0.5.0-rc.3" }

JSON フォーマットを有効にするには、各 Dapr サイドカーを構成する必要があります。セルフホスト モードでは、コマンド ラインでフラグ --log-as-json を指定できます。

 dapr run --app - id nodeapp --log - level info --log - as - json node app    js

Kubernetes では、次のようにアプリケーションの各デプロイメントに dapr.io/log-as-json アノテーションを追加できます。

 注釈:
ダップルio / 有効: "true"
dapr .io / アプリ- id : "calculator-front-end"
dapr.io/app - ポート: " 80 "
dapr .io / config : "dapr-config"
dapr .io / ログ- as - json : "true"

Helm を使用して Kubernetes クラスターに Dapr をインストールする場合、すべての Dapr システム サービスに対して JSON 形式でのログ記録を有効にすることができます。

 helm リポジトリdapr を追加しますhttps://dapr.github.io/helm-charts/
helm リポジトリの更新
kubectl 名前空間dapr を作成- システム
helm install dapr dapr / dapr --namespace dapr - system --set global を実行しますlogAsJson = true

Dapr によって出力されたログは、分析のために監視バックエンドに送ることができます。ログ コレクターは、システムからログを収集し、監視バックエンドに送信するコンポーネントです。よく使われるログコレクターは Fluentd です。前回のコースでは、Kubernetes で Fluentd、Elastic search、Kibana を設定してログを収集する方法を紹介しました。詳細については、公式ドキュメント https://docs.dapr.io/operations/monitoring/logging/fluentd/ を直接参照することもできます。

運用状況

サービスの健全性ステータスは、サービスの可用性に関する洞察を提供します。各 Dapr サイドカーは、ホスト環境がサイドカーの健全性を判断するために使用できる健全性 API を公開します。

 GET http : //localhost:3501/ v1.0/healthz

この操作は、2 つの HTTP ステータス コードを返します。

  • 204: サイドカーが正常に走行する場合。
  • 500: サイドカーが正常に機能していません。

自己管理モードで実行している場合、ヘルス API は自動的には呼び出されませんが、アプリケーション コードまたはヘルス監視ツールによって呼び出すことができます。

Kubernetes で実行する場合、Dapr サイドカー インジェクターは、ヘルス API を使用してライブネス プローブと準備プローブを実行するように Kubernetes を自動的に構成します。

Kubernetes は、コンテナが起動して実行されているかどうかを判断するためにライブネス プローブを使用します。ライブネスプローブが失敗コードを返す場合、Kubernetes はコンテナが停止していると想定し、コンテナを自動的に再起動します。この機能により、アプリケーションの全体的な可用性が向上します。

Kubernetes は、準備プローブを使用して、コンテナがトラフィックの受け入れを開始する準備ができているかどうかを判断します。 Pod のすべてのコンテナの準備が整うと、準備完了とみなされます。準備状況によって、Kubernetes サービスが負荷分散シナリオでトラフィックを Pod にルーティングできるかどうかが決まります。準備ができていないポッドはロードバランサーから自動的に削除されます。

活性プローブと準備プローブにはいくつかの構成可能なパラメーターがあり、どちらも Pod マニフェスト ファイルのコンテナー仕様セクションで構成されます。 Dapr は、サイドカー コンテナーごとに、デフォルトで次の構成を使用します。

 ライブネスプローブ:
httpGet : 取得:
パス: v1.0 / healthz
ポート: 3501
初期遅延秒数: 5
期間秒数: 10
タイムアウト秒数: 5
失敗しきい値: 3
準備状況プローブ:
httpGet : 取得:
パス: v1.0 / healthz
ポート: 3501
初期遅延秒数: 5
期間秒数: 10
タイムアウト秒数: 5
失敗しきい値: 3

プローブには次のパラメータを使用できます。

  • パスは Dapr ヘルス API エンドポイントを指定します。
  • port Dapr ヘルス API ポートを指定します。
  • initialDelaySeconds は、Kubernetes がプローブ コンテナを初めて起動する前に待機する秒数を指定します。
  • periodSeconds は、Kubernetes がプローブ間で待機する秒数を指定します。
  • timeoutSeconds は、Kubernetes がタイムアウトする前に API 応答を待機する秒数を指定します。タイムアウトは失敗として解釈されます。
  • failureThreshold は、コンテナが非アクティブまたは準備ができていないと判断する前に Kubernetes が受け入れる失敗ステータス コードの数を指定します。

詳細な観測可能性は、本番環境で分散システムを実行する上で非常に重要です。 Dapr は、分散トレース、ログ、メトリック、ヘルスなど、さまざまな種類のテレメトリを提供します。

Dapr は Dapr システム サービスとサイドカーのテレメトリ データのみを生成し、アプリケーション コード内のテレメトリは自動的には含まれないことに注意してください。ただし、特定の SDK を使用して、アプリケーション コードからテレメトリ データを出力することは可能です。

Dapr テレメトリはオープン スタンダード ベースの形式で生成されるため、さまざまな監視ツールで取り込むことができます。 Zipkin、Azure Application Insights、ELK Stack、New Relic、Grafana などが含まれます。さらに、Dapr は構造化されたログ レコードを出力するように構成できます。バックエンド監視ツールがインデックスを作成できるため、JSON 形式の構造化ログ データを使用することをお勧めします。ユーザーは、ログをインデックス化することで、ログ レコードを検索するときに豊富なクエリを実行できます。 Dapr は、Dapr サービスと構成に関する情報を表示するダッシュボードも提供します。

<<:  Chery Jaguar Land Rover が SAP システムの優先クラウド サービス プロバイダーとして Amazon Web Services を選択

>>:  詳細分析: 金融企業向けコンテナ クラウド プラットフォームのストレージを選択するにはどうすればよいでしょうか?

推薦する

外部リンクを引き続き掲載しています 高品質でフレンドリーなリンクが最高の外部リンクです

SEO 作業において、私たちが最も多く行う作業の 2 つの側面はコンテンツとリンク構築です。これは、...

Weiboのマーケティングコンテンツはこのように扱う必要がある

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス1. コンテンツは We...

李佳奇とシンバの背後にいるPRの立役者

正直に言うと、この夏はゴシップでいっぱいです。毎週、企業や有名人を巻き込んだスキャンダルがあり、さま...

馬峰窩CEOの陳剛氏は、Qunarが「肯定的なレビューを買う」ために投稿ごとに500元を支払ったと非難した。

馬峰窩CEOの陳剛氏は、Qunarが「肯定的なレビューを買う」ために投稿ごとに500元を支払ったと非...

maple-hosting: 古いオランダの苦情耐性サーバー、$189、e3-1270v3/32g メモリ/4TSSD/100T トラフィック

オランダのサーバープロバイダー maple-hosting は現在、特別価格の独立サーバー 2 台 ...

SiteGround - 70% オフセール/ブラックフライデー

SiteGround.com ブラックフライデーセール、全品 70% オフ、11 月 29 日から ...

海外のVPSとしてお勧めです。速度もかなり速いです。

高速な海外VPS(VPS推奨):海外VPSの使用は一般的に高速で、バックグラウンドインターフェースは...

モンデリーズ中国がアリババクラウドと提携、世界有数のスナック企業がデジタルアップグレードを開始

6月7日、雲奇会議上海サミットにおいて、世界的スナック食品大手のモンデリーズ・インターナショナルの代...

Yitan Cloud: クラウドサーバーフラッシュセール、米国\香港\本土、最低218元/年、QQ Music Green Diamond Deluxe Editionを1年間無料で提供

Yitan Cloud製品期間限定フラッシュセール&QQ Musicコレクションイベント開催中! Y...

今後5年間の15の主要なテクノロジートレンド

私たちの生活、仕事、交流の仕方に革命をもたらす技術の進歩によって、未来は常に形を変えています。今後 ...

キーワードでホームページにランクインするために必要なのはたった3つの重要なポイントだけです(I)

新しいサイトがランキングされるにはある程度の時間がかかることは、多くの人が知っています。一般的に、B...

ガートナー:アリババクラウドがアジア太平洋地域の市場シェアで首位、アマゾンとマイクロソフトの合計を上回る

4月24日、ブルームバーグは、アジア太平洋地域のクラウドコンピューティング市場におけるアリババクラウ...

デジタル変革を加速する平安クラウドは、中小銀行の技術革新能力を全面的に強化します。

[51CTO.comからのオリジナル記事] デジタル経済は長い間、世界経済の重要な部分となり、徐々に...

ハイブリッドマルチクラウドがトレンドになりつつあり、テクノロジーアプリケーションは分散化される必要がある

企業が複数のクラウドを利用することは避けられなくなっていますが、顧客が異なるサプライヤー間のクラウド...