Categorygithub.com/google/go-metrics-stackdriver
modulepackage
0.6.0
Repository: https://github.com/google/go-metrics-stackdriver.git
Documentation: pkg.go.dev

# README

go-metrics-stackdriver

godoc

This library provides a stackdriver sink for applications instrumented with the go-metrics library.

🚨 Warning

This is not an officially supported Google product.

In general the author of this package would recommend instrumenting custom metrics for new code by following the official GCP documentation, especially for new applications.

This package is intended as a way to publish metrics for applications that are already instrumented with go-metrics without having to use a sidecar process like stackdriver-prometheus-sidecar.

🚨 Upgrading

Between v0.5.0 and v0.6.0, the behavior of the IncrCounter() method changed: previously it would create a GAUGE metric kind, but from v0.6.0 forward it will create a CUMULATIVE metric kind. (See https://github.com/google/go-metrics-stackdriver/issues/18 for a discussion.)

However, once a MetricDescriptor has been created in Google Cloud Monitoring, its metricKind field cannot be changed. So if you have any existing GAUGE metrics that were created by IncrCounter(), you will see errors in your logs when the v0.6.0 client attempts to update them and fails. Your options for handling this are:

  1. Change the name of the metric you are passing to IncrCounter (creating a new metricDescriptor with a different name), or:
  2. Delete the existing metricDescriptor using the delete API and let go-metrics re-create it as a CUMULATIVE metric

Additionally, v0.6.0 adds ResetCounter() and ResetCounterWithLabels() methods: calling these methods resets the counter value to zero.

Details

stackdriver.NewSink's return value satisfies the go-metrics library's MetricSink interface. When providing a stackdriver.Sink to libraries and applications instrumented against MetricSink, the metrics will be aggregated within this library and written to stackdriver as Generic Task timeseries metrics.

Example

import "github.com/google/go-metrics-stackdriver"
...
client, _ := monitoring.NewMetricClient(context.Background())
ss := stackdriver.NewSink(client, &stackdriver.Config{
  ProjectID: projectID,
})
...
ss.SetGauge([]string{"foo"}, 42)
ss.IncrCounter([]string{"baz"}, 1)
ss.AddSample([]string{"method", "const"}, 200)

The full example can be run from a cloud shell console to test how metrics are collected and displayed.

You can also try out the example using Cloud Run!

Run on Google Cloud

# Packages

Copyright 2019 Google LLC Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
Package vault provides helper functions to improve the go-metrics to stackdriver metric conversions specific to HashiCorp Vault.

# Functions

DefaultBucketer is the default BucketFn used to determing bucketing values for metrics.
DefaultLabelExtractor is the default ExtractLabelsFn and is a direct passthrough.
NewSink creates a Sink to flush metrics to stackdriver every interval.

# Structs

Config options for the stackdriver Sink.
Sink conforms to the metrics.MetricSink interface and is used to transmit metrics information to stackdriver.

# Interfaces

Logger is the log interface used in go-metrics-stackdriver.

# Type aliases

BucketFn returns the histogram bucket thresholds based on the given metric name.
ExtractLabelsFn converts a given metric name and type into a new metric name and optionally additional labels.