Données JMX vers la pile élastique (ELK)

Données JMX à la pile élastique (ELK)

1. Vue d'ensemble

Dans ce tutoriel rapide, nous allons voir comment envoyer des données JMX de notre serveur Tomcat vers Elastic Stack (anciennement ELK).

Nous verrons comment configurer Logstash pour lire les données de JMX et les envoyer à Elasticsearch.

2. Installez la pile élastique

Tout d'abord, nous devons installer la pile Elastic (Elasticsearch -Logstash -Kibana)

Ensuite, pour nous assurer que tout est connecté et fonctionne correctement, nous enverrons les données JMX à Logstash et les visualiserons sur Kibana.

2.1. Tester Logstash

Nous allons d’abord aller au répertoire d’installation de Logstash, qui varie en fonction du système d’exploitation (dans notre cas, Ubuntu):

cd /opt/logstash

Nous pouvons définir une configuration simple à Logstash à partir de la ligne de commande:

bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost:9200"] } }'

Ensuite, nous pouvons simplement taper quelques exemples de données dans la console - et utiliser la commande CTRL-D pour fermer le pipeline lorsque nous avons terminé.

2.2. Tester Elasticsearch

Après avoir ajouté les exemples de données, un index Logstash devrait être disponible sur Elasticsearch - que nous pouvons vérifier comme suit:

curl -X GET 'http://localhost:9200/_cat/indices'

Exemple de sortie:

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. Tester Kibana

Kibana fonctionne par défaut sur le port 5601 - nous pouvons accéder à la page d'accueil à l'adresse:

http://localhost:5601/app/kibana

Nous devrions pouvoir créer un nouvel index avec le modèle «logstash-*» - et y voir nos exemples de données.

3. Configurer Tomcat

Ensuite, nous devons activer JMX en ajoutant ce qui suit àCATALINA_OPTS:

-Dcom.sun.management.jmxremote
  -Dcom.sun.management.jmxremote.port=9000
  -Dcom.sun.management.jmxremote.ssl=false
  -Dcom.sun.management.jmxremote.authenticate=false

Notez que:

  • Vous pouvez configurerCATALINA_OPTS en modifiantsetenv.sh

  • Pour les utilisateurs d'Ubuntu,setenv.sh peut être trouvé dans «/ usr / share / tomcat8 / bin»

4. Connectez JMX et Logstash

Maintenant, connectons nos métriques JMX à Logstash - pour lequel nous aurons besoin d'installer le plug-in d'entrée JMX (nous en reparlerons plus tard).

4.1. Configurer les métriques JMX

Tout d'abord, nous devons configurer les métriques JMX que nous voulons cacher; nous fournirons la configuration au format JSON.

Voici nosjmx_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"
  }]
}

Notez que:

  • Nous avons utilisé le même port pour JMX à partir deCATALINA_OPTS

  • Nous pouvons fournir autant de fichiers de configuration que nous le souhaitons, mais nous avons besoin qu'ils soient dans le même répertoire (dans notre cas, nous avons enregistréjmx_config.json dans «/ monitor / jmx /»)

4.2. Plug-in d'entrée JMX

Ensuite, installons le plug-in d'entrée JMX en exécutant la commande suivante dans le répertoire d'installation de Logstash:

bin/logstash-plugin install logstash-input-jmx

Ensuite, nous devons créer un fichier de configuration Logstash (jmx.conf), où l'entrée est les métriques JMX et la sortie dirigée vers Elasticsearch:

input {
  jmx {
    path => "/monitor/jmx"
    polling_frequency => 60
    type => "jmx"
    nb_thread => 3
  }
}

output {
    elasticsearch {
        hosts => [ "localhost:9200" ]
    }
}

Enfin, nous devons exécuter Logstash et spécifier notre fichier de configuration:

bin/logstash -f jmx.conf

Notez que notre fichier de configuration Logstashjmx.conf est enregistré dans le répertoire de base de Logstash (dans notre cas/opt/logstash)

5. Visualiser les métriques JMX

Enfin, créons une visualisation simple de nos données de métriques JMX, sur Kibana. Nous allons créer un graphique simple pour surveiller l'utilisation de la mémoire du tas.

Tout d'abord, nous allons créer une nouvelle recherche pour obtenir des métriques liées à l'utilisation de la mémoire du tas:

  • Cliquez sur l'icône "Nouvelle recherche" dans la barre de recherche.

  • Tapez la requête suivante

    metric_path:reddit.jmx.elasticsearch.Memory.HeapMemoryUsage.used
  • appuyez sur Entrée

  • Veillez à ajouter les champs «metric_path» et «metric_value_number» dans la barre latérale

  • Cliquez sur l'icône "Enregistrer la recherche" dans la barre de recherche.

  • Nommez la recherche 'mémoire utilisée'

Si des champs de la barre latérale sont marqués comme non indexés, accédez à l'onglet "Paramètres" et actualisez la liste des champs dans l'index "logstash-*".

5.2. Créer un graphique en courbes

Ensuite, nous allons créer un graphique linéaire simple pour surveiller notre utilisation de la mémoire du tas au fil du temps:

  • Allez à l'onglet "Visualiser"

  • Choisissez "Graphique linéaire"

  • Choisissez "De la recherche enregistrée"

  • Choisissez la recherche "mémoire utilisée" que nous avons créée précédemment

Pour l’axe Y, assurez-vous de choisir:

  • Agrégation: moyenne

  • Champ:metric_value_number

Pour l’axe des X, choisissez ‘Histogramme de la date '- puis enregistrez la visualisation.

5.3. Utiliser un champ scripté

Comme l’utilisation de la mémoire est en octets, elle n’est pas très lisible. Nous pouvons convertir le type et la valeur de métrique en ajoutant un champ scripté dans Kibana:

  • Dans "Paramètres", accédez aux index et choisissez "logstash-*" index

  • Allez à l'onglet "Champs scriptés" et cliquez sur "Ajouter un champ scripté".

  • Nom:metric_value_formatted

  • Format: octets

  • Pour Script, nous utiliserons simplement la valeur de «metric_value_number»:

    doc['metric_value_number'].value

Désormais, vous pouvez modifier votre recherche et votre visualisation pour utiliser le champ «metric_value_formatted» au lieu de «metric_value_number» - et les données seront correctement affichées.

Voici à quoi ressemble ce tableau de bord très simple:

image

6. Conclusion

Et nous avons terminé. Comme vous pouvez le voir, la configuration n’est pas particulièrement difficile, et rendre les données JMX visibles dans Kibana nous permet de faire beaucoup de travail de visualisation intéressant pour créer un fantastique tableau de bord de surveillance de la production.