Opentelemetryをアプリケーションに設定し、ローカルにOtel CollectorとLoki、Tempo、Grafanaを浮かべてトレースを見ることができるのはこの前の投稿まで仕上げになった。
もう残ったのはローカルだけでなく、実際のProduction環境でのtracingを見ることだ。そのために必要なのは「クラウド上に Log, Trace を保存すること」だ。
方法1. Opentelemetry Collector をデプロイする
2. Grafana Alloyをインストールして展開するGrafana Alloyはグラファナによって提供されるconfigurableなopentelemetry collectorである。
3. Collectorなしですぐに撃つ
CollectorなしでBackend(Loki、Tempo、Jaegerなど)にOLTPを直接送ってしまう方法だ。
BackendでGrafana CloudのLoki、Tempoを使用できるため、配布せずに迅速に導入できるという利点がある。クールにCollectorを配布して書きたいのですが、既存のKubernetesも使わない環境でCollector別に配布して設定するのに時間がかかりすぎるようで、ただGrafana Cloudですぐに撮影する方法を選択しました。
事実実験用に導入してみるのだし、スタートアップなので、scalabilityが大きく重要に作用せず(ロギングだから)何よりも速くしてみることができるので、ファンシーではないが良い意思決定だ。
コードコードの変更はとてもシンプルです。 OLTPのendpointとProtocolだけをよく設定してください。
私たちが撮影したトレースを受け取る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, }, });
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をクリック
// 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";
ここでOTEL_EXPORTER_OTLP_ENDPOINTを入手でき、
以上がNestJS + Opentelemetry (Grafana クラウド)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。