节点统计 API编辑

节点统计 API 用于检索有关 Logstash 的运行时统计信息。

curl -XGET 'localhost:9600/_node/stats/<types>'

其中 <types> 是可选的,用于指定要返回的统计信息类型。

默认情况下,将返回所有统计信息。您可以通过组合以下任何类型来限制返回的信息,这些类型以逗号分隔列表形式表示

jvm

获取 JVM 统计信息,包括有关线程、内存使用情况、垃圾收集器和正常运行时间的统计信息。

process

获取进程统计信息,包括有关文件描述符、内存消耗和 CPU 使用情况的统计信息。

events

获取 Logstash 实例的与事件相关的统计信息(无论创建和销毁了多少管道)。

flow

获取 Logstash 实例的与流相关的统计信息(无论创建和销毁了多少管道)。

pipelines

获取每个 Logstash 管道的运行时统计信息。

reloads

获取有关配置重新加载成功和失败的运行时统计信息。

os

获取有关 Logstash 在容器中运行时的 cgroups 的运行时统计信息。

geoip_download_manager

获取与 Geoip 过滤器插件 一起使用的数据库的统计信息。

有关可以应用于所有 Logstash 监控 API 的选项列表,请参阅 常见选项

JVM 统计信息编辑

以下请求返回包含 JVM 统计信息的 JSON 文档

curl -XGET 'localhost:9600/_node/stats/jvm?pretty'

示例响应

{
  "jvm" : {
    "threads" : {
      "count" : 49,
      "peak_count" : 50
    },
    "mem" : {
      "heap_used_percent" : 14,
      "heap_committed_in_bytes" : 309866496,
      "heap_max_in_bytes" : 1037959168,
      "heap_used_in_bytes" : 151686096,
      "non_heap_used_in_bytes" : 122486176,
      "non_heap_committed_in_bytes" : 133222400,
      "pools" : {
        "survivor" : {
          "peak_used_in_bytes" : 8912896,
          "used_in_bytes" : 288776,
          "peak_max_in_bytes" : 35782656,
          "max_in_bytes" : 35782656,
          "committed_in_bytes" : 8912896
        },
        "old" : {
          "peak_used_in_bytes" : 148656848,
          "used_in_bytes" : 148656848,
          "peak_max_in_bytes" : 715849728,
          "max_in_bytes" : 715849728,
          "committed_in_bytes" : 229322752
        },
        "young" : {
          "peak_used_in_bytes" : 71630848,
          "used_in_bytes" : 2740472,
          "peak_max_in_bytes" : 286326784,
          "max_in_bytes" : 286326784,
          "committed_in_bytes" : 71630848
        }
      }
    },
    "gc" : {
      "collectors" : {
        "old" : {
          "collection_time_in_millis" : 607,
          "collection_count" : 12
        },
        "young" : {
          "collection_time_in_millis" : 4904,
          "collection_count" : 1033
        }
      }
    },
    "uptime_in_millis" : 1809643
  }
}

进程统计信息编辑

以下请求返回包含进程统计信息的 JSON 文档

curl -XGET 'localhost:9600/_node/stats/process?pretty'

示例响应

{
  "process" : {
    "open_file_descriptors" : 184,
    "peak_open_file_descriptors" : 185,
    "max_file_descriptors" : 10240,
    "mem" : {
      "total_virtual_in_bytes" : 5486125056
    },
    "cpu" : {
      "total_in_millis" : 657136,
      "percent" : 2,
      "load_average" : {
        "1m" : 2.38134765625
      }
    }
  }
}

事件统计信息编辑

以下请求返回包含 Logstash 实例的与事件相关的统计信息的 JSON 文档

curl -XGET 'localhost:9600/_node/stats/events?pretty'

示例响应

{
  "events" : {
    "in" : 293658,
    "filtered" : 293658,
    "out" : 293658,
    "duration_in_millis" : 2324391,
    "queue_push_duration_in_millis" : 343816
  }

流统计信息编辑

以下请求返回包含 Logstash 实例的流速率的 JSON 文档

curl -XGET 'localhost:9600/_node/stats/flow?pretty'

示例响应

{
  "flow" : {
    "input_throughput" : {
      "current": 189.720,
      "lifetime": 201.841
    },
    "filter_throughput" : {
      "current": 187.810,
      "lifetime": 201.799
    },
    "output_throughput" : {
      "current": 191.087,
      "lifetime": 201.761
    },
    "queue_backpressure" : {
      "current": 0.277,
      "lifetime": 0.031
    },
    "worker_concurrency" : {
      "current": 1.973,
      "lifetime": 1.721
    },
    "worker_utilization" : {
      "current": 49.32,
      "lifetime": 43.02
    }
  }
}

当给定流指标窗口的速率为无穷大时,它将以字符串形式呈现("Infinity""-Infinity")。当分子指标在窗口期间发生变化而速率的分母指标没有变化时,就会发生这种情况。

流速率可以直观地了解 Logstash 实例或单个管道相对于其自身随时间的当前性能。这使我们能够将意义附加到此 API 还提供的累积值指标,并确定实例或管道是否比过去表现更好或更差。

以下流速率适用于整个 logstash 进程及其每个管道。此外,管道可能具有 其他流速率,具体取决于其配置。

流速率 定义

input_throughput

此指标以事件/秒表示,是相对于挂钟时间(events.in / 秒)将事件推送到管道队列的速率。它包括被队列阻塞且尚未被接受的事件。

filter_throughput

此指标以事件/秒表示,是相对于挂钟时间(events.filtered / 秒)通过管道过滤器阶段的事件速率。

output_throughput

此指标以事件/秒表示,是相对于挂钟时间(events.out / 秒)通过管道输出阶段的事件速率。

worker_concurrency

这是一个无单位指标,表示所有工作线程相对于挂钟时间(duration_in_millis / 毫秒)的累积时间。

当管道的 worker_concurrency 流指标接近其可用的 pipeline.workers 时,该管道被认为是“饱和”的,因为它表明其所有可用工作线程都处于繁忙状态。调整饱和管道以拥有更多工作线程通常可以提高该管道的吞吐量并减少对其队列的反压,除非管道正在经历其输出的反压。

当其顶层 worker_concurrency 流指标接近所有管道中累积pipeline.workers 时,进程也被认为是“饱和”的,并且类似地可以通过调整 各个管道 来解决。

worker_utilization

这是一个无单位指标,表示给定管道中所有插件使用的可用工作线程时间的百分比(duration / (uptime * pipeline.workers)。它有助于确定管道是否始终有空闲资源或是否处于资源争用状态。

当管道的 worker_utilization 流指标接近 100 时,该管道被认为是“饱和”的,因为它表明其所有工作线程都处于繁忙状态。这通常表明下游反压或分配给管道的资源不足。调整饱和管道以拥有更多工作线程通常可以提高该管道的吞吐量并减少对其队列的反压,除非管道正在经历其输出的反压。

当管道的 worker_utilization 流指标接近 0 时,该管道被认为是“饥饿”的,因为它表明其所有工作线程都没有处于繁忙状态。这通常表明输入没有接收或检索足够的流量来使管道工作线程保持繁忙状态。调整饥饿管道以拥有更少的工作线程可以帮助它消耗更少的内存和 CPU,从而释放资源供其他管道使用。

queue_backpressure

这是一个无单位指标,表示所有输入阻塞将事件推送到其管道队列时所花费的累积时间,相对于挂钟时间(queue_push_duration_in_millis / 毫秒)。它通常在查看 单个管道 的统计信息时最有用。

虽然“零”值表示队列没有反压,但此指标的大小高度依赖于管道的形状及其输入。如果管道的数量或形状发生变化,则无法用于比较一个管道与另一个管道,甚至无法比较一个进程与自身。只有一个单线程输入的管道可能贡献高达 1.00,而输入具有数百个入站连接的管道可能对该组合值贡献更高的数字。

此外,对于拉取数据的管道来说,一定程度的反压是正常预期的,因为这种反压使它们能够减速并以其下游管道可以容忍的速率拉取数据。

每个流统计信息都包含一个或多个最近时间窗口的速率

流窗口 可用性 定义

current

稳定

最近约 10 秒

lifetime

稳定

相关管道或进程的整个生命周期

last_1_minute

技术预览

最近约 1 分钟

last_5_minutes

技术预览

最近约 5 分钟

last_15_minutes

技术预览

最近约 15 分钟

last_1_hour

技术预览

最近约 1 小时

last_24_hours

技术预览

最近约 24 小时

标记为“技术预览”的流速率窗口可能会在未经通知的情况下更改。Logstash 的未来版本可能会根据社区反馈,为每个速率包含更多、更少或不同的窗口。

管道统计信息编辑

以下请求返回包含管道统计信息的 JSON 文档,包括

  • 每个管道输入、过滤或输出的事件数量
  • 每个管道的当前和整个生命周期的 速率
  • 每个配置的过滤器或输出阶段的统计信息
  • 有关配置重新加载成功和失败的信息(当 配置重新加载 启用时)
  • 有关持久队列的信息(当 持久队列 启用时)
curl -XGET 'localhost:9600/_node/stats/pipelines?pretty'

示例响应

{
  "pipelines" : {
    "test" : {
      "events" : {
        "duration_in_millis" : 365495,
        "in" : 216610,
        "filtered" : 216485,
        "out" : 216485,
        "queue_push_duration_in_millis" : 342466
      },
      "flow" : {
        "input_throughput" : {
          "current" : 603.1,
          "lifetime" : 575.4
        },
        "filter_throughput" : {
          "current" : 604.2,
          "lifetime" : 575.1
        },
        "output_throughput" : {
          "current" : 604.8,
          "lifetime" : 575.1
        },
        "queue_backpressure" : {
          "current" : 0.214,
          "lifetime" : 0.937
        },
        "worker_concurrency" : {
          "current" : 0.941,
          "lifetime" : 0.9709
        },
        "worker_utilization" : {
          "current" : 93.092,
          "lifetime" : 92.187
        }
      },
      "plugins" : {
        "inputs" : [ {
          "id" : "35131f351e2dc5ed13ee04265a8a5a1f95292165-1",
          "events" : {
            "out" : 216485,
            "queue_push_duration_in_millis" : 342466
          },
          "flow" : {
            "throughput" : {
              "current" : 603.1,
              "lifetime" : 590.7
            }
          },
          "name" : "beats"
        } ],
        "filters" : [ {
          "id" : "35131f351e2dc5ed13ee04265a8a5a1f95292165-2",
          "events" : {
            "duration_in_millis" : 55969,
            "in" : 216485,
            "out" : 216485
          },
          "failures" : 216485,
          "patterns_per_field" : {
            "message" : 1
          },
          "flow" : {
            "worker_utilization" : {
              "current" : 16.71,
              "lifetime" : 15.27
            },
            "worker_millis_per_event" : {
              "current" : 2829,
              "lifetime" : 0.2585
            }
          },
          "name" : "grok"
        }, {
          "id" : "35131f351e2dc5ed13ee04265a8a5a1f95292165-3",
          "events" : {
            "duration_in_millis" : 3326,
            "in" : 216485,
            "out" : 216485
          },
          "flow" : {
            "worker_utilization" : {
              "current" : 1.042,
              "lifetime" : 0.9076
            },
            "worker_millis_per_event" : {
              "current" : 0.01763,
              "lifetime" : 0.01536
            }
          },
          "name" : "geoip"
        } ],
        "outputs" : [ {
          "id" : "35131f351e2dc5ed13ee04265a8a5a1f95292165-4",
          "events" : {
            "duration_in_millis" : 278557,
            "in" : 216485,
            "out" : 216485
          },
          "flow" : {
            "worker_utilization" : {
              "current" : 75.34,
              "lifetime" : 76.01
            },
            "worker_millis_per_event" : {
              "current" : 1.276,
              "lifetime" : 1.287
            }
          },
          "name" : "elasticsearch"
        } ]
      },
      "reloads" : {
        "last_error" : null,
        "successes" : 0,
        "last_success_timestamp" : null,
        "last_failure_timestamp" : null,
        "failures" : 0
      },
      "queue" : {
        "type" : "memory"
      }
    },
    "test2" : {
      "events" : {
        "duration_in_millis" : 2222229,
        "in" : 87247,
        "filtered" : 87247,
        "out" : 87247,
        "queue_push_duration_in_millis" : 1532
      },
      "flow" : {
        "input_throughput" : {
          "current" : 301.7,
          "lifetime" : 231.8
        },
        "filter_throughput" : {
          "current" : 207.2,
          "lifetime" : 231.8
        },
        "output_throughput" : {
          "current" : 207.2,
          "lifetime" : 231.8
        },
        "queue_backpressure" : {
          "current" : 0.735,
          "lifetime" : 0.0006894
        },
        "worker_concurrency" : {
          "current" : 8.0,
          "lifetime" : 5.903
        },
        "worker_utilization" : {
          "current" : 100,
          "lifetime" : 75.8
        }
      },
      "plugins" : {
        "inputs" : [ {
          "id" : "d7ea8941c0fc48ac58f89c84a9da482107472b82-1",
          "events" : {
            "out" : 87247,
            "queue_push_duration_in_millis" : 1532
          },
          "flow" : {
            "throughput" : {
              "current" : 301.7,
              "lifetime" : 238.1
            }
          },
          "name" : "twitter"
        } ],
        "filters" : [ ],
        "outputs" : [ {
          "id" : "d7ea8941c0fc48ac58f89c84a9da482107472b82-2",
          "events" : {
            "duration_in_millis" : 2222229,
            "in" : 87247,
            "out" : 87247
          },
          "flow" : {
            "worker_utilization" : {
              "current" : 100,
              "lifetime" : 75.8
            },
            "worker_millis_per_event" : {
              "current" : 33.6,
              "lifetime" : 25.47
            }
          },
          "name" : "elasticsearch"
        } ]
      },
      "reloads" : {
        "last_error" : null,
        "successes" : 0,
        "last_success_timestamp" : null,
        "last_failure_timestamp" : null,
        "failures" : 0
      },
      "queue" : {
        "type" : "memory"
      }
    }
  }
}

您可以通过包含管道 ID 来查看特定管道的统计信息。在以下示例中,管道的 ID 为 test

curl -XGET 'localhost:9600/_node/stats/pipelines/test?pretty'

示例响应

{
  "pipelines" : {
    "test" : {
      "events" : {
        "duration_in_millis" : 365495,
        "in" : 216485,
        "filtered" : 216485,
        "out" : 216485,
        "queue_push_duration_in_millis" : 2283
      },
      "flow" : {
        "input_throughput" : {
          "current" : 871.3,
          "lifetime" : 575.1
        },
        "filter_throughput" : {
          "current" : 874.8,
          "lifetime" : 575.1
        },
        "output_throughput" : {
          "current" : 874.8,
          "lifetime" : 575.1
        },
        "queue_backpressure" : {
          "current" : 0,
          "lifetime" : 0.006246
        },
        "worker_concurrency" : {
          "current" : 1.471,
          "lifetime" : 0.9709
        },
        "worker_utilization" : {
          "current" : 74.54,
          "lifetime" : 46.10
        },
        "queue_persisted_growth_bytes" : {
          "current" : 8731,
          "lifetime" : 0.0106
        },
        "queue_persisted_growth_events" : {
          "current" : 0.0,
          "lifetime" : 0.0
        }
      },
      "plugins" : {
        "inputs" : [ {
          "id" : "35131f351e2dc5ed13ee04265a8a5a1f95292165-1",
          "events" : {
            "out" : 216485,
            "queue_push_duration_in_millis" : 2283
          },
          "flow" : {
            "throughput" : {
              "current" : 871.3,
              "lifetime" : 590.7
            }
          },
          "name" : "beats"
        } ],
        "filters" : [ {
          "id" : "35131f351e2dc5ed13ee04265a8a5a1f95292165-2",
          "events" : {
            "duration_in_millis" : 55969,
            "in" : 216485,
            "out" : 216485
          },
          "failures" : 216485,
          "patterns_per_field" : {
            "message" : 1
          },
          "flow" : {
            "worker_utilization" : {
              "current" : 10.53,
              "lifetime" : 7.636
            },
            "worker_millis_per_event" : {
              "current" : 0.3565,
              "lifetime" : 0.2585
            }
          },
          "name" : "grok"
        }, {
          "id" : "35131f351e2dc5ed13ee04265a8a5a1f95292165-3",
          "events" : {
            "duration_in_millis" : 3326,
            "in" : 216485,
            "out" : 216485
          },
          "name" : "geoip",
          "flow" : {
            "worker_utilization" : {
              "current" : 1.743,
              "lifetime" : 0.4538
            },
            "worker_millis_per_event" : {
              "current" : 0.0590,
              "lifetime" : 0.01536
            }
          }
        } ],
        "outputs" : [ {
          "id" : "35131f351e2dc5ed13ee04265a8a5a1f95292165-4",
          "events" : {
            "duration_in_millis" : 278557,
            "in" : 216485,
            "out" : 216485
          },
          "flow" : {
            "worker_utilization" : {
              "current" : 62.27,
              "lifetime" : 38.01
            },
            "worker_millis_per_event" : {
              "current" : 2.109,
              "lifetime" : 1.287
            }
          },
          "name" : "elasticsearch"
        } ]
      },
      "reloads" : {
        "last_error" : null,
        "successes" : 0,
        "last_success_timestamp" : null,
        "last_failure_timestamp" : null,
        "failures" : 0
      },
      "queue": {
        "type" : "persisted",
        "capacity": {
          "max_unread_events": 0,
          "page_capacity_in_bytes": 67108864,
          "max_queue_size_in_bytes": 1073741824,
          "queue_size_in_bytes": 3885
        },
        "data": {
          "path": "/pipeline/queue/path",
          "free_space_in_bytes": 936886480896,
          "storage_type": "apfs"
        },
        "events": 0,
        "events_count": 0,
        "queue_size_in_bytes": 3885,
        "max_queue_size_in_bytes": 1073741824
      }
    }
  }
}
管道流速率编辑

API 响应中的每个管道的条目都包含许多管道范围的 速率,例如 input_throughputworker_concurrencyqueue_backpressure,以直观地了解事件在管道中的流动情况。

当配置了 持久队列 时,管道的 flow 将包含其他速率,以直观地了解管道持久队列的运行状况

流速率 定义

queue_persisted_growth_events

此指标以事件/秒表示,是相对于挂钟时间(queue.events_count / 秒)队列中未确认事件数量的变化速率。正数表示队列的事件计数正在增长,负数表示队列正在缩小。

queue_persisted_growth_bytes

此指标以字节/秒表示,是相对于挂钟时间(queue.queue_size_in_bytes / 秒)磁盘上持久队列大小的变化速率。正数表示磁盘上队列的大小正在增长,负数表示队列正在缩小。

注意:磁盘上 PQ 的大小包括未确认的事件以及包含一个或多个未处理事件的页面的先前确认的事件。这意味着它随着单个事件的添加而逐渐增长,但在每次回收包含已处理事件的整个页面的时间时,它会以较大的块缩小(阅读更多内容:PQ 磁盘垃圾回收)。

插件流量速率编辑

有几个额外的插件级流量速率可用,可以帮助识别单个插件的问题

流速率 插件类型 定义

吞吐量

输入

此指标以每秒事件数表示,是此输入插件相对于挂钟时间将事件推入管道队列的速率(events.in / second)。它包括被队列阻塞且尚未被接受的事件。

worker_utilization

过滤器、输出

这是一个无单位的指标,表示此单个插件使用的可用工作时间百分比(duration / (uptime * pipeline.workers)。它有助于识别管道中哪些插件正在使用可用的工作资源。

worker_millis_per_event

过滤器、输出

此指标以每个事件花费的工作毫秒数表示(duration_in_millis / events.in),分数越高表示每个事件花费的资源越多。它特别有助于识别对一小部分事件进行操作的插件的问题。给定流量窗口的 "Infinity" 值表示在没有任何事件完成处理的情况下花费了工作毫秒数;这可能表明插件卡住了或只处理空批次。

重新加载统计信息编辑

以下请求返回一个 JSON 文档,其中显示有关配置重新加载成功和失败的信息。

curl -XGET 'localhost:9600/_node/stats/reloads?pretty'

示例响应

{
  "reloads": {
    "successes": 0,
    "failures": 0
  }
}

操作系统统计信息编辑

当 Logstash 在容器中运行时,以下请求返回一个包含 cgroup 信息的 JSON 文档,以便您更准确地了解 CPU 负载,包括容器是否被限制。

curl -XGET 'localhost:9600/_node/stats/os?pretty'

示例响应

{
  "os" : {
    "cgroup" : {
      "cpuacct" : {
        "control_group" : "/elastic1",
        "usage_nanos" : 378477588075
                },
      "cpu" : {
        "control_group" : "/elastic1",
        "cfs_period_micros" : 1000000,
        "cfs_quota_micros" : 800000,
        "stat" : {
          "number_of_elapsed_periods" : 4157,
          "number_of_times_throttled" : 460,
          "time_throttled_nanos" : 581617440755
        }
      }
    }
  }
}

Geoip 数据库统计信息编辑

您可以监控与 Geoip 过滤器插件 一起使用的 geoip 数据库的统计信息。

curl -XGET 'localhost:9600/_node/stats/geoip_download_manager?pretty'

有关更多信息,请参阅 Geoip 过滤器插件文档中的 数据库指标