Azure 模块

编辑

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

在 7.8.0 版本中已弃用。

我们建议在 FilebeatMetricbeat 中使用 Azure 模块,它们符合 Elastic Common Schema (ECS)

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

Azure Work Flow

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

  • 分析基础设施更改和授权活动
  • 识别可疑行为和潜在的恶意行为者
  • 通过调查用户活动执行根本原因分析
  • 监视和优化您的 SQL DB 部署。

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

仪表板

编辑

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

基础设施活动监视

编辑
  • 概述。对您的 Azure 操作的顶级视图,包括有关用户、资源组、服务运行状况、访问、活动和警报的信息。
  • 警报。警报信息,包括活动、警报状态和警报热图
  • 用户活动。有关系统用户、他们的活动和请求的信息。

SQL 数据库监视

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

先决条件

编辑

此模块需要启用 Azure Monitor 以及 Azure Event Hubs 和 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 DB 诊断日志和指标的使用。默认情况下,Azure Monitor 使用所有这些不同的事件中心名称。

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

高级配置示例

编辑

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

您必须在第一个位置定义带有 nameheader 数组。您可以按任何顺序定义其他选项。每个事件中心的配置优先。任何未为每个事件中心定义的值都使用全局配置值。

在此示例中,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 数组。其他选项可以按任何顺序定义。每个事件中心的配置优先。任何未为每个事件中心定义的值都使用全局配置值。

这可以从使用不同 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. 点击Dashboard
  3. 点击[Azure Monitor] Overview

配置选项

编辑

除了以下例外情况,所有事件中心选项在基本配置和高级配置中都是通用的。基本配置使用 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 参数中指定的主机之间负载均衡请求。务必将专用主节点从主机列表中排除,以防止 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,则如果在主机中给出 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

设置用于访问 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_logsql_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 诊断可以具有以下类别:指标、阻止、错误、超时、查询存储运行时统计信息、查询存储等待统计信息、数据库等待统计信息、SQLInsights。

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

特别说明 - Properties 字段

编辑

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

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

在生产环境中部署模块

编辑

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

Microsoft Azure 资源

编辑

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