Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menolak metrik ke Opentelemetry menggunakan go-sdk

Bagaimana untuk menolak metrik ke Opentelemetry menggunakan go-sdk

王林
王林ke hadapan
2024-02-08 23:42:321051semak imbas

如何使用 go-sdk 将指标推送到 Opentelemetry

editor php Xigua akan memperkenalkan anda cara menggunakan go-sdk untuk menolak penunjuk ke Opentelemetry. Opentelemetry ialah rangka kerja pemerhatian sumber terbuka yang membantu pembangun mengumpul dan menganalisis data metrik aplikasi. Menggunakan go-sdk, anda boleh dengan mudah menolak metrik tersuai ke Opentelemetry dan memvisualisasikan serta memantaunya melalui papan pemuka. Artikel ini akan memberi anda pengenalan terperinci kepada proses pemasangan dan konfigurasi go-sdk, serta cara menulis kod untuk menolak data penunjuk ke Opentelemetry, dan memberikan beberapa contoh praktikal dan amalan terbaik. Sama ada anda seorang pemaju baru atau berpengalaman, anda boleh mendapatkan maklumat dan panduan berguna daripada artikel ini untuk membantu anda menggunakan go-sdk dengan lebih baik untuk menolak data penunjuk ke Opentelemetry.

Kandungan soalan

Saya cuba menggunakan go-sdk untuk menolak metrik kepada opentelemetri tetapi saya tidak menemui sebarang dokumentasi mengenainya. Setakat ini saya cuba menggunakan kod ini tetapi tidak tahu apa langkah seterusnya, sejujurnya saya agak keliru dengan pembekal dan pembaca, saya baru memantau

func main() {
    ctx := context.Background()

    res, err := resource.New(ctx, resource.WithAttributes(semconv.ServiceName("my-service")))
    if err != nil {
        panic(err)
    }

    ctx, cancel := context.WithTimeout(ctx, time.Second)
    defer cancel()
    conn, err := grpc.DialContext(ctx, "localhost:4317", grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock())
    if err != nil {
        panic(err)
    }

    metricExporter, err := otlpmetricgrpc.New(ctx, otlpmetricgrpc.WithGRPCConn(conn))
    if err != nil {
        panic(err)
    }

    exporter, err := prometheus.New()
    if err != nil {
        panic(err)
    }

    provider := metric.NewMeterProvider(metric.WithReader(exporter))
    meter := provider.Meter("github.com/open-telemetry/opentelemetry-go/example/prometheus")

    counter, err := meter.Float64Counter("foo", instrument.WithDescription("a simple counter"))
    if err != nil {
        panic(err)
    }
    counter.Add(ctx, 5)

    reader := metric.NewPeriodicReader(metricExporter, metric.WithInterval(1*time.Second))

}

Maklumat sumber yang saya ada setakat ini adalah daripada contoh di sini dan contoh di sini

Penyelesaian

Pertama sekali, perlu diperhatikan bahawa API dan SDK penunjuk OTel Go dianggap tidak stabil pada masa ini. Saya akan cuba memfokuskan jawapan saya pada item peringkat lebih tinggi yang disertakan dalam spesifikasi metrik OpenTelemetry yang stabil supaya ia tidak menjadi usang. Mana-mana kandungan go-spesific di bawah adalah tertakluk kepada perubahan.

Nampaknya anda cuba menyediakan dua jenis pengeksport yang berbeza. Pengeksport Prometheus dikikis oleh Prometheus, dan pengeksport otelmetricgrpc mencipta sambungan untuk menolak metrik melalui OTLP ke singki seperti OpenTelemetry Collector. Anda mungkin hanya memerlukan satu atau yang lain, bukan kedua-duanya. Contoh pertama yang anda pautkan adalah benar-benar hanya untuk penjejakan, bukan metrik, tetapi prinsipnya adalah lebih kurang sama.

Titik masuk untuk sebarang metrik dalam OpenTelemetry SDK ialah meter 提供商 。仪表提供程序处理与度量相关的配置、聚合和数据导出。这也是用户获取 meters. Setiap modul kod biasanya mempunyai instrumentasi sendiri. Buat berdasarkan metrik tolok dan log titik data berdasarkan metrik tersebut. Semua titik penunjuk diagregatkan dan dialirkan kembali melalui pembekal pemeteran.

Untuk membaca metrik daripada pembekal meter, anda memerlukan sejenis metric reader . Jika anda cuba menolak metrik menggunakan protokol seperti OTLP, anda boleh menggunakan alat seperti Pembaca Metrik Eksport Berkala, yang secara berkala mengumpul metrik daripada pembekal pemeteran dan mengeksportnya menggunakan pengeksport.

Jika anda cuba menggunakan sistem metrik berasaskan tarikan (seperti Prometheus), pengeksport bertindak seperti pembaca metrik dan membaca metrik setiap kali sistem metrik meminta titik akhir rangkakan. Inilah yang dilakukan dalam contoh kedua yang anda pautkan. serveMetrics 函数打开侦听端口 2223 并处理对 localhost:2223/metrics 的请求的 Web 服务器。每次 GET Setiap kali permintaan masuk ke titik akhir ini, metrik diagregatkan mengikut konfigurasi pembekal instrumentasi dan dikembalikan dalam badan respons. Ini membolehkan sistem seperti Prometheus meminta metrik daripada aplikasi anda secara berkala.

Atas ialah kandungan terperinci Bagaimana untuk menolak metrik ke Opentelemetry menggunakan go-sdk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam