ホームページ  >  記事  >  ウェブフロントエンド  >  NestJS + Opentelemetry (Grafana クラウド)

NestJS + Opentelemetry (Grafana クラウド)

WBOY
WBOYオリジナル
2024-08-19 17:14:38788ブラウズ

Production環境でOpentelemetryを使用する

Opentelemetryをアプリケーションに設定し、ローカルにOtel CollectorとLoki、Tempo、Grafanaを浮かべてトレースを見ることができるのはこの前の投稿まで仕上げになった。

もう残ったのはローカルだけでなく、実際のP​​roduction環境でのtracingを見ることだ。

そのために必要なのは「クラウド上に Log, Trace を保存すること」だ。

方法

1. Opentelemetry Collector をデプロイする

Opentelemetry Collector(+ Loki、Tempoなど)をどこにでも置いておき、アプリケーションで撃つOLTPのアドレスをこのCollectorに設定すればよい。

あるいはより良いScalabilityのためにLoad balancingのためのGatewayを置き、ゲートウェイからOLTPを受けて内部のCollectorsに渡す方法もある。

2. Grafana Alloyをインストールして展開する

Grafana Alloyはグラファナによって提供されるconfigurableなopentelemetry collectorである。

Dockerで配布するか、既存のKubernatesを使用している場合は、新しいノードとして追加できます。

3. Collectorなしですぐに撃つ

CollectorなしでBackend(Loki、Tempo、Jaegerなど)にOLTPを直接送ってしまう方法だ。

BackendでGrafana CloudのLoki、Tempoを使用できるため、配布せずに迅速に導入できるという利点がある。

の代わりにCollectorを使用して得ることができるScalabilityやProcessingなどのメリットはなくなる。

採用: Collectorなしで撃つ

クールにCollectorを配布して書きたいのですが、既存のKubernetesも使わない環境でCollector別に配布して設定するのに時間がかかりすぎるようで、ただGrafana Cloudですぐに撮影する方法を選択しました。

事実実験用に導入してみるのだし、スタートアップなので、scalabilityが大きく重要に作用せず(ロギングだから)何よりも速くしてみることができるので、ファンシーではないが良い意思決定だ。

コード

コードの変更はとてもシンプルです。 OLTPのendpointとProtocolだけをよく設定してください。

Tracer

私たちが撮影したトレースを受け取るendpoint(grafana cloud)はhttp / protobufプロトコルを受け取るので、exporter-trace-otlp-protoからインポートして書き込む必要があります。

ロガー

Loggerは従来もHttpプロトコルを使っていたので、OTLPLogExporterはそのまま使用すればよい。

環境変数

import { OTLPTraceExporter as PROTOOTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";

const oltpTraceExporter = new PROTOOTLPTraceExporter({
  url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/traces",
  headers: {
    Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION,
  },
});
参考に、NestJSでは、環境変数はAppModuleを初期化するときに設定されるため、AppModuleを作成する前に完了する必要があるトレーサーとロガーの設定では使用できません。

dotenvを使用している場合は、最初に呼び出す必要があります。

const logExporter = new OTLPLogExporter({
  url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/logs",
  headers: {
    Authorization: process.env.OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION,
  },
});
環境変数の値

銀根を見つけるのは難しいので、よく従いましょう。

グラパナ接続

右上のMy Accountをクリック

左のNavbarのGRAFANA CLOUDの下のStack名をクリック(ない場合はnew stackで作成)
// eslint-disable-next-line import/order
import { config } from "dotenv";
// eslint-disable-next-line import/order
import { getEnvFilePath } from "@/lib/utils/env-loader";
config(); // load env before loading tracer and logger

// eslint-disable-next-line import/order
import otelSDK from "./tracer"; // otelSDK should be imported before any other imports
// eslint-disable-next-line import/order
import createLogger from "./logger";

「Manage your stack」画面でOpentelmetryカードのconfigureを押す

ここでOTEL_EXPORTER_OTLP_ENDPOINTを入手でき、

    以下のPassword / API TokenでGenerate Keyを押してキーを作成すると
  1. Environment Variablesの中のOTEL_EXPORTER_OTLP_HEADERSからBasicで始まる部分は、OTEL_EXPORTER_OTLP_HEADERS_AUTHORIZATION変数の値です。
  2. 環境変数を登録して実行する。
  3. グラパナクラウドの実行
  4. グラファナでGrafana Launchをクリックし、Exploreでデータを見てみましょう

以上がNestJS + Opentelemetry (Grafana クラウド)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。