介绍
生产服务应用可观测性在当下比较流行的方案,其中出现了大量高性能、开箱即用、易上手的的开源产品,大大丰富了在可观测性领域产品的多样性,本文讲述基于OTLP协议推送Java项目遥测数据(日志、指标、链路)到后端存储服务,整体架构如下:
Opentelemetry:基于Javaagent代理使用探针技术抓取日志、指标、链路等遥测数据,通过OTLP协议推送到后端存储;
Quickwit:日志与链路数据存储后端,提供数据索引器和搜索器核心功能;
Jaeger:基于Quickwit链路索引数据,提供查询Trace服务数据跟踪层级视图;
Prometheus:服务运行指标与系统指标数据采集存储服务;
Grafana:提供强大的可视化图表,并支持众多服务插件与数据源访问,可集成日志查询、Trace跟踪层级、指标数据展示等;
OpenTelemetry
OpenTelemetry就是一种为应用程序代码进行插桩的机制,是一个可观测性框架和工具包, 旨在创建和管理遥测数据,它的目的是帮助使系统变得可观测,如链路、 指标和日志。 重要的是,OpenTelemetry 是供应商和工具无关的,这意味着它可以与各种可观测性后端一起使用, 括 Jaeger 和 Prometheus 这类开源工具以及商业化产品。
OpenTelemetry 不是像 Jaeger、Prometheus 或其他商业供应商那样的可观测性后端。 OpenTelemetry 专注于遥测数据的生成、采集、管理和导出。 OpenTelemetry 的一个主要目标是, 无论应用程序或系统采用何种编程语言、基础设施或运行时环境,你都可以轻松地将其仪表化。 重要的是,遥测数据的存储和可视化是有意留给其他工具处理的。
OpenTelemetry支持多种编程语言零代码插桩模式,在应用或服务的“边缘”捕获遥测数据;本文演示通过零代码插桩模式,通过opentelemetry-javaagent动态注入字节码以从Java库和Java框架中捕获遥测数据,并推送到日志、链路、指标数据存储平台;
opentelemetry使用详情参见官文文档:
Java zero-code instrumentation | OpenTelemetry
opentelemetry-javaagent.jar包开源版本下载:
https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases
采集Java日志、链路、指标
在Java项目的jvm启动参数中,添加otel代理配置和集成Javaagent代理程序包:-javaagent:D:\\test\\opentelemetry-javaagent.jar,通过探针技术抓取日志内容(logs)和跟踪链路跨度数据(traces + span),向指定endpoint端点发送采集数据包;(本示例中使用opentelemetry-javaagent - version: 2.13.3版本,如遇javaagent配置不生效或异常,可以使用该版本调试)
-javaagent:D:\\test\\opentelemetry-javaagent.jar
-Dotel.service.name=customer
-Dotel.logs.exporter=otlp
-Dotel.exporter.otlp.endpoint=http://192.168.1.3:7281
-Dotel.exporter.otlp.protocol="grpc"
-Dotel.traces.exporter=otlp
-Dotel.metrics.exporter=otlp
-Dotel.exporter.otlp.metrics.protocol="http/protobuf"
-Dotel.exporter.otlp.metrics.endpoint=http://192.168.1.3:9090/api/v1/otlp/v1/metrics
-Dotel.metric.export.interval=30000
-Dotel.exporter.otlp.insecure=true
otel.exporter.otlp.endpoint指向的endpoint数据摄取接收器Quickwit日志存储,Quickwit只支持otlp协议gRPC数据传输模式,将logs和traces采集数据通过导出器导出到Quickwit中存储;
otel.exporter.otlp.metrics.endpoint指向的endpoint遥测指标数据接收器Pormetheus存储,将metrics遥测指标样本数据通过导出器导出到Prometheus远程写入器中;
注意,如果将-Dotel.metrics.exporter=none,none则表示不启用Metrics指标数据导出器(通常是导出到Prometheus平台),一般项目中会启用Prometheus主动通过pull拉取模式,获取Java项目(如: SpringBoot)中开启的遥测数据端点,将采集样本数据写入到Prometheus中存储;但如果需要启用opentelemetry的代理模式,并通过otlp协议的metrics导出器导出遥测数据,并由Prometheus平台接收远程otlp数据,则将otel.metrics.exporter设置成otlp或pormetheus;
目前Pormetheus不支持otlp协议下grpc传输数据远程写入,只支持protobuf数据接收与解析,需要单独设置otlp下metrics的protocol传输协议为:"http/protobuf";


1624

被折叠的 条评论
为什么被折叠?



