OpenTelemetry实践系列-2 Log2Trace和Trace2Log

23 阅读2分钟

一. 配置Loki和Tempo

Log2Trace

打开loki数据源

Name配置TraceId

regex 配置 (?:trace_id)=(\w+)

URL配置 ${__value.raw}

打开internal link 配置tempo

保存

Trace2Log

打开tempo数据源,配置如下

二. 验证前准备工作

制作opentelemetry agent的基础镜像

mkdir /home/agent-docker
cd /home/agent-docker
##wget可能会失败,可以直接离线下载并上传
wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v2.20.1/opentelemetry-javaagent.jar
vim Dockerfile
#一个java21+opentelemetry的docker 镜像
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:21-jdk-slim

# 设置语言环境变量为中文
ENV LANG=zh_CN.UTF-8

# 安装所需的软件包,包括中文字体和中文语言支持
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone

# 创建工作目录并复制 OpenTelemetry Java Agent
RUN mkdir -p /otel
COPY ./opentelemetry-javaagent.jar /otel/opentelemetry-javaagent.jar

文件如下:

制作镜像并推送harbor

docker login  -u admin -p Harbor12345 http://192.168.10.136
docker build -t 192.168.10.136/library/opentelemetry-openjdk:21 .
docker push 192.168.10.136/library/opentelemetry-openjdk:21

制作springboot镜像

克隆代码后通过IDE构建得到demo-0.0.1-SNAPSHOT.jar

https://github.com/zhen1995/opentelemetry-demo
mkdir /home/demo-docker
cd /home/demo-docker
vim Dockerfile
# 后端Dockerfile
# 使用opentelemetry+openjdk21的基础镜像
FROM 192.168.10.136/library/opentelemetry-openjdk:21

WORKDIR "/home"

COPY ./demo-0.0.1-SNAPSHOT.jar /home/app.jar

# 合并 JAVA_OPTS 和 OTEL 配置
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

上传demo-0.0.1-SNAPSHOT.jar到服务器后如下

docker build -t 192.168.10.136/library/demo:20260729 . 
docker push 192.168.10.136/library/demo:20260729
docker build -t 10.2.216.104:8080/library/demo:20260729 . 
docker login  -u admin -p Harbor12345 http://10.2.216.104:8080
docker push 10.2.216.104:8080/library/demo:20260729
vim demo.yaml
apiVersion: v1
kind: Namespace
metadata:
  name:  demo
  
--- 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: opentelemetry-demo
  namespace: demo
  labels:
    app: opentelemetry-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: opentelemetry-demo
  template:
    metadata:
      labels:
        app: opentelemetry-demo
    spec:
      containers:
        - name: demo
          image: 192.168.10.136/library/demo:20260729 
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
          resources:
            requests:
              memory: "256Mi"
              cpu: "100m"
            limits:
              memory: "512Mi"
              cpu: "500m"
          env:
            - name: JAVA_OPTS
              value: "-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:InitialRAMPercentage=50.0"
            # 如果使用的是 Spring Boot 的 entrypoint 脚本,它会自动读取 JAVA_OPTS
            # 如果不是,需要在启动命令中引用:java $JAVA_OPTS -jar app.jar
            - name: JAVA_TOOL_OPTIONS
              value: "-javaagent:/otel/opentelemetry-javaagent.jar"
            - name: OTEL_SERVICE_NAME
              value: "opentelemetry-demo"
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: "http://otel-collector.observability.svc.cluster.local:4318"
            - name: OTEL_EXPORTER_OTLP_PROTOCOL
              value: "http/protobuf"
            - name: OTEL_EXPORTER_OTLP_TIMEOUT
              value: "30000"   # 可选:加大超时到 30 秒
            # 启用所有导出(Trace + Metrics + Logs)
            - name: OTEL_TRACES_SAMPLER
              value: "parentbased_traceidratio"
            - name: OTEL_TRACES_SAMPLER_ARG
              value: "1.0"

---
apiVersion: v1
kind: Service
metadata:
  name: opentelemetry-demo
  namespace: demo
  labels:
    app: opentelemetry-demo
spec:
  type: NodePort
  selector:
    app: opentelemetry-demo
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 30081
      protocol: TCP
kubectl apply -f deploy.yaml
#查看在哪个节点
kubectl get pod -o wide

三. 验证

浏览器访问所在节点的30081端口的服务的接口

http://192.168.10.129:30081/demo/test/traceAndLog

查看loki 并验证log2trace

点击tempo

关联tempo数据成功

查看tempo 并验证trace2log

展开对应的trace后,点击log按钮

得到log数据,验证trace2log成功

OpenTelemetry实践系列-1 部署服务篇环境准备 - 掘金

OpenTelemetry实践系列-2 Log2Trace和Trace2Log - 掘金

OpenTelemetry实践系列-3 Metrics2Trace和Trace2Metrics - 掘金