ZBLOG

opentelemetry aggregation golang案例

以下是一个使用 OpenTelemetry Go SDK 实现聚合的简单示例:

package main

import (
	"context"
	"fmt"

	"go.opentelemetry.io/otel/api/global"
	"go.opentelemetry.io/otel/api/key"
	"go.opentelemetry.io/otel/api/metric"
	controller "go.opentelemetry.io/otel/sdk/metric/controller/basic"
	exporter "go.opentelemetry.io/otel/sdk/metric/export/simple"
)

func main() {
	ctx := context.Background()
	pusher, controller, err := setupMetricController(ctx)
	if err != nil {
		panic(err)
	}
	defer pusher.Stop()

	meter := global.Meter("example")

	counter := metric.Must(meter).NewInt64Counter(
		"example.counter",
		metric.WithDescription("A simple counter"),
        metric.WithUnit("1"),
    )

	err = meter.RecordBatch(
        ctx,
        []attribute.KeyValue{key.String("key", "value")},
        counter.Measurement(42),
    )
	if err != nil {
		panic(err)
    }

    controller.Collect(ctx)
}

func setupMetricController(ctx context.Context) (*controller.PushController, *controller.Controller, error) {
	exporter, err := exporter.New(
	    exporter.WithoutMemory(true),
	    exporter.WithLogging(false),
	    // This is the important bit - setting Aggregation to ExportKindAggregation.
	    exporter.WithAggregation(),
    )
	if err != nil {
		return nil, nil, fmt.Errorf("failed to create new exporter: %w", err)
    }
    
	controller := controller.New(
        exporter,
        controller.WithCollectPeriod(10*time.Second),
    )

	pusher := controller.InstallNewPipeline(
        // This sets up a basic set of default settings for you that will be sufficient in most cases.
        controller.Config.Default(),
        
        // Registering an ErrorHandler will allow you to handle errors that occur during the pipeline's run loop.
        controller.WithErrorHandler(func(err error) {
            fmt.Printf("Error reported: %v\n", err)
        }),
    )

	return pusher, controller, nil
}

在这个例子中,我们创建了一个简单的计数器,并将其记录在 OpenTelemetry SDK 中。然后,我们调用 controller.Collect 函数来收集所有已经记录的度量值,并且将其聚合到一个时间窗口中。最后,我们通过控制器和导出器来推送数据以进行处理。

需要注意的是,在此示例中使用了默认设置。您可以根据自己的需求更改这些设置。例如,您可以更改聚合周期、启用内存缓存等等。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=6879

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?