IBM的Instana应用程序资源监控(ARM)工具利用自动化和人工智能来提供可见性和可行的信息DevOps团队来管理动态应用程序。 Instana可以在部署目标平台的代理后立即开始监视平台,而VOILã就是这样。
但是,如果客户已经构建了几个微服务应用程序,这些应用程序是由Instana部署在非观察基础架构并已经生成OpenTelemetry跨度上的?
怎么办?OpentElemetry是API,SDK和工具的集合。使用它来仪器,生成,收集和导出遥测数据(指标,日志和痕迹)来帮助您分析软件的性能和行为。
这是一个只想知道这是否可行的客户要求的。为了向客户证明这一点,我去了官方文档,并尝试以Go编程语言进行示例尝试。
Instana可以与OpenTelemetry无缝集成,还可以增强OpenTelemetry的数据。这种集成进一步增强了数据采集功能。
官方文件在这里:OpenTelemetry Integration for Go Application也指向public GitHub repository。
显然,第一件事是克隆存储库。
git clone https://github.com/instana/go-otel-exporter.git
我在笔记本电脑上有一个旧版本的Go,我将其更新为20,以便制作这项工作。
在将代码克隆到以下的文件夹中(如GitHub页面上所述)
go get github.com/instana/go-otel-exporter
使用克隆的存储库,main.go应用在示例中子文件夹。根据您的工作方式,您可能需要创建以下 go.work 文件。
// go.work
go 1.20
use ./example
提供的 main.go github repo上的文件如下;
package main
import (
"context"
"time"
instana "github.com/instana/go-otel-exporter"
"go.opentelemetry.io/otel"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/trace"
)
// This example application demonstrates how to use the Instana OTel Exporter.
// Make sure to provide the required environment variables before run the application:
// * INSTANA_ENDPOINT_URL
// * INSTANA_AGENT_KEY
func main() {
ch := make(chan bool)
// Acquire an instance of the Instana OTel Exporter
exporter := instana.New()
// Setup and bootstrap the tracer provider
tracerProvider := sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exporter),
)
otel.SetTracerProvider(tracerProvider)
ctx := context.Background()
// Instrument something with OTel
tracer := otel.Tracer("my-traced-tech")
_, span := tracer.Start(ctx, "my_span", trace.WithSpanKind(trace.SpanKindServer))
// This simulates the time that a span takes to be completed
time.Sleep(time.Millisecond * 400)
span.End()
<-ch
}
所需的元素才能在Instana中进行跟踪
所需的元素使所有工作都是;
-
instana_agent_key 可以从您要使用的Instana实例/租户中检索。请按照此链接查找信息:Preparing endpoints and keys。
-
instana_endpoint_url :请按以下链接找到信息:Preparing endpoints and keys。
-
您肯定希望拥有服务名称 instana_service_name
-
最后但并非最不重要的一点是,您应该在应用程序的各个部分都有跨度,以便可以追溯到Precisel
Spans **表示代码执行的时间;换句话说,一个开始和结束时间的动作。它还包含一组由时间戳和持续时间组成的数据。**
我想要一个真正的“快速而肮脏” 版本,我做了一些更改并进行了以下内容;
package main
import (
"context"
"fmt"
"os"
"time"
instana "github.com/instana/go-otel-exporter"
"go.opentelemetry.io/otel"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/trace"
)
// This example application demonstrates how to use the Instana OTel Exporter.
// Make sure to provide the required environment variables before run the application:
// * INSTANA_ENDPOINT_URL
// * INSTANA_AGENT_KEY
// You can also use the INSTANA_LOG_LEVEL environment variable to set the log level. Available options are:
// * debug
// * info
// * warn
// * error
func main() {
os.Setenv("INSTANA_AGENT_KEY", "XXXXXXXX ---- MY INSTANA SERVER AGENT KEY ------")
os.Setenv("INSTANA_ENDPOINT_URL", "https://serverless-orange-saas.instana.io")
os.Setenv("INSTANA_SERVICE_NAME", "AAM-SERVICE")
fmt.Println("INSTANA_AGENT_KEY:", os.Getenv("INSTANA_AGENT_KEY"))
fmt.Println("INSTANA_ENDPOINT_URL:", os.Getenv("INSTANA_ENDPOINT_URL"))
fmt.Println("INSTANA_SERVICE_NAME:", os.Getenv("INSTANA_SERVICE_NAME"))
//ch := make(chan struct{})
// Acquire an instance of the Instana OTel Exporter
exporter := instana.New()
// Setup and bootstrap the tracer provider
tracerProvider := sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exporter),
)
otel.SetTracerProvider(tracerProvider)
ctx := context.Background()
// Instrument something with OTel
tracer := otel.Tracer("AAM-my-traced-tech")
_, span := tracer.Start(ctx, "my_span", trace.WithSpanKind(trace.SpanKindServer))
time.Sleep(time.Millisecond * 400)
span.End()
for i := 0; i < 300; i++ {
time.Sleep(time.Millisecond * 500)
fmt.Println("i:", i)
}
}
执行应用程序后,请转到Instana仪表板并为您的服务做搜索过滤器。
这个示例不仅仅是基本示例。它只是表明,以任何将跟踪指标发送到 opentelemetry 的语言编写的应用程序代码很容易被修改以与 instana 。
我的下一步是用 python 。
进行相同的样本展示柜感谢您的阅读和关注!
链接
追踪的概念:https://www.ibm.com/docs/en/instana-observability/current?topic=monitoring-traces
监视GO:https://www.ibm.com/docs/en/instana-observability/current?topic=technologies-monitoring-go#tracing