登录
首页 >  Golang >  Go问答

使用 Kafka Exporter 和 OpenTelemetry 发送度量数据

来源:stackoverflow

时间:2024-03-01 21:45:28 430浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《使用 Kafka Exporter 和 OpenTelemetry 发送度量数据》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

我正在尝试收集一些指标并使用 opentelemetry 将其导出到 kafka。对于一个简单的 poc,我有一个 openmetrics 格式的本地文件,我希望解析它并将指标推送到 kafka。

我知道我应该使用 kafkaexporter,但我无法理解端到端流程的样子。代码片段会非常有帮助。

我使用以下代码创建 kafka 导出器:

func newExporter(ctx context.Context) (exporter.Metrics, error) {
    f := kafkaexporter.NewFactory(kafkaexporter.WithMetricsMarshalers())
    cfg := f.CreateDefaultConfig()
    ts := component.TelemetrySettings{
        Logger:          logger,
        MeterProvider:   meterProvider(),
        MetricsLevel:    configtelemetry.LevelNormal,
    }
    cs := exporter.CreateSettings{
        ID:               component.NewID("metrics"),
        TelemetrySettings: ts,
        BuildInfo:        component.NewDefaultBuildInfo(),
    }

    return f.CreateMetricsExporter(ctx, cs, cfg)
}

func meterProvider() *metric.MeterProvider {
    return metric.NewMeterProvider()
}

现在假设我有一些计数器/仪表,我如何使用上述导出器推送它?


正确答案


我能够运行端到端流程,从下游依赖项收集一些指标,解析它并推送到 kafka。

这是代码片段:

func collectMetrics() (pmetric.ResourceMetrics, error) {
    // collect and return metrics
}

func CollectMetrics(ctx context.Context) error {
    me, err := newExporter(ctx)
    if err != nil {
        return err
    }

    err = me.Start(ctx, nil)
    if err != nil {
        return err
    }
    defer me.Shutdown(ctx)

    ms := pmetric.NewMetrics()
    rm, err := collectMetrics()
    r := ms.ResourceMetrics().AppendEmpty()
    rm.CopyTo(r)

    err = me.ConsumeMetrics(ctx, ms)
    if err != nil {
        return err
    }

    return nil
}

完整的 poc 可以在 here 找到。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>