监控 Google Cloud Platform (GCP)

编辑

监控 Google Cloud Platform (GCP)

编辑

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

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

您将学到什么

编辑

您将学习如何

开始之前

编辑

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

步骤 1:设置服务帐号

编辑

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

首先,要访问服务帐号菜单,请点击 菜单IAM 和管理员服务帐号

Service account menu

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

Service account name

确保选择了正确的角色。

要监控 GCP 服务,您需要将以下角色添加到服务帐号

Compute 查看器:

Service account roles compute viewer

监控查看器:

Service account roles monitoring viewer

Pub/Sub 订阅者:

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.16.0-amd64.deb
sudo dpkg -i metricbeat-8.16.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(您可以从 Cloud Console 中执行此操作,无需输入任何权限)并在 全局搜索字段 中找到 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.16.0-amd64.deb
sudo dpkg -i filebeat-8.16.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(您可以从 Cloud Console 中执行此操作,无需输入任何权限)并在 全局搜索字段 中找到 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] Audit 仪表板。

    Filebeat audit overview dashboard