监控 Google Cloud Platform (GCP)

编辑

监控 Google Cloud Platform (GCP)

编辑

在本指南中,您将学习如何使用 Elastic 可观测性:日志和基础设施指标,来监控您的 Google Cloud Platform (GCP) 部署。

如果您不想因为流程和管理开销而配置虚拟机并安装数据发送器,您可以跳过此步骤,直接使用 GCP Dataflow 模板,从 Google Cloud Console 中的 Pub/Sub 将日志摄取到 Elastic。

您将学习的内容

编辑

您将学习如何

开始之前

编辑

Elastic Cloud 上使用我们托管的 Elasticsearch Service 创建一个部署。该部署包括一个用于存储和搜索数据的 Elasticsearch 集群,以及用于可视化和管理数据的 Kibana。

步骤 1:设置服务帐户

编辑

Google Cloud Platform 将 服务帐户 作为一种安全访问 API 的方式。要使用 Elastic 监控 GCP,您需要一个服务帐户。最简单的方法是使用 GCP 自动创建 的预定义服务帐户。或者,您可以创建一个新的服务帐户。本教程将创建一个新的服务帐户。

首先,要访问服务帐户菜单,请点击 菜单IAM & 管理服务帐户

Service account menu

接下来,点击 创建服务帐户。定义新的服务帐户名称(例如,“gcp-monitor”)和描述(例如,“使用 Elastic Stack 监控 GCP 服务”) 。

Service account name

请确保选择正确的角色。

要监控 GCP 服务,您需要向服务帐户添加以下角色

Compute Viewer:

Service account roles compute viewer

Monitoring Viewer:

Service account roles monitoring viewer

Pub/Sub Subscriber:

Service account roles pub/sub subscriber

最终结果应如下所示

Service account roles result

点击 继续,然后跳过授予用户访问此服务的权限。最后,点击 完成。服务帐户现在可以使用了。

接下来,要使用服务帐户,请点击 管理密钥

Service account manage keys

然后,通过选择 创建新密钥 添加新的 JSON 密钥类型。

Service account create key

之后,将下载凭据文件。将此文件保存在一个可访问的地方以便稍后使用。

步骤 2:安装和配置 Metricbeat

编辑

本教程假定 Elastic 集群已在运行。请确保您手头有您的 云 ID 和您的 凭据

要使用 Elastic Stack 监控 GCP,您需要两个主要组件:一个用于存储和分析数据的 Elastic 部署,以及一个用于收集和发送数据的代理。

可以使用两个代理来监控 GCP:Metricbeat 用于监控指标,而 Filebeat 用于监控日志。您可以在任何机器上运行这些代理。本教程使用一个小型 GCP 实例,e2-small(2 个 vCPU,2 GB 内存),使用 Ubuntu 发行版。

安装 Metricbeat
编辑

下载并安装 Metricbeat。

curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.17.0-amd64.deb
sudo dpkg -i metricbeat-8.17.0-amd64.deb
设置资产
编辑

Metricbeat 带有预定义的资产,用于解析、索引和可视化您的数据。运行以下命令来加载这些资产。这可能需要几分钟时间。

./metricbeat setup -e -E 'cloud.id=YOUR_DEPLOYMENT_CLOUD_ID' -E 'cloud.auth=elastic:YOUR_SUPER_SECRET_PASS' 

在此命令中替换您的云 ID 和管理员的 用户名:密码。要查找您的云 ID,请点击您的 部署

设置 Metricbeat 是一项需要额外特权的管理员级任务。作为最佳实践,使用管理员角色进行设置,并使用更严格的角色进行事件发布(您将在下一步执行此操作)。

配置 Metricbeat 输出
编辑

接下来,您将配置 Metricbeat 输出到 Elasticsearch Service。

  1. 使用 Metricbeat 密钥库来存储 安全设置。将云 ID 存储在密钥库中。

    ./metricbeat keystore create
    echo -n "<Your Deployment Cloud ID>" | ./metricbeat keystore add CLOUD_ID --stdin
  2. 为了以最小的权限将指标存储在 Elasticsearch 中,请创建一个 API 密钥,以便将数据从 Metricbeat 发送到 Elasticsearch Service。登录 Kibana(您可以从云控制台执行此操作,无需输入任何权限),然后在 全局搜索字段 中找到 Dev Tools。从 控制台 发送以下请求

    POST /_security/api_key
    {
      "name": "metricbeat-monitor",
      "role_descriptors": {
        "metricbeat_writer": {
          "cluster": ["monitor", "read_ilm"],
          "index": [
            {
              "names": ["metricbeat-*"],
              "privileges": ["view_index_metadata", "create_doc"]
            }
          ]
        }
      }
    }
  3. 响应包含一个 api_key 和一个 id 字段,它们可以按以下格式存储在 Metricbeat 密钥库中:id:api_key

    echo -n "IhrJJHMB4JmIUAPLuM35:1GbfxhkMT8COBB4JWY3pvQ" | ./metricbeat keystore add ES_API_KEY --stdin

    请确保指定 -n 参数;否则,由于在 API 密钥末尾添加了换行符,您将进行痛苦的调试会话。

  4. 要查看是否已存储这两个设置,请运行以下命令

    ./metricbeat keystore list
  5. 要配置 Metricbeat 输出到 Elasticsearch Service,请编辑 metricbeat.yml 配置文件。将以下行添加到文件末尾。

    cloud.id: ${CLOUD_ID}
    output.elasticsearch:
      api_key: ${ES_API_KEY}
  6. 最后,测试配置是否正常工作。如果配置不起作用,请验证您是否使用了正确的凭据并再次添加它们。

    ./metricbeat test output

既然输出正常工作,您将设置输入 (GCP)。

步骤 3:配置 Metricbeat Google Cloud Platform 模块

编辑

要从 Google Cloud Platform 收集指标,请使用 Google Cloud Platform 模块。此模块使用 Stackdriver Monitoring API 定期从 Google Cloud Platform 服务中获取监控指标。

此模块可能会产生 Stackdriver Monitoring API 请求的额外 GCP 费用。有关更多详细信息,请参阅 API 调用次数的粗略估计

  1. 启用 GCP 模块。

    ./metricbeat modules enable gcp
  2. 编辑 modules.d/gcp.yml 文件以配置要收集的指标。

    - module: gcp
      metricsets:
        - compute 
      zone: "" 
      project_id: "your-project-id" 
      period: 1m 
      credentials_file_path: "/home/ubuntu/credentials.json" 

    compute 指标集是一个预定义的指标集,用于收集一些 GCP 计算指标。

    定义要监控的区域,空值会收集 所有 区域的数据

    your-project-id 项目 ID 中收集指标。

    每分钟收集指标

    您之前生成的 GCP 凭据文件。(如果该文件不存在,请不要忘记创建该文件,并使用正确的完整路径)。

  3. 要检查 Metricbeat 是否可以收集数据,请通过运行以下命令测试输入

    ./metricbeat test modules gcp

    如果设置正确,Metricbeat 将在终端打印 GCP 指标。

  4. 当输入和输出都准备就绪时,启动 Metricbeat 以收集数据。

    ./metricbeat -e
  5. 最后,登录 Kibana 并打开 [Metricbeat GCP] 计算概述 仪表板。

    Metricbeat compute overview dashboard

步骤 4:安装和配置 Filebeat

编辑

现在 Metricbeat 已经启动并运行,配置 Filebeat 以收集 Google Cloud 日志。

安装 Filebeat
编辑

下载并安装 Filebeat。

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.17.0-amd64.deb
sudo dpkg -i filebeat-8.17.0-amd64.deb
设置资产
编辑

Filebeat 带有预定义的资产,用于解析、索引和可视化您的数据。运行以下命令来加载这些资产。这可能需要几分钟时间。

./filebeat setup -e -E 'cloud.id=YOUR_DEPLOYMENT_CLOUD_ID' -E 'cloud.auth=elastic:YOUR_SUPER_SECRET_PASS' 

在此命令中替换您的云 ID 和管理员的 用户名:密码。要查找您的云 ID,请点击您的 部署

设置 Filebeat 是一项需要额外特权的管理员级任务。作为最佳实践,使用管理员角色进行设置,并使用更严格的角色进行事件发布(您将在下一步执行此操作)。

配置 Filebeat 输出
编辑

接下来,您将配置 Filebeat 输出到 Elasticsearch Service。

  1. 使用 Filebeat 密钥库来存储 安全设置。将云 ID 存储在密钥库中。

    ./filebeat keystore create
    echo -n "<Your Deployment Cloud ID>" | ./filebeat keystore add CLOUD_ID --stdin
  2. 为了以最小的权限将日志存储在 Elasticsearch 中,请创建一个 API 密钥,以便将数据从 Filebeat 发送到 Elasticsearch Service。登录 Kibana(您可以从云控制台执行此操作,无需输入任何权限),然后在 全局搜索字段 中找到 Dev Tools。发送以下请求

    POST /_security/api_key
    {
      "name": "filebeat-monitor-gcp",
      "role_descriptors": {
        "filebeat_writer": {
          "cluster": [
            "monitor",
            "read_ilm",
            "cluster:admin/ingest/pipeline/get", 
            "cluster:admin/ingest/pipeline/put" 
          ],
          "index": [
            {
              "names": ["filebeat-*"],
              "privileges": ["view_index_metadata", "create_doc"]
            }
          ]
        }
      }
    }

    Filebeat 需要额外的集群权限才能发布日志,这与 Metricbeat 配置不同。您可以在 此处 找到更多详细信息。

  3. 响应包含一个 api_key 和一个 id 字段,它们可以按以下格式存储在 Filebeat 密钥库中:id:api_key

    echo -n "IhrJJHMB4JmIUAPLuM35:1GbfxhkMT8COBB4JWY3pvQ" | ./filebeat keystore add ES_API_KEY --stdin

    请确保指定 -n 参数;否则,由于在 API 密钥末尾添加了换行符,您将进行痛苦的调试会话。

  4. 要查看是否已存储这两个设置,请运行以下命令

    ./filebeat keystore list
  5. 要配置 Filebeat 输出到 Elasticsearch Service,请编辑 filebeat.yml 配置文件。将以下行添加到文件末尾。

    cloud.id: ${CLOUD_ID}
    output.elasticsearch:
      api_key: ${ES_API_KEY}
  6. 最后,测试配置是否正常工作。如果配置不起作用,请验证您是否使用了正确的凭据,并在必要时再次添加它们。

    ./filebeat test output

既然输出正常工作,您将设置输入 (GCP)。

步骤 5:配置 Filebeat Google Cloud 模块

编辑

要从 Google Cloud Platform 收集日志,请使用 Google Cloud Platform 模块。此模块定期获取从 Stackdriver 导出到 Google Pub/Sub 主题接收器的日志。有三个可用的文件集:auditvpcflowfirewall。本教程涵盖 audit 文件集。

  1. 转到 日志路由器 页面,配置 GCP 将日志导出到 Pub/Sub 主题。使用搜索栏查找页面。

    Navigate to Logs Router page

    要设置日志路由接收器,请单击 创建接收器。将 接收器名称 设置为 monitor-gcp-audit-sink。选择 Cloud Pub/Sub 主题 作为 接收器服务,并 创建新的 Cloud Pub/Sub 主题,命名为 monitor-gcp-audit

    Create Pub/Sub topic

    最后,在 选择要包含在接收器中的日志 下,添加 logName:"cloudaudit.googleapis.com"(它包括所有审计日志)。单击 创建接收器。它看起来应该类似如下。

    Create logs routing sink
  2. 现在转到 Pub/Sub 页面,为刚刚创建的主题添加订阅。使用搜索栏查找页面。

    GCP Pub/Sub

    要为 monitor-gcp-audit 主题添加订阅,请单击 创建订阅

    Create GCP Pub/Sub Subscription

    monitor-gcp-audit-sub 设置为 订阅 ID,并将 交付类型 保留为拉取。

    GCP Pub/Sub Subscription ID

    最后,向下滚动并单击 创建

  3. 现在 GCP 已配置为导出审计日志,请启用 Filebeat Google Cloud 模块。

    ./filebeat modules enable gcp
  4. 使用以下配置编辑 modules.d/gcp.yml 文件。

    - module: gcp
      vpcflow:
        enabled: false 
      firewall:
        enabled: false 
      audit:
        enabled: true 
        var.project_id: "elastic-education" 
        var.topic: "monitor-gcp-audit" 
        var.subscription_name: "monitor-gcp-audit-sub" 
        var.credentials_file: "/home/ubuntu/credentials.json" 

    禁用 vpcflowfirewall 文件集。

    启用 audit 文件集。

    elastic-education 项目 ID 内收集数据。

    monitor-gcp-audit 主题收集日志。

    Google Cloud Pub/Sub 主题订阅名称。

    您之前生成的 GCP 凭证文件。(如果文件不存在,请不要忘记创建该文件,并使用正确的完整路径)。

  5. 启动 Filebeat 以收集日志。

    ./filebeat -e
  6. 最后,登录 Kibana 并打开 [Filebeat GCP] 审计 仪表板。

    Filebeat audit overview dashboard