Splunk Observability Cloud 用に NodeJS Azure 関数をインストルメンテーションする

スパンをSplunk Observability CloudにエクスポートするためにNodeJS Azure関数をインストルメンテーションする方法を学習します。

NodeJS Azure関数をインストルメンテーションすることで、関数が実行されるたびにスパンをSplunk Observability Cloudに送信できます。

NodeJSのAzure関数をOpenTelemetryで計測し、Splunk Observability Cloudにテレメトリを送信するには、以下の概要の手順に従ってください:

環境変数の定義

関数の設定で必要な環境変数を設定します。

  1. 関数アプリで関数を選択します。

  2. Settings にアクセスし、次に Configuration にアクセスします。

  3. New application setting を選択し、以下の設定を追加します。

    Name

    SPLUNK_ACCESS_TOKEN

    Splunk アクセストークン。アクセストークンを取得するには、「Splunk Observability Cloud を使用したユーザー API アクセストークンの取得と管理」を参照してください。

    SPLUNK_REALM

    Splunk Observability Cloud のレルム(us0 など)。Splunk レルムを見つけるには、「Note about realms」を参照してください。

    NODE_OPTIONS

    インストルメンテーションモジュールをプリロードするための NodeJS オプションを指定します: -r @splunk/otel/instrument

  4. その他必要な設定を追加します。

NPMを使って必要なライブラリを追加する

@splunk/otel の最新バージョンをインストールし、@splunk/otel で使用されている@opentelemetry/api のバージョンと一致させます( package.json を参照)。

スパンを送信するコードをインストルメンテーションする

次に、OpenTelemetry を使用してコードをインストルメンテーションします。コードをインストルメンテーションする出発点として、以下の例を使ってください。Azure 関数に環境変数を追加する手順については、Microsoft Azure ドキュメント(https://learn.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings)を参照してください。

次の例では、instrumentationWrapper ヘルパーを使った関数をインストルメンテーションする方法を示しています:

TS
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions";
import { trace, Span } from "@opentelemetry/api";

const tracer = trace.getTracer('splunk-example-azure', '0.1.0');

export async function myhttptrigger(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
   context.log(`Http function processed request for url "${request.url}"`);

   const response = // run your function logic here.

   return { body: `Hello, ${response}!` };
};

// Universal wrapper method that helps to generate root span for Azure Functions
export const instrumentationWrapper = <T extends (...args: Parameters<T>) => Promise<Awaited<ReturnType<T>>>>(func: T) =>
   async (...args: Parameters<T>): Promise<Awaited<ReturnType<T>>> => {

      let result: Promise<Awaited<ReturnType<T>>>;
      let functionName = func.name;

      await tracer.startActiveSpan(functionName, async (span: Span) => {

            // setup custom attributes for root span, specific to your Azure Functions.
            span.setAttribute("foo", 1);
            span.setAttribute("bar", "Hello World!");
            span.setAttribute("baz", [1, 2, 3])

            result = await func(...args)

            span.end();
         });

      return result;
   }

app.http('myhttptrigger', {
   methods: ['GET', 'POST'],
   authLevel: 'anonymous',
   handler: instrumentationWrapper(myhttptrigger)
});

データが入力されていることを確認する

関数を実行し、そのスパンを Splunk APM で検索します。詳細については、「トレース内でのスパンの表示およびフィルタリング」を参照してください。

トラブルシューティング

If you are a Splunk Observability Cloud customer and are not able to see your data in Splunk Observability Cloud, you can get help in the following ways.

Available to Splunk Observability Cloud customers

Available to prospective customers and free trial users

  • Ask a question and get answers through community support at Splunk Answers.

  • Join the Splunk community #observability Slack channel to communicate with customers, partners, and Splunk employees worldwide.