如何用webfunny的OpenTelemetry探针采集数据

一只会飞的鱼儿 26天前 ⋅ 54 阅读
ad

1、取下载OpenTelemetry-javaAgent的jar包

去官网下载java对应的agent.jar包,下载地址:https://opentelemetry.io/es/docs/zero-code/java/agent/getting-started/

 

2、idea开发工具上引入探针

-javaagent:/Users/yulei/Documents/package/opentelemetry/opentelemetry-javaagent.jar
-Dotel.service.name=应用名称
-Dotel.resource.attributes=deployment.environment=production,service.instance.id=webfunny_20251129_230724_sit
-Dotel.exporter.otlp.endpoint=http://xxx.webfunny.cn:4317
-Dotel.exporter.otlp.protocol=grpc
-Dotel.traces.exporter=otlp
-Dotel.metrics.exporter=none
-Dotel.logs.exporter=otlp
-Dotel.javaagent.logging.level=INFO
-Dotel.instrumentation.jvm-metrics.enabled=true
-Dotel.instrumentation.system-metrics.enabled=true
-Dotel.instrumentation.jdbc.enabled=true
-Dotel.instrumentation.spring-webmvc.enabled=true
-Dotel.instrumentation.http-client.enabled=true

在自己的java后端项目pom.xml中引入opentelemetry的相关jar

<!-- 添加 OpenTelemetry 相关依赖 -->
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>1.24.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry.instrumentation</groupId>
<artifactId>opentelemetry-instrumentation-annotations</artifactId>
<version>1.24.0</version>
</dependency>

如何上报错误信息到span中呢,在service层的方法行加个@WithSpan注解

@Slf4j
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class GearServiceImpl extends ServiceImpl<GearMapper, Gear> implements IGearService {

@Override
@WithSpan
public IPage<Gear> getGearPage(Gear gear, QueryRequest request) {
Page<CdkeyConfig> page = new Page<>(request.getPageNum(), request.getPageSize());
SortUtil.handlePageSort(request, page, "gear.type", FebsConstant.ORDER_ASC, false);
IPage<Gear> gearPage = this.baseMapper.getGearPage(page, gear);
return gearPage;
}
}

3、应用脚本引入探针

官网的引入方式:

java -javaagent:path/to/opentelemetry-javaagent.jar -Dotel.service.name=your-service-name -jar myapp.jar

javaagent:后面是opentelemetry-javaagent.jar的本地路径,

配置参数:

-Dotel.service.name=服务应用名称

webfunny接入的方式

#!/bin/bash

# 应用名称
prog="webfunny-manage"

# OpenTelemetry 配置
OTEL_SERVICE_NAME="java后端管理平台"
OTEL_RESOURCE_ATTRIBUTES="deployment.environment=production,service.instance.id=webfunny_20251218_224703_pro"
OTEL_EXPORTER_OTLP_ENDPOINT="http://xxx.webfunny.cn:4317"
OTEL_EXPORTER_OTLP_PROTOCOL="grpc"
OTEL_TRACES_EXPORTER="otlp"
OTEL_METRICS_EXPORTER="none"
OTEL_LOGS_EXPORTER="otlp"
OTEL_JAVAAGENT_LOGGING_LEVEL="INFO"
OTEL_INSTRUMENTATION_JVM_METRICS_ENABLED="true"
OTEL_INSTRUMENTATION_SYSTEM_METRICS_ENABLED="true"
OTEL_INSTRUMENTATION_JDBC_ENABLED="true"
OTEL_INSTRUMENTATION_SPRING_WEBMVC_ENABLED="true"
OTEL_INSTRUMENTATION_HTTP_CLIENT_ENABLED="true"

# Java 代理路径
OTEL_AGENT_JAR="/home/yulei/manage/opentelemetry-agent/opentelemetry-javaagent.jar"

# 检查 OpenTelemetry 代理是否存在
check_opentelemetry_agent() {
    if [ ! -f "$OTEL_AGENT_JAR" ]; then
        echo "错误: OpenTelemetry 代理文件不存在: $OTEL_AGENT_JAR"
        echo "请确保已下载 opentelemetry-javaagent.jar 到指定位置"
        exit 1
    fi
    echo "OpenTelemetry 代理文件存在"
}

start() {
    now=$(date "+%Y%m%d%H%M%S")

    # 检查 OpenTelemetry 代理
    check_opentelemetry_agent

    # 执行启动命令
    exec java \
        -javaagent:"$OTEL_AGENT_JAR" \
        -Dotel.service.name="$OTEL_SERVICE_NAME" \
        -Dotel.resource.attributes="$OTEL_RESOURCE_ATTRIBUTES" \
        -Dotel.exporter.otlp.endpoint="$OTEL_EXPORTER_OTLP_ENDPOINT" \
        -Dotel.exporter.otlp.protocol="$OTEL_EXPORTER_OTLP_PROTOCOL" \
        -Dotel.traces.exporter="$OTEL_TRACES_EXPORTER" \
        -Dotel.metrics.exporter="$OTEL_METRICS_EXPORTER" \
        -Dotel.logs.exporter="$OTEL_LOGS_EXPORTER" \
        -Dotel.javaagent.logging.level="$OTEL_JAVAAGENT_LOGGING_LEVEL" \
        -Dotel.instrumentation.jvm-metrics.enabled="$OTEL_INSTRUMENTATION_JVM_METRICS_ENABLED" \
        -Dotel.instrumentation.system-metrics.enabled="$OTEL_INSTRUMENTATION_SYSTEM_METRICS_ENABLED" \
        -Dotel.instrumentation.jdbc.enabled="$OTEL_INSTRUMENTATION_JDBC_ENABLED" \
        -Dotel.instrumentation.spring-webmvc.enabled="$OTEL_INSTRUMENTATION_SPRING_WEBMVC_ENABLED" \
        -Dotel.instrumentation.http-client.enabled="$OTEL_INSTRUMENTATION_HTTP_CLIENT_ENABLED" \
        -jar -Xms256M -Xmx256M \
        webfunny_manage-2.0.jar >/dev/null 2>&1 &

    # 保存进程ID
    PID=$!
    echo $PID > server.pid

    # 等待进程启动
    sleep 2

    # 检查进程是否运行
    if kill -0 $PID 2>/dev/null; then
        echo "启动 $prog 成功 (PID: $PID)"

        # 检查OpenTelemetry是否初始化成功
        echo " 检查OpenTelemetry初始化..."
        sleep 3

        # 查看日志中是否有OpenTelemetry相关信息
        if ps -p $PID > /dev/null; then
            echo "进程运行正常"
            echo " OpenTelemetry 监控已启用,数据将发送到: $OTEL_EXPORTER_OTLP_ENDPOINT"
        else
            echo "进程可能启动失败,请检查日志"
        fi
    else
        echo "启动 $prog 失败"
        rm -f server.pid
        exit 1
    fi
}

stop() {
    if [ -f server.pid ]; then
        PID=$(cat server.pid)
        if kill -0 $PID 2>/dev/null; then
            echo " 正在停止 $prog (PID: $PID)..."
            kill $PID
            sleep 2
            if kill -0 $PID 2>/dev/null; then
                echo "进程未正常停止,强制终止..."
                kill -9 $PID
                sleep 1
            fi
            echo "停止 $prog 完成"
        else
            echo "进程 $PID 未运行"
        fi
        rm -rf server.pid
    else
        echo "server.pid 文件不存在,$prog 可能未运行"
    fi
}

status() {
    if [ -f server.pid ]; then
        PID=$(cat server.pid)
        if kill -0 $PID 2>/dev/null; then
            echo " 正在运行 (PID: $PID)"
            # 显示进程信息
            ps -p $PID -o pid,ppid,time,cmd
            # 检查OpenTelemetry相关环境变量
            echo ""
            echo " OpenTelemetry 配置:"
            cat /proc/$PID/environ 2>/dev/null | tr '\0' '\n' | grep -E "OTEL|JAVA_TOOL_OPTIONS" || echo "无法获取环境变量"
        else
            echo " 已停止 (PID 文件存在但进程未运行)"
            rm -f server.pid
        fi
    else
        echo " 未运行"
    fi
}

restart() {
    echo " 重新启动 $prog ..."
    stop
    sleep 2
    start
}

4、查看上报数据

这样ApmSpaninfo表中就有对应错误信息了

 

 

关于Webfunny

Webfunny专注于前端监控系统,前端埋点系统的研发。 致力于帮助开发者快速定位问题,帮助企业用数据驱动业务,实现业务数据的快速增长。支持H5/Web/PC前端、微信小程序、支付宝小程序、UniApp和Taro等跨平台框架。实时监控前端网页、前端数据分析、错误统计分析监控和BUG预警,第一时间报警,快速修复BUG!支持私有化部署,Docker容器化部署,可支持千万级PV的日活量!

  点赞 0   收藏 0
  • 一只会飞的鱼儿
    共发布61篇文章 获得8个收藏
全部评论: 0