了解 Packetbeat 日志中的指标

编辑

了解 Packetbeat 日志中的指标编辑

Packetbeat 默认每 30 秒收集一次有关其自身的指标快照。根据此快照,Packetbeat 计算一个增量快照;该增量快照包含自上次快照以来发生更改的任何指标。请注意,指标的值是在快照捕获时获取的值,而不是自上次快照以来的值

如果此增量快照包含任何指标(表示自上次快照以来至少有一个指标发生了更改),则此增量快照将被序列化为 JSON 并以 Packetbeat 的日志中 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 下最重要的字段的含义,并提供了可能有助于解决 Packetbeat 问题的提示。

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

.beat

对象

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

.libbeat

对象

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

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

.runtime.goroutines

整数

运行的 goroutines 数

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

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

.pipeline.events.active

整数

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

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

.output.events.total

整数

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

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

.output.events.acked

整数

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

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

.output.events.failed

整数

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

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

有用的命令编辑

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

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