otel-agent的配置,以及通过curl命令手动发送traces,logs数据

1.配置

apiVersion: v1
data:
  otel-agent-config: |
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: "0.0.0.0:4317"
          http:
            endpoint: "0.0.0.0:4318"
      opencensus:
        endpoint: 0.0.0.0:55678
      zipkin:
        endpoint: 0.0.0.0:9411
    exporters:
      # Kafka输出器 - 核心:将OTel指标推送到Kafka
      kafka:
        # 替换为你的Kafka Broker地址(多个用逗号分隔)
        brokers: ["kafka-svc.middleware:9092"]
        # 替换为你的Kafka Topic名称
        topic: "otel_topic"
        # 数据编码格式:OTel标准二进制格式(性能最优,推荐)
        protocol_version: 2.1.0
        encoding: otlp_json
        # 生产者配置(优化推送稳定性)
        producer:
          max_message_bytes: 10485760  # 单条消息最大10MB
          compression: gzip          # 开启snappy压缩,节省带宽
      prometheusremotewrite:
        # 关键配置,指定了数据要发送到的目标地址,prometheus需要开启远程写功能  --web.enable-remote-write-receiver
        endpoint: http://10.10.10.10:9000/api/v1/write
        # 可选配置:将资源属性转换为指标标签
        resource_to_telemetry_conversion:
          enabled: true
        timeout: 10s # 请求超时时间
        headers: # 自定义 HTTP 请求头
          Prometheus-Remote-Write-Version: "0.1.0"
        auth:
          authenticator: basicauth/prometheus #basicauth认证
      otlp: # Jaeger直接支持OTLP。OTLP/gRPC的默认端口是4317
        endpoint: http://jaeger-collector.xdd-otel:4317
        tls:
          insecure: true
      otlphttp: #发送给ebpf
        traces_endpoint: "http://ebpf-agent.xdd-otel/api/v1/otel/trace"
        tls:
          insecure: true
        retry_on_failure:
          enabled: true
      logging:  #otel-agent日志中打印详细信息
        verbosity: detailed
        sampling_initial: 5
        sampling_thereafter: 200
    extensions:
      # Basic Auth 配置
      basicauth/prometheus:
        client_auth:
          username: "prometheus"
          password: "prometheus"
    processors:
      batch:
        send_batch_size: 10000     # 每批发送的 span 数
        timeout: 10s
      k8sattributes:
      resource:
        attributes:
          - key: app.host.ip
            from_attribute: k8s.pod.ip
            action: insert
    service:
      extensions: [basicauth/prometheus]
      pipelines:
        metrics:
          receivers: [otlp]
          exporters: [prometheusremotewrite]
        traces:
          receivers: [otlp, zipkin, opencensus]
          processors: [k8sattributes, resource, batch]
          exporters: [kafka, otlphttp, otlp]
        logs:
          receivers: [otlp]
          exporters: [logging]
kind: ConfigMap
metadata:
  labels:
    app: opentelemetry
    component: otel-agent-conf
  name: otel-agent-conf
  namespace: xdd-otel

 

2.手动发送traces数据

#!/bin/bash

# 生成当前时间戳(纳秒)
current_time=$(date +%s000000000)
start_time=$((current_time - 150000000))  # 150ms前
end_time=$current_time

# 创建临时JSON文件
cat > /tmp/trace_payload.json << EOF
{
  "resourceSpans": [
    {
      "resource": {
        "attributes": [
          {
            "key": "service.name",
            "value": {
              "stringValue": "xdd-service"
            }
          }
        ]
      },
      "scopeSpans": [
        {
          "scope": {
            "name": "manual-instrumentation"
          },
          "spans": [
            {
              "traceId": "$(openssl rand -hex 16)",
              "spanId": "$(openssl rand -hex 8)",
              "name": "GET /api/v1/users/{id}",
              "kind": 2,
              "startTimeUnixNano": "$start_time",
              "endTimeUnixNano": "$end_time",
              "attributes": [
                {
                  "key": "http.method",
                  "value": {
                    "stringValue": "GET"
                  }
                },
                {
                  "key": "http.route",
                  "value": {
                    "stringValue": "/api/v1/users/:id"
                  }
                },
                {
                  "key": "http.status_code",
                  "value": {
                    "intValue": 200
                  }
                }
              ],
              "status": {
                "code": 0
              }
            }
          ]
        }
      ]
    }
  ]
}
EOF

# 发送到OpenTelemetry Collector
curl -X POST http://otel-agent-svc.xdd-otel:4318/v1/traces \
  -H "Content-Type: application/json" \
  -d @/tmp/trace_payload.json

echo "Trace sent with duration: 150ms"

 

3.手动发送logs数据

# 创建临时日志文件
cat > /tmp/logs.json << EOF
{
  "resourceLogs": [{
    "resource": {
      "attributes": [{
        "key": "service.name",
        "value": { "stringValue": "batch-service" }
      }]
    },
    "scopeLogs": [{
      "logRecords": [
        {
          "timeUnixNano": "$(date +%s%N)",
          "severityText": "INFO",
          "body": { "stringValue": "First log message" }
        },
        {
          "timeUnixNano": "$(date +%s%N)",
          "severityText": "ERROR",
          "body": { "stringValue": "Second log message with error" }
        }
      ]
    }]
  }]
}
EOF

# 发送批量日志
curl -X POST http://otel-agent-svc.xdd-otel:4318/v1/logs \
  -H "Content-Type: application/json" \
  --data-binary @/tmp/logs.json

 

posted @ 2026-01-12 14:32  wdgde  阅读(24)  评论(0)    收藏  举报