使用传统收集器收集监控数据
edit使用传统收集器收集监控数据
edit在7.16版本中已弃用。
使用 Elasticsearch Monitoring 插件收集和发送监控数据已被弃用。推荐使用 Elastic Agent 和 Metricbeat 来收集和发送监控数据到监控集群。如果您之前配置了传统的收集方法,您应该迁移到使用 Elastic Agent 或 Metricbeat 收集方法。
收集关于Elasticsearch的指标的这种方法涉及通过使用导出器将指标发送到监控集群。
高级监控设置使您能够控制数据收集的频率,配置超时时间,并设置本地存储的监控索引的保留期限。您还可以调整监控数据的显示方式。
要了解一般的监控信息,请参阅监控集群。
-
配置您的集群以收集监控数据:
-
验证在集群中的每个节点上,
xpack.monitoring.elasticsearch.collection.enabled设置是否为true,这是其默认值。您可以在每个节点的
elasticsearch.yml中指定此设置,或者作为动态集群设置在整个集群中指定。如果启用了 Elasticsearch 安全功能,您必须拥有monitor集群权限才能查看集群设置,并拥有manage集群权限才能更改它们。 -
在集群中的每个节点上将
xpack.monitoring.collection.enabled设置为true。默认情况下,它是禁用的(false)。您可以在每个节点的
elasticsearch.yml中指定此设置,或者作为动态集群设置在整个集群中指定。如果启用了 Elasticsearch 安全功能,您必须拥有monitor集群权限才能查看集群设置,并拥有manage集群权限才能更改它们。例如,使用以下API来查看和更改此设置:
GET _cluster/settings
PUT _cluster/settings { "persistent": { "xpack.monitoring.collection.enabled": true } }或者,您可以在 Kibana 中启用此设置。在侧边导航中,点击 监控。如果数据收集被禁用,系统会提示您将其打开。
-
可选:指定您想要监控的索引。
默认情况下,监控代理会从所有 Elasticsearch 索引中收集数据。 要收集特定索引的数据,请配置
xpack.monitoring.collection.indices设置。您可以指定多个索引 作为逗号分隔的列表,或者使用索引模式来匹配多个索引。例如:xpack.monitoring.collection.indices: logstash-*, index1, test2
您可以在索引名称或模式前加上
-以明确排除它们。例如,要包含所有以test开头的索引,但不包括test3,您可以指定test*,-test3。要包含系统索引,如 .security 和 .kibana,请将.*添加到包含的名称列表中。例如.*,test*,-test3 -
可选:指定收集监控数据的频率。
xpack.monitoring.collection.interval设置的默认值为 10 秒。请参阅 监控设置。
-
-
确定监控数据的存储位置。
默认情况下,数据通过使用
本地导出器存储在同一集群中。或者,您可以使用http导出器将数据发送到一个单独的监控集群。Elasticsearch 监控功能使用摄取管道,因此存储监控数据的集群必须至少有一个摄取节点。
有关典型监控架构的更多信息,请参阅工作原理。
-
如果你选择使用
http导出器:-
在您想要监控的集群上(通常称为生产集群),配置每个节点将指标发送到您的监控集群。在
elasticsearch.yml文件中的xpack.monitoring.exporters设置中配置一个HTTP导出器。例如:xpack.monitoring.exporters: id1: type: http host: ["http://es-mon-1:9200", "http://es-mon-2:9200"] -
如果在监控集群上启用了Elastic安全功能,当数据被传输到监控集群时,您必须提供适当的凭证:
-
在监控集群上创建一个具有
remote_monitoring_agent内置角色的用户。或者,使用remote_monitoring_user内置用户。 -
在每个节点的
elasticsearch.yml文件和密钥库中,将用户ID和密码设置添加到HTTP导出器设置中。例如:
xpack.monitoring.exporters: id1: type: http host: ["http://es-mon-1:9200", "http://es-mon-2:9200"] auth.username: remote_monitoring_user # "xpack.monitoring.exporters.id1.auth.secure_password" 必须在密钥库中设置
-
在监控集群上创建一个具有
-
如果您将监控集群配置为使用 加密通信,则必须在
host设置中使用 HTTPS 协议。您还必须指定用于验证监控集群中节点身份的可信 CA 证书。-
要将CA证书添加到Elasticsearch节点的受信任证书中,您可以使用
certificate_authorities设置指定PEM编码证书的位置。例如:xpack.monitoring.exporters: id1: type: http host: ["https://es-mon1:9200", "https://es-mon-2:9200"] auth: username: remote_monitoring_user # "xpack.monitoring.exporters.id1.auth.secure_password" 必须在密钥库中设置 ssl: certificate_authorities: [ "/path/to/ca.crt" ] -
或者,您可以使用信任库(包含证书的Java密钥库文件)配置受信任的证书。例如:
xpack.monitoring.exporters: id1: type: http host: ["https://es-mon1:9200", "https://es-mon-2:9200"] auth: username: remote_monitoring_user # "xpack.monitoring.exporters.id1.auth.secure_password" 必须在密钥库中设置 ssl: truststore.path: /path/to/file truststore.password: password
-
-
- 配置您的集群以将来自 Kibana、Beats 和 Logstash 等来源的监控数据路由到监控集群。有关配置每个产品以收集和发送监控数据的信息,请参阅 监控集群。
-
如果您在生产集群的
elasticsearch.yml文件中更新了设置,请重新启动 Elasticsearch。请参阅 停止 Elasticsearch 和 启动 Elasticsearch。在重新启动节点之前,您可能希望暂时禁用分片分配,以避免在安装过程中进行不必要的分片重新分配。
- 可选: 配置存储监控数据的索引。
- 在 Kibana 中查看监控数据。
收集器
editElastic Agent 和 Metricbeat 是推荐用于收集并将监控数据传输到监控集群的方法。
如果您之前配置了传统的收集方法,您应该迁移到使用Elastic Agent或Metricbeat收集。不要将传统收集与其他收集方法一起使用。
收集器,顾名思义,是用来收集数据的。每个收集器在每个收集间隔期间运行一次,以从Elasticsearch和X-Pack的公共API中获取它选择监控的数据。当数据收集完成后,数据会被批量交给导出器,以便发送到监控集群。无论有多少个导出器,每个收集器在每个收集间隔期间只运行一次。
每种收集的数据类型只有一个收集器。换句话说,对于任何创建的监控文档,它都来自一个单一的收集器,而不是从多个收集器合并而来。Elasticsearch 监控功能目前有多个收集器,因为目标是尽量减少它们之间的重叠,以实现最佳性能。
每个收集器可以创建零个或多个监控文档。例如,index_stats 收集器同时收集所有索引统计信息,以避免进行许多不必要的调用。
| Collector | Data Types | Description |
|---|---|---|
集群状态 |
|
收集有关集群状态的详细信息,包括实际集群状态的部分内容(例如 |
索引统计 |
|
收集集群中索引的详细信息,包括汇总信息和单独信息。这会创建许多文档,代表索引统计输出的一部分(例如, |
索引恢复 |
|
收集有关集群中索引恢复的详细信息。索引恢复表示在集群级别上分片的分配。如果索引未恢复,则无法使用。这也对应于通过快照进行的分片恢复。此信息只需收集一次,因此它是在选定的主节点上收集的。此收集器最常见的故障与大量分片(因此收集它们所需的时间)导致的超时有关。默认情况下,这会创建一个包含所有恢复的单一文档,这可能会非常大,但它提供了生产集群中最准确的恢复情况。 |
碎片 |
|
收集所有索引的所有已分配分片的详细信息,特别是包括分片分配到的节点。此信息只需要收集一次,因此它是在选定的主节点上收集的。收集器使用本地集群状态来获取路由表,而不会像大多数其他收集器那样遇到网络超时问题。每个分片由一个单独的监控文档表示。 |
工作 |
|
收集所有机器学习作业统计信息的详细信息(例如, |
节点状态 |
|
收集有关运行节点的详细信息,例如内存利用率和CPU使用情况(例如, |
Elasticsearch 监控功能使用单线程调度器在每个节点上运行所有适当收集器的 Elasticsearch 监控数据收集。此调度器由每个节点本地管理,其间隔通过指定 xpack.monitoring.collection.interval 来控制,默认值为 10 秒(10s),可以在节点或集群级别进行设置。
从根本上说,每个收集器的工作原理都是相同的。在每个收集间隔期间,会检查每个收集器以确定它是否应该运行,然后运行相应的收集器。单个收集器的失败不会影响其他收集器。
一旦收集完成,所有监控数据都会传递给导出器,以将监控数据路由到监控集群。
如果在 Kibana 的监控图表中存在间隙,通常是因为收集器失败或监控集群未接收到数据(例如,它正在重新启动)。如果收集器失败,尝试执行收集的节点上应该存在记录的错误。
当前的收集是串行进行的,而不是并行进行的,以避免在选定的主节点上产生额外的开销。这种方法的缺点是,收集器在同一收集周期内可能会观察到集群状态的不同版本。实际上,这并不会产生显著的差异,并且并行运行收集器也不会防止这种情况的发生。
有关收集器的配置选项的更多信息,请参阅 监控收集设置。
从整个 Elastic Stack 收集数据
editElasticsearch 监控功能还会接收来自 Elastic Stack 其他部分的监控数据。通过这种方式,它作为堆栈的非计划监控数据收集器。
默认情况下,数据收集是禁用的。Elasticsearch 监控数据不会被收集,来自其他来源(如 Kibana、Beats 和 Logstash)的所有监控数据也会被忽略。您必须将 xpack.monitoring.collection.enabled 设置为 true 以启用监控数据的收集。请参阅 监控设置。
一旦数据被接收,它会被转发到导出器,以便像所有监控数据一样路由到监控集群。
因为此堆栈级别的“收集器”存在于 Elasticsearch 监控功能的收集间隔之外,所以它不受 xpack.monitoring.collection.interval 设置的影响。因此,数据在接收到时就会传递给导出器。这种行为可能导致 Kibana、Logstash 或 Beats 的索引在某种程度上意外创建。
在收集和处理监控数据时,会将一些生产集群的元数据添加到传入的文档中。这些元数据使 Kibana 能够将监控数据链接到相应的集群。如果这种链接对您正在监控的基础设施不重要,那么配置 Logstash 和 Beats 直接将监控数据报告到监控集群可能会更简单。这种情况还可以防止生产集群因监控数据而增加额外的开销,当存在大量 Logstash 节点或 Beats 时,这非常有用。
有关典型监控架构的更多信息,请参阅 工作原理。
导出器
editElastic Agent 和 Metricbeat 是推荐用于收集并将监控数据传输到监控集群的方法。
如果您之前配置了传统的收集方法,您应该迁移到使用Elastic Agent或Metricbeat收集。不要将传统收集与其他收集方法一起使用。
导出器的作用是从任何 Elastic Stack 源收集的数据并将其路由到监控集群。可以配置多个导出器,但通常和默认的设置是使用单个导出器。
Elasticsearch中有两种类型的导出器:
两个导出器服务于相同的目的:设置监控集群并路由监控数据。然而,它们以非常不同的方式执行这些任务。尽管方式不同,但两个导出器都能够发送所有相同的数据。
导出器可以在节点和集群级别进行配置。集群范围的设置,通过_cluster/settings API更新,优先于每个节点上的elasticsearch.yml文件中的设置。当你更新一个导出器时,它会被更新版本的导出器完全替换。
所有节点共享相同的设置至关重要。否则,监控数据可能会以不同的方式或发送到不同的地方。
当导出器将监控数据路由到监控集群时,它们使用_bulk索引以获得最佳性能。所有监控数据都批量转发到同一节点上所有启用的导出器。然后,导出器序列化监控数据并向监控集群发送批量请求。没有队列——无论是内存中还是持久化到磁盘——因此,在导出过程中发生的任何故障都会导致该批监控数据的丢失。这种设计限制了对Elasticsearch的影响,并假设下一次传递将会成功。
路由监控数据涉及将其索引到适当的监控索引中。一旦数据被索引,它就存在于一个监控索引中,默认情况下,该索引的名称采用每日索引模式。对于Elasticsearch监控数据,这是一个匹配.monitoring-es-6-*的索引。从那里,数据存在于监控集群中,并且必须根据需要进行管理或清理。如果不管理监控数据,它最终会填满节点,并且集群可能会因磁盘空间不足而失败。
强烈建议您管理索引的整理,特别是监控索引。为此,您可以利用清理服务或Elastic Curator。
还有一个磁盘水位线(称为洪水阶段水位线),用于保护集群免于磁盘空间耗尽。当此功能被触发时,它会使所有索引(包括监控索引)变为只读状态,直到问题解决并且用户手动将索引重新设置为可写状态。当一个活跃的监控索引变为只读状态时,它自然会无法写入(索引)新数据,并且会持续记录指示写入失败的错误。更多信息,请参见基于磁盘的分片分配设置。
默认导出器
edit如果节点或集群未明确定义导出器,则使用以下默认导出器:
如果已经定义了另一个导出器,则不会创建默认导出器。当你定义一个新的导出器时,如果默认导出器存在,它将自动被移除。
导出器模板和摄取管道
edit在导出器可以路由监控数据之前,它们必须设置某些 Elasticsearch 资源。这些资源包括模板和摄取管道。下表列出了导出器在路由监控数据之前所需的模板:
| Template | Purpose |
|---|---|
|
所有用于监控数据的集群警报。 |
|
所有Beats监控数据。 |
|
所有Elasticsearch监控数据。 |
|
所有Kibana监控数据。 |
|
所有Logstash监控数据。 |
这些模板是普通的 Elasticsearch 模板,用于控制监控索引的默认设置和映射。
默认情况下,监控索引每天创建(例如,.monitoring-es-6-2017.08.26)。您可以通过index.name.time_format设置更改监控索引的默认日期后缀。您可以使用此设置来控制特定http导出器创建监控索引的频率。此设置不能与local导出器一起使用。有关更多信息,请参阅HTTP导出器设置。
一些用户创建了与所有索引模式匹配的自定义模板,这会影响创建的监控索引。至关重要的是,您不要禁用监控索引的_source存储。如果您这样做,Kibana的监控功能将无法工作,并且您无法为您的集群可视化监控数据。
下表列出了导出器在路由监控数据之前所需的摄取管道:
| Pipeline | Purpose |
|---|---|
|
将来自 X-Pack 5.0 - 5.4 的监控数据升级为与 5.5 监控功能使用的格式兼容。 |
|
一个空的占位符管道。 |
导出器在发送数据之前处理这些资源的设置。如果资源设置失败(例如,由于安全权限),则不会发送数据,并且会记录警告。
空管道在索引期间在协调节点上进行评估,它们会被忽略而无需额外操作。这使得它们本质上成为一种安全、无操作的操作。
对于在所有节点上禁用了node.ingest的监控集群,可以禁用使用摄取管道功能。然而,这样做会阻碍其目的,即随着我们的映射随时间改进,升级旧的监控数据。从6.0开始,摄取管道功能是监控集群的要求;您必须在至少一个节点上启用node.ingest。
一旦运行5.5或更高版本的任何节点在监控集群上设置了模板和摄取管道,您必须使用Kibana 5.5或更高版本来查看监控集群上的所有后续数据。确定此更新是否已发生的简便方法是检查是否存在与.monitoring-es-6-*匹配的索引(或者更具体地说,检查新管道的存在)。5.5之前的版本使用.monitoring-es-2-*。
每个由导出器创建的资源都有一个version字段,用于确定资源是否应被替换。version字段值表示更改了资源的监控功能的最新版本。如果资源被监控功能之外的人或事物编辑,这些更改将在下次自动更新时丢失。
本地导出器
editElastic Agent 和 Metricbeat 是推荐用于收集并将监控数据传输到监控集群的方法。
如果您之前配置了传统的收集方法,您应该迁移到使用Elastic Agent或Metricbeat收集。不要将传统收集与其他收集方法一起使用。
The local exporter 是 X-Pack 监控中的默认导出器。它将数据路由回同一个(本地)集群。换句话说,它使用生产集群作为监控集群。例如:
这个导出器的存在是为了在硬件不可用时提供一个方便的选项。它也是开发人员在没有时间或资源提供单独的监控集群时,了解他们的操作对预生产集群的影响的一种方式。然而,这个导出器有一些缺点会影响本地集群:
- 所有索引操作都会影响本地集群和持有监控索引分片的节点。
- 大多数收集器在选定的主节点上运行。因此,大多数索引操作都以选定的主节点作为协调节点,这是一种不好的做法。
- 任何使用X-Pack监控Kibana的操作都会使用本地集群的资源进行搜索和聚合,这意味着这些资源可能无法用于非监控任务。
- 如果本地集群宕机,监控集群也会随之宕机(反之亦然),这通常会违背监控的目的。
对于local导出器,所有设置仅在选定的主节点上进行。这意味着如果您没有看到任何监控模板或摄取管道,则选定的主节点可能存在问题或配置方式不同。与http导出器不同,local导出器具有访问监控集群最新集群状态的优势。因此,它始终可以检查模板和摄取管道是否存在,而不会影响性能。如果选定的主节点在尝试创建监控资源时遇到错误,它会记录错误,忽略该收集,并在下一次收集后重试。
当选的主节点是唯一一个为local导出器设置资源的节点。因此,所有其他节点在索引任何来自其自身收集器的监控数据之前,都会等待资源被设置好。每个节点都会记录一条消息,表明它们正在等待资源被设置。
使用local导出器的一个好处是它位于集群内部,因此当集群通过Elastic Stack安全功能进行保护时,不需要额外的配置。所有操作,包括索引操作,都是通过Elasticsearch内部的传输机制进行的。这种行为使得在启用安全功能时,无需提供任何用户凭证即可使用导出器。
有关local导出器的配置选项的更多信息,请参阅本地导出器设置。
清理服务
edit本地导出器的一个特性是清洁服务,这是HTTP导出器所没有的。清洁服务每天在选定的主节点上UTC时间凌晨1点运行一次。
清理服务的角色是清理或整理超过可配置时间(默认值为7d)的监控索引。此清理器作为local导出器的一部分存在,作为安全机制。http导出器不使用它,因为它可能允许单个配置错误的节点过早地从共享相同监控集群的其他生产集群中整理数据。
在专用监控集群中,您可以使用清理服务,而无需监控监控集群本身。例如:
要禁用清理服务,请添加一个禁用的本地导出器:
HTTP 导出器
editElastic Agent 和 Metricbeat 是推荐用于收集并将监控数据传输到监控集群的方法。
如果您之前配置了传统的收集方法,您应该迁移到使用Elastic Agent或Metricbeat收集。不要将传统收集与其他收集方法一起使用。
在Elasticsearch监控功能中,http导出器是首选的导出器,因为它支持使用一个独立的监控集群。作为一个次要的好处,它避免了使用生产集群节点作为协调节点来索引监控数据,因为所有请求都是向监控集群发出的HTTP请求。
The http exporter使用低级别的Elasticsearch REST客户端,这使得它能够将其数据发送到任何可以通过网络访问的Elasticsearch集群。它的请求使用了filter_path参数来尽可能减少带宽,这有助于确保生产集群和监控集群之间的通信尽可能轻量。
The http exporter 支持许多设置,这些设置控制它如何通过 HTTP 与远程集群通信。在大多数情况下,不需要显式配置这些设置。有关详细描述,请参阅 监控设置。
xpack.monitoring.exporters: my_local: type: local my_remote: type: http host: [ "10.1.2.3:9200", ... ] auth: username: my_username # "xpack.monitoring.exporters.my_remote.auth.secure_password" must be set in the keystore connection: timeout: 6s read_timeout: 60s ssl: ... proxy: base_path: /some/base/path headers: My-Proxy-Header: abc123 My-Other-Thing: [ def456, ... ] index.name.time_format: YYYY-MM
|
一个显式定义的 |
|
|
一个名为 |
|
|
|
|
|
使用Elastic Stack安全功能或其他形式的用户身份验证保护集群的用户身份验证。 |
|
|
查看HTTP exporter 设置以获取所有 TLS/SSL 设置。如果未提供,则使用默认的节点级 TLS/SSL 设置。 |
|
|
可选的基础路径,用于在代理环境中为任何传出请求添加前缀。 |
|
|
任意键/值对,定义为每个请求发送的标头。 基于数组的键/值格式为每个值发送一个标头。 |
|
|
用于更改默认使用的日期后缀的机制。 |
The http exporter 接受一个 hosts 数组,它将通过列表进行轮询。当监控集群包含多个节点时,利用这一特性是个好主意。
与local导出器不同,每个使用http导出器的节点都会尝试检查并创建其所需的资源。http导出器避免重新检查资源,除非某些触发器导致它再次执行检查。这些触发器包括:
- 生产集群的节点重启。
- 与监控集群的连接失败。
- 生产集群的许可证发生变化。
-
http导出器被动态更新(因此被替换)。
触发检查的最简单方法是禁用,然后重新启用导出器。
这种资源管理行为可能会为用户删除监控资源时留下漏洞。由于http导出器不会在触发器发生之前重新检查其资源,这可能导致索引映射异常。
与local导出器不同,http导出器本质上会将请求路由到集群外部。这意味着当监控集群需要用户名和密码时(或其他适当的安全配置,如TLS/SSL设置),导出器必须提供用户名和密码。
在讨论与http导出器相关的安全性时,重要的是要记住所有用户都在监控集群上进行管理。当你从开发环境转移到生产环境时,这一点尤其重要,因为在生产环境中你通常会有专门的监控集群。
有关http导出器的配置选项的更多信息,请参阅HTTP导出器设置。
暂停数据收集
edit要停止在 Elasticsearch 中生成 X-Pack 监控数据,请禁用数据收集:
xpack.monitoring.collection.enabled: false
当此设置为false时,不会收集Elasticsearch监控数据,并且来自其他来源(如Kibana、Beats和Logstash)的所有监控数据将被忽略。
您可以通过使用 集群更新设置API来更新此设置。
如果您想从Kibana、Beats和Logstash等来源收集数据,但不收集有关Elasticsearch集群的数据,您可以仅对Elasticsearch禁用数据收集:
xpack.monitoring.collection.enabled: true xpack.monitoring.elasticsearch.collection.enabled: false
如果您想单独禁用某个特定的导出器,可以为每个导出器指定enabled设置(默认为true)。例如:
xpack.monitoring.exporters.my_http_exporter: type: http host: ["10.1.2.3:9200", "10.1.2.4:9200"] enabled: false
定义一个禁用的导出器可以防止默认的导出器被创建。
要重新开始数据收集,请重新启用这些设置。