生产环境中的监控

编辑

在生产环境中,您应该将监控数据发送到单独的监控集群,以便即使在您监控的节点不可用时,也可以使用历史数据。

Elastic Agent 和 Metricbeat 是收集和发送监控数据到监控集群的推荐方法。

如果您之前配置了旧的收集方法,则应迁移到使用 Elastic AgentMetricbeat 收集。不要同时使用旧的收集方法和其他收集方法。

如果您至少拥有黄金订阅,则使用专用监控集群还使您能够从中心位置监控多个集群。

要在单独的集群中存储监控数据

  1. 设置您要用作监控集群的 Elasticsearch 集群。例如,您可能会设置一个包含节点 es-mon-1es-mon-2 的双主机集群。

    • 理想情况下,监控集群和生产集群运行在相同的 Elastic Stack 版本上。但是,最新 8.x 版本的监控集群也适用于使用相同主要版本的生产集群。使用 8.x 的监控集群也适用于使用最新 7.x 版本的生产集群。
    • 监控集群中必须至少有一个 摄取节点;它不需要是专用的摄取节点。
    1. (可选)验证监控集群上是否禁用了监控数据的收集。默认情况下,xpack.monitoring.collection.enabled 设置为 false

      例如,您可以使用以下 API 来查看和更改此设置

      resp = client.cluster.get_settings()
      print(resp)
      
      resp1 = client.cluster.put_settings(
          persistent={
              "xpack.monitoring.collection.enabled": False
          },
      )
      print(resp1)
      response = client.cluster.get_settings
      puts response
      
      response = client.cluster.put_settings(
        body: {
          persistent: {
            'xpack.monitoring.collection.enabled' => false
          }
        }
      )
      puts response
      const response = await client.cluster.getSettings();
      console.log(response);
      
      const response1 = await client.cluster.putSettings({
        persistent: {
          "xpack.monitoring.collection.enabled": false,
        },
      });
      console.log(response1);
      GET _cluster/settings
      
      PUT _cluster/settings
      {
        "persistent": {
          "xpack.monitoring.collection.enabled": false
        }
      }
    2. 如果在监控集群上启用了 Elasticsearch 安全功能,请创建可以发送和检索监控数据的用户

      如果您计划使用 Kibana 查看监控数据,则用户名和密码凭据在 Kibana 服务器和监控集群上都必须有效。

      • 如果您计划使用 Elastic Agent,请创建一个具有 remote_monitoring_collector 内置角色的用户,并且 相关的监控集成资产已安装在远程监控集群上。
      • 如果您计划使用 Metricbeat,请创建一个具有 remote_monitoring_collector 内置角色的用户和一个具有 remote_monitoring_agent 内置角色的用户。或者,使用 remote_monitoring_user 内置用户
      • 如果您计划使用 HTTP 导出器通过生产集群路由数据,请创建一个具有 remote_monitoring_agent 内置角色的用户。

        例如,以下请求创建一个具有 remote_monitoring_agent 角色的 remote_monitor 用户

        resp = client.security.put_user(
            username="remote_monitor",
            password="changeme",
            roles=[
                "remote_monitoring_agent"
            ],
            full_name="Internal Agent For Remote Monitoring",
        )
        print(resp)
        const response = await client.security.putUser({
          username: "remote_monitor",
          password: "changeme",
          roles: ["remote_monitoring_agent"],
          full_name: "Internal Agent For Remote Monitoring",
        });
        console.log(response);
        POST /_security/user/remote_monitor
        {
          "password" : "changeme",
          "roles" : [ "remote_monitoring_agent"],
          "full_name" : "Internal Agent For Remote Monitoring"
        }

        或者,使用 remote_monitoring_user 内置用户

  2. 配置您的生产集群以收集数据并将其发送到监控集群

  3. (可选)配置 Logstash 以收集数据并将其发送到监控集群
  4. (可选)配置 Enterprise Search 监控
  5. (可选)配置 Beats 以收集数据并将其发送到监控集群。对于由 Elastic Agent 管理的 Beats,请跳过此步骤。

  6. (可选)配置 APM Server 监控
  7. (可选)配置 Kibana 以收集数据并将其发送到监控集群

  8. (可选)为监控创建一个专用的 Kibana 实例,而不是使用单个 Kibana 实例来访问您的生产集群和监控集群。

    如果您使用 SAML、Kerberos、PKI、OpenID Connect 或令牌身份验证提供程序登录到 Kibana,则必须使用专用的 Kibana 实例。在这些上下文中使用的安全令牌是特定于集群的;因此,您不能使用单个 Kibana 实例连接到生产集群和监控集群。

    1. (可选)禁用此 Kibana 实例中监控数据的收集。在 kibana.yml 文件中将 xpack.monitoring.kibana.collection.enabled 设置为 false。有关此设置的更多信息,请参阅 Kibana 中的监控设置
  9. 配置 Kibana 以检索和显示监控数据.