Observability Pipelines를 사용하여 OpenTelemetry 로그 전송

이 제품은 선택한 Datadog 사이트에서 지원되지 않습니다. ().
CloudPrem을 평가판에서 만나보세요

CloudPrem 평가판에 참여하여 새로운 자체 호스팅 로그 관리 기능을 확인해 보세요.

Request Access

개요

CloudPrem은 Observability Pipelines를 수집 계층으로 사용하여 OTEL 수집기의 로그 수집을 지원합니다. 이 가이드에서는 기존 OTEL 구성을 변경하지 않고 OTEL 로그를 CloudPrem에 연결하는 단계별 지침을 제공합니다.

이 가이드를 마치면 다음을 할 수 있습니다.

  1. CloudPrem을 로컬에서 시작.
  2. 태그 추가를 위해 사용자 지정 프로세서를 사용하여 Observability Pipeline 생성.
  3. Observability Pipelines Worker 실행.
  4. Python SDK를 사용하여 OpenTelemetry 로그 전송.
  5. Datadog에서 태그가 지정된 로그 확인.

사전 필수 조건

1단계: CloudPrem 시작하기

로컬 CloudPrem 인스턴스를 시작합니다. <YOUR_API_KEY>를 Datadog API Key로 변경합니다.

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 Application Key로 변경합니다.

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 을 사용하세요.
Observability Pipelines 구성

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에서 로그 확인

  1. Datadog Log Explorer로 이동합니다.
  2. 왼쪽 패싯 패널에서 CLOUDPREM INDEXES 아래에 있는 CloudPrem 인덱스를 선택합니다.
  3. otel-demo 서비스에서 생성된 OpenTelemetry 로그에 사용자 지정 태그(pipeline:observability-pipelinessource:opentelemetry)가 포함된 것을 확인할 수 있습니다.
Datadog Log Explorer에서 CloudPrem 로그를 확인할 수 있습니다.

다음 단계

  • OpenTelemetry Collector 또는 계측된 애플리케이션을 구성하여 Worker로 로그를 전송하도록 설정하세요.
  • 파이프라인에 프로세서(sampling, enrichment, transformation)를 추가하세요.
  • 운영 환경 워크로드에 맞춰 Worker 배포 규모를 확장하세요.
  • 고급 구성은 Observability Pipelines 문서를 참고하세요.

클린업

컨테이너를 정지시키고 제거하는 방법:

docker stop cloudprem opw
docker rm cloudprem opw

참고 자료