配置Jaeger Agent Sidecar后Nginx服务未在Jaeger-Query UI显示求助
解决Jaeger-Query未显示注入Agent Sidecar的Nginx服务问题
核心问题说明
Jaeger-Query只会显示产生了追踪数据的服务,仅仅注入Agent Sidecar不足以让服务显示——你还需要为Nginx配置追踪逻辑,让它生成并上报追踪数据到Sidecar。以下是分步排查和解决方法:
1. 先确认Agent Sidecar已成功注入
首先验证Sidecar是否真的跑起来了:
- 查看Pod列表,确认目标Pod包含两个容器:
正常情况下,kubectl get pods -n observabilityjaeger-nginx-test-deployment对应的Pod应该有jaeger-nginx-test-deployment(Nginx)和jaeger-agent两个容器。 - 查看Pod详情,确认Sidecar容器状态正常:
检查kubectl describe pod <你的Pod名称> -n observabilityjaeger-agent容器的State是否为Running,没有启动错误。
2. 为Nginx配置追踪功能
默认官方Nginx镜像不包含追踪模块,需要使用带OpenTelemetry模块的镜像,并配置追踪规则:
步骤2.1:创建带追踪配置的ConfigMap
新建nginx-tracing.conf文件,内容如下:
load_module modules/ngx_http_opentelemetry_module.so; events {} http { # 启用OpenTelemetry追踪 opentelemetry on; # 设置追踪的操作名称为请求方法+路径 opentelemetry_operation_name "$request_method $uri"; # 从请求头中读取Traceparent(支持上游服务传递追踪上下文) opentelemetry_traceparent_from_request; # 将追踪数据上报到本地的Jaeger Agent(Sidecar监听14268端口) opentelemetry_exporter jaeger http://localhost:14268/api/traces; server { listen 80; location / { root /usr/share/nginx/html; index index.html index.htm; } } }
然后创建ConfigMap:
kubectl create configmap nginx-tracing-config -n observability --from-file=nginx.conf=nginx-tracing.conf
步骤2.2:修改Nginx Deployment
更新你的Deployment配置,使用带OpenTelemetry模块的Nginx镜像,并挂载上述ConfigMap:
apiVersion: apps/v1 kind: Deployment metadata: name: jaeger-nginx-test-deployment namespace: observability spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx annotations: sidecar.jaegertracing.io/inject: "true" # 建议把注解移到Pod模板层,确保注入逻辑生效 spec: volumes: - name: nginx-config configMap: name: nginx-tracing-config containers: - image: nginx:1.25.3-opentelemetry # 带OpenTelemetry模块的官方镜像 name: jaeger-nginx-test-deployment ports: - containerPort: 80 volumeMounts: - name: nginx-config mountPath: /etc/nginx/nginx.conf subPath: nginx.conf
应用更新:
kubectl apply -f <你的Deployment文件路径> -n observability
3. 触发流量并验证追踪数据
- 访问Nginx服务(通过Ingress或者ClusterIP),产生实际的请求流量:
curl <你的Ingress域名或ClusterIP> - 查看Jaeger Agent的日志,确认它接收到了追踪数据:
日志中如果出现类似kubectl logs <你的Pod名称> -c jaeger-agent -n observabilitySpan received的内容,说明数据已正常上报。
4. 检查Jaeger后端状态
- 确认Jaeger Collector和Query组件运行正常:
kubectl get pods -n observability | grep jaeger - 查看Collector日志,确认没有数据接收错误:
kubectl logs <jaeger-collector-xxx> -n observability
完成以上步骤后,刷新Jaeger-Query UI,就能看到Nginx服务的追踪数据了。
内容的提问来源于stack exchange,提问作者RobTheRobot16
相关产品推荐
相关产品推荐

