Boas práticas para Data Stream
Defina escopo, formato e segurança de cada stream para que vários streams rodem juntos, as linhas de log tragam o que você analisa e as falhas apareçam.
Um stream de logs vale o que vale a cópia que ele deixa na sua plataforma. Essa cópia depende de escolhas feitas antes de a primeira linha de log sair. Um stream com o escopo errado desativa os outros streams da conta. Um template com todas as variáveis envia bytes que ninguém lê, e um endpoint que recusa as linhas de log é aceito no momento de salvar e falha depois, fora de vista.
Estas práticas se aplicam aos streams do Data Stream no Azion Console e na Azion API. Os mecanismos por trás delas estão em Como o Data Stream funciona, e cada campo está em Configurações do stream. O Console chama o campo do endpoint de Connector, e a API leva o endpoint em outputs.
Na ordem, as práticas tratam do escopo de um stream, do template predefinido para um SIEM, das variáveis que um template envia, dos bootstrap servers do Apache Kafka, do TLS para o Apache Kafka, da credencial do Object Storage, dos primeiros envios para um endpoint não testado e do status de cada envio. Os exemplos são JSON no formato que a API recebe.
Use um filtro de workloads em vez de sampling quando vários streams precisam rodar
Todo stream precisa de um escopo: um transform sampling sobre todos os workloads, ou um transform filter_workloads com os workloads que você escolher. A API recusa um stream sem nenhum dos dois. O sampling reduz o volume, e o custo, dos dados que você coleta e analisa. No entanto, salvar um stream ativo com sampling, em qualquer taxa, inclusive 100, desativa todos os outros streams da conta, e a API não retorna erro.
Um filtro de workloads mantém os outros streams ativos. Este stream envia as requisições de um workload, renderizadas pelo template predefinido Applications Event Collector, para um cluster do Apache Kafka:
Substitua 1785202161 pelos IDs dos seus workloads, até 600. O custo é a manutenção: um workload criado depois não é coletado até que você o adicione ao filtro. Os eventos de Activity History pertencem à conta, e não a um workload, então um stream de Activity History usa sampling e roda sozinho. Para comparar as duas opções, consulte Sampling e filtros de workloads, e para os passos, Associe workloads a um stream.
Para verificar, liste os streams com GET /v4/workspace/stream/streams dois minutos depois de salvar: todo stream que você espera que rode mostra "active": true.
Use o template predefinido Applications + WAF Event Collector para alimentar um SIEM
Um SIEM correlaciona as requisições às suas aplicações com as decisões de segurança tomadas sobre elas. O template predefinido Applications + WAF Event Collector leva as duas coisas em uma linha de log. Ele envia os dados de requisição, resposta e cache do Applications Event Collector, mais variáveis de WAF, sessão, TLS e endereço do servidor, em 51 chaves.
Com a fonte de dados Applications, defina o template como 184 em vez de 2 no stream acima: { "type": "render_template", "attributes": { "template": 184 } }. Quando a plataforma precisa dos dados de requisição e de nenhum dado de WAF, o Applications Event Collector, 2, envia 36 chaves.
O custo é o volume: 51 chaves é o máximo entre os cinco templates predefinidos, e Data Stream é cobrado por Requests e Data Transfer, conforme Preços. Para o que cada template predefinido leva, consulte Templates predefinidos, e para os passos, Envie eventos do WAF para um SIEM.
Para verificar, leia uma linha de log no SIEM: ela traz chaves de WAF como waf_score e waf_match.
Envie apenas as variáveis que você analisa
Um template predefinido envia, em cada linha de log, todas as variáveis que carrega. Um template personalizado envia apenas as chaves do seu data set, então um stream criado para uma pergunta envia menos bytes por linha. Para uma análise do status das respostas, poucas variáveis respondem à pergunta. Este template personalizado mantém o horário, o host, a requisição e duas variáveis de status:
Um POST para /v4/workspace/stream/templates com este corpo cria o template com custom: true. Adicione \"proxy_status\": \"$proxy_status\" ao data set para registrar também o status que a Azion retorna quando a origem não dá resposta. Para partir de um template predefinido no Azion Console, Duplicate Template na seção Render Template abre o painel de criação preenchido com o data set do template predefinido, e você exclui as chaves de que não precisa.
O custo é o alcance: uma variável deixada fora do template falta em todas as linhas de log enviadas antes de você adicioná-la. Para o formato do data set, consulte Templates personalizados, e para os passos, Crie um template personalizado.
Para verificar, leia uma linha de log entregue: ela tem apenas as chaves do data set.
Liste mais de um bootstrap server do Apache Kafka
Bootstrap Servers precisa apenas dos servidores que o stream usa para a conexão inicial com o cluster, não de todos os servidores do cluster. Listar mais de um adiciona redundância e mantém o cluster alcançável quando um deles está fora do ar. O stream acima lista dois, separados por vírgula e sem espaço: "bootstrap_servers": "kafka1.example.com:9092,kafka2.example.com:9092".
O custo é o tamanho do campo, que aceita até 150 caracteres. Os outros tipos de endpoint aceitam uma única URL ou um único host, então a entrega deles depende desse endereço. Enquanto um endpoint está marcado como indisponível pelo Data Stream, as linhas de log desse intervalo são descartadas, como descreve Disponibilidade do endpoint e falhas. Para o campo, consulte Apache Kafka.
Para verificar, leia outputs[0].attributes.bootstrap_servers do stream: ele contém dois ou mais pares host:port.
Ative o TLS para o Apache Kafka
Uma linha de log pode trazer o endereço do cliente, a URL requisitada e outros dados da requisição, como $remote_addr e $request_uri. Com o TLS ativado, o stream envia esses dados ao cluster criptografados com Transport Layer Security. O stream acima define "use_tls": true. A API exige o campo, e o Console o mostra como a chave Enable Transport Layer Security (TLS).
O custo fica do lado do cluster: os servidores de destino precisam de um certificado de uma autoridade certificadora confiável, conforme Apache Kafka. Para os passos, consulte Envie logs para o Apache Kafka.
Para verificar, leia outputs[0].attributes.use_tls do stream: ele mostra true.
Dê a uma credencial do Object Storage as capacidades de listagem de buckets
Um stream que grava em um bucket do Object Storage da Azion usa uma credencial S3. Uma credencial que pode gravar objetos não basta: sem listAllBucketNames e listBuckets, todo envio é registrado com status 503, e nenhum objeto chega ao bucket. Dê à credencial estas capacidades, limitadas ao bucket em que o stream grava:
Uma credencial limitada a um bucket impede que as chaves que o stream armazena alcancem os seus outros buckets. O custo é uma credencial por bucket. Azion Console mascara a Access Key e a Secret Key do S3, e uma conta com View Data Stream vê apenas um ícone de cadeado no lugar do ícone de revelar. Mantenha Edit Data Stream para as pessoas que gerenciam streams. Para os campos mascarados, consulte Credenciais e campos mascarados, e para os passos, Envie dados do Data Stream para o Object Storage.
Para verificar, encontre o primeiro envio no Real-Time Events: ele mostra 200, e um objeto aparece sob o Object Key Prefix.
Confirme um endpoint não testado pelos primeiros registros de entrega
Salvar um stream verifica o formato dos campos, não o endpoint. A API salva com 201 um stream com credenciais fictícias ou com uma URL que responde 405 a todos os envios. Uma credencial ou uma URL errada aparece apenas como envios com falha.
Antes de enviar tráfego de produção para um endpoint, teste-o com um stream filtrado para um workload, como na primeira prática. O teste mantém os outros streams ativos e o volume pequeno. Depois, aguarde de um a dois minutos, o tempo que uma mudança do estado ativo leva, como descreve Ativação e alterações, e leia os primeiros registros de entrega. O custo é tráfego real: o stream de teste envia as linhas de log desse workload, cobradas como as de qualquer outro stream. Um stream de Activity History usa sampling, então o teste dele desativa os outros streams da conta.
Para verificar, confirme que os primeiros registros mostram 200 e que as linhas de log chegam à sua plataforma.
Acompanhe o código de status de cada envio no Real-Time Events
Um envio com falha não interrompe um stream, e as linhas de log dele não são enviadas de novo. Real-Time Events registra cada envio no dataset dataStreamedEvents, inclusive os envios com falha, com endpointType, statusCode, streamedLines, dataStreamed e url. Um status diferente de 200 marca um envio que não foi entregue. O status 503 marca um endpoint considerado indisponível pelo Data Stream, e o 504, um envio HTTP POST que excedeu o tempo limite. Qualquer outro código é o status que o seu endpoint retornou, como 405.
Faça uma query em dataStreamedEvents pela API GraphQL do Real-Time Events a partir da ferramenta que monitora a sua plataforma, e aja sobre qualquer status diferente de 200. A aba Data Stream dos dashboards de Observe do Real-Time Metrics totaliza bytes e linhas de log, mas não o status de um envio individual. O custo é a retenção: Real-Time Events mantém esses registros por 7 dias, então uma falha que você não lê nesse período não deixa registro. Para o status de cada falha, consulte Solucionar problemas de Data Stream.
Para verificar, faça uma query na última hora de dataStreamedEvents do stream: registros que mostram apenas 200 confirmam que todos os envios foram entregues.