Golang 语言快速开始
快速开始
本文将描述您如何在 Golang 中开始使用 OpenTelemetry即OTel。您将学习如何对一个简单的Golang应用程序进行观测,并向控制台上报trace、log、metrics数据
注意:
日志信号仍处于实验阶段。未来版本中可能会引入重大更改。
前置条件
确保您已在本地安装以下软件:
go 1.22 或更高版本
Demo示例
以下示例使用基本的 net/http 应用程序。如果您不使用 net/http,那也没关系——您也可以将 OpenTelemetry Go 与其他 Web 框架一起使用,例如 Gin 和 Echo。有关受支持框架的库的完整列表,请参阅注册表。
有关更详细的示例,请参阅示例
设置
开始时候在你的新的目录中设置go mod
创建并启动 HTTP 服务器
在同一文件夹中,创建一个名为 main.go 的文件并将以下代码添加到该文件中:
创建另一个名为 rolldice.go 的文件,并将以下代码添加到该文件中:
使用以下命令构建并运行应用程序:
在 Web 浏览器中打开 http://localhost:8080/rolldice 以确保其正常工作。
增加OpenTelemetry 注入
现在我们将展示如何将OpenTelemetry注入添加到示例应用程序中。如果您正在使用自己的应用程序,可以跟随操作,只需注意您的代码可能会略有不同。
添加依赖项
这将安装OpenTelemetry SDK组件和针对net/http的自动监测功能。如果你需要对其他用于网络请求的库进行监测,你可能需要安装相应的库监测工具。更多关于库的信息,请参见相关文档。
初始化OpenTelemetry SDK
首先,我们将初始化OpenTelemetry SDK。这对于任何导出遥测数据的应用程序都是必需的。
创建一个名为<font style="color:rgb(51, 51, 51);background-color:rgb(247, 249, 253);">otel.go</font>
的文件,并在里面添加OpenTelemetry SDK的引导代码:
如果你只使用追踪(Tracing)或度量(Metrics),你可以省略对应的TracerProvider
或MeterProvider
初始化代码。
对HTTP Server进行注入
现在我们已经初始化了OpenTelemetry SDK,接下来可以对HTTP服务器进行监控(instrument)了。
请修改main.go文件,以包含以下代码:这将设置OpenTelemetry SDK,并使用otelhttp库来对HTTP服务器进行监控。
增加第三方注入
注入库在系统的边缘处捕获遥测数据,例如入站和出站HTTP请求,但它们不会捕获应用程序内部的情况。为此,您需要编写一些自定义的手动注入代码。
使用OpenTelemetry API修改rolldice.go以包含自定义注入:
请注意,如果您仅使用跟踪或度量,可以省略用于注入另一种遥测类型对应的代码。
运行应用
通过以下命令编译并运行这个应用:
在您的网络浏览器中打开 http://localhost:8080/rolldice/Alice。当您向服务器发送请求时,您将在控制台看到两个跨度(span)记录。由监控库生成的跨度跟踪了对/rolldice/{player} 路由的请求生命周期。另一个称为“roll”的跨度是手动创建的,并且它是前一个提到的跨度的子级。
查看demo输出
除了跟踪信息,日志消息也会被输出到控制台。
查看输出
刷新几次http://localhost:8080/rolldice/Alice这个页面,然后稍等片刻或者终止应用程序,你将会在控制台输出中看到指标信息。你会观察到dice.rolls这个指标被输出到控制台,针对每个掷骰子的结果值都有独立的计数,同时还能看到由监控库生成的HTTP相关指标。
查看输出:
将观测数据发往 OTel Collector
OTel Collector 是大多数生产部署中一个关键的组件。以下是一些使用OTel Collector的优势:
● 一个由多个服务共享的单一可观测数据收集器,以减少切换Exporter的开销
- 在发往服务端之前可以集中处理trace,避免重复处理操作
● 可以聚合多个服务、多个主机上的Trace
除非您只有一个服务或正在进行测试,否则在生产部署中,推荐您使用收集器
配置并启动一个本地的OTel Collector
首先,将以下OTel Collector配置代码保存到 /tmp/ 目录中的文件中:
以上配置将使用otlp 协议来接收用户的输入,即OTel Go SDK与OTel Collector之间使用otlp 协议进行通信。并将数据最终打印在OTel Collector控制台。您也可以将数据上报至于Prometheus 或者Jaeger中,详细的配置信息见:OTel Collector配置
然后运行 Docker 命令,根据此配置获取并运行OTel Collector:
您现在将在本地运行一个OTel Collector实例,该实例监听4320端口。
运行Demo
https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/examples/demo
启动Jaeger
通过4317端口接收OTel Collector发送的数据
查看数据
通过http://0.0.0.0:16686 查看Trace数据