MCPcopy Index your code
hub / github.com/VictoriaMetrics/metrics

github.com/VictoriaMetrics/metrics @v1.43.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.43.1 ↗ · + Follow
334 symbols 1,126 edges 42 files 127 documented · 38% 12 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Build Status GoDoc Go Report codecov

metrics - lightweight package for exporting metrics in Prometheus format

Features

  • Lightweight. Has minimal number of third-party dependencies and all these deps are small. See this article for details.
  • Easy to use. See the API docs.
  • Fast.
  • Allows exporting distinct metric sets via distinct endpoints. See Set.
  • Supports easy-to-use histograms, which just work without any tuning. Read more about VictoriaMetrics histograms at this article.
  • Can push metrics to VictoriaMetrics or to any other remote storage, which accepts metrics in Prometheus text exposition format. See these docs.

Limitations

Usage

import "github.com/VictoriaMetrics/metrics"

// Register various metrics.
// Metric name may contain labels in Prometheus format - see below.
var (
    // Register counter without labels.
    requestsTotal = metrics.NewCounter("requests_total")

    // Register summary with a single label.
    requestDuration = metrics.NewSummary(`requests_duration_seconds{path="/foobar/baz"}`)

    // Register gauge with two labels.
    queueSize = metrics.NewGauge(`queue_size{queue="foobar",topic="baz"}`, func() float64 {
        return float64(foobarQueue.Len())
    })

    // Register histogram with a single label.
    responseSize = metrics.NewHistogram(`response_size{path="/foo/bar"}`)
)

// ...
func requestHandler() {
    // Increment requestTotal counter.
    requestsTotal.Inc()

    startTime := time.Now()
    processRequest()
    // Update requestDuration summary.
    requestDuration.UpdateDuration(startTime)

    // Update responseSize histogram.
    responseSize.Update(responseSize)
}

// Expose the registered metrics at `/metrics` path.
http.HandleFunc("/metrics", func(w http.ResponseWriter, req *http.Request) {
    metrics.WritePrometheus(w, true)
})

// ... or push registered metrics every 10 seconds to http://victoria-metrics:8428/api/v1/import/prometheus
// with the added `instance="foobar"` label to all the pushed metrics.
metrics.InitPush("http://victoria-metrics:8428/api/v1/import/prometheus", 10*time.Second, `instance="foobar"`, true)

By default, exposed metrics do not have TYPE or HELP meta information. Call ExposeMetadata(true) in order to generate TYPE and HELP meta information per each metric.

See docs for more info.

Users

FAQ

Why the metrics API isn't compatible with github.com/prometheus/client_golang?

Because the github.com/prometheus/client_golang is too complex and is hard to use.

Why the metrics.WritePrometheus doesn't expose documentation for each metric?

Because this documentation is ignored by Prometheus. The documentation is for users. Just give meaningful names to the exported metrics or add comments in the source code or in other suitable place explaining each metric exposed from your application.

How to implement CounterVec in metrics?

Just use GetOrCreateCounter instead of CounterVec.With. See this example for details.

Why Histogram buckets contain vmrange labels instead of le labels like in Prometheus histograms?

Buckets with vmrange labels occupy less disk space compared to Prometheus-style buckets with le labels, because vmrange buckets don't include counters for the previous ranges. VictoriaMetrics provides prometheus_buckets function, which converts vmrange buckets to Prometheus-style buckets with le labels. This is useful for building heatmaps in Grafana. Additionally, its histogram_quantile function transparently handles histogram buckets with vmrange labels.

However, for compatibility purposes package provides classic Prometheus Histograms with le labels.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

WriteGaugeUint64
called by 50
metrics.go
Update
called by 21
summary.go
WritePrometheus
called by 20
metrics.go
Get
called by 19
gauge.go
Update
called by 18
histogram.go
NewSet
called by 15
set.go
WriteCounterFloat64
called by 15
metrics.go
Add
called by 15
gauge.go

Shape

Function 213
Method 73
TypeAlias 25
Struct 22
Interface 1

Languages

Go100%
C1%

Modules by API surface

process_metrics_solaris.go37 symbols
metrics.go30 symbols
set.go27 symbols
push.go22 symbols
summary.go21 symbols
metrics_test.go17 symbols
prometheus_histogram.go15 symbols
process_metrics_linux.go15 symbols
histogram.go13 symbols
summary_test.go11 symbols
counter.go11 symbols
gauge.go10 symbols

For agents

$ claude mcp add metrics \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page