使用数据收集规则,你可以筛选和转换日志数据,然后再将数据发送到 Azure 表或自定义表。 本文介绍如何创建自定义表并将自定义列添加到 Log Analytics 工作区中的表。
重要
每当更新表架构时,务必更新向表发送数据的数据收集规则。 在数据收集规则中定义的表架构决定了 Azure Monitor 如何将数据流式传输到目标表。 进行表架构更改时,Azure Monitor 不会自动更新数据收集规则。
先决条件
| Action |
所需权限 |
| 管理数据表 |
Log Analytics 工作区范围或更高级别的 Microsoft.OperationalInsights/workspaces/* 权限。
例如,由特权内置角色 Log Analytics 参与者提供的权限。 |
若要将数据引入表,可能需要以下各项:
数据收集终结点(DCE)。 有关详细信息,请参阅 DCE。
在 JSON 文件中至少有一条源数据记录的示例。 这用于在门户中创建自定义表,例如从虚拟机收集文本和 JSON 数据源所需的权限
[
{
"TimeGenerated": "supported_datetime_format",
"<column_name_1>": "<column_name_1_value>",
"<column_name_2>": "<column_name_2_value>"
},
{
"TimeGenerated": "supported_datetime_format",
"<column_name_1>": "<column_name_1_value>",
"<column_name_2>": "<column_name_2_value>"
},
{
"TimeGenerated": "supported_datetime_format",
"<column_name_1>": "<column_name_1_value>",
"<column_name_2>": "<column_name_2_value>"
}
]
Log Analytics 工作区中的所有表都必须有一列 TimeGenerated ,该列用于标识记录的引入时间。 如果列缺失,则向表的 DCR 中的转换自动添加该列。 有关信息,请参阅 支持的日期/时间格式。
创建自定义表
Azure 表具有预定义的架构。 若要将日志数据存储在不同的架构中,请使用数据收集规则来定义如何收集数据、转换数据以及将数据发送到 Log Analytics 工作区中的自定义表。 若要使用辅助计划创建自定义表,请参阅 设置具有辅助计划的表。
重要
自定义表的后缀为“_CL”;例如,tablename_CL。 Azure 门户会自动将 _CL 后缀添加到表名。 使用其他方法创建自定义表时,需要自行添加 _CL 后缀。 数据收集规则内数据流属性中的 tablename_CL 必须与 Log Analytics 工作区中的 tablename_CL 名称匹配。
若要使用 Azure 门户创建自定义表模板,请执行以下操作:
从“日志分析工作区”菜单中,选择“表”。
选择“创建”,然后选择“新的自定义日志(基于 DCR)”。
指定名称,并根据需要指定表的说明。 无需将 _CL 后缀添加到自定义表的名称中 - 它会自动添加到在门户中指定的名称中。
从“数据收集规则”下拉列表中选择现有的数据收集规则,或选择“创建新的数据收集规则”并指定新数据收集规则的“订阅”、“资源组”和“名称”。
选择一个数据收集终结点,然后选择“下一步”。
选择“浏览文件”,找到具有新表的示例数据的 JSON 文件。
如果示例数据不包含 TimeGenerated 列,则会收到一条消息,指出正在使用此列创建转换。
如果要在将日志数据引入到表中之前对其进行转换,请执行以下操作:
选择“转换编辑器”。
使用转换编辑器可以为传入数据流创建转换。 这是针对每个传入记录运行的 KQL 查询。 Azure Monitor 日志将查询结果存储在目标表中。
选择“运行”以查看结果。
选择“应用”以保存转换并查看即将创建的表的架构。 选择“下一步”继续 。
验证最终详细信息,然后选择“创建”以保存自定义日志。
使用表 - 更新 PATCH API,通过以下 PowerShell 代码创建自定义表。 此代码创建名为 MyTable_CL 的表,其中包含两列。 修改此架构以收集不同的表。
选择 Azure 门户中的“Cloud Shell”按钮,确保环境设置为“PowerShell”。
复制以下 PowerShell 代码,并将 Path 参数替换为 命令中工作区的相应值。 将其粘贴到 Cloud Shell 提示符下以运行它。
$tableParams = @'
{
"properties": {
"schema": {
"name": "MyTable_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "DateTime"
},
{
"name": "RawData",
"type": "String"
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/MyTable_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
删除表
可以删除不是 Azure 表的任何表,但删除数据的方式取决于表类型。
有关详细信息,请参阅删除 Log Analytics 工作区中的表时数据会发生什么情况。
若要从 Azure 门户中删除表,请执行以下操作:
在“Log Analytics 工作区”菜单中,选择“表”。
按名称搜索要删除的表,或在“类型”字段中选择“搜索结果”。
依次选择要删除的表格,选择表格右侧的省略号 (...),选择“删除”,并通过键入“是”来确认删除。
使用 PowerShell 删除表:
选择 Azure 门户中的“Cloud Shell”按钮,确保环境设置为“PowerShell”。
复制以下 PowerShell 代码,并将 Path 参数替换为 命令中工作区的相应值。 将其粘贴到 Cloud Shell 提示符下以运行它。
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/NewCustom_CL?api-version=2021-12-01-preview" -Method DELETE
添加或删除自定义列
自定义表允许在创建表后添加或删除列来修改架构。 Azure 表仅允许添加和删除自定义列。
定义自定义表的列名时,请使用以下规则:
列名必须以字母(A-Z 或 a-z)开头。
在第一个字符之后,仅使用字母、数字或下划线。
不要在列名中使用空格、点、短划线或其他标点符号。
在列名中,不支持非 ASCII 字母(例如 Æ、É、Ö)。
列名称仅在“分析”表和“基本”表中区分大小写。 辅助日志表引入过程中,若列名仅存在大小写差异,则会因列名重复而丢弃数据。
列名长度必须为 2 到 45 个字符。
Azure 表中的自定义列名必须以 _CF 结尾。
不要使用与系统或保留列冲突的名称,包括id、BilledSize、IsBillableInvalidTimeGeneratedTenantIdTitleTypeUniqueId_ItemId、_ResourceGroup、_ResourceId、、 _SubscriptionId、 。 _TimeReceived
重要
自定义表的架构规则比 常规 Kusto 标识符规则更严格。 Kusto 可以在查询中使用引号引用不常见的属性名称,但对于列名,自定义表架构仅接受字母、数字和下划线。
若要将自定义列添加到 Log Analytics 工作区中的表,或者要删除列,请执行以下操作:
从“日志分析工作区”菜单中,选择“表”。
选择要编辑的表右侧的省略号 (...),然后选择“编辑架构”。
此时会打开“架构编辑器”屏幕。
向下滚动到“架构编辑器”屏幕的“自定义列”部分。
若要添加新列,请执行以下操作:
- 选择添加列。
- 设置列名和说明(可选),然后从“类型”下拉列表中选择预期的值类型。
- 选择“保存”,以保存新列。
若要删除列,请选择要删除的列左侧的“删除”图标。
若要向 Azure 表或自定义表添加新列,请运行:
$tableParams = @'
{
"properties": {
"schema": {
"name": "<TableName>",
"columns": [
{
"name": ""<ColumnName>",
"description": "First custom column",
"type": "string",
"isDefaultDisplay": true,
"isHidden": false
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/<TableName>?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
PUT 调用将返回更新的表属性,其中应包括新添加的列。
示例
运行以下命令,将名为 Custom1_CF 的自定义列添加到 Azure Heartbeat 表:
$tableParams = @'
{
"properties": {
"schema": {
"name": "Heartbeat",
"columns": [
{
"name": "Custom1_CF",
"description": "The second custom column",
"type": "datetime",
"isDefaultDisplay": true,
"isHidden": false
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/Heartbeat?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
现在,若要删除新添加的列并添加另一列,请运行:
$tableParams = @'
{
"properties": {
"schema": {
"name": "Heartbeat",
"columns": [
{
"name": "Custom2_CF",
"description": "The second custom column",
"type": "datetime",
"isDefaultDisplay": true,
"isHidden": false
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/Heartbeat?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
若要删除表中所有自定义列,请运行:
$tableParams = @'
{
"properties": {
"schema": {
"name": "Heartbeat",
"columns": [
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/Heartbeat?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
相关内容