Recursos
Um recurso representa a entidade que está gerando telemetria como atributos do recurso. Por exemplo, um processo que está gerando telemetria e que está sendo executado em um container no Kubernetes tem o nome de um processo, um nome de pod, um namespace e possivelmente um nome de deployment. Todos esses quatro atributos podem ser incluídos em um recurso.
No seu backend de observabilidade, você pode usar as informações de um recurso para refinar a investigação de comportamentos relevantes. Por exemplo, se seus dados de rastros ou métricas indicarem latência no seu sistema, você pode restringir a investigação para um determinado container, pod ou deployment do Kubernetes.
Recursos devem ser adicionados a um TracerProvider
, MeterProvider
e
LoggerProvider
durante a sua inicialização, e são criados de maneira
semelhante aos atributos:
res := resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceNameKey.String("meuServico"),
semconv.ServiceVersionKey.String("1.0.0"),
semconv.ServiceInstanceIDKey.String("abcdef12345"),
)
provider := sdktrace.NewTracerProvider(
...
sdktrace.WithResource(res),
)
Observe o uso do pacote semconv
para fornecer
nomes convencionais para os atributos do
recurso. Isso ajuda a garantir que os consumidores da telemetria produzida
utilizando as convenções semânticas possam identificar facilmente os atributos
relevantes e entender seu significado.
Os recursos também podem ser detectados automaticamente por meio das
implementações de resource.Detector
. Esses Detector
s podem descobrir
informações sobre o processo em execução, o sistema operacional em que ele está
sendo executado, o provedor de nuvem que hospeda a instância do sistema
operacional ou qualquer número de outros atributos de recurso.
res, err := resource.New(
context.Background(),
resource.WithFromEnv(), // Descobre e fornece atributos das variáveis de ambiente OTEL_RESOURCE_ATTRIBUTES e OTEL_SERVICE_NAME.
resource.WithTelemetrySDK(), // Descobre e fornece informações sobre o SDK do OpenTelemetry que está sendo utilizado.
resource.WithProcess(), // Descobre e fornece informações do processo.
resource.WithOS(), // Descobre e fornece informações do Sistema Operacional.
resource.WithContainer(), // Descobre e fornece informações do contêiner.
resource.WithHost(), // Descobre e fornece informações da hospedagem.
resource.WithAttributes(attribute.String("foo", "bar")), // Adicionar atributos de recurso personalizados.
// resource.WithDetectors(thirdparty.Detector{}), // Inclua a sua própria implementação externa do Detector.
)
if errors.Is(err, resource.ErrPartialResource) || errors.Is(err, resource.ErrSchemaURLConflict) {
log.Println(err) // Registre problemas não-fatais.
} else if err != nil {
log.Fatalln(err) // O erro pode ser fatal.
}
Feedback
Was this page helpful?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!