You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus与OpenTelemetry本地Agent在Kubernetes中的配置方法

在Kubernetes中配置Quarkus与DaemonSet形式的OpenTelemetry Collector Agent对接

要让Quarkus应用和以DaemonSet部署在本地节点的OpenTelemetry Collector(Agent)配合工作,核心是让Quarkus Pod能访问到同一节点上的Agent实例,以下是具体配置步骤:

1. 确认OpenTelemetry Collector Agent的部署配置

首先要保证DaemonSet的Agent能被同节点的Quarkus Pod访问,常用两种方式:

  • 启用HostNetwork:让Agent直接使用节点的网络命名空间,监听节点的默认端口(gRPC端口4317、HTTP端口4318)。DaemonSet配置示例:
    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: otel-agent
    spec:
      selector:
        matchLabels:
          app: otel-agent
      template:
        metadata:
          labels:
            app: otel-agent
        spec:
          hostNetwork: true
          containers:
          - name: otel-agent
            image: otel/opentelemetry-collector-contrib:latest
            args:
            - --config=/etc/otel-agent-config.yaml
            ports:
            - containerPort: 4317 # gRPC OTLP端口
            - containerPort: 4318 # HTTP OTLP端口
            volumeMounts:
            - name: config
              mountPath: /etc/otel-agent-config.yaml
              subPath: otel-agent-config.yaml
          volumes:
          - name: config
            configMap:
              name: otel-agent-config
    
  • 使用HostPort:如果不想让Agent占用节点网络命名空间,可以给Agent容器配置hostPort,将容器端口映射到节点端口:
    containers:
    - name: otel-agent
      # ... 其他配置
      ports:
      - name: otlp-grpc
        containerPort: 4317
        hostPort: 4317
        protocol: TCP
      - name: otlp-http
        containerPort: 4318
        hostPort: 4318
        protocol: TCP
    

2. 配置Quarkus访问本地节点的Agent

Quarkus需要知道当前节点的IP,才能指向同节点的Agent,这里用Kubernetes的Downward API注入节点IP到环境变量,再用这个变量配置OTLP端点:

步骤2.1:在Quarkus Deployment中注入节点IP

在Quarkus的Deployment配置里添加环境变量,通过fieldRef获取当前节点的IP:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: quarkus-app
spec:
  # ... 其他配置
  template:
    spec:
      containers:
      - name: quarkus-app
        image: your-quarkus-image:latest
        env:
        - name: NODE_IP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        # ... 其他容器配置

步骤2.2:设置Quarkus的OTLP端点

有两种方式配置Quarkus的OTLP端点,选一种即可:

方式A:通过应用配置文件

在Quarkus的application.properties或application.yaml中引用注入的环境变量:

  • properties格式:
    # 若使用gRPC协议(默认)
    quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://${NODE_IP}:4317
    # 若使用HTTP/protobuf协议
    quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://${NODE_IP}:4318/v1/traces
    quarkus.opentelemetry.tracer.exporter.otlp.protocol=http/protobuf
    
  • yaml格式:
    quarkus:
      opentelemetry:
        tracer:
          exporter:
            otlp:
              # gRPC协议(默认)
              endpoint: "http://${NODE_IP}:4317"
              # HTTP/protobuf协议的配置(注释掉上面的gRPC配置后启用)
              # endpoint: "http://${NODE_IP}:4318/v1/traces"
              # protocol: "http/protobuf"
    

方式B:通过环境变量直接覆盖(推荐)

Quarkus支持将大写+下划线命名的环境变量映射到配置属性,直接在Deployment的环境变量中设置,无需修改应用配置文件:

env:
# ... 其他环境变量
- name: QUARKUS_OPENTELEMETRY_TRACER_EXPORTER_OTLP_ENDPOINT
  value: "http://$(NODE_IP):4317"
# 如果用HTTP协议,加上下面的配置
# - name: QUARKUS_OPENTELEMETRY_TRACER_EXPORTER_OTLP_PROTOCOL
#   value: "http/protobuf"
# - name: QUARKUS_OPENTELEMETRY_TRACER_EXPORTER_OTLP_ENDPOINT
#   value: "http://$(NODE_IP):4318/v1/traces"

3. 验证配置

部署完成后,进入Quarkus Pod,检查环境变量和连接性:

# 进入Pod
kubectl exec -it <quarkus-pod-name> -- sh
# 查看NODE_IP变量是否正确注入
echo $NODE_IP
# 检查与Agent端口的连通性(以gRPC端口为例)
curl -v http://$NODE_IP:4317

内容的提问来源于stack exchange,提问作者Željko Trogrlić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:02:43