Dados JMX para a pilha elástica (ELK)
1. Visão geral
Neste tutorial rápido, vamos dar uma olhada em como enviar dados JMX de nosso servidor Tomcat para o Elastic Stack (anteriormente conhecido como ELK).
Discutiremos como configurar o Logstash para ler dados do JMX e enviá-los para o Elasticsearch.
2. Instale o Elastic Stack
Primeiro, precisamos instalar a pilha Elastic (Elasticsearch -Logstash -Kibana)
Então, para ter certeza de que tudo está conectado e funcionando corretamente, enviaremos os dados JMX para o Logstash e os visualizaremos no Kibana.
2.1. Logstash de teste
Primeiro, iremos ao diretório de instalação do Logstash, que varia de acordo com o sistema operacional (no nosso caso, Ubuntu):
cd /opt/logstash
Podemos definir uma configuração simples para Logstash na linha de comando:
bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost:9200"] } }'
Então, podemos simplesmente digitar alguns dados de amostra no console - e usar o comando CTRL-D para fechar o pipeline quando terminarmos.
2.2. Teste Elasticsearch
Após adicionar os dados de amostra, um índice Logstash deve estar disponível no Elasticsearch - que podemos verificar da seguinte forma:
curl -X GET 'http://localhost:9200/_cat/indices'
Saída de amostra:
yellow open logstash-2017.11.10 5 1 3531 0 506.3kb 506.3kb
yellow open .kibana 1 1 3 0 9.5kb 9.5kb
yellow open logstash-2017.11.11 5 1 8671 0 1.4mb 1.4mb
2.3. Teste Kibana
O Kibana é executado por padrão na porta 5601 - podemos acessar a página inicial em:
http://localhost:5601/app/kibana
Devemos ser capazes de criar um novo índice com o padrão “logstash-*” - e ver nossos dados de amostra lá.
3. Configurar o Tomcat
Em seguida, precisamos habilitar o JMX adicionando o seguinte aCATALINA_OPTS:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
Observe que:
-
Você pode configurarCATALINA_OPTS modificandosetenv.sh
-
Para usuários do Ubuntu,setenv.sh pode ser encontrado em ‘/ usr / share / tomcat8 / bin '
4. Conecte JMX e Logstash
Agora, vamos conectar nossas métricas JMX ao Logstash - para o qual precisaremos ter o plug-in de entrada JMX instalado lá (mais sobre isso mais tarde).
4.1. Configurar métricas JMX
Primeiro, precisamos configurar as métricas JMX que queremos esconder; forneceremos a configuração no formato JSON.
Aqui está nossojmx_config.json:
{
"host" : "localhost",
"port" : 9000,
"alias" : "reddit.jmx.elasticsearch",
"queries" : [
{
"object_name" : "java.lang:type=Memory",
"object_alias" : "Memory"
}, {
"object_name" : "java.lang:type=Threading",
"object_alias" : "Threading"
}, {
"object_name" : "java.lang:type=Runtime",
"attributes" : [ "Uptime", "StartTime" ],
"object_alias" : "Runtime"
}]
}
Observe que:
-
Usamos a mesma porta para JMX deCATALINA_OPTS
-
Podemos fornecer quantos arquivos de configuração quisermos, mas precisamos que eles estejam no mesmo diretório (no nosso caso, salvamosjmx_config.json em ‘/ monitor / jmx / ')
4.2. Plug-in de entrada JMX
A seguir, vamos instalar o plug-in de entrada JMX executando o seguinte comando no diretório de instalação do Logstash:
bin/logstash-plugin install logstash-input-jmx
Em seguida, precisamos criar um arquivo de configuração Logstash (jmx.conf), onde a entrada é a métrica JMX e a saída direcionada ao Elasticsearch:
input {
jmx {
path => "/monitor/jmx"
polling_frequency => 60
type => "jmx"
nb_thread => 3
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
Por fim, precisamos executar o Logstash e especificar nosso arquivo de configuração:
bin/logstash -f jmx.conf
Observe que nosso arquivo de configuração do Logstashjmx.conf é salvo no diretório inicial do Logstash (em nosso caso/opt/logstash)
5. Visualize JMX Metrics
Por fim, vamos criar uma visualização simples de nossos dados de métricas JMX no Kibana. Vamos criar um gráfico simples - para monitorar o uso da memória heap.
5.1. Criar nova pesquisa
Primeiro, criaremos uma nova pesquisa para obter métricas relacionadas ao uso de memória heap:
-
Clique no ícone "Nova pesquisa" na barra de pesquisa
-
Digite a seguinte consulta
metric_path:reddit.jmx.elasticsearch.Memory.HeapMemoryUsage.used
-
pressione Enter
-
Certifique-se de adicionar os campos ‘metric_path’ e ‘metric_value_number’ da barra lateral
-
Clique no ícone "Salvar pesquisa" na barra de pesquisa
-
Nomeie a pesquisa memory memória usada '
No caso de algum campo da barra lateral marcado como não indexado, vá para a guia ‘Configurações’ e atualize a lista de campos no índice ‘logstash-*’.
5.2. Criar gráfico de linha
A seguir, criaremos um gráfico de linha simples para monitorar nosso uso de memória heap ao longo do tempo:
-
Vá para a guia "Visualizar"
-
Escolha 'Gráfico de linhas'
-
Escolha ‘Da pesquisa salva '
-
Escolha a pesquisa "memória usada" que criamos anteriormente
Para o eixo Y, certifique-se de escolher:
-
Agregação: Média
-
Campo:metric_value_number
Para o eixo X, escolha 'Histograma de data' - depois salve a visualização.
5.3. Usar campo com script
Como o uso da memória é em bytes, não é muito legível. Podemos converter o tipo e o valor da métrica adicionando um campo com script no Kibana:
-
Em ‘Configurações’, vá para índices e escolha ‘logstash-*‘ índice
-
Vá para a guia "Campos com script" e clique em "Adicionar campo com script"
-
Nome:metric_value_formatted
-
Formato: bytes
-
Para Script, vamos simplesmente usar o valor de ‘metric_value_number’:
doc['metric_value_number'].value
Agora, você pode alterar sua pesquisa e visualização para usar o campo ‘metric_value_formatted’ em vez de ‘metric_value_number’ - e os dados serão exibidos corretamente.
Esta é a aparência deste painel muito simples:
6. Conclusão
E nós terminamos. Como você pode ver, a configuração não é particularmente difícil, e obter os dados JMX visíveis no Kibana nos permite fazer muitos trabalhos de visualização interessantes para criar um fantástico painel de monitoramento de produção.