Azure 模块编辑

此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。

已在 7.8.0 中弃用。

我们建议使用 FilebeatMetricbeat 中的 Azure 模块,它们符合 Elastic 通用架构 (ECS)

Logstash 中的 Microsoft Azure 模块可帮助您轻松地将 Azure 活动日志和 SQL 诊断日志与 Elastic Stack 集成。

Azure Work Flow

您可以通过跨多个 Azure 订阅的深入运营洞察力来监控您的 Azure 云环境和 SQL 数据库部署。您可以实时探索基础架构的运行状况,从而加快根本原因分析并缩短总体解决时间。Azure 模块可帮助您

  • 分析基础架构更改和授权活动
  • 识别可疑行为和潜在的恶意行为者
  • 通过调查用户活动来执行根本原因分析
  • 监控和优化您的 SQL 数据库部署。

Azure 模块使用 Logstash Azure 事件中心输入插件 来使用来自 Azure 事件中心的数据。该模块直接接入 Azure 仪表板,解析事件并将其编入 Elasticsearch,并安装一套 Kibana 仪表板,以帮助您立即开始探索数据。

仪表板编辑

这些 Kibana 仪表板可供您使用。您可以按原样使用它们,也可以根据您的需要对其进行定制。

基础架构活动监控编辑

  • 概览。Azure 操作的顶层视图,包括有关用户、资源组、服务运行状况、访问权限、活动和警报的信息。
  • 警报。警报信息,包括活动、警报状态和警报热图
  • 用户活动。有关系统用户、其活动和请求的信息。

SQL 数据库监控编辑

  • SQL 数据库概览。SQL 数据库的顶层视图,包括数据库、服务器、资源组和订阅的计数。
  • SQL 数据库视图。有关每个 SQL 数据库的详细信息,包括等待时间、错误、DTU 和存储利用率、大小以及读写输入/输出。
  • SQL 数据库查询。有关 SQL 数据库查询和性能的信息。

先决条件编辑

此模块需要启用 Azure 事件中心的 Azure Monitor 和 Elastic Stack。

Elastic 先决条件编辑

以下说明假定您在本地运行 Logstash、Elasticsearch 和 Kibana。您也可以在不同的主机上运行 Logstash、Elasticsearch 和 Kibana。

此模块需要 Elastic Stack 6.4(或更高版本)。

Azure 模块使用 azure_event_hubs 输入插件来使用来自 Azure 环境的日志和指标。默认情况下,它随 Logstash 6.4(或更高版本)一起安装。在设置 Azure 模块时,对插件和选项的基本了解很有帮助。有关更多信息,请参阅 azure_event_hubs 输入插件文档

Elastic 产品 可供下载 并且易于安装。

Azure 先决条件编辑

应将 Azure Monitor 配置为将日志流式传输到一个或多个事件中心。Logstash 将需要访问这些事件中心实例才能使用您的 Azure 日志和指标。有关 Microsoft Azure 文档的链接,请参阅本主题末尾的 Microsoft Azure 资源

配置模块编辑

logstash.yml 配置文件中指定 Logstash Azure 模块的 选项

  • 基本配置。 您可以使用 logstash.yml 文件来配置来自共享相同配置的多个事件中心的输入。对于大多数用例,建议使用基本配置。
  • 高级配置。 高级配置适用于不同的事件中心需要不同配置的部署。 logstash.yml 文件包含您的设置。对于大多数用例,不需要也不建议使用高级配置。

有关基本和高级配置模型的更多信息,请参阅 azure_event_hubs 输入插件文档

基本配置示例编辑

logstash.yml 文件中的配置在事件中心之间共享。对于大多数用例,建议使用基本配置

modules:
  - name: azure
    var.elasticsearch.hosts: localhost:9200
    var.kibana.host: localhost:5601
    var.input.azure_event_hubs.consumer_group: "logstash" 
    var.input.azure_event_hubs.storage_connection: "DefaultEndpointsProtocol=https;AccountName=instance1..." 
    var.input.azure_event_hubs.threads: 9 
    var.input.azure_event_hubs.event_hub_connections:
      - "Endpoint=sb://...EntityPath=insights-operational-logs" 
      - "Endpoint=sb://...EntityPath=insights-metrics-pt1m" 
      - "Endpoint=sb://...EntityPath=insights-logs-blocks"
      - "Endpoint=sb://...EntityPath=insights-logs-databasewaitstatistics"
      - "Endpoint=sb://...EntityPath=insights-logs-errors"
      - "Endpoint=sb://...EntityPath=insights-logs-querystoreruntimestatistics"
      - "Endpoint=sb://...EntityPath=insights-logs-querystorewaitstatistics"
      - "Endpoint=sb://...EntityPath=insights-logs-timeouts"

强烈建议使用 consumer_group(可选)。请参阅 最佳实践

storage_connection(可选)设置 Azure Blob 存储连接,用于在使用多个 Logstash 实例扩展部署时跟踪事件中心的处理状态。有关更多详细信息,请参阅 扩展事件中心使用

有关选择适当线程数的指南,请参阅 最佳实践

此连接设置活动日志的使用。默认情况下,Azure Monitor 使用 insights-operational-logs 事件中心名称。确保这与为活动日志指定的事件中心的名称相匹配。

此连接和以下连接设置 SQL 数据库诊断日志和指标的使用。默认情况下,Azure Monitor 使用所有这些不同的事件中心名称。

基本配置在配置选项之前需要 var.input.azure_event_hubs. 前缀。请注意 threads 选项的表示法。

高级配置示例编辑

logstash.yml 文件中的高级配置支持特定于事件中心的选项。高级配置可用于对跨多个事件中心的线程和 Blob 存储使用进行更精细的调整。对于大多数用例,不需要也不建议使用高级配置。仅当您的部署方案需要时才使用它。

您必须定义 header 数组,并将 name 放在第一个位置。您可以按任意顺序定义其他选项。每个事件中心的配置优先。每个事件中心未定义的任何值都使用全局配置值。

在此示例中,threadsconsumer_groupstorage_connection 将应用于每个已配置的事件中心。请注意,decorate_events 在全局配置和每个事件中心的配置中都有定义。每个事件中心的配置优先,并且当存在每个事件中心的设置时,全局配置实际上将被忽略。

modules:
  - name: azure
    var.elasticsearch.hosts: localhost:9200
    var.kibana.host: localhost:5601
    var.input.azure_event_hubs.decorate_events: true 
    var.input.azure_event_hubs.threads: 9 
    var.input.azure_event_hubs.consumer_group: "logstash"
    var.input.azure_event_hubs.storage_connection: "DefaultEndpointsProtocol=https;AccountName=instance1..."
    var.input.azure_event_hubs.event_hubs:
      - ["name",                                    "initial_position",  "storage_container",  "decorate_events",  "event_hub_connection"]                                   
      - ["insights-operational-logs",                 "TAIL",              "activity-logs1",    "true",             "Endpoint=sb://...EntityPath=insights-operational-logs"]
      - ["insights-operational-logs",                 "TAIL",              "activity_logs2",  "true",             "Endpoint=sb://...EntityPath=insights-operational-logs"]   
      - ["insights-metrics-pt1m",                     "TAIL",              "dbmetrics",         "true",             "Endpoint=sb://...EntityPath=insights-metrics-pt1m"]
      - ["insights-logs-blocks",                      "TAIL",              "dbblocks",          "true",             "Endpoint=sb://...EntityPath=insights-logs-blocks"]
      - ["insights-logs-databasewaitstatistics",      "TAIL",              "dbwaitstats",       "false",            "Endpoint=sb://...EntityPath=insights-logs-databasewaitstatistics"]
      - ["insights-logs-errors",                      "HEAD",              "dberrors",          "true",             "Endpoint=sb://...EntityPath=insights-logs-errors"
      - ["insights-logs-querystoreruntimestatistics", "TAIL",              "dbstoreruntime",    "true",             "Endpoint=sb://...EntityPath=insights-logs-querystoreruntimestatistics"]
      - ["insights-logs-querystorewaitstatistics",    "TAIL",              "dbstorewaitstats",  "true",             "Endpoint=sb://...EntityPath=insights-logs-querystorewaitstatistics"]
      - ["insights-logs-timeouts",                    "TAIL",              "dbtimeouts",        "true",             "Endpoint=sb://...EntityPath=insights-logs-timeouts"]

您可以指定全局事件中心选项。它们将被 event_hubs 选项中指定的任何配置覆盖。

有关选择适当线程数的指南,请参阅 最佳实践

必须定义 header 数组,并将 name 放在第一个位置。其他选项可以按任意顺序定义。每个事件中心的配置优先。每个事件中心未定义的任何值都使用全局配置值。

这允许使用第二个使用不同 Blob 存储容器的活动日志事件中心。这是为了避免第一个 insights-operational-logs 的偏移量覆盖第二个 insights-operational-logs 的偏移量。

高级配置不需要在每个事件中心的配置选项之前添加前缀。请注意 initial_position 选项的表示法。

扩展事件中心使用编辑

Azure Blob 存储帐户 是 Azure 到 Logstash 配置的重要组成部分。希望扩展多个 Logstash 实例以使用事件中心的用户的需要它。

Blob 存储帐户是一个中心位置,允许多个 Logstash 实例协同工作来处理事件。它记录已处理事件的偏移量(位置)。重新启动后,Logstash 会从中断的地方继续处理。

配置说明

  • 强烈建议将 Blob 存储帐户与此模块一起使用,并且生产服务器可能需要它。
  • storage_connection 选项传递 blob 存储连接字符串。
  • 将所有 Logstash 实例配置为使用相同的 storage_connection 以获得共享处理的优势。

示例 Blob 存储连接字符串

DefaultEndpointsProtocol=https;AccountName=logstash;AccountKey=ETOPnkd/hDAWidkEpPZDiXffQPku/SZdXhPSLnfqdRTalssdEuPkZwIcouzXjCLb/xPZjzhmHfwRCGo0SBSw==;EndpointSuffix=core.windows.net

在此处查找 Blob 存储的连接字符串:Azure 门户-> Blob 存储帐户 -> 访问密钥

最佳实践编辑

以下是一些指南,可帮助您成功部署,并避免可能导致事件丢失的数据冲突。

创建 Logstash 消费者组编辑

专门为 Logstash 创建一个新的消费者组。不要使用 $default 或任何其他可能已在使用的消费者组。在不相关的消费者之间重复使用消费者组可能会导致意外行为并可能丢失事件。所有 Logstash 实例都应使用相同的消费者组,以便它们可以协同处理事件。

避免使用多个事件中心覆盖偏移量编辑

事件中心的偏移量(位置)存储在配置的 Azure Blob 存储中。Azure Blob 存储使用类似于文件系统的路径来存储偏移量。如果多个事件中心之间的路径重叠,则偏移量可能会存储不正确。

为避免重复的文件路径,请使用高级配置模型,并确保每个事件中心至少有一个选项不同

  • storage_connection
  • storage_container(如果未定义,则默认为事件中心名称)
  • consumer_group
正确设置线程数编辑

默认情况下,用于为所有事件中心提供服务的线程数为 16。虽然这对于大多数用例来说可能足够了,但可以通过优化此数字来提高吞吐量。当为一个或多个事件中心中的大量分区提供服务时,设置更高的值可能会提高性能。最大线程数不受正在服务的分区总数的严格限制,但将该值设置得远高于该值可能意味着某些线程处于空闲状态。

线程数 必须 大于或等于事件中心数加一。

线程当前仅作为单个 azure_event_hubs 输入定义中所有事件中心的全局设置可用。但是,如果您的配置包含多个 azure_event_hubs 输入,则线程设置将独立应用于每个输入。

示例场景

  • 事件中心 = 4。每个事件中心上的分区 = 3。最小线程数为 5(4 个事件中心加一)。最大线程数为 13(4 个事件中心乘以 3 个分区加一)。
  • 如果您仅从一个指定的事件中心实例收集活动日志,则只需要 2 个线程(1 个事件中心加一)。

设置并运行模块编辑

确保 logstash.yml 文件已 正确配置

首次设置编辑

从 Logstash 目录运行此命令

bin/logstash --setup

--modules azure 选项启动 Logstash 管道,用于从 Azure 事件中心提取数据。--setup 选项在 Elasticsearch 中创建 azure-* 索引模式,并导入 Kibana 仪表板和可视化。

后续启动编辑

从 Logstash 目录运行此命令

bin/logstash

--setup 选项仅用于首次设置。如果在后续运行中包含 --setup,则您现有的 Kibana 仪表板将被覆盖。

浏览数据编辑

当 Logstash Azure 模块开始接收事件时,您可以开始使用打包的 Kibana 仪表板来浏览和可视化您的数据。

要使用 Kibana 浏览数据,请执行以下操作

  1. 在浏览器中打开 https://127.0.0.1:5601(用户名:“elastic”;密码:“YOUR_PASSWORD”)
  2. 单击 仪表板
  3. 单击 [Azure Monitor] 概述

配置选项编辑

所有事件中心选项在基本配置和高级配置中都是通用的,但以下情况除外。基本配置使用 event_hub_connections 来支持多个连接。高级配置使用 event_hubsevent_hub_connection(单数)。

event_hubs编辑

  • 值类型为 数组
  • 无默认值
  • 对于基本配置和命令行配置将被忽略
  • 对于高级配置是必需的

定义 高级配置 的每个事件中心的配置。

高级配置使用 event_hub_connection 而不是 event_hub_connectionsevent_hub_connection 选项是为每个事件中心定义的。

event_hub_connections编辑

  • 值类型为 数组
  • 无默认值
  • 对于基本配置和命令行配置是必需的
  • 对于高级配置将被忽略

标识要读取的事件中心的连接字符串列表。连接字符串包括事件中心的 EntityPath。

checkpoint_interval编辑

  • 值类型为 数字
  • 默认值为 5
  • 设置为 0 可禁用。

在批处理期间写入检查点的间隔(以秒为单位)。检查点告诉 Logstash 在重新启动后从哪里恢复处理。无论此设置如何,检查点都会在每批处理结束时自动写入。

过于频繁地写入检查点可能会不必要地降低处理速度。

consumer_group编辑

  • 值类型为 字符串
  • 默认值为 $Default

用于读取事件中心的消费者组。专门为 Logstash 创建一个消费者组。然后,确保所有 Logstash 实例都使用该消费者组,以便它们可以正常协同工作。

decorate_events编辑

添加有关事件中心的元数据,包括 事件中心名称consumer_groupprocessor_hostpartitionoffsetsequencetimestampevent_size

initial_position编辑

  • 值类型为 字符串
  • 有效参数为 beginningendlook_back
  • 默认值为 beginning

首次从事件中心读取时,从此位置开始

  • beginning 读取事件中心中所有预先存在的事件
  • end 不读取事件中心中任何预先存在的事件
  • look_back 读取 end 减去若干秒的预先存在的事件。您可以使用 initial_position_look_back 选项控制秒数。

如果设置了 storage_connection,则 initial_position 值仅在 Logstash 首次从事件中心读取时使用。

initial_position_look_back编辑

  • 值类型为 数字
  • 默认值为 86400
  • 仅在 initial_position 设置为 look-back 时使用

查找预先存在的事件的初始位置时要回溯的秒数。仅当 initial_position 设置为 look_back 时,才会使用此选项。如果设置了 storage_connection,则此配置仅在 Logstash 首次从事件中心读取时应用。

max_batch_size编辑

  • 值类型为 数字
  • 默认值为 125

一起检索和处理的最大事件数。每批处理后都会创建一个检查点。增加此值可能有助于提高性能,但需要更多内存。

storage_connection编辑

Blob 帐户存储的连接字符串。Blob 帐户存储在重新启动之间持久保存偏移量,并确保 Logstash 的多个实例处理不同的分区。设置此值后,重新启动将从处理停止的地方恢复。如果未设置此值,则每次重新启动时都会使用 initial_position 值。

强烈建议您为生产环境定义此值。

storage_container编辑

  • 值类型为 字符串
  • 如果未定义,则默认为事件中心名称

用于持久保存偏移量并允许多个 Logstash 实例协同工作的存储容器的名称。

为避免覆盖偏移量,您可以使用不同的存储容器。如果您正在监视两个名称相同的事件中心,这一点尤其重要。您可以使用高级配置模型来配置不同的存储容器。

threads编辑

  • 值类型为 数字
  • 最小值为 2
  • 默认值为 16

用于处理事件的线程总数。您在此处设置的值适用于所有事件中心。即使使用高级配置,此值也是全局设置,不能为每个事件中心单独设置。

线程数应等于事件中心数量加一或更多。有关更多信息,请参阅最佳实践

常用选项

以下配置选项受所有模块支持

var.elasticsearch.hosts
  • 值类型为URI
  • 默认值为“localhost:9200”

设置 Elasticsearch 集群的主机。对于每个主机,您必须指定主机名和端口。例如,“myhost:9200”。如果给定一个数组,Logstash 将在 hosts 参数中指定的主机之间进行负载均衡。重要的是从 hosts 列表中排除专用主节点,以防止 Logstash 向主节点发送批量请求。因此,此参数应仅引用 Elasticsearch 中的数据节点或客户端节点。

此处 URL 中出现的任何特殊字符都必须进行 URL 转义!这意味着 # 应该输入为 %23。

var.elasticsearch.username
  • 值类型为 字符串
  • 默认值为“elastic”

用于向安全的 Elasticsearch 集群进行身份验证的用户名。

var.elasticsearch.password
  • 值类型为 字符串
  • 默认值为“changeme”

用于向安全的 Elasticsearch 集群进行身份验证的密码。

var.elasticsearch.ssl.enabled
  • 值类型为 布尔值
  • 此设置没有默认值。

启用与 Elasticsearch 集群的 SSL/TLS 安全通信。如果未指定,将使用hosts中列出的 URL 中指定的方案。如果未指定协议,则将使用纯 HTTP。如果在此处明确禁用了 SSL,则如果在 hosts 中提供了 HTTPS URL,则插件将拒绝启动。

var.elasticsearch.ssl.verification_mode
  • 值类型为 字符串
  • 默认值为“strict”

与 Elasticsearch 通信时的主机名验证设置。设置为disable可关闭主机名验证。禁用此功能会带来严重的安全隐患。

var.elasticsearch.ssl.certificate_authority
  • 值类型为 字符串
  • 此设置没有默认值

用于验证与 Elasticsearch 通信时使用的 SSL 证书的 X.509 证书的路径。

var.elasticsearch.ssl.certificate
  • 值类型为 字符串
  • 此设置没有默认值

与 Elasticsearch 通信时用于客户端身份验证的 X.509 证书的路径。

var.elasticsearch.ssl.key
  • 值类型为 字符串
  • 此设置没有默认值

与 Elasticsearch 通信时用于客户端身份验证的证书密钥的路径。

var.kibana.host
  • 值类型为 字符串
  • 默认值为“localhost:5601”

设置用于导入仪表板和可视化的 Kibana 实例的主机名和端口。例如:“myhost:5601”。

var.kibana.scheme
  • 值类型为 字符串
  • 默认值为“http”

设置用于访问 Kibana 实例的协议。选项为:“http”或“https”。默认值为“http”。

var.kibana.username
  • 值类型为 字符串
  • 默认值为“elastic”

用于向安全的 Kibana 实例进行身份验证的用户名。

var.kibana.password
  • 值类型为 字符串
  • 默认值为“changeme”

用于向安全的 Kibana 实例进行身份验证的密码。

var.kibana.ssl.enabled

启用与 Kibana 实例的 SSL/TLS 安全通信。

var.kibana.ssl.verification_mode
  • 值类型为 字符串
  • 默认值为“strict”

与 Kibana 通信时的主机名验证设置。设置为disable可关闭主机名验证。禁用此功能会带来严重的安全隐患。

var.kibana.ssl.certificate_authority
  • 值类型为 字符串
  • 此设置没有默认值

用于验证与 Kibana 通信时使用的 SSL 证书的 X.509 证书的路径。

var.kibana.ssl.certificate
  • 值类型为 字符串
  • 此设置没有默认值

与 Kibana 通信时用于客户端身份验证的 X.509 证书的路径。

var.kibana.ssl.key
  • 值类型为 字符串
  • 此设置没有默认值

与 Kibana 通信时用于客户端身份验证的证书密钥的路径。

Azure 模块架构编辑

此模块从 Azure 事件中心读取数据,并为活动日志和 SQL 诊断数据添加一些额外的结构。原始数据始终保留,任何添加或解析的数据都将命名空间在 *azure* 下。例如,*azure.subscription* 可能已从更长、更复杂的 URN 中解析出来。

名称 描述 备注

azure.subscription

此数据源自的 Azure 订阅。

某些活动日志事件可能未与订阅关联。

azure.group

主要数据类型。

当前值为 *activity_log* 或 *sql_diagnostics*

azure.category*

特定于数据源自的组的辅助数据类型

azure.provider

Azure 提供商

azure.resource_group

Azure 资源组

azure.resource_type

Azure 资源类型

azure.resource_name

Azure 资源名称

azure.database

Azure 数据库名称,用于显示

仅限 SQL 诊断

azure.db_unique_id

保证唯一的 Azure 数据库名称

仅限 SQL 诊断

azure.server

数据库的 Azure 服务器

仅限 SQL 诊断

azure.server_and_database

Azure 服务器和数据库的组合

仅限 SQL 诊断

备注

  • 活动日志可以具有以下类别:管理、服务运行状况、警报、自动缩放、安全
  • SQL 诊断可以具有以下类别:指标、块、错误、超时、QueryStoreRuntimeStatistics、QueryStoreWaitStatistics、DatabaseWaitStatistics、SQLInsights

Microsoft 在此处记录了活动日志架构。SQL 诊断数据记录在此处。Elastic 不拥有这些数据模型,因此无法保证信息的准确性或被动性。

特别说明 - 属性字段编辑

许多日志都包含一个properties顶级字段。这通常是最有趣的数据所在的位置。来自不同来源的属性字段在不同日志类型之间没有固定的架构。

例如,一个日志可能具有properties.type,其中一个日志将其设置为字符串类型,而另一个日志将其设置为整数类型。为了避免映射错误,原始属性字段将移至<azure.group>_<azure_category>_properties.<original_key>。例如,properties.type最终可能会根据事件源自的组/类别而变为sql_diagnostics_Errors_properties.typeactivity_log_Security_properties.type

在生产环境中部署模块编辑

使用安全最佳实践来保护您的配置。有关详细信息和建议,请参阅保护集群安全

Microsoft Azure 资源编辑

Microsoft 是获取最新 Azure 信息的最佳来源。