Transformações de dados no Container insights
Este artigo descreve como implementar transformações de dados no Container insights. As transformações no Azure Monitor permitem modificar ou filtrar dados antes que eles sejam ingeridos em seu espaço de trabalho do Log Analytics. Eles permitem que você execute ações como filtrar dados coletados do cluster para economizar custos ou processar dados de entrada para ajudar em suas consultas de dados.
Importante
Os artigos Configure log collection in Container insights e Filtering log collection in Container insights descrevem definições de configuração padrão para configurar e filtrar a coleta de dados para insights de contêiner. Você deve executar qualquer configuração necessária usando esses recursos antes de usar transformações. Use uma transformação para executar filtragem ou outra configuração de dados que você não pode executar com as definições de configuração padrão.
Regra de recolha de dados
As transformações são implementadas em regras de coleta de dados (DCRs) que são usadas para configurar a coleta de dados no Azure Monitor. Configurar a coleta de dados usando DCR descreve o DCR que é criado automaticamente quando você habilita Insights de contêiner em um cluster. Para criar uma transformação, você deve executar uma das seguintes ações:
- Novo cluster. Use um modelo ARM existente para integrar um cluster AKS ao Container insights. Modifique o DCR nesse modelo com a configuração necessária, incluindo uma transformação semelhante a um dos exemplos abaixo.
- DCR existente. Depois que um cluster tiver sido integrado ao Container insights e a coleta de dados configurada, edite seu DCR para incluir uma transformação usando qualquer um dos métodos em Editando regras de coleta de dados.
Nota
Atualmente, há uma interface do usuário mínima para editar DCRs, que é necessária para adicionar transformações. Na maioria dos casos, você precisa editar manualmente o DCR. Este artigo descreve a estrutura DCR a implementar. Consulte Criar e editar regras de coleta de dados (DCRs) no Azure Monitor para obter orientação sobre como implementar essa estrutura.
Origens de dados
A seção Fontes de dados do DCR define os diferentes tipos de dados de entrada que o DCR processará. Para Container insights, esta é a extensão Container insights, que inclui um ou mais predefinidos streams
começando com o prefixo Microsoft-.
A lista de fluxos de informações de contêiner no DCR depende da predefinição de Custo selecionada para o cluster. Se você coletar todas as tabelas, o DCR usará o Microsoft-ContainerInsights-Group-Default
fluxo, que é um fluxo de grupo que inclui todos os fluxos listados em Valores de fluxo. Você deve alterar isso para fluxos individuais se for usar uma transformação. Quaisquer outras configurações predefinidas de custo já usarão fluxos individuais.
O exemplo abaixo mostra o Microsoft-ContainerInsights-Group-Default
fluxo. Consulte os DCRs de exemplo para amostras usando fluxos individuais.
"dataSources": {
"extensions": [
{
"streams": [
"Microsoft-ContainerInsights-Group-Default"
],
"name": "ContainerInsightsExtension",
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"namespaces": null,
"enableContainerLogV2": true
}
}
}
]
}
Fluxos de dados
A seção Fluxos de dados do DCR corresponde aos fluxos com os destinations
destinos definidos na seção do DCR. Os nomes de tabela não precisam ser especificados para fluxos conhecidos se os dados estiverem sendo enviados para a tabela padrão. Os fluxos que não exigem uma transformação podem ser agrupados em uma única entrada que inclui apenas o destino do espaço de trabalho. Cada um será enviado para sua tabela padrão.
Crie uma entrada separada para fluxos que exigem uma transformação. Isso deve incluir o destino do espaço de trabalho e a transformKql
propriedade. Se você estiver enviando dados para uma tabela alternativa, precisará incluir a outputStream
propriedade que especifica o nome da tabela de destino.
O exemplo abaixo mostra a dataFlows
seção para um único fluxo com uma transformação. Consulte os DCRs de exemplo para vários fluxos de dados em um único DCR.
"dataFlows": [
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where PodNamespace == 'kube-system'"
}
]
Exemplos de DCRs
Filtrar dados
O primeiro exemplo filtra os dados do ContainerLogV2
baseado na LogLevel
coluna. Somente registros com um LogLevel
de error
ou critical
serão coletados, pois essas são as entradas que você pode usar para alertar e identificar problemas no cluster. Coletar e armazenar outros níveis, como info
e debug
gerar custos sem valor significativo.
Você pode recuperar esses registros usando a seguinte consulta de log.
ContainerLogV2 | where LogLevel in ('error', 'critical')
Esta lógica é mostrada no diagrama a seguir.
Em uma transformação, o nome source
da tabela é usado para representar os dados de entrada. A seguir está a consulta modificada a ser usada na transformação.
source | where LogLevel in ('error', 'critical')
O exemplo a seguir mostra essa transformação adicionada ao DCR do Container insights. Observe que um fluxo de dados separado é usado para Microsoft-ContainerLogV2
uma vez que este é o único fluxo de entrada ao qual a transformação deve ser aplicada. Um fluxo de dados separado é usado para os outros fluxos.
{
"properties": {
"location": "eastus2",
"kind": "Linux",
"dataSources": {
"syslog": [],
"extensions": [
{
"streams": [
"Microsoft-ContainerLogV2",
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"enableContainerLogV2": true
}
},
"name": "ContainerInsightsExtension"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"workspaceId": "00000000-0000-0000-0000-000000000000",
"name": "ciworkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"destinations": [
"ciworkspace"
],
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel in ('error', 'critical')"
}
],
},
}
Enviar dados para tabelas diferentes
No exemplo acima, apenas registros com um LogLevel
de error
ou critical
são coletados. Uma estratégia alternativa em vez de não coletar esses registros é salvá-los em uma tabela alternativa configurada para logs básicos.
Para esta estratégia, são necessárias duas transformações. A primeira transformação envia os registros com LogLevel
de error
ou critical
para a tabela padrão. A segunda transformação envia os outros registros para uma tabela personalizada chamada ContainerLogV2_CL
. As consultas para cada um são mostradas abaixo usando source
para os dados de entrada, conforme descrito no exemplo anterior.
# Return error and critical logs
source | where LogLevel in ('error', 'critical')
# Return logs that aren't error or critical
source | where LogLevel !in ('error', 'critical')
Esta lógica é mostrada no diagrama a seguir.
Importante
Antes de instalar o DCR neste exemplo, você deve criar uma nova tabela com o mesmo esquema do ContainerLogV2
. Nomeie-o ContainerLogV2_CL
e configure-o para logs básicos.
O exemplo a seguir mostra essa transformação adicionada ao DCR do Container insights. Há dois fluxos de dados para Microsoft-ContainerLogV2
este DCR, um para cada transformação. O primeiro envia para a tabela padrão que você não precisa especificar um nome de tabela. O segundo requer que a outputStream
propriedade especifique a tabela de destino.
{
"properties": {
"location": "eastus2",
"kind": "Linux",
"dataSources": {
"syslog": [],
"extensions": [
{
"streams": [
"Microsoft-ContainerLogV2",
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"extensionName": "ContainerInsights",
"extensionSettings": {
"dataCollectionSettings": {
"interval": "1m",
"namespaceFilteringMode": "Off",
"enableContainerLogV2": true
}
},
"name": "ContainerInsightsExtension"
}
]
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
"workspaceId": "00000000-0000-0000-0000-000000000000",
"name": "ciworkspace"
}
]
},
"dataFlows": [
{
"streams": [
"Microsoft-KubeEvents",
"Microsoft-KubePodInventory"
],
"destinations": [
"ciworkspace"
],
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel in ('error', 'critical')"
},
{
"streams": [
"Microsoft-ContainerLogV2"
],
"destinations": [
"ciworkspace"
],
"transformKql": "source | where LogLevel !in ('error','critical')",
"outputStream": "Custom-ContainerLogV2_CL"
}
],
},
}
Próximos passos
- Leia mais sobre transformações e regras de coleta de dados no Azure Monitor.