{"id":23945087,"url":"https://github.com/chenmudu/open-telemetry-java-guides","last_synced_at":"2025-09-21T04:31:37.629Z","repository":{"id":172800408,"uuid":"321038784","full_name":"chenmudu/open-telemetry-java-guides","owner":"chenmudu","description":"Java OpenTelemetry 测试指南 ：Open-Telemetry-Java-Guides 案例，用于测试常用中间件支持及 Otel 相关组件的使用情况。 ","archived":false,"fork":false,"pushed_at":"2024-07-16T09:17:54.000Z","size":18296,"stargazers_count":78,"open_issues_count":2,"forks_count":30,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-06T07:29:17.543Z","etag":null,"topics":["guides-otel","java-8","observability","open-telemetry-java","opentelemetry","opentelemetry-collector","otel","otel-javaagent","spring-open-telemetry","test-otel"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chenmudu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-13T10:31:07.000Z","updated_at":"2024-09-21T05:45:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"0e2d3669-572c-4b7f-aeea-117f4d920502","html_url":"https://github.com/chenmudu/open-telemetry-java-guides","commit_stats":null,"previous_names":["chenmudu/open-telemetry-java-guides"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenmudu%2Fopen-telemetry-java-guides","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenmudu%2Fopen-telemetry-java-guides/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenmudu%2Fopen-telemetry-java-guides/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chenmudu%2Fopen-telemetry-java-guides/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chenmudu","download_url":"https://codeload.github.com/chenmudu/open-telemetry-java-guides/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233711043,"owners_count":18717952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["guides-otel","java-8","observability","open-telemetry-java","opentelemetry","opentelemetry-collector","otel","otel-javaagent","spring-open-telemetry","test-otel"],"created_at":"2025-01-06T07:25:19.978Z","updated_at":"2025-09-21T04:31:31.231Z","avatar_url":"https://github.com/chenmudu.png","language":"Java","readme":"### Open-Telemetry-Java-Guides 案例工程\n\n\u003e Open-Telemetry-Java-Guides案例，用于测试常用中间件支持及Otel相关组件的使用情况。关于更多Otel请访问Otel官网。\n\n必读部分：[数据展示](#数据展示)、 [前言](#前言)、[环境准备](#环境准备)、[参数设置](#参数设置)，\n[启动测试服务](#启动测试服务)、[结果观测](#结果观测)、[测试服务列表](#测试服务列表)、[测试环境](#测试环境)、[测试库及框架列表](#测试库及框架列表).\n\n\u003e 🔈：希望各位先fork，后clone,这样关于我新提交的东西您就可以观测到。如果仅仅clone，我的最新提交您可能感知不到。\n个人无偿测试和搭建不易，麻烦赏颗星星，感谢您。🙇‍。\n\n#### 数据展示\n\nOtel-Col Info By ItSelf :\n\n![avatar](image/otel-col-spans-metrics.png)\n\nApp-Trace Info By Jaeger:\n\n![avatar](image/jaeger-trace.png)\n\nApp-Jvm-Metrics Info By Prometheus And Prometheus Gateway:\n\n![avatar](image/app-jvm-metrics.png)\n\n- 关于业务日志, 借助对应的日志框架实现自定义即可，后将数据对接至Otel-Collector即可。\n\n- 中心化管控：Biz Logging, Trace, Metrics 较为方便。~~还未尝试Otel让 个人 最惊喜的Tail-Base-Smaple规则。~~\n\n- 关于Otel-Col的Tailed Base采样已尝鲜，值得注意的是，该功能的局限性：\n    \n    1. 基于尾部采样仅仅适合在单个 Collector 内可成功运行，多个Collector之间组成的集群官方及个人均未测试。\n    \n    1. 基于尾部采样的规则，目前仅仅适用于Trace，其实个人觉得更重要的是业务的Logging数据。\n\n#### 前言 \n\n- Open Telemetry(下面简称 Otel(与Open Tracing 的Ot做区分))[相关资料及文档](https://opentelemetry.io/docs/java/getting_started/)。\n\n- 搭建最小测试版的guides服务，仅仅是为了体验和测试Otel，故此数据仅存于内存中。\n\n- arch: ![avatar](image/otel-guides-arch.png)\n\n#### 环境准备\n\n1. ~~暂时不~~选择Otel-Collector，选择使用最小版Jaeger进行观测。关于[如何安装All in One](https://www.jaegertracing.io/docs/1.16/getting-started/)的Jaeger。\n\n2. 下载[Otel-Javaagent.jar](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v0.12.0/opentelemetry-javaagent-all.jar)至磁盘目录下,[关于Latest release](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases) ，目前[最新版本为Beta 0.12.0](https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/tag/v0.12.0)。\n\n3. 拉取[Otel-Col-Docker-Image](https://hub.docker.com/search?q=otel\u0026type=image).\n\n4. 关于docker 安装相关组件请移步[这儿](https://github.com/chenmudu/open-telemetry-java-guides/tree/master/config/others.properties)\n\n#### 参数设置\n\n1. 设置VmOptions,指向磁盘中的otel-javaagent.jar的置放目录。\n```sh\njava -javaagent:path/to/opentelemetry-javaagent-all.jar\n```\n2. 设置VmOptions,关于Exporter,otel默认为自己的OTLP Exporter,这里我们选择~~使用zipkin作为默认Exporter，其兼容jaeger的RestApi。使用Http方式上报至Jaeger的Collector中(~~也可以使用Otel-Collector~~)~~。\n```sh\n// 省略此步骤，当你使用Otel-Collector的时候。\n-Dotel.exporter=zipkin\n```\n3. 向Environment variable添加参数对：\n```sh\nOTEL_RESOURCE_ATTRIBUTES=service.name=otel-simple-moudlename\n```\n\n4. 关于[Otel官方参数设置。](https://github.com/open-telemetry/opentelemetry-java-instrumentation#getting-started)\n\n#### 关于Otel-Collector\n\n1. Docker/Windows 安装 Otel-Collector即可。\n\n2. 向Environment variable添加参数对：\n```sh\nOTEL_RESOURCE_ATTRIBUTES=service.name=your service name\n```\n3. 关于[Otel-Collector-Design](https://github.com/open-telemetry/opentelemetry-collector/blob/master/docs/design.md)\n\n#### 启动测试服务\n\n git clone 当前项目. 选择测试的模块(确保[环境准备](#环境准备)、[参数设置](#参数设置)已经完成)。详情请进入子模块测试服务read me file,启动子模块。\n \n#### 结果观测\n\n1. 确保[环境准备](#环境准备)、[参数设置](#参数设置)，[启动测试服务](#启动测试服务)已按步完成。\n\n2. 访问Jaeger-Ui即可观测结果，按步完成后UI默认地址为:http://localhost:16686/。\n\n\n#### 测试服务列表\n\n* [Open-Telemetry-Java 示例工程（基于 Spring   MVC 示例WebMvc）](otel-simple-webmvc)\n* [Open-Telemetry-Java 示例工程（基于 Spring   MVC 示例Tail Based采样）](otel-simple-tailbase)\n* [Open-Telemetry-Java 示例工程（基于 Rest Clients 示例RestClient）](otel-simple-restclient)\n* [Open-Telemetry-Java 示例工程（基于 Spring Webflux 示例WebFlux）](otel-simple-webflux)\n* [Open-Telemetry-Java 示例工程（基于 Spring Rdb 示例Rdb）](otel-simple-rdb)\n* [Open-Telemetry-Java 示例工程（基于 Spring Async 示例Async）](otel-simple-async)\n* [Open-Telemetry-Java 示例工程（基于 Spring Data 示例Data系列）](otel-simple-spring-data)\n* [Open-Telemetry-Java 示例工程（基于 Spring Amqp 示例RabbitMq）](otel-simple-rabbit)\n* [Open-Telemetry-Java 示例工程（基于 Spring Kafka 示例KafkaMq）](otel-simple-kafka)\n* [Open-Telemetry-Java 示例工程（基于 Spring Neo4j 示例Neo4j）](otel-simple-neo4j)\n* [Open-Telemetry-Java 示例工程（关于 Otel Collector 个人配置参考）](https://github.com/chenmudu/open-telemetry-java-guides/tree/master/config/otel-col-config.yaml)\n\n#### 测试环境\n\n- JDK Version: 1.8.0_171 \u0026 Open-Jdk:11-2018.09.25\n\n- Otel Java Agent Version: 0.12.0 \u0026 0.14.1\n\n- Otel Collector Win10 Version: 0.16.0\n\n- Otel Collector Docker Version: 0.16.0-Dev\n\n- Otel Collector Contrib Docker Version: 0.17.0-Dev\n\n- Maven Version: 3.3.9\n\n- IDEA Version: 2018.1.5 x64\n\n- OS Version: Win10\n\n- Docker Version: 19.03.13\n\n- JVM Info: Java HotSpot(TM) 64-Bit Server VM (25.171-b11, mixed mode)\n\n- Others：Prometheus, Prometheus Gateway, Jaeger All In One, Grafana ...\n\n#### 测试库及框架列表\n\n| Library/Framework         | Versions                       |Test Result               |官方最低版本支持   |\n|---------------------------|--------------------------------|--------------------------|-----------------|\n| Servlet                   | 4.0                            |Y                         |      2.2+       |\n| WebMvc                    | 5.1.15                         |Y                         |      3.1+       |\n| WebFlux                   | 5.1.15                         |Y                         |      5.0+       |\n| RestTemplate(sync \u0026 async)| 5.1.15                         |N/Y(错当rest temeplate为http client. 且不支持 async resttemplate.)故此推荐，如果生产使用RestTemplate，将其底层替换为HttpClient，包括连接池、其他参数等| 官方无支持|\n| ApacheHttpClient(sync \u0026 async)  | 4.5.12/4.1.4             |Y                         |      2.0+/1.9+ (not including 2.x yet)|\n| HttpUrlConnection         | java8                          |Y                         |      Java 7+    |\n| OkHttp(sync \u0026 async)      | 3.6.0                          |Y                         |      3.0+       |\n| JdbcMysqlConnector        | 8.0.22                         |Y                         |      无         |\n| Spring-Data-Jdbc          | 2.1.14(1.0.17.RELEASE)         |Y                         |      1.8+       |\n| Spring-Data-Jpa           | 2.1.14(2.1.17.RELEASE)         |Y                         |      1.8+       |\n| Spring-Data-Rest          | 2.1.14(3.1.17.RELEASE)         |Y                         |      1.8+       |\n| Spring-Data-Mongo         | 2.1.14(2.1.17.RELEASE)         |Y                         |      1.8+       |\n| Spring-data-Redis         | 2.1.14(2.1.17.RELEASE)         |Y                         |      1.8+       |\n| lettuce-core              | 5.1.8.RELEASE                  |Y                         |      4.0+ (not including 6.x yet)      |\n| Jedis-Client              | 2.9.0                          |Y                         |      1.4+       |\n| Redisson-Client           | 0.0.0                          |N 还未测试                  |      3.0+      |\n| Spring-data-Es            | 2.1.14(3.1.17.RELEASE)         |Y                         |      1.8+       |\n| Spring-data-Neo4j         | 2.1.14(5.1.17.RELEASE)         |N 还未测试                 |      1.8+       |\n| Spring-Rabbit             | 2.1.14(2.1.14.RELEASE)         |Y                         |      无         |\n| Rabbit-Client             | 5.4.3                          |Y                         |      2.7+       |\n| Spring-Kafka              | 2.1.13                         |Y                         |      无         |\n| Kafka-Client              | 2.0.1                          |Y                         |      0.11+      |\n| .......                   | .....                          |Y                         | |\n\n#### 关于其他\n\n- 单个服务应当部署单独的Otel-Agent去收集你的Logging、Trace、Metrics。\n\n- 在每条业务架设对应的Otel-Col-Gateway去做总线收集较为妥当(划分依据参考自身业务)。\n\n- 至于更大的集群模式，请自行尝试。暂时切莫用于生产，待官方发布GA版本，个人将预先尝试。","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchenmudu%2Fopen-telemetry-java-guides","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchenmudu%2Fopen-telemetry-java-guides","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchenmudu%2Fopen-telemetry-java-guides/lists"}