Azure 模块
编辑Azure 模块
编辑此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力修复任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 约束。
在 7.8.0 版本中已弃用。
我们建议在 Filebeat 和 Metricbeat 中使用 Azure 模块,它们符合 Elastic Common Schema (ECS)
Logstash 中的 Microsoft Azure 模块可帮助您轻松地将 Azure 活动日志和 SQL 诊断日志与 Elastic Stack 集成。
您可以跨多个 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"
强烈建议使用 |
|
|
|
有关选择适当线程数的指南,请参阅 最佳实践。 |
|
此连接设置活动日志的使用。默认情况下,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"]
您可以指定全局事件中心选项。它们将被在 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 Azure 模块开始接收事件时,您可以使用打包的 Kibana 仪表板来浏览和可视化您的数据。
要使用 Kibana 浏览您的数据
- 打开浏览器访问 https://127.0.0.1:5601(用户名:"elastic";密码:"YOUR_PASSWORD")
- 点击Dashboard。
- 点击[Azure Monitor] Overview。
配置选项
编辑除了以下例外情况,所有事件中心选项在基本配置和高级配置中都是通用的。基本配置使用 event_hub_connections
来支持多个连接。高级配置使用 event_hubs
和 event_hub_connection
(单数)。
event_hubs
编辑- 值类型为数组
- 无默认值
- 在基本配置和命令行配置中忽略
- 高级配置必需
定义高级配置的每个事件中心的配置。
高级配置使用 event_hub_connection
而不是 event_hub_connections
。 event_hub_connection
选项是按事件中心定义的。
event_hub_connections
编辑- 值类型为数组
- 无默认值
- 基本配置和命令行配置必需
- 高级配置中忽略
标识要读取的事件中心的连接字符串列表。连接字符串包含事件中心的 EntityPath。
checkpoint_interval
编辑- 值类型为数字
- 默认值为
5
秒 - 设置为
0
以禁用。
在批处理期间写入检查点的间隔(以秒为单位)。检查点告诉 Logstash 在重启后从哪里继续处理。无论此设置如何,都会在每个批处理结束时自动写入检查点。
过于频繁地写入检查点可能会不必要地减慢处理速度。
consumer_group
编辑- 值类型为字符串
- 默认值为
$Default
用于读取事件中心的使用者组。专门为 Logstash 创建一个使用者组。然后确保 Logstash 的所有实例都使用该使用者组,以便它们可以正确地协同工作。
decorate_events
编辑- 值类型为布尔值
- 默认值为
false
添加有关事件中心的元数据,包括 事件中心名称
、consumer_group
、processor_host
、partition
、offset
、sequence
、timestamp
和 event_size
。
initial_position
编辑- 值类型为字符串
- 有效参数为
beginning
、end
、look_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 首次从事件中心读取时应用。
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
-
- 值类型为字符串
- 默认值为 "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 诊断可以具有以下类别:指标、阻止、错误、超时、查询存储运行时统计信息、查询存储等待统计信息、数据库等待统计信息、SQLInsights。
Microsoft 在此处记录了活动日志架构。SQL 诊断数据记录在此处。Elastic 不拥有这些数据模型,因此无法保证信息的准确性或被动性。
特别说明 - Properties 字段
编辑许多日志包含一个顶级的 properties
字段。这通常是存放最有趣数据的地方。来自不同来源的属性字段的日志类型之间没有固定的架构。
例如,一个日志可能有 properties.type
,其中一个日志将其设置为 String 类型,而另一个日志将其设置为 Integer 类型。为了避免映射错误,原始属性字段会移动到 <azure.group>_<azure_category>_properties.<original_key>
。例如,properties.type
可能会根据事件的来源组/类别,最终变成 sql_diagnostics_Errors_properties.type
或 activity_log_Security_properties.type
。
Microsoft Azure 资源
编辑Microsoft 是获取最新 Azure 信息的最佳来源。