Embora esse tutorial trate detalhadamente de configurações do NGINX e LogStash, no lugar do NGINX você pode usar qualquer aplicação que produza log em textos e que seja possível manipular o formato dos logs.
Passo 1 – Escrever o log em formato JSON
Nesse passo vamos editar o arquivo de configuração para editar o formato do output do NGINX.
...
http {
...
log_format main escape=json '{'
' "time": "$time_local",'
' "status": "$status",'
' "http_x_real_ip": "$http_x_real_ip",'
' "realip_remote_addr": "$http_cf_connecting_ip",'
' "proxy_add_x_forwarded_for": "$proxy_add_x_forwarded_for",'
' "http_x_forwarded_for": "$http_x_forwarded_for",'
' "remote_addr": "$remote_addr",'
' "remote_user": "$remote_user",'
' "host": "$host",'
' "http_name":"$http_name",'
' "cookie_name":"$cookie_name",'
' "query_string":"$query_string",'
' "tcpinfo_rtt":"$tcpinfo_rtt",'
' "bytes_sent": $bytes_sent,'
' "body_bytes_sent": $body_bytes_sent,'
' "request_length": $request_length,'
' "http_x_assets_host": "$http_x_assets_host",'
' "request_body": "$request_body",'
' "request_time": $request_time,'
' "request": "$request", '
' "http_header":"$http_header",'
' "http_referer": "$http_referer",'
' "http_user_agent": "$http_user_agent",'
' "remote_user": "$remote_user",'
' "server_name": "$server_name",'
' "http_range":"$http_range",'
' "connection":"$connection",'
' "connection_requests":"$connection_requests",'
' "upstream_addr": "$upstream_addr",'
' "upstream_status": "$upstream_status",'
' "upstream_header_time": "$upstream_header_time",'
' "upstream_cache_status": "$upstream_cache_status",'
' "upstream_connect_time": "$upstream_connect_time",'
' "upstream_cookie_name": "$upstream_cookie_name",'
' "upstream_response_time": "$upstream_response_time",'
' "msec": $msec'
' } ';
access_log /var/log/nginx/access.log main;
...
Atenção para o escape=json.
Passo 2 – Produzindo Log de acessos
Assegure-se de que o access log está sendo gravado e que essa linha não está comentada.
access_log /var/log/nginx/access.log main;
Passo 3 – Mapeando logs do container em um path do host
Seja pelo -v em um docker run, ou usando volumes no yaml do docker compose, uma vez que você sabe onde, no container seu log está sendo gravado, é hora de mapear um path no host para que seu container produza um log no host.
Passo 4 – Reconstruir os paths de log no LogStash
Um container não tem acesso irrestrito ao host, mas 2 containers podem compartilhar um espaço de disco e é isso que fazemos. Enquanto o container do NGINX produzirá um arquivo em um path do container, mapeado para um path no linux, do outro lado outro container, uma instância do LogStash fará o inverso para ler esse arquivo.
Dessa vez eu não fui criativo, eu usei os mesmos nomes para evitar confusão.
Passo 5 – Configurar o LogStash para ler o novo arquivo mapeado
input {
rabbitmq {
...
}
file {
path => "/docker/EntryPoint/logs/*.log"
codec =>"json"
}
}
Isso é suficiente para começar a enviar esses logs para o elastic.
Conclusão
Esse tutorial apresenta 5 steps super simples de serem executados. Se você já tem o Enterprise Application Log e NGINX, unir os 2 é uma tarefa trivial.
Na medida que você conhece melhor Docker, e cada elemento do stack que está usando, é possível oferecer melhor monitoramento.
Abaixo tenho uma demonstração do que dá para fazer, é um dashboard do Kibana que uso para monitorar meu site.
0 comentários