Azure 模块
编辑Azure 模块
编辑此功能处于技术预览阶段,可能在将来的版本中发生更改或被移除。Elastic 将致力于修复任何问题,但技术预览版的功能不受正式 GA 功能的支持服务级别协议 (SLA) 的约束。
已在 7.8.0 中弃用。
我们建议您在 Filebeat 和 Metricbeat 中使用 Azure 模块,它们符合 Elastic 通用架构 (ECS)
Logstash 中的 Microsoft Azure 模块可帮助您轻松地将 Azure 活动日志和 SQL 诊断日志与 Elastic Stack 集成。
您可以监控 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"
|
|
|
|
有关选择适当线程数的指南,请参阅 最佳实践。 |
|
此连接设置活动日志的使用。默认情况下,Azure Monitor 使用 |
|
此连接和下面的连接设置 SQL DB 诊断日志和指标的使用。默认情况下,Azure Monitor 使用所有这些不同的事件中心名称。 |
基本配置需要在配置选项之前使用 var.input.azure_event_hubs.
前缀。请注意 threads
选项的表示法。
高级配置示例
编辑logstash.yml
文件中的高级配置支持特定于事件中心的选项。高级配置可用于更精细地调整跨多个事件中心的线程和 Blob 存储使用情况。对于大多数用例,不需要或不建议使用高级配置。仅在部署方案需要时才使用它。
您必须使用第一个位置的 name
定义 header
数组。您可以按任意顺序定义其他选项。每个事件中心的配置优先。任何未为每个事件中心定义的值都使用全局配置值。
在此示例中,threads
、consumer_group
和 storage_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 Azure 模块开始接收事件时,您可以开始使用打包的 Kibana 仪表板来探索和可视化您的数据。
要使用 Kibana 探索您的数据
- 在浏览器中打开 https://127.0.0.1:5601(用户名:“elastic”;密码:“YOUR_PASSWORD”)
- 点击仪表板。
- 点击[Azure Monitor] 概述。
配置选项
编辑所有 Event Hub 选项对于基本配置和高级配置都是通用的,但以下例外情况除外。基本配置使用 event_hub_connections
来支持多个连接。高级配置使用 event_hubs
和 event_hub_connection
(单数)。
event_hubs
编辑- 值类型为 数组
- 无默认值
- 对于基本配置和命令行配置被忽略
- 高级配置需要
定义 高级配置 的每个 Event Hub 的配置。
高级配置使用 event_hub_connection
而不是 event_hub_connections
。 event_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
编辑- 值类型为 布尔值
- 默认值为
false
添加有关 Event Hub 的元数据,包括 Event Hub 名称
、consumer_group
、processor_host
、partition
、offset
、sequence
、timestamp
和 event_size
。
initial_position
编辑- 值类型为 字符串
- 有效参数为
beginning
、end
、look_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 读取时应用。
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
-
- 值类型为 字符串
- 默认值为 "http"
设置用于访问 Kibana 实例的协议。选项包括:“http”或“https”。默认为“http”。
-
var.kibana.username
-
- 值类型为 字符串
- 默认值为 "elastic"
用于认证到安全 Kibana 实例的用户名。
-
var.kibana.password
-
- 值类型为 字符串
- 默认值为 "changeme"
用于认证到安全 Kibana 实例的密码。
-
var.kibana.ssl.enabled
-
- 值类型为 布尔值
- 默认值为 false
启用到 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.type
或 activity_log_Security_properties.type
,具体取决于事件源自的组/类别。
Microsoft Azure 资源
编辑Microsoft 是获取最新 Azure 信息的最佳来源。