Документация по SDK OpenTelemetry для Golang
фициальная документация OpenTelemetry для Go SDK предоставляет подробные инструкции по настройке и использованию трассировок, метрик и контекстов. Вы можете найти документацию на GitHub и на официальном сайте OpenTelemetry.
Основные источники документации
- GitHub-репозиторий OpenTelemetry Go
- URL: https://github.com/open-telemetry/opentelemetry-go
- Содержит код SDK, примеры использования и справочник по API.
- Документация на сайте OpenTelemetry
- URL: https://opentelemetry.io/docs/instrumentation/go/
- Основное руководство по установке, настройке и инструментированию приложений на Go.
Основные компоненты SDK для Go
1. Установка
Для установки OpenTelemetry SDK используйте команду:
1 2 3 4 |
go get go.opentelemetry.io/otel go get go.opentelemetry.io/otel/sdk/trace go get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc |
2. Инициализация трассировок
Пример настройки трассировки через OTLP:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
package main import ( "context" "log" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" "go.opentelemetry.io/otel/sdk/resource" "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/semconv/v1.7.0" ) func main() { ctx := context.Background() // Создание OTLP экспортёра exporter, err := otlptracegrpc.New(ctx) if err != nil { log.Fatal(err) } // Создание Tracer Provider tp := trace.NewTracerProvider( trace.WithBatcher(exporter), trace.WithResource(resource.NewWithAttributes( semconv.SchemaURL, semconv.ServiceNameKey.String("example-service"), )), ) // Установка Tracer Provider в глобальную конфигурацию otel.SetTracerProvider(tp) defer func() { if err := tp.Shutdown(ctx); err != nil { log.Fatal(err) } }() // Пример использования трассировок tracer := otel.Tracer("example-tracer") ctx, span := tracer.Start(ctx, "example-span") defer span.End() log.Println("Trace example complete") } |
3. Работа с метриками
Работа с метриками в OpenTelemetry Go также возможна через Meter Provider.
Пример кода для счётчика:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import ( "context" "log" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/sdk/metric" ) func main() { ctx := context.Background() // Создание экспортёра для метрик exporter, err := otlpmetricgrpc.New(ctx) if err != nil { log.Fatal(err) } // Создание Meter Provider meterProvider := metric.NewMeterProvider( metric.WithReader(metric.NewPeriodicReader(exporter)), ) otel.SetMeterProvider(meterProvider) defer func() { if err := meterProvider.Shutdown(ctx); err != nil { log.Fatal(err) } }() // Создание метрики meter := otel.Meter("example-meter") counter := metric.Must(meter).NewInt64Counter("example_counter") // Запись значения counter.Add(ctx, 1) log.Println("Metric example complete") } |
Полезные ссылки и ресурсы
- API Reference (Справочник API)
- URL: https://pkg.go.dev/go.opentelemetry.io/otel
- Описание всех доступных методов и структур OpenTelemetry SDK.
- Примеры использования
- URL: https://github.com/open-telemetry/opentelemetry-go/tree/main/example
- Набор примеров для трассировок, метрик и интеграции с различными экспортёрами.
- Документация Collector
- URL: https://opentelemetry.io/docs/collector/
- Руководство по настройке OpenTelemetry Collector для передачи данных.
Часто задаваемые вопросы
Какой экспортёр выбрать?
- OTLP: Рекомендуется для большинства случаев, так как это стандартный протокол OpenTelemetry.
- Jaeger/Zipkin: Если используется уже существующий бэкенд.
Как настроить автоматическое инструментирование?
Для HTTP и gRPC можно использовать библиотеку otelhttp.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import ( "net/http" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" ) func main() { handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { w.Write([]byte("Hello, World!")) }) wrappedHandler := otelhttp.NewHandler(handler, "example-handler") http.ListenAndServe(":8080", wrappedHandler) } |
Заключение
OpenTelemetry SDK для Go — мощный инструмент для внедрения трассировок и метрик в приложения. Полная документация доступна на GitHub, а для быстрого старта используйте предоставленные примеры кода.
Recommended Posts
Как посмотреть метрики в Prometheus UI
12.03.2024