Splunk Observability Cloud 用に NodeJS Azure 関数をインストルメンテーションする 🔗
NodeJS Azure関数をインストルメンテーションすることで、関数が実行されるたびにスパンをSplunk Observability Cloudに送信できます。
NodeJSのAzure関数をOpenTelemetryで計測し、Splunk Observability Cloudにテレメトリを送信するには、以下の概要の手順に従ってください:
環境変数の定義 🔗
関数の設定で必要な環境変数を設定します:
関数アプリで関数を選択します。
Settings にアクセスし、次に Configuration にアクセスします。
New application setting を選択し、以下の設定を追加します:
Name
値
SPLUNK_ACCESS_TOKEN
Splunk アクセストークン。アクセストークンを取得するには、Splunk Observability Cloudを使用したユーザー APIアクセストークンの取得と管理 を参照してください。
SPLUNK_REALM
Splunk Observability Cloud レルム、たとえば
us0
です。Splunk レルムを見つけるには、レルムに関する注意 を参照してください。NODE_OPTIONS
インストルメンテーションモジュールをプリロードするための NodeJS オプションを指定します:
-r @splunk/otel/instrument
その他必要な設定を追加します。
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
ヘルパーを使った関数をインストルメンテーションする方法を示しています:
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 で検索します。詳しくは トレース内でのスパンの表示およびフィルタリング を参照してください。
トラブルシューティング 🔗
Splunk Observability Cloudをご利用のお客様で、Splunk Observability Cloudでデータを確認できない場合は、以下の方法でサポートを受けることができます。
Splunk Observability Cloudをご利用のお客様
Splunk サポートポータル でケースを送信する
Splunkサポート に連絡する
見込み客および無料トライアルユーザー様
Splunk Answers のコミュニティサポートで質問し、回答を得る
Join the Splunk #observability user group Slack channel to communicate with customers, partners, and Splunk employees worldwide. To join, see Chat groups in the Get Started with Splunk Community manual.