了解 Winlogbeat 日志中的指标

编辑

了解 Winlogbeat 日志中的指标

编辑

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

如果这个增量快照包含任何指标(表示自上次快照以来至少有一个指标发生了变化),这个增量快照将序列化为 JSON,并在 Winlogbeat 的日志中以 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":{"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 下最重要的字段的含义,并提供可能有助于排查 Winlogbeat 问题的提示。

字段路径(相对于 .monitoring.metrics 类型 含义 问题排查提示

.beat

对象

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

.libbeat

对象

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

字段路径(相对于 .monitoring.metrics.beat 类型 含义 问题排查提示

.runtime.goroutines

整数

正在运行的 goroutine 的数量

如果这个数字随着时间的推移而增长,则表示 goroutine 泄漏

字段路径(相对于 .monitoring.metrics.libbeat 类型 含义 问题排查提示

.pipeline.events.active

整数

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

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

.output.events.total

整数

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

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

.output.events.acked

整数

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

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

.output.events.failed

整数

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

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

.output.events.dropped

整数

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

.output.events.dead_letter

整数

在 Winlogbeat 成功发送到配置的死信索引后,这些事件未能在主索引中摄取。

.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 输出支持字节指标。

有用的命令

编辑

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

编辑

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