使用 Beats 监控 Microsoft Azure

编辑

使用 Beats 监控 Microsoft Azure

编辑

本教程将指导您如何使用 Elastic 可观测性:日志和基础设施指标来监控您的 Microsoft Azure 部署。

您将学到什么
编辑

您将学习如何:

  • 在 Azure 门户中创建 Elasticsearch 资源。
  • 使用原生集成提取 Azure 平台日志,并在 Kibana 中查看这些日志。
  • 提取虚拟机的日志和指标,并在 Kibana 中查看这些日志和基础设施指标。
  • 使用 Metricbeat Azure 模块 提取其他指标(例如计费),并在 Kibana 中查看这些指标。
步骤 1:在 Azure 门户中创建 Elasticsearch 资源
编辑

Microsoft Azure 允许您在 Azure 门户中查找、部署和管理 Elasticsearch。Microsoft Azure 门户集成使您能够更快、更轻松地在 Azure 环境中体验 Elastic 的价值。幕后,此过程将使用 Elastic Cloud 预配市场订阅。

创建 Elasticsearch 资源
编辑
  1. 登录到 Azure 门户

    确保您的 Azure 帐户已在您想要部署 Elasticsearch 的订阅中配置了 所有者 访问权限。要了解有关 Azure 订阅的更多信息,请参阅 Microsoft Azure 文档

  2. 在搜索栏中,输入 Elasticsearch,然后选择它。
  3. 单击 创建
  4. 输入 订阅资源组资源名称
  5. 选择一个区域,然后单击 查看 + 创建

    Create Elastic resource

    我们将在本教程的后面部分介绍 日志基础设施指标

  6. 要创建 Elasticsearch 部署,请单击 创建
  7. 部署完成后,单击 转到资源。在这里您可以查看和配置您的部署详细信息。要访问集群,请单击 Kibana

    Elastic resource

  1. 要直接单点登录到 Elastic,请选择您的 Azure 帐户。
  2. 要查看是否有任何可用数据,请单击 可观测性。目前应该没有数据,但接下来您将提取日志。

    Kibana Observability page (no data)

步骤 2:使用原生集成提取日志
编辑

使用 Microsoft Azure 原生集成将 Azure 订阅和资源日志提取到 Elastic 非常简单。

  1. 在 Azure 中的 Elasticsearch 资源页面上,单击 从 Azure 服务提取日志和指标

    Click on Ingest logs and metrics from Azure Services

  2. 选中两个复选框,然后单击 保存

    Elastic configure logs and metrics

    此配置也可以在 Elastic 资源创建期间应用。为了使概念更清晰,本教程将这两个步骤分开。

    原生指标收集尚未完全支持,将在后面讨论。

  3. 在 Kibana 中,在主菜单中找到可观测性 概述,或使用 全局搜索字段。刷新页面直到看到一些数据。这可能需要几分钟。
  4. 要分析您的订阅和资源日志,请单击 显示日志资源管理器
步骤 3:从您的虚拟机提取日志和指标
编辑
  1. 转到您的 Elastic 资源并单击 虚拟机

    Elastic resource

  2. 选择您要从中收集日志和指标的虚拟机,单击 安装扩展,然后单击 确定

    Select VMs to collect logs and metrics from

  3. 等待安装并发送数据(如果列表未更新,请单击 刷新)。要查看来自虚拟机的日志,请打开 日志资源管理器(在 全局搜索字段 中查找 日志资源管理器)。

    要查看虚拟机指标,请转到 基础设施清单,然后选择虚拟机。(要打开 基础设施清单,请在主菜单中找到 基础设施,或使用 全局搜索字段。)

日志和指标都按您选择的虚拟机名称进行筛选。要查看所有受监控虚拟机的數據,請刪除篩選器。

步骤 4:使用 Metricbeat Azure 模块提取其他 Azure 指标
编辑

并非所有 Azure 指标都可通过原生集成获得。如果您想收集这些指标,您需要使用 Azure Monitor REST API 和 Metricbeat。

Azure Monitor REST API 允许您使用不同的操作来了解您的 Azure 资源。要访问 Azure Monitor REST API,您需要使用 Azure 资源管理器身份验证模型。因此,您必须使用 Azure Active Directory (Azure AD) 对所有请求进行身份验证。您可以使用 Azure 门户Azure PowerShell 创建服务主体。然后,您需要授予访问权限,此处详细说明了 此处。本教程使用 Azure 门户。

创建 Azure 服务主体
编辑
  1. 转到 Azure 管理门户。搜索并单击 Azure Active Directory

    Search and click on Azure Active Directory

  2. 在选定的 Active Directory 的导航窗格中单击 应用注册,然后单击 新建注册

    Click on App registrations

  3. 键入您的应用程序名称(本教程使用 monitor-azure),然后单击 注册(将所有其他选项保留为默认值)。

    Register an application

    复制 应用程序(客户端)ID 并将其保存以备将来参考。此 ID 对于配置 Metricbeat 以连接到您的 Azure 帐户是必需的。

  4. 单击 证书和密钥。然后,单击 新建客户端密钥 以创建新的安全密钥。

    Click on new client secret

  5. 键入密钥说明并选择密钥期限。单击 添加 以创建客户端密钥。下一页将在 字段下显示密钥值。复制密钥并将其(以及您的客户端 ID)保存以备将来参考。

    这是您唯一一次可以复制此值的机会。离开页面后,您将无法检索密钥值。

为您的服务主体授予访问权限
编辑

创建 Azure 服务主体后,您需要为其授予正确的权限。您需要 Reader 权限才能配置 Metricbeat 来监控您的服务。

  1. 在 Azure 门户上,搜索并单击 订阅

    Search and click on Subscriptions

  2. 在订阅页面上,单击您的订阅。
  3. 在订阅导航窗格中单击 访问控制 (IAM)
  4. 单击 添加 并选择 添加角色分配
  5. 选择 读取者 角色。
  6. 选择 字段中,键入已配置服务主体的描述名称 (monitor-azure)。

    Add role assignment

  7. 选择应用程序并单击保存以授予服务主体对您订阅的访问权限。
安装和配置 Metricbeat
编辑

要配置 Metricbeat,您需要 Elasticsearch 集群详细信息。

  1. 在 Elasticsearch 资源页面上,单击 管理 Elastic Cloud 中的更改

    Elastic resource

  2. 复制 云 ID 并妥善保管。您稍后将使用它。

    Elastic Cloud deployment

  3. 单击 安全,然后单击 重置密码。确认并复制密码。妥善保管,因为您稍后将使用它。

    Elastic Cloud security

您可以在任何机器上运行 Metricbeat。本教程使用一台小型 Azure 虚拟机 B2s(2 个 vCPU,4 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(您可以通过云控制台登录,无需输入任何权限)并在 全局搜索字段 中找到 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_keyid 字段,可以按以下格式存储在 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

现在输出已正常工作,您将设置输入(Azure)。

配置 Metricbeat Azure 模块
编辑

要从 Microsoft Azure 收集指标,请使用 Metricbeat Azure 模块。此模块使用 Azure Monitor REST API 定期获取 Microsoft Azure 的监控指标。

此模块可能会产生关于指标查询的额外 Azure 费用。请参阅 关于指标和费用的其他说明,了解更多详情。

  1. Azure 模块配置需要三个 ID 和一个密钥。使用以下命令将每个 ID 和密钥存储在密钥库中。

    echo -n "<client_id>" | ./metricbeat keystore add AZURE_CLIENT_ID --stdin
    echo -n "<client_secret>" | ./metricbeat keystore add AZURE_CLIENT_SECRET --stdin
    echo -n "<tenant_id>" | ./metricbeat keystore add AZURE_TENANT_ID --stdin
    echo -n "<subscription_id>" | ./metricbeat keystore add AZURE_SUBSCRIPTION_ID --stdin

    您可以在主要的 Azure Active Directory 页面中找到 tenant_id。您可以在主要的订阅页面中找到 subscription_id

  2. 启用 Azure 模块。

    ./metricbeat modules enable azure
  3. 编辑 modules.d/azure.yml 文件以收集 billing 指标。

    - module: azure
      metricsets:
      - billing  
      enabled: true
      period: 24h  
      client_id: '${AZURE_CLIENT_ID:""}'
      client_secret: '${AZURE_CLIENT_SECRET:""}'
      tenant_id: '${AZURE_TENANT_ID:""}'
      subscription_id: '${AZURE_SUBSCRIPTION_ID:""}'
      refresh_list_interval: 600s

    billing metricset 是一个预定义的 metricset,它收集配置的订阅的相关使用数据和预测信息。

    每 24 小时收集一次指标。billing metricset 的周期应为 24h24h 的倍数。

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

    ./metricbeat test modules azure

    如果设置正确,Metricbeat 将会打印 billing 指标到终端。

    如果返回超时错误,请重试。test modules 的超时时间很短。

  5. 输入和输出准备就绪后,启动 Metricbeat 收集数据。

    ./metricbeat -e
  6. 最后,登录 Kibana 并打开 [Metricbeat Azure] 账单概览 仪表板。请记住它每 24 小时收集一次数据。

    Metricbeat azure billing overview dashboard