理解 Filebeat 日志中的指标

编辑

理解 Filebeat 日志中的指标

编辑

Filebeat 默认每 30 秒收集其自身的指标快照。Filebeat 根据此快照计算增量快照;此增量快照包含自上次快照以来发生更改的任何指标。请注意,指标的值是在拍摄快照时的值,而不是自上次快照以来的值

如果此增量快照包含任何指标(表示自上次快照以来至少有一个指标已更改),则此增量快照将被序列化为 JSON 并以 INFO 日志级别在 Filebeat 的日志中发出。大多数快照字段报告自上次快照以来指标的变化,但是某些字段是测量值,它们始终报告当前值。以下是一个此类日志条目的示例

{"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":{"max_events":3500,"filled":{"events":5,"bytes":6425,"pct":0.0014},"added":{"events":52,"bytes":65702},"consumed":{"events":52,"bytes":65702},"removed":{"events":48,"bytes":59277},"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": {
        "max_events": 3500,
        "filled": {
          "events": 5,
          "bytes": 6425,
          "pct": 0.0014
        },
        "added": {
          "events": 52,
          "bytes": 65702
        },
        "consumed": {
          "events": 52,
          "bytes": 65702
        },
        "removed": {
          "events": 48,
          "bytes": 59277
        },
        "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
      }
    }
  }
}

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

字段路径(相对于 .monitoring.metrics 类型 含义 故障排除提示

.beat

对象

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

.libbeat

对象

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

.filebeat

对象

Filebeat 特定的信息,例如收割器、事件

字段路径(相对于 .monitoring.metrics.beat 类型 含义 故障排除提示

.runtime.goroutines

整数

正在运行的 goroutines 数量

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

字段路径(相对于 .monitoring.metrics.libbeat 类型 含义 故障排除提示

.pipeline.events.active

整数

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

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

.output.events.total

整数

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

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

.output.events.acked

整数

输出目标确认的事件数。

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

.output.events.failed

整数

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

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

.output.events.dropped

整数

由于永久性(不可重试)错误而 Filebeat 放弃发送到输出目标的事件数。

.output.events.dead_letter

整数

Filebeat 在无法将事件摄取到主索引后成功发送到配置的死信索引的事件数。

.output.write.latency

对象

字段路径(相对于 .monitoring.metrics.libbeat.pipeline 类型 含义 故障排除提示

.queue.max_events

整数(测量值)

如果队列有一个最大事件数,则为该最大事件数,否则为零。

.queue.max_bytes

整数(测量值)

如果队列有一个最大字节数,则为该最大字节数,否则为零。

.queue.filled.events

整数(测量值)

队列当前存储的事件数。

.queue.filled.bytes

整数(测量值)

队列当前存储的字节数。

.queue.filled.pct

浮点数(测量值)

队列相对于其最大大小的满载程度,表示为 0 到 1 之间的分数。

queue.filled.pct 较低时吞吐量低表示输入拥塞。当 queue.filled.pct 较高时吞吐量低表示输出拥塞。

.queue.added.events

整数

输入工作程序添加到队列中的事件数。

.queue.added.bytes

整数

输入工作程序添加到队列中的字节数。

.queue.consumed.events

整数

发送到输出工作程序的事件数。

.queue.consumed.bytes

整数

发送到输出工作程序的字节数。

.queue.removed.events

整数

输出工作程序处理后从队列中删除的事件数。

.queue.removed.bytes

整数

使用内存队列时,仅当输出支持时才设置字节指标。目前只有 Elasticsearch 输出支持字节指标。

字段路径(相对于 .monitoring.metrics.filebeat 类型 含义 故障排除提示

.events.active

整数

Filebeat 正在主动处理的事件数(包括 Filebeat 已经发送到 libbeat 发布者管道的事件,但不包括管道已发送到输出的事件)。

如果此数字随时间增长,则可能表示 Filebeat 输入的事件收集速度过快,以至于管道和输出无法跟上。

有用的命令

编辑

从非结构化 Filebeat 日志中解析监控指标

编辑

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

检查 Filebeat 是否正在处理事件

编辑
$ cat beat.log | jq -r '[.["@timestamp"],.monitoring.metrics.filebeat.events.active,.monitoring.metrics.libbeat.pipeline.events.active,.monitoring.metrics.libbeat.output.events.total,.monitoring.metrics.libbeat.output.events.acked,.monitoring.metrics.libbeat.output.events.failed//0] | @tsv' | sort

示例输出

2023-07-14T11:24:36.811Z	1	1	38033	38033	0
2023-07-14T11:25:06.811Z	1	1	17	17	0
2023-07-14T11:25:36.812Z	1	1	16	16	0
2023-07-14T11:26:06.811Z	1	1	17	17	0
2023-07-14T11:26:36.811Z	2	2	21	21	0
2023-07-14T11:27:06.812Z	1	1	18	18	0
2023-07-14T11:27:36.811Z	1	1	17	17	0
2023-07-14T11:28:06.811Z	1	1	18	18	0
2023-07-14T11:28:36.811Z	1	1	16	16	0
2023-07-14T11:37:06.811Z	1	1	270	270	0
2023-07-14T11:37:36.811Z	1	1	16	16	0
2023-07-14T11:38:06.811Z	1	1	17	17	0
2023-07-14T11:38:36.811Z	1	1	16	16	0
2023-07-14T11:41:36.811Z	3	3	323	323	0
2023-07-14T11:42:06.811Z	3	3	17	17	0
2023-07-14T11:42:36.812Z	4	4	18	18	0
2023-07-14T11:43:06.811Z	4	4	17	17	0
2023-07-14T11:43:36.811Z	2	2	17	17	0
2023-07-14T11:47:06.811Z	0	0	117	117	0
2023-07-14T11:47:36.811Z	2	2	14	14	0
2023-07-14T11:48:06.811Z	3	3	17	17	0
2023-07-14T11:48:36.811Z	2	2	17	17	0
2023-07-14T12:49:36.811Z	3	3	2008	1960	48
2023-07-14T12:50:06.812Z	2	2	18	18	0
2023-07-14T12:50:36.811Z	5	5	48	48	0

此处的列为

  1. .@timestamp
  2. .monitoring.metrics.filebeat.events.active
  3. .monitoring.metrics.libbeat.pipeline.events.active
  4. .monitoring.metrics.libbeat.output.events.total
  5. .monitoring.metrics.libbeat.output.events.acked
  6. .monitoring.metrics.libbeat.output.events.failed