Dados JMX para a pilha elástica (ELK)

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.

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:

image

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.