Understand metrics in Metricbeat logs
editUnderstand metrics in Metricbeat logs
editEvery 30 seconds (by default), Metricbeat collects a snapshot of metrics about itself. From this snapshot, Metricbeat computes a delta snapshot; this delta snapshot contains any metrics that have changed since the last snapshot. Note that the values of the metrics are the values when the snapshot is taken, NOT the difference in values from the last snapshot.
If this delta snapshot contains any metrics (indicating at least one metric that has changed since the last snapshot), this delta snapshot is serialized as JSON and emitted in Metricbeat’s logs at the INFO
log level. Here is an example of such a log entry:
{"log.level":"info","@timestamp":"2023-07-14T12:50:36.811Z","log.logger":"monitoring","log.origin":{"file.name":"log/log.go","file.line":187},"message":"Non-zero metrics in the last 30s","service.name":"filebeat","monitoring":{"metrics":{"beat":{"cgroup":{"memory":{"mem":{"usage":{"bytes":0}}}},"cpu":{"system":{"ticks":692690,"time":{"ms":60}},"total":{"ticks":3167250,"time":{"ms":150},"value":3167250},"user":{"ticks":2474560,"time":{"ms":90}}},"handles":{"limit":{"hard":1048576,"soft":1048576},"open":32},"info":{"ephemeral_id":"2bab8688-34c0-4522-80af-db86948d547d","uptime":{"ms":617670096},"version":"8.6.2"},"memstats":{"gc_next":57189272,"memory_alloc":43589824,"memory_total":275281335792,"rss":183574528},"runtime":{"goroutines":212}},"filebeat":{"events":{"active":5,"added":52,"done":49},"harvester":{"open_files":6,"running":6,"started":1}},"libbeat":{"config":{"module":{"running":15}},"output":{"events":{"acked":48,"active":0,"batches":6,"total":48},"read":{"bytes":210},"write":{"bytes":26923}},"pipeline":{"clients":15,"events":{"active":5,"filtered":1,"published":51,"total":52},"queue":{"acked":48}}},"registrar":{"states":{"current":14,"update":49},"writes":{"success":6,"total":6}},"system":{"load":{"1":0.91,"15":0.37,"5":0.4,"norm":{"1":0.1138,"15":0.0463,"5":0.05}}}},"ecs.version":"1.6.0"}}
Details
editFocussing on the .monitoring.metrics
field, and formatting the JSON, it’s value is:
{ "beat": { "cgroup": { "memory": { "mem": { "usage": { "bytes": 0 } } } }, "cpu": { "system": { "ticks": 692690, "time": { "ms": 60 } }, "total": { "ticks": 3167250, "time": { "ms": 150 }, "value": 3167250 }, "user": { "ticks": 2474560, "time": { "ms": 90 } } }, "handles": { "limit": { "hard": 1048576, "soft": 1048576 }, "open": 32 }, "info": { "ephemeral_id": "2bab8688-34c0-4522-80af-db86948d547d", "uptime": { "ms": 617670096 }, "version": "8.6.2" }, "memstats": { "gc_next": 57189272, "memory_alloc": 43589824, "memory_total": 275281335792, "rss": 183574528 }, "runtime": { "goroutines": 212 } }, "filebeat": { "events": { "active": 5, "added": 52, "done": 49 }, "harvester": { "open_files": 6, "running": 6, "started": 1 } }, "libbeat": { "config": { "module": { "running": 15 } }, "output": { "events": { "acked": 48, "active": 0, "batches": 6, "total": 48 }, "read": { "bytes": 210 }, "write": { "bytes": 26923 } }, "pipeline": { "clients": 15, "events": { "active": 5, "filtered": 1, "published": 51, "total": 52 }, "queue": { "acked": 48 } } }, "registrar": { "states": { "current": 14, "update": 49 }, "writes": { "success": 6, "total": 6 } }, "system": { "load": { "1": 0.91, "5": 0.4, "15": 0.37, "norm": { "1": 0.1138, "5": 0.05, "15": 0.0463 } } } }
The following tables explain the meaning of the most important fields under .monitoring.metrics
and also provide hints that might be helpful in troubleshooting Metricbeat issues.
Field path (relative to .monitoring.metrics ) |
Type | Meaning | Troubleshooting hints |
---|---|---|---|
|
Object |
Information that is common to all Beats, e.g. version, goroutines, file handles, CPU, memory |
|
|
Object |
Information about the publisher pipeline and output, also common to all Beats |
Field path (relative to .monitoring.metrics.beat ) |
Type | Meaning | Troubleshooting hints |
---|---|---|---|
|
Integer |
Number of goroutines running |
If this number grows over time, it indicates a goroutine leak |
Field path (relative to .monitoring.metrics.libbeat ) |
Type | Meaning | Troubleshooting hints |
---|---|---|---|
|
Integer |
Number of events currently in the libbeat publisher pipeline. |
If this number grows over time, it may indicate that Metricbeat is producing events faster than the output can consume them. Consider increasing the number of output workers (if this setting is supported by the output; Elasticsearch and Logstash outputs support this setting). The pipeline includes events currently being processed as well as events in the queue. So this metric can sometimes end up slightly higher than the queue size. If this metric reaches the maximum queue size ( |
|
Integer |
Number of events currently being processed by the output. |
If this number grows over time, it may indicate that the output destination (e.g. Logstash pipeline or Elasticsearch cluster) is not able to accept events at the same or faster rate than what Metricbeat is sending to it. |
|
Integer |
Number of events acknowledged by the output destination. |
Generally, we want this number to be the same as |
|
Integer |
Number of events that Metricbeat tried to send to the output destination, but the destination failed to receive them. |
Generally, we want this field to be absent or its value to be zero. When the value is greater than zero, it’s useful to check Metricbeat’s logs right before this log entry’s |
Useful commands
editParse monitoring metrics from unstructured Metricbeat logs
editFor Metricbeat versions that emit unstructured logs, the following script can be used to parse monitoring metrics from such logs: https://github.com/elastic/beats/blob/main/script/metrics_from_log_file.sh.