了解 Heartbeat 日志中的指标

编辑

了解 Heartbeat 日志中的指标编辑

Heartbeat 默认每 30 秒收集一次有关自身指标的快照。Heartbeat 从该快照计算增量快照;增量快照包含自上次快照以来更改的任何指标。请注意,指标的值是在获取快照时的值,不是自上次快照以来的值

如果增量快照包含任何指标(表明自上次快照以来至少有一个指标已更改),则该增量快照将以 JSON 格式序列化,并在 Heartbeat 日志中以 INFO 日志级别发出。以下是一个此类日志条目的示例

{"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"}}

详细信息编辑

关注 .monitoring.metrics 字段,并格式化 JSON,其值为

{
  "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
      }
    }
  }
}

下表解释了 .monitoring.metrics 下最重要字段的含义,并提供了一些有助于排查 Heartbeat 问题的提示。

字段路径(相对于 .monitoring.metrics 类型 含义 疑难解答提示

.beat

对象

所有 Beat 共有的信息,例如版本、goroutine、文件句柄、CPU、内存

.libbeat

对象

有关发布者管道和输出的信息,所有 Beat 也都共用

字段路径(相对于 .monitoring.metrics.beat 类型 含义 疑难解答提示

.runtime.goroutines

整数

正在运行的 goroutine 数量

如果此数字随着时间的推移而增长,则表明存在 goroutine 泄漏

字段路径(相对于 .monitoring.metrics.libbeat 类型 含义 疑难解答提示

.pipeline.events.active

整数

当前在 libbeat 发布者管道中的事件数量。

如果此数字随着时间的推移而增长,则可能表明 Heartbeat 的生成速度快于输出的消费速度。考虑增加输出工作者的数量(如果此设置受输出支持;Elasticsearch 和 Logstash 输出支持此设置)。管道包括当前正在处理的事件以及队列中的事件。因此,此指标有时最终可能会略高于队列大小。如果此指标达到最大队列大小(内存中队列的 queue.mem.events),则几乎可以肯定表明 Heartbeat 存在背压,这意味着 Heartbeat 可能需要暂时停止从源中摄取更多事件,直到缓解这种背压。

.output.events.total

整数

当前正在由输出处理的事件数量。

如果此数字随着时间的推移而增长,则可能表明输出目标(例如 Logstash 管道或 Elasticsearch 集群)无法以相同或更快的速度接受事件,与 Heartbeat 发送到它的事件速率相同或更快。

.output.events.acked

整数

输出目标确认的事件数量。

通常,我们希望此数字与 .output.events.total 相同,因为这表明输出目标已可靠地接收了发送给它的所有事件。

.output.events.failed

整数

Heartbeat 尝试发送给输出目标的事件数量,但目标未能接收这些事件。

通常,我们希望此字段不存在或其值为零。当值大于零时,在该日志条目 @timestamp 之前的 Heartbeat 日志中查看是否有任何与输出目标的连接问题很有用。请注意,失败的事件不会丢失或删除;它们将被发送回发布者管道,以便稍后重试。

有用命令编辑

从非结构化 Heartbeat 日志解析监控指标编辑

对于发出非结构化日志的 Heartbeat 版本,可以使用以下脚本从这些日志中解析监控指标:https://github.com/elastic/beats/blob/main/script/metrics_from_log_file.sh