Docs » Splunk Observability Cloud でサポートされているインテグレーション » バックエンドアプリケーションをインストルメンテーションして、スパンを Splunk APM に送信する » Splunk Observability Cloud に Node.js アプリケーションをインストルメンテーションする » Splunk Observability Cloud 用に Node.js アプリケーションを手動でインストルメンテーションする

Splunk Observability Cloud 用に Node.js アプリケーションを手動でインストルメンテーションする 🔗

OpenTelemetry Node.js の Splunk ディストリビューションのエージェントを使用してアプリケーションを自動的にインストルメンテーションすることで、ほとんどのニーズに対応できます。アプリケーションを手動でインストルメンテーションする必要があるのは、たとえばスパンにカスタム属性を追加する必要がある場合や、スパンを手動で生成する必要がある場合だけです。

注釈

手動 OTel インストルメンテーションは、Splunk の自動 Node.js インストルメンテーションと完全に互換性があり、Splunk によって完全にサポートされています。

カスタムトレース 🔗

カスタムトレースを Splunk Observability Cloud に送信するには、必要な依存関係を追加し、トレースを設定します:

const { start } = require('@splunk/otel');
const opentelemetry = require('@opentelemetry/api');

start({
  serviceName: 'my-service',
});

const tracer = opentelemetry.trace.getTracer('example-app', '0.1.0');

function randomNumber() {
  return tracer.startActiveSpan('make-random', (span) => {
    const result = Math.random() * 42;
    span.setAttribute('random-result', result);
    span.end();
    return result;
  });
}

setInterval(() => {
  console.log(randomNumber());
}, 1000);

注釈

手動インストルメンテーションの例については、OpenTelemetry 公式ドキュメントの Manual instrumentation を参照してください。

カスタムメトリクス 🔗

カスタムアプリケーション・メトリクスを Splunk Observability Cloud に送信するには、依存関係に @opentelemetry/api-metrics を追加します:

const { start } = require('@splunk/otel');
const { Resource } = require('@opentelemetry/resources');
const { metrics } = require('@opentelemetry/api-metrics');

// All fields are optional.
start({
  // Takes preference over OTEL_SERVICE_NAME environment variable
  serviceName: 'my-service',
  metrics: {
    // The suggested resource is filled in using OTEL_RESOURCE_ATTRIBUTES
    resourceFactory: (suggestedResource: Resource) => {
      return suggestedResource.merge(new Resource({
        'my.property': 'xyz',
        'build': 42,
      }));
    },
    exportIntervalMillis: 1000, // default: 5000
    // The default exporter used is OTLP over gRPC
    endpoint: 'http://collector:4317',
  },
});

const meter = metrics.getMeter('my-meter');
const counter = meter.createCounter('clicks');
counter.add(3);

カスタムメトリクスリーダーとエクスポーターの設定 🔗

metricReaderFactory 設定を使用して、カスタム・エクスポーターとカスタム・リーダーを提供することができます。

注意

metricReaderFactory の使用は、exportIntervalendpoint の設定を無効にします。

次の例は、カスタム・エクスポーターを提供する方法を示しています:

const { start } = require('@splunk/otel');
const { PrometheusExporter } = require('@opentelemetry/exporter-prometheus');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-http');
const { PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics-base');

start({
  serviceName: 'my-service',
  metrics: {
    metricReaderFactory: () => {
      return [
        new PrometheusExporter(),
        new PeriodicExportingMetricReader({
          exportIntervalMillis: 1000,
          exporter: new OTLPMetricExporter({ url: 'http://localhost:4318' })
        })
      ]
    },
  },
});

集計時間のタイプを選択する 🔗

集計の時間性は、データがどのように時系列で報告されるかを表します。

2つの異なる集計時間を定義できます:

  • AggregationTemporality.CUMULATIVE:カウンターやヒストグラムのような累積メトリクスは、与えられた開始点から連続的に合計されます。この場合、start の呼び出しで設定されます。これはデフォルトの時間性です。

  • AggregationTemporality.DELTA:メトリクスは、エクスポート間隔によって設定される最後のメトリクス収集ステップからの相対値で合計されます。

カスタムメトリクスで集計の一時性を構成するには、例のように AggregationTemporality を使用します:

const { start } = require('@splunk/otel');
const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-grpc');
const { AggregationTemporality, PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics-base');

start({
  serviceName: 'my-service',
  metrics: {
    metricReaderFactory: () => {
      return [
        new PeriodicExportingMetricReader({
          exporter: new OTLPMetricExporter({
            temporalityPreference: AggregationTemporality.DELTA
          })
        })
      ]
    },
  },
});

集約の時間性についての詳細は、GitHubの https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/metrics/data-model.md#sums を参照してください。

This page was last updated on 2023年11月10日.