使用 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 门户集成使你能够更快、更轻松地体验 Elastic 在 Azure 环境中的价值。在幕后,此过程将使用 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 服务主体后,你需要授予其正确的权限。你需要 读取者 权限来配置 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. 复制 Cloud ID 并妥善保管。你稍后将使用它。

    Elastic Cloud deployment

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

    Elastic Cloud security

你可以在任何机器上运行 Metricbeat。本教程使用一台小型 Azure VM,B2s(2 个 vCPU,4 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' 

在此命令中替换你的 Cloud ID 和管理员的 username:password。要查找你的 Cloud ID,请单击你的 部署

设置 Metricbeat 是一项需要额外权限的管理员级任务。作为最佳实践,使用管理员角色进行设置,并为事件发布使用更具限制性的角色(你将在下一步中执行)。

配置 Metricbeat 输出
编辑

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

  1. 使用 Metricbeat 密钥库存储 安全设置。将 Cloud 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

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

配置 Metricbeat Azure 模块
编辑

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

此模块可能会产生额外的 Azure 指标查询费用。请参阅关于指标和成本的附加说明了解更多详细信息。

  1. azure 模块配置需要三个 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 指标集是一个预定义的指标集,用于收集已配置订阅的相关使用数据和预测信息。

    每 24 小时收集一次指标。billing 指标集的周期应为 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