Como você organizaria o registro apenas para aplicativos específicos usando a pilha EFK?
sobes.tech IA
Resposta da IA
Para registar certas aplicações na pilha EFK (Elasticsearch, Fluentd, Kibana), seguiria estes passos:
-
Configurar Fluentd nos servidores fonte. Em cada servidor onde as aplicações alvo estão em execução, instala e configura o agente Fluentd (ou
td-agent). Na configuração do Fluentd (td-agent.confou similar), definem-se as fontes (sources) e filtros (filters) para recolher os logs.# source - recolhe logs de ficheiros <source> @type tail # Caminho para os logs da aplicação específica path /var/log/myapp/*.log # Formato dos logs (necessário para o parsing) pos_file /var/log/td-agent/myapp.log.pos tag app.myapp.log # Tag única para esta aplicação <parse> @type regexp expression /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(?<level>\w+)\] (?<message>.+)$/ time_format %Y-%m-%d %H:%M:%S </parse> </source> # Pode adicionar tantas fontes quanto necessário <source> @type tail path /var/log/other_app/app.log pos_file /var/log/td-agent/other_app.log.pos tag app.otherapp.log <parse> @type json # Ou outro formato, dependendo da aplicação </parse> </source> # filter - enriquecimento ou filtragem de dados (opcional) <filter app.*> # Aplica-se a todas as tags que começam com 'app.' @type record_transformer <record> hostname "#{Socket.gethostname}" # Adiciona o nome do host env "production" # Ou outro ambiente </record> </filter> # match - envia os dados para Elasticsearch <match app.*> # Envia apenas os dados das aplicações Elasticsearch @type elasticsearch host elasticsearch.host.name # Endereço do seu Elasticsearch port 9200 logstash_format true # Compatibilidade com o formato Logstash logstash_prefix myapps # O índice no Elasticsearch será myapps-YYYY.MM.DD include_tag_key true tag_key @log_name # Guardar a tag no campo @log_name para filtragem no Kibana <buffer> @type file path /var/log/td-agent/buffer/elasticsearch chunk_limit_size 10m queue_limit_length 100 flush_interval 1m </buffer> </match> -
Configuração do Elasticsearch. O Elasticsearch criará automaticamente índices com o prefixo
myapps-*(ou o que estiver definido emlogstash_prefix) com base nos dados recebidos do Fluentd. Não são necessárias configurações especiais para filtrar dados de aplicações no Elasticsearch, o Elasticsearch apenas armazena os dados recebidos nos índices. -
Configurar o Kibana. No Kibana, cria-se um padrão de índice (
Index Pattern) correspondente ao prefixo do índice no Elasticsearch, por exemplo,myapps-*. Após criar o padrão de índice:- Na aba "Discover" é possível filtrar os dados pelo campo
@log_name(se foi adicionado na configuração do Fluentd) ou por outros campos que identificam a aplicação (por exemplo,hostname, se a aplicação for única no host, ou adicionar um campoapp_nameatravés dorecord_transformer). - Para criar dashboards e visualizações, pode-se usar KQL ou sintaxe Lucene para filtrar os dados pelos mesmos campos.
- Na aba "Discover" é possível filtrar os dados pelo campo
Exemplos de filtros no Kibana:
@log_name : "app.myapp.log" // Mostra apenas os logs da aplicação myapp
@log_name : "app.*" AND level : "ERROR" // Erros de todas as aplicações registadas via 'app.*'
Assim, a chave para organizar o registo apenas para aplicações específicas é:
- Usar caminhos específicos para os ficheiros de logs nas secções
sourcedo Fluentd. - Atribuir tags únicas (
tag) aos logs de cada aplicação no Fluentd. - Usar essas tags (ou campos adicionados com base nas tags) para filtrar no Kibana.
- Restringir o envio de dados ao Elasticsearch apenas para as tags necessárias usando a secção
match.