Overview
Track the memory usage of your Go services and collect metrics instrumented from Go’s expvar package.
If you prefer to instrument your Go code using only dogstats-go, you can still use this integration to collect memory-related metrics.
Setup
Installation
The Go Expvar check is packaged with the Agent, so install the Agent anywhere you run Go services to collect metrics.
Configuration
Prepare the service
If your Go service doesn’t use the expvar package already, import it (import "expvar"
). If you don’t want to instrument your own metrics with expvar - that is you only want to collect your service’s memory metrics - import the package using the blank identifier (import _ "expvar"
). If your service doesn’t already listen for HTTP requests (with the http package), make it listen locally just for the Datadog Agent.
Host
To configure this check for an Agent running on a host:
Connect the Agent
Edit the file go_expvar.d/conf.yaml
, in the conf.d/
folder at the root of your Agent’s configuration directory. See the sample go_expvar.d/conf.yaml for all available configuration options.
Note: If you don’t configure a metrics
list, the Agent still collects memstat metrics. Use metrics
to tell the Agent which expvar vars to collect.
Restart the Agent.
Note: The Go Expvar integration can potentially emit custom metrics, which may impact your billing. By default, there is a limit of 350 metrics. If you require additional metrics, contact Datadog support.
Containerized
For containerized environments, see the Autodiscovery Integration Templates for guidance on applying the parameters below.
Parameter | Value |
---|
<INTEGRATION_NAME> | go_expvar |
<INIT_CONFIG> | blank or {} |
<INSTANCE_CONFIG> | {"expvar_url": "http://%%host%%:8080"} |
Validation
Run the Agent’s status subcommand and look for go_expvar
under the Checks section.
Data Collected
Metrics
go_expvar.memstats.alloc (gauge) | Bytes allocated and not yet freed Shown as byte |
go_expvar.memstats.frees (gauge) | Number of frees Shown as operation |
go_expvar.memstats.heap_alloc (gauge) | Bytes allocated and not yet freed Shown as byte |
go_expvar.memstats.heap_idle (gauge) | Bytes in idle spans Shown as byte |
go_expvar.memstats.heap_inuse (gauge) | Bytes in non-idle spans Shown as byte |
go_expvar.memstats.heap_objects (gauge) | Total number of allocated objects Shown as item |
go_expvar.memstats.heap_released (gauge) | Bytes released to the OS Shown as byte |
go_expvar.memstats.heap_sys (gauge) | Bytes obtained from system Shown as byte |
go_expvar.memstats.lookups (gauge) | Number of pointer lookups Shown as operation |
go_expvar.memstats.mallocs (gauge) | Number of mallocs Shown as operation |
go_expvar.memstats.num_gc (gauge) | Number of garbage collections Shown as garbage collection |
go_expvar.memstats.pause_ns.95percentile (gauge) | 95th percentile of recent GC pause durations Shown as nanosecond |
go_expvar.memstats.pause_ns.avg (gauge) | Average of recent GC pause durations Shown as nanosecond |
go_expvar.memstats.pause_ns.count (rate) | Number of submitted GC pause durations Shown as sample |
go_expvar.memstats.pause_ns.max (gauge) | Max GC pause duration Shown as nanosecond |
go_expvar.memstats.pause_ns.median (gauge) | Median GC pause duration Shown as nanosecond |
go_expvar.memstats.pause_total_ns (gauge) | Total GC pause duration over lifetime of process Shown as nanosecond |
go_expvar.memstats.total_alloc (gauge) | Bytes allocated (even if freed) Shown as byte |
go_expvar.memstats.total_alloc.count (count) | Bytes allocated (even if freed) as monotonic count Shown as byte |
Events
The Go-Expvar check does not include any events.
Service Checks
The Go-Expvar check does not include any service checks.
Troubleshooting
Need help? Contact Datadog support.
Further Reading