#ToolTip - ELK Stack - Part3(Tomcat)
Continuando os estudos e utilizações sobre o ELK, segue uma utilização geralmente utilizada no monitoramento de aplicações Tomcat:
Arquivo de configuração do logstash. Após adição do conteúdo será necessário reiniciar o serviço, assim como liberar a respectiva porta no Firewall.
[root@elk ~]# vim /etc/logstash/conf.d/20-tomcat.conf
input {
udp {
port => 2514
type => "tomcat"
}
}
filter {
if [type] == "tomcat" {
grok {
patterns_dir => ["/etc/logstash/patterns"]
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{HOSTID:hostname} %{WORD:loglevel} %{WORD:method} %{URIPATHPARAM:urlpath} %{NUMBER:httpcode} %{USERNAME:userid} %{IP:client} %{NUMBER:durationms:int} %{NUMBER:durationsec:float}" }
}
}
}
output {
if [type] == "tomcat" {
elasticsearch {
hosts => ["<IP DO ELASTIC>:9200"]
index => "tomcat-index-%{+YYYY.MM.dd}"
}
}
}
[root@elk ~]# firewall-cmd --permanent --add-port=2514/udp
success
[root@elk ~]# firewall-cmd --reload
success
[root@elk ~]# vim /etc/logstash/patterns/tomcats
USERNAME [a-zA-Z0-9._-]+
HOSTID [a-zA-Z0-9._-]+
[root@elk ~]#
[root@elk ~]# systemctl restart logstash
[root@elk ~]#
Vamos então para a configuração do serviço nos servidores Tomcat. O campo a ser adicionado deve ser incluido no arquivo de configuração indicado, logo acima do “”.
[root@tomcat1 ~]#
[root@tomcat1 ~]# vim /opt/tomcat/conf/server.xml
....
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Valve
className="org.apache.catalina.valves.AccessLogValve"
directory="${catalina.base}/logs"
prefix="tomcat-2-elk"
suffix=".log"
pattern="%m %U %s %u %a %D %T"
/>
</Host>
...
[root@tomcat1 ~]# systemctl restart tomcat
[root@tomcat1 ~]#
Esta linha adicionará no diretório de logs um arquivo chamado “tomcat-2-elk.log” e que será preenchido seguindo o pattern escolhido, conforme as aplicações sejam acessadas. Mais opções podem ser utilizadas e consumidas, segue link com descrição. É importante lembrar que cada campo informano neste pattern corresponde a um campo no match no arquivo de configuração do logstash, caso seja altearado aqui, também deve ser alterado lá para manter um fluxo correto de informações.
| Pattern | Descrição |
|---|---|
| %a | IP Remoto (cliente) |
| %D | Tempo da requisição em milisegundos |
| %m | Método de requisição |
| %s | Http code, da requisição |
| %T | Tempo da requisição em segundos |
| %U | URL path acessada |
| %u | Usuário remoto (autenticado) |
Segue um exemplo de como é o arquivo de log.
[root@tomcat1 ~]#
[root@tomcat1 ~]# tail /opt/tomcat/logs/tomcat-2-elk.log
GET /application/scripts/global.js 200 user.teste01 172.16.199.252 0 0.000
GET /application/scripts/system.js 200 user.teste01 172.16.199.252 1 0.200
GET /application/scripts/ua.js 200 user.teste01 172.16.199.252 1 0.100
GET /application/scripts/browser.js 200 user.teste01 172.16.199.252 0 0.000
GET /application/scripts/tooltip.js 200 user.teste01 172.16.199.252 1 0.130
GET /application/scripts/CalendarPopup.js 304 user.teste01 172.16.199.252 0 0.000
GET /application/scripts/hint.js 304 user.teste01 172.16.199.252 0 0.000
GET /application/scripts/coolmenus3.js 404 user.teste01 172.16.199.252 1 0.000
GET /application/scripts/coolmenu-config.js 304 user.teste01 172.16.199.252 0 0.000
GET /application/images/body_grad.png 200 user.teste01 172.16.199.252 1 0.800
[root@tomcat1 ~]#
Com a configuração já em funcionamento, podemos ir para o próximo passo que é o envio desse arquivo para o ELK. Existem algumas formas para se fazer isso a que usarei será o rsyslog. (outra opção é o Filebeat, que é uma ferramenta da Elastic). Foram adicionado os parâmetros no arquivo de configuração do rsyslog e após realizado o restart do serviço.
[root@tomcat1 ~]#
[root@tomcat1 ~]# vim /etc/rsyslog.conf
.....
$ModLoad imfile
$InputFileName /opt/tomcat/logs/tomcat-2-elk.log
$InputFileTag tomcatinfo
$InputFileStateFile stat-tomcat-info
$InputFileSeverity debug
$InputFileFacility local3
$InputRunFileMonitor
local3.* @<IP DO LOGSTASH>:2514
[root@tomcat1 ~]# systemctl restart rsyslog
[root@tomcat1 ~]#
A partir disso os logs já irão ser automaticamente enviados para o ELK, a cada nova linha adicionada no arquivo. No ELK é necessário que seja adicionado Index Pattern correspondente, conforme está no arquivo de configuração.

Segue como os logs serão exibidos:

A partir daí é possivel criar suas visualizações para montar seu dashboard, segue exemplo

Bônus:
Dependendo do seu fluxo de acesso no servidor, esse log pode crescer a ponto de comprometer o serviço do tomcat. Uma boa prática é criar um rotate para esse arquivo de log, já que a informação dele provavelmente já foi enviada para o ELK. Segue um exemplo de como configurar.