理解 Metricbeat 日志中的指标

编辑

理解 Metricbeat 日志中的指标编辑

默认情况下,Metricbeat 每 30 秒收集一次关于自身的指标快照。从这个快照中,Metricbeat 计算出增量快照;该增量快照包含自上次快照以来发生变化的任何指标。请注意,指标的值是在拍摄快照时所获取的值,不是自上次快照以来的差值

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

{"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 下最重要的字段的含义,并提供了一些可能有助于解决 Metricbeat 问题的提示。

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

.beat

对象

对所有 Beats 通用的信息,例如版本、goroutines、文件句柄、CPU、内存

.libbeat

对象

关于发布者管道和输出的信息,对所有 Beats 也通用

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

.runtime.goroutines

整数

正在运行的 goroutines 的数量

如果此数字随时间增长,则表明存在 goroutine 泄漏

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

.pipeline.events.active

整数

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

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

.output.events.total

整数

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

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

.output.events.acked

整数

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

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

.output.events.failed

整数

Metricbeat 尝试发送到输出目标但目标未能接收的事件数量。

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

有用的命令编辑

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

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