Use o Logstash para transmitir logs com transformações de pipeline por meio de API baseada em DCR
Importante
A ingestão de dados usando o plug-in de saída Logstash com Regras de Coleta de Dados (DCRs) está atualmente em visualização pública. Este recurso é fornecido sem um contrato de nível de serviço. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
O novo plug-in de saída Logstash do Microsoft Sentinel suporta transformações de pipeline e configuração avançada por meio de DCRs (Data Collection Rules). O plug-in encaminha qualquer tipo de logs de fontes de dados externas para tabelas personalizadas ou padrão no Log Analytics ou no Microsoft Sentinel.
Neste artigo, você aprenderá a configurar o novo plug-in Logstash para transmitir os dados para o Log Analytics ou o Microsoft Sentinel usando DCRs, com controle total sobre o esquema de saída. Saiba como implantar o plug-in.
Nota
Uma versão anterior do plug-in Logstash permite que você conecte fontes de dados através do Logstash por meio da API de coleta de dados.
Com o novo plugin, você pode:
- Controle a configuração dos nomes e tipos de coluna.
- Execute transformações no tempo de ingestão, como filtragem ou enriquecimento.
- Ingerir logs personalizados em uma tabela personalizada ou ingerir um fluxo de entrada Syslog na tabela Syslog do Log Analytics.
A ingestão em tabelas padrão é limitada apenas a tabelas padrão suportadas para ingestão de logs personalizados.
Para saber mais sobre como trabalhar com o mecanismo de coleta de dados Logstash, consulte Introdução ao Logstash.
Descrição geral
Arquitetura e antecedentes
O motor Logstash é composto por três componentes:
- Plugins de entrada: Coleção personalizada de dados de várias fontes.
- Plugins de filtro: Manipulação e normalização de dados de acordo com critérios especificados.
- Plugins de saída: Envio personalizado de dados recolhidos e processados para vários destinos.
Nota
A Microsoft suporta apenas o plug-in de saída Logstash fornecido pelo Microsoft Sentinel discutido aqui. O plug-in atual é chamado microsoft-sentinel-log-analytics-logstash-output-plugin, v1.1.0. Você pode abrir um ticket de suporte para quaisquer problemas relacionados ao plug-in de saída.
A Microsoft não oferece suporte a plug-ins de saída Logstash de terceiros para o Microsoft Sentinel ou qualquer outro plug-in ou componente Logstash de qualquer tipo.
Consulte os pré-requisitos para o suporte à versão Logstash do plugin.
O plug-in de saída do Microsoft Sentinel para Logstash envia dados formatados em JSON para seu espaço de trabalho do Log Analytics, usando a API de ingestão de log do Log Analytics. Os dados são ingeridos em logs personalizados ou tabela padrão.
- Saiba mais sobre a API de ingestão de logs.
Implantar o plug-in de saída do Microsoft Sentinel no Logstash
Para configurar o plugin, siga estes passos:
- Rever os pré-requisitos
- Instale o plugin
- Criar um arquivo de exemplo
- Crie os recursos relacionados ao DCR necessários
- Configurar o arquivo de configuração do Logstash
- Reiniciar o Logstash
- Exibir logs de entrada no Microsoft Sentinel
- Monitore os logs de auditoria do plug-in de saída
Pré-requisitos
Instale uma versão suportada do Logstash. O plugin suporta as seguintes versões do Logstash:
- 7.0 - 7.17.13
- 8.0 - 8.9
- 8.11 - 8.13
Nota
Se você usa o Logstash 8, recomendamos que desative o ECS no pipeline.
Verifique se você tem um espaço de trabalho do Log Analytics com pelo menos direitos de colaborador.
Verifique se você tem permissões para criar objetos DCR no espaço de trabalho.
Instale o plugin
O plug-in de saída do Microsoft Sentinel está disponível na coleção Logstash.
- Siga as instruções no documento Logstash Working with plugins para instalar o plug-in microsoft-sentinel-log-analytics-logstash-output-plugin .
- Se o seu sistema Logstash não tiver acesso à Internet, siga as instruções no documento Logstash Offline Plugin Management para preparar e usar um pacote de plug-ins offline. (Isso exigirá que você construa outro sistema Logstash com acesso à Internet.)
Criar um arquivo de exemplo
Nesta seção, você cria um arquivo de exemplo em um destes cenários:
- Criar um arquivo de exemplo para logs personalizados
- Criar um arquivo de exemplo para ingerir logs na tabela Syslog
Criar um arquivo de exemplo para logs personalizados
Nesse cenário, você configura o plug-in de entrada Logstash para enviar eventos para o Microsoft Sentinel. Para este exemplo, usamos o plugin de entrada do gerador para simular eventos. Você pode usar qualquer outro plug-in de entrada.
Neste exemplo, o arquivo de configuração Logstash tem esta aparência:
input {
generator {
lines => [
"This is a test log message"
]
count => 10
}
}
Copie a configuração do plug-in de saída abaixo para o arquivo de configuração do Logstash.
output { microsoft-sentinel-log-analytics-logstash-output-plugin { create_sample_file => true sample_file_path => "<enter the path to the file in which the sample data will be written>" #for example: "c:\\temp" (for windows) or "/tmp" for Linux. } }
Para certificar-se de que o caminho do arquivo referenciado existe antes de criar o arquivo de exemplo, inicie o Logstash.
O plug-in grava dez registros em um arquivo de exemplo nomeado
sampleFile<epoch seconds>.json
no caminho configurado. Por exemplo: c:\temp\sampleFile1648453501.json. Aqui está parte de um arquivo de exemplo que o plugin cria:[ { "host": "logstashMachine", "sequence": 0, "message": "This is a test log message", "ls_timestamp": "2022-03-28T17:45:01.690Z", "ls_version": "1" }, { "host": "logstashMachine", "sequence": 1 ... ]
O plugin adiciona automaticamente estas propriedades a cada registo:
ls_timestamp
: A hora em que o registro é recebido do plug-in de entradals_version
: A versão do pipeline Logstash.
Você pode remover esses campos ao criar o DCR.
Criar um arquivo de exemplo para ingerir logs na tabela Syslog
Nesse cenário, você configura o plug-in de entrada Logstash para enviar eventos syslog para o Microsoft Sentinel.
Se você ainda não tiver mensagens syslog encaminhadas para sua máquina Logstash, poderá usar o comando logger para gerar mensagens. Por exemplo (para Linux):
logger -p local4.warn --rfc3164 --tcp -t CEF: "0|Microsoft|Device|cef-test|example|data|1|here is some more data for the example" -P 514 -d -n 127.0.0.1 Here is an example for the Logstash input plugin: input { syslog { port => 514 } }
Copie a configuração do plug-in de saída abaixo para o arquivo de configuração do Logstash.
output { microsoft-sentinel-log-analytics-logstash-output-plugin { create_sample_file => true sample_file_path => "<enter the path to the file in which the sample data will be written>" #for example: "c:\\temp" (for windows) or "/tmp" for Linux. } }
Para certificar-se de que o caminho do arquivo existe antes de criar o arquivo de exemplo, inicie o Logstash.
O plug-in grava dez registros em um arquivo de exemplo nomeado
sampleFile<epoch seconds>.json
no caminho configurado. Por exemplo: c:\temp\sampleFile1648453501.json. Aqui está parte de um arquivo de exemplo que o plugin cria:[ { "logsource": "logstashMachine", "facility": 20, "severity_label": "Warning", "severity": 4, "timestamp": "Apr 7 08:26:04", "program": "CEF:", "host": "127.0.0.1", "facility_label": "local4", "priority": 164, "message": 0|Microsoft|Device|cef-test|example|data|1|here is some more data for the example", "ls_timestamp": "2022-04-07T08:26:04.000Z", "ls_version": "1" } ]
O plugin adiciona automaticamente estas propriedades a cada registo:
ls_timestamp
: A hora em que o registro é recebido do plug-in de entradals_version
: A versão do pipeline Logstash.
Você pode remover esses campos ao criar o DCR.
Crie os recursos DCR necessários
Para configurar o plug-in Logstash baseado em DCR do Microsoft Sentinel, primeiro você precisa criar os recursos relacionados ao DCR.
Nesta seção, você cria recursos para usar em seu DCR, em um destes cenários:
- Criar recursos DCR para ingestão em uma tabela personalizada
- Criar recursos DCR para ingestão em uma tabela padrão
Criar recursos DCR para ingestão em uma tabela personalizada
Para ingerir os dados em uma tabela personalizada, siga estas etapas (com base no tutorial Enviar dados para Logs do Azure Monitor usando a API REST (portal do Azure):
Veja os pré-requisitos.
Adicione uma tabela de log personalizada.
Analise e filtre dados de exemplo usando o arquivo de exemplo criado na seção anterior.
-
Ignore a etapa Enviar dados de exemplo.
Se você encontrar algum problema, consulte as etapas de solução de problemas.
Criar recursos DCR para ingestão em uma tabela padrão
Para ingerir os dados em uma tabela padrão como Syslog ou CommonSecurityLog, use um processo baseado no tutorial Enviar dados para Logs do Azure Monitor usando a API REST (modelos do Gerenciador de Recursos). Embora o tutorial explique como ingerir dados em uma tabela personalizada, você pode facilmente ajustar o processo para ingerir dados em uma tabela padrão. As etapas abaixo indicam alterações relevantes nas etapas.
Veja os pré-requisitos.
Coletar detalhes do espaço de trabalho.
-
Ignore a etapa Criar nova tabela no espaço de trabalho do Log Analytics. Esta etapa não é relevante ao ingerir dados em uma tabela padrão, porque a tabela já está definida no Log Analytics.
Crie o DCR. Nesta etapa:
- Forneça o arquivo de exemplo criado na seção anterior.
- Use o arquivo de exemplo que você criou para definir a
streamDeclarations
propriedade. Cada um dos campos no arquivo de exemplo deve ter uma coluna correspondente com o mesmo nome e o tipo apropriado (veja o exemplo abaixo). - Configure o
outputStream
valor da propriedade com o nome da tabela padrão em vez da tabela personalizada. Ao contrário das tabelas personalizadas, os nomes de tabelas padrão não têm o sufixo_CL
. - O prefixo do nome da tabela deve ser
Microsoft-
em vez deCustom-
. No nosso exemplo, o valor daoutputStream
propriedade éMicrosoft-Syslog
.
-
Ignore a etapa Enviar dados de exemplo.
Se você encontrar algum problema, consulte as etapas de solução de problemas.
Exemplo: DCR que ingere dados na tabela Syslog
Tenha em atenção que:
- Os
streamDeclarations
nomes e tipos de coluna devem ser os mesmos que os campos de arquivo de exemplo, mas não é necessário especificar todos eles. Por exemplo, no DCR abaixo, osPRI
campos ,type
els_version
são omitidos dastreamDeclarations
coluna. - A
dataflows
propriedade transforma a entrada para o formato de tabela Syslog e define comooutputStream
Microsoft-Syslog
.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"dataCollectionRuleName": {
"type": "String",
"metadata": {
"description": "Specifies the name of the Data Collection Rule to create."
}
},
"location": {
"defaultValue": "westus2",
"allowedValues": [
"westus2",
"eastus2",
"eastus2euap"
],
"type": "String",
"metadata": {
"description": "Specifies the location in which to create the Data Collection Rule."
}
},
"location": {
"defaultValue": "[resourceGroup().location]",
"type": "String",
"metadata": {
"description": "Specifies the location in which to create the Data Collection Rule."
}
},
"workspaceResourceId": {
"type": "String",
"metadata": {
"description": "Specifies the Azure resource ID of the Log Analytics workspace to use."
}
}
},
"resources": [
{
"type": "Microsoft.Insights/dataCollectionRules",
"apiVersion": "2021-09-01-preview",
"name": "[parameters('dataCollectionRuleName')]",
"location": "[parameters('location')]",
"properties": {
"streamDeclarations": {
"Custom-SyslogStream": {
"columns": [
{
"name": "ls_timestamp",
"type": "datetime"
}, {
"name": "timestamp",
"type": "datetime"
},
{
"name": "message",
"type": "string"
},
{
"name": "facility_label",
"type": "string"
},
{
"name": "severity_label",
"type": "string"
},
{
"name": "host",
"type": "string"
},
{
"name": "logsource",
"type": "string"
}
]
}
},
"destinations": {
"logAnalytics": [
{
"workspaceResourceId": "[parameters('workspaceResourceId')]",
"name": "clv2ws1"
}
]
},
"dataFlows": [
{
"streams": [
"Custom-SyslogStream"
],
"destinations": [
"clv2ws1"
],
"transformKql": "source | project TimeGenerated = ls_timestamp, EventTime = todatetime(timestamp), Computer = logsource, HostName = logsource, HostIP = host, SyslogMessage = message, Facility = facility_label, SeverityLevel = severity_label",
"outputStream": "Microsoft-Syslog"
}
]
}
}
],
"outputs": {
"dataCollectionRuleId": {
"type": "String",
"value": "[resourceId('Microsoft.Insights/dataCollectionRules', parameters('dataCollectionRuleName'))]"
}
}
}
Configurar o arquivo de configuração do Logstash
Para configurar o arquivo de configuração Logstash para ingerir os logs em uma tabela personalizada, recupere estes valores:
Campo | Como recuperar |
---|---|
client_app_Id |
O Application (client) ID valor que você cria na etapa 3 ao criar os recursos DCR, de acordo com o tutorial usado nesta seção. |
client_app_secret |
O Application (client) ID valor que você cria na etapa 5 ao criar os recursos DCR, de acordo com o tutorial usado nesta seção. |
tenant_id |
ID de inquilino da sua subscrição. Você pode encontrar a ID do locatário em Home > Microsoft Entra ID > Overview > Basic Information. |
data_collection_endpoint |
O valor do logsIngestion URI na etapa 3 quando você cria os recursos DCR, de acordo com o tutorial usado nesta seção. |
dcr_immutable_id |
O valor do DCR immutableId na etapa 6 quando você cria os recursos DCR, de acordo com o tutorial usado nesta seção. |
dcr_stream_name |
Para tabelas personalizadas, conforme explicado na etapa 6 ao criar os recursos DCR, vá para a visualização JSON do DCR e copie a dataFlows >streams propriedade. Veja o dcr_stream_name exemplo abaixo.Para tabelas padrão, o valor é Custom-SyslogStream . |
Depois de recuperar os valores necessários:
- Substitua a seção de saída do arquivo de configuração Logstash criado na etapa anterior pelo exemplo abaixo.
- Substitua as cadeias de caracteres de espaço reservado no exemplo abaixo pelos valores recuperados.
- Certifique-se de alterar o
create_sample_file
atributo parafalse
.
Configuração opcional
Campo | Description | Default value |
---|---|---|
azure_cloud |
Usados para especificar o nome da nuvem do Azure que está sendo usada, os valores disponíveis são: AzureCloud , AzureChinaCloud e AzureUSGovernment . |
AzureCloud |
key_names |
Uma matriz de cadeias de caracteres. Forneça este campo se quiser enviar um subconjunto das colunas para o Log Analytics. | Nenhum (campo está vazio) |
plugin_flush_interval |
Define a diferença de tempo máxima (em segundos) entre o envio de duas mensagens para o Log Analytics. | 5 |
retransmission_time |
Define a quantidade de tempo, em segundos, para retransmitir mensagens quando o envio falhar. | 10 |
compress_data |
Quando esse campo é True , os dados do evento são compactados antes de usar a API. Recomendado para pipelines de alto rendimento. |
False |
proxy |
Especifique qual URL de proxy usar para todas as chamadas de API. | Nenhum (campo está vazio) |
proxy_aad |
Especifique qual URL de proxy usar para chamadas de API para o Microsoft Entra ID. | Mesmo valor que 'proxy' (o campo está vazio) |
proxy_endpoint |
Especifique qual URL de proxy usar para chamadas de API para o Ponto de Extremidade de Coleta de Dados. | Mesmo valor que 'proxy' (o campo está vazio) |
Exemplo: Seção de configuração do plug-in de saída
output {
microsoft-sentinel-log-analytics-logstash-output-plugin {
client_app_Id => "<enter your client_app_id value here>"
client_app_secret => "<enter your client_app_secret value here>"
tenant_id => "<enter your tenant id here> "
data_collection_endpoint => "<enter your logsIngestion URI here> "
dcr_immutable_id => "<enter your DCR immutableId here> "
dcr_stream_name => "<enter your stream name here> "
create_sample_file=> false
sample_file_path => "c:\\temp"
proxy => "http://proxy.example.com"
}
}
Para definir outros parâmetros para o plug-in de saída do Microsoft Sentinel Logstash, consulte o arquivo readme do plug-in de saída.
Nota
Por motivos de segurança, recomendamos que você não indique implicitamente os client_app_Id
atributos , client_app_secret
, tenant_id
, data_collection_endpoint
e dcr_immutable_id
no arquivo de configuração do Logstash. Recomendamos que você armazene essas informações confidenciais em um Logstash KeyStore.
Reiniciar o Logstash
Reinicie o Logstash com a configuração atualizada do plug-in de saída e veja que os dados são ingeridos na tabela certa de acordo com sua configuração DCR.
Exibir logs de entrada no Microsoft Sentinel
Verifique se as mensagens estão sendo enviadas para o plug-in de saída.
No menu de navegação do Microsoft Sentinel, clique em Logs. Sob o título Tabelas , expanda a categoria Logs personalizados . Localize e clique no nome da tabela que você especificou (com um
_CL
sufixo) na configuração.Para ver os registros na tabela, consulte a tabela usando o nome da tabela como o esquema.
Monitore os logs de auditoria do plug-in de saída
Para monitorar a conectividade e a atividade do plug-in de saída do Microsoft Sentinel, habilite o arquivo de log Logstash apropriado. Consulte o documento Logstash Directory Layout para obter o local do arquivo de log.
Se você não estiver vendo nenhum dado neste arquivo de log, gere e envie alguns eventos localmente (através dos plug-ins de entrada e filtro) para garantir que o plug-in de saída esteja recebendo dados. O Microsoft Sentinel suportará apenas problemas relacionados ao plug-in de saída.
Segurança da rede
Defina as configurações de rede e habilite o isolamento de rede para o plug-in de saída do Microsoft Sentinel Logstash.
Etiquetas de serviço da rede virtual
O plug-in de saída do Microsoft Sentinel dá suporte a tags de serviço de rede virtual do Azure. As tags AzureMonitor e AzureActiveDirectory são necessárias.
As tags de serviço da Rede Virtual do Azure podem ser usadas para definir controles de acesso à rede em grupos de segurança de rede, Firewall do Azure e rotas definidas pelo usuário. Use tags de serviço no lugar de endereços IP específicos ao criar regras de segurança e rotas. Para cenários em que as tags de serviço da Rede Virtual do Azure não podem ser usadas, os requisitos de firewall são fornecidos abaixo.
Requisitos de firewall
A tabela a seguir lista os requisitos de firewall para cenários em que as tags de serviço de rede virtual do Azure não podem ser usadas.
Cloud | Ponto final | Propósito | Porta | Direção | Inspeção de HTTPS direto |
---|---|---|---|---|---|
Azure Commercial | https://login.microsoftonline.com | Servidor de autorização (a plataforma de identidade da Microsoft) | Porta 443 | De Saída | Sim |
Azure Commercial | https://<data collection endpoint name>.<Azure cloud region>.ingest.monitor.azure.com |
Ponto final de recolha de dados | Porta 443 | De Saída | Sim |
Azure Government | https://login.microsoftonline.us | Servidor de autorização (a plataforma de identidade da Microsoft) | Porta 443 | De Saída | Sim |
Azure Government | Substitua '.com' acima por '.us' | Ponto final de recolha de dados | Porta 443 | De Saída | Sim |
Microsoft Azure operado pela 21Vianet | https://login.chinacloudapi.cn | Servidor de autorização (a plataforma de identidade da Microsoft) | Porta 443 | De Saída | Sim |
Microsoft Azure operado pela 21Vianet | Substitua '.com' acima por '.cn' | Ponto final de recolha de dados | Porta 443 | De Saída | Sim |
Limitações
- A ingestão em tabelas padrão é limitada apenas a tabelas padrão suportadas para ingestão de logs personalizados.
- As colunas do fluxo de entrada na
streamDeclarations
propriedade devem começar com uma letra. Se você iniciar uma coluna com outros caracteres (por exemplo@
, ou_
), a operação falhará. - O
TimeGenerated
campo datetime é obrigatório. Você deve incluir esse campo na transformação KQL. - Para possíveis problemas adicionais, consulte a seção de solução de problemas no tutorial.
Próximos passos
Neste artigo, você aprendeu como usar o Logstash para conectar fontes de dados externas ao Microsoft Sentinel. Para saber mais sobre o Microsoft Sentinel, consulte os seguintes artigos: