Azure 模块

编辑

此功能处于技术预览阶段,可能在将来的版本中发生更改或被移除。Elastic 将致力于修复任何问题,但技术预览版的功能不受正式 GA 功能的支持服务级别协议 (SLA) 的约束。

已在 7.8.0 中弃用。

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

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

Azure Work Flow

您可以监控 Azure 云环境和 SQL DB 部署,并深入了解多个 Azure 订阅的运营情况。您可以实时探索基础架构的运行状况,从而加快根本原因分析并减少整体解决时间。Azure 模块可帮助您

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

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

仪表板

编辑

这些 Kibana 仪表板可用且随时可以使用。您可以按原样使用它们,也可以根据需要对其进行调整。

基础架构活动监控

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

SQL 数据库监控

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

先决条件

编辑

此模块需要启用 Azure 监视器并与 Azure 事件中心和 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 监视器配置为将日志流式传输到一个或多个事件中心。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 存储使用情况。对于大多数用例,不需要或不建议使用高级配置。仅在部署方案需要时才使用它。

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

在此示例中,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"]

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

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

必须使用第一个位置的 name 定义 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 实例都应该使用相同的消费者组,以便它们能够协同工作以处理事件。

避免使用多个 Event Hub 覆盖偏移量
编辑

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

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

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

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

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

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

示例场景

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

设置并运行模块

编辑

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

首次设置

编辑

从 Logstash 目录运行此命令

bin/logstash --setup

--modules azure 选项启动一个用于从 Azure 事件中心线摄取数据的 Logstash 管道。 --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 选项对于基本配置和高级配置都是通用的,但以下例外情况除外。基本配置使用 event_hub_connections 来支持多个连接。高级配置使用 event_hubsevent_hub_connection(单数)。

event_hubs

编辑
  • 值类型为 数组
  • 无默认值
  • 对于基本配置和命令行配置被忽略
  • 高级配置需要

定义 高级配置 的每个 Event Hub 的配置。

高级配置使用 event_hub_connection 而不是 event_hub_connectionsevent_hub_connection 选项针对每个 Event Hub 定义。

event_hub_connections

编辑
  • 值类型为 数组
  • 无默认值
  • 基本配置和命令行配置需要
  • 高级配置被忽略

标识要读取的 Event Hub 的连接字符串列表。连接字符串包括 Event Hub 的 EntityPath。

checkpoint_interval

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

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

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

consumer_group

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

用于读取 Event Hub 的消费者组。为 Logstash 创建一个消费者组。然后确保所有 Logstash 实例都使用该消费者组,以便它们能够正常协同工作。

decorate_events

编辑

添加有关 Event Hub 的元数据,包括 Event Hub 名称consumer_groupprocessor_hostpartitionoffsetsequencetimestampevent_size

initial_position

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

首次从 Event Hub 读取时,从此位置开始

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

如果设置了 storage_connection,则 initial_position 值仅在 Logstash 首次从 Event Hub 读取时使用。

initial_position_look_back

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

查看预先存在事件的初始位置的秒数。仅当 initial_position 设置为 look_back 时使用此选项。如果设置了 storage_connection,则此配置仅在 Logstash 首次从 Event Hub 读取时应用。

max_batch_size

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

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

storage_connection

编辑

Blob 帐户存储的连接字符串。Blob 帐户存储在重新启动之间保留偏移量,并确保 Logstash 的多个实例处理不同的分区。当设置此值时,重新启动将从处理中断的地方继续。当未设置此值时,每次重新启动都将使用 initial_position 值。

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

storage_container

编辑
  • 值类型为 字符串
  • 如果未定义,则默认为 Event Hub 名称

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

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

threads

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

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

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

常用选项

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

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,则如果在 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

设置用于访问 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 诊断可以具有以下类别:指标、块、错误、超时、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 信息的最佳来源。