Observability Pipelines で OpenTelemetry ログを CloudPrem に送信する
This product is not supported for your selected
Datadog site. (
).
CloudPrem は Preview 版です
CloudPrem Preview に参加すると、新しいセルフ ホスト型のログ管理機能を利用できます。
Request Access概要
CloudPrem では、Observability Pipelines を取り込みレイヤーとして使うことで、OTEL Collector からのログを取り込めます。このガイドでは、既存の OTEL 構成を大きく変えずに、OTEL ログを CloudPrem へ接続する手順を順番に説明します。
このガイドを終えるころには、次のことができるようになります:
- CloudPrem をローカルで起動する
- カスタム プロセッサーでタグを追加する Observability Pipeline を API で作成する
- Observability Pipelines Worker を起動する
- Python SDK を使って OpenTelemetry ログを送信する
- Datadog でタグ付きログを確認する
前提条件
ステップ 1: CloudPrem を起動する
ローカルの CloudPrem インスタンスを起動します。<YOUR_API_KEY> は Datadog API キーに置き換えてください:
export DD_API_KEY="<YOUR_API_KEY>"
export DD_SITE="datadoghq.com"
docker run -d \
--name cloudprem \
-v $(pwd)/qwdata:/quickwit/qwdata \
-e DD_SITE=${DD_SITE} \
-e DD_API_KEY=${DD_API_KEY} \
-p 127.0.0.1:7280:7280 \
datadog/cloudprem run
ステップ 2: API を使って Observability Pipeline を作成する
OpenTelemetry ソース、タグ追加用のプロセッサー、CloudPrem 宛先を含むパイプラインを作成します。<YOUR_APP_KEY> は Datadog アプリケーション キーに置き換えてください:
export DD_APP_KEY="<YOUR_APP_KEY>"
curl -s -X POST "https://api.${DD_SITE}/api/v2/obs-pipelines/pipelines" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: ${DD_API_KEY}" \
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \
-d '{
"data": {
"attributes": {
"name": "OTEL to CloudPrem Pipeline",
"config": {
"sources": [
{
"id": "otel-source",
"type": "opentelemetry"
}
],
"processor_groups": [
{
"id": "main-processors",
"enabled": true,
"include": "*",
"inputs": ["otel-source"],
"processors": [
{
"id": "add-tags",
"display_name": "Add tags",
"enabled": true,
"type": "custom_processor",
"include": "*",
"remaps": [
{
"drop_on_error": false,
"enabled": true,
"include": "*",
"name": "ddtags",
"source": ".ddtags = [\"pipeline:observability-pipelines\", \"source:opentelemetry\"]"
}
]
}
]
}
],
"destinations": [
{
"id": "cloudprem-dest",
"type": "cloud_prem",
"inputs": ["main-processors"]
}
]
}
},
"type": "pipelines"
}
}' | jq -r '.data.id'
このコマンドを実行すると pipeline_id が返ります。次の手順で使うので控えておいてください。
注: このカスタム プロセッサーは、remaps 設定を使って、すべてのログにカスタム タグを含む ddtags フィールドを追加します。
ステップ 3: Observability Pipelines Worker を起動する
Docker を使って Observability Pipelines Worker を起動します。<PIPELINE_ID> はステップ 2 で取得した ID に置き換えてください:
export PIPELINE_ID="<PIPELINE_ID>"
docker run -d \
--name opw \
-p 4317:4317 \
-p 4318:4318 \
-e DD_API_KEY=${DD_API_KEY} \
-e DD_SITE=${DD_SITE} \
-e DD_OP_PIPELINE_ID=${PIPELINE_ID} \
-e DD_OP_SOURCE_OTEL_GRPC_ADDRESS="0.0.0.0:4317" \
-e DD_OP_SOURCE_OTEL_HTTP_ADDRESS="0.0.0.0:4318" \
-e DD_OP_DESTINATION_CLOUDPREM_ENDPOINT_URL="http://host.docker.internal:7280" \
datadog/observability-pipelines-worker run
注:
- Worker は HTTP 用にポート 4318、gRPC 用にポート 4317 を公開します。
- macOS / Windows では、ホスト マシン上の CloudPrem に接続するために
host.docker.internal を使います。 - Linux では、
-p フラグの代わりに --network host を使い、エンドポイントには http://localhost:7280 を指定してください。
ステップ 4: Observability Pipelines 経由でログを送信する
OpenTelemetry SDK をインストールし、テスト ログを Observability Pipelines Worker に送信します:
pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
python3 -c "
import time, logging
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
from opentelemetry.sdk.resources import Resource
exporter = OTLPLogExporter(endpoint='http://localhost:4318/v1/logs')
resource = Resource.create({'service.name': 'otel-demo'})
log_provider = LoggerProvider(resource=resource)
log_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
handler = LoggingHandler(logger_provider=log_provider)
logging.getLogger().addHandler(handler)
logging.getLogger().setLevel(logging.INFO)
logging.info('Hello from OpenTelemetry via Observability Pipelines!')
time.sleep(2)
log_provider.shutdown()
print('✓ Log sent successfully!')
"
本番環境では、OpenTelemetry Collector が Worker にログを転送するよう設定します:
exporters:
otlphttp:
endpoint: http://localhost:4318
service:
pipelines:
logs:
receivers: [otlp]
exporters: [otlphttp]
パイプラインと CloudPrem を確認する
すべてのコンポーネントが稼働していることを確認します:
# CloudPrem の状態を確認する
docker logs cloudprem --tail 20
# Observability Pipelines Worker の状態を確認する
docker logs opw --tail 20
ステップ 5: Datadog でログを確認する
- Datadog Log Explorer を開きます。
- 左側の facet パネルで、CLOUDPREM INDEXES の下にある CloudPrem インデックスを選択します。
otel-demo サービスから送信された OpenTelemetry ログが表示され、pipeline:observability-pipelines と source:opentelemetry のカスタム タグが付いていることを確認できます。
次のステップ
- OpenTelemetry Collector または計装済みアプリケーションが Worker にログを送るよう設定する
- パイプラインにさらに多くのプロセッサーを追加する (サンプリング、エンリッチメント、変換など)
- 本番ワークロードに合わせて Worker のデプロイをスケールさせる
- 高度な設定については Observability Pipelines ドキュメント を参照する
クリーン アップ
コンテナを停止して削除するには、次のコマンドを実行します:
docker stop cloudprem opw
docker rm cloudprem opw
参考資料