Supervision de clusters HDP

Supervision de clusters HDP

By RUMMENS Joris

5 juil. 2017

Avec la croissance actuelle des technologies BigData, de plus en plus d’entreprises construisent leurs propres clusters dans l’espoir de valoriser leurs données. L’une des principales préoccupations lors de la construction de ces infrastructures est la capacité de surveiller en permanence la santé du cluster et de signaler les problèmes le plus rapidement possible. C’est là qu’intervient la supervision.

Il existe presque autant de politiques de supervision que de sociétés différentes. La plupart d’entre eux ont leurs propres outils de supervision, et les clusters Big Data doivent être adaptés à ceux-ci. Cet article traite de l’intégration d’un cluster HDP 2.4.2 dans le processus de supervision de l’un de nos clients.

Ambari-Alerts : la solution de supervision dans HDP

Sur une solution HDP, de nombreux éléments peuvent avoir une incidence sur la santé du cluster global, des composants de la plate-forme à la communication via le réseau, y compris l’utilisation du processeur, de la RAM et des disques par les nœuds.

Ambari surveille déjà de nombreux éléments et expose leurs statuts avec l’API REST d’Ambari-Alerts. Les alertes peuvent être personnalisées pour répondre aux besoins de l’entreprise, et des alertes personnalisées peuvent être ajoutées pour gérer les composants qui peuvent ne pas être supervisés par les alertes par défaut d’ambari.

Pour répertorier toutes les définitions d’alertes disponibles sur votre cluster, utilisez :

curl -u $user:$password -H 'X-Requested-By: ambari' \
  http://$ambari_server:$ambari_port/api/v1/clusters/$cluster_name/alert_definitions/

Ceci imprimera environ 70 alertes par défaut déjà activées et rapportant divers états de santé sur l’interface Web d’Ambari. Certains paramètres, tels que l’intervalle de vérification ou les seuils de criticité, peuvent être directement modifiés dans l’onglet Alerte de l’interface Web. Pour visualiser et / ou modifier d’autres paramètres spécifiques à une alerte, utilisez :

curl -u $user:$password -H 'X-Requested-By: ambari' \
  http://$ambari_server:$ambari_port/api/v1/clusters/$cluster_name/alerts

Cela retournera quelque chose comme :

{
  "href" : "http://$ambari_server:$ambari_port/api/v1/clusters/$cluster_name/alerts/71",
  "Alert" : {
    "cluster_name" : "$cluster_name",
    "component_name" : "DATANODE",
    "definition_id" : 18,
    "definition_name" : "datanode_heap_usage",
    "host_name" : "$datanode_hostname",
    "id" : 71,
    "instance" : null,
    "label" : "DataNode Heap Usage",
    "latest_timestamp" : 1475137438564,
    "maintenance_state" : "OFF",
    "original_timestamp" : 1473843838579,
    "scope" : "HOST",
    "service_name" : "HDFS",
    "state" : "OK",
    "text" : "Used Heap:[6%, 55.806114 MB], Max Heap: 1004.0 MB"
  }
}

Supervision chez notre client

Bien que les alertes d’Ambari permettent déjà une supervision complète des clusters via son interface Web, elles ne sont pas entièrement conformes aux politiques de nos clients. Une seule équipe de “pilotage” doit surveiller tous les environnements de l’entreprise et résoudre un problème lorsqu’une alerte apparaît. Le problème est attribué à l’équipe d’exploitation appropriée, qui s’efforce ensuite de résoudre le problème.

La solution de surveillance utilisée ici est Operation-Manager de HP. Tous les environnements doivent fournir leurs vérifications de l’état d’une manière accessible par HP-OM.

Dans notre cas, nous avons décidé de fournir un fichier journal auquel nous ajoutons régulièrement toutes les informations relatives aux alertes d’ambari. Nous avons utilisé un script python personnalisé pour demander chaque état d’alerte Ambari activé avec son API REST et pour l’imprimer sur une ligne du fichier journal.

HP-OM lit chaque nouvelle ligne ajoutée au fichier journal, recherche les mots-clés CRITICAL ou UNKNOWN et envoie la ligne à l’équipe de pilotage si l’un de ces termes apparaît. Le membre de pilotage qui reçoit l’alerte crée une issue et place la ligne du log dans la description de celle-ci. Enfin, l’équipe d’exploitation affectant l’environnement dans lequel l’alerte est apparue traite le problème à l’aide de la ligne de log présente dans la description.

Supervision

Information additionnelle

Ambari-Alerts n’est pas le seul moyen d’obtenir des informations sur la santé de votre cluster. En fait, il est construit de manière à permettre beaucoup de personnalisation. Vous pouvez écrire vos propres scripts pour obtenir les informations souhaitées et les intégrer en tant qu’alerte dans ambari. Cela maintient votre processus de supervision au même endroit. Mais vous pouvez également utiliser d’autres sources d’informations.

Ambari-Metrics en est un exemple. Lorsqu’il est activé, chaque métrique de service et d’hôte HDP est surveillée par Ambari-Metrics et le résultat peut être visualisé sur une interface Web Grafana ou interrogé via son API REST. Des métriques globales de cluster sont également disponibles.

Pour obtenir une liste des métriques des services surveillés par Ambari-Metrics, utilisez :

curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/ACCUMULO/artifacts/metrics_descriptor > metrics-descriptor_accumulo.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/AMBARI_METRICS/artifacts/metrics_descriptor > metrics-descriptor_ambari-metrics.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/ATLAS/artifacts/metrics_descriptor > metrics-descriptor_atlas.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/FALCON/artifacts/metrics_descriptor > metrics-descriptor_falcon.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/FLUME/artifacts/metrics_descriptor > metrics-descriptor_flume.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/GANGLIA/artifacts/metrics_descriptor > metrics-descriptor_ganglia.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/HBASE/artifacts/metrics_descriptor > metrics-descriptor_hbase.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/HDFS/artifacts/metrics_descriptor > metrics-descriptor_hdfs.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/HIVE/artifacts/metrics_descriptor > metrics-descriptor_hive.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/KAFKA/artifacts/metrics_descriptor > metrics-descriptor_kafka.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/KERBEROS/artifacts/metrics_descriptor > metrics-descriptor_kerberos.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/KNOX/artifacts/metrics_descriptor > metrics-descriptor_knox.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/MAHOUT/artifacts/metrics_descriptor > metrics-descriptor_mahout.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/MAPREDUCE2/artifacts/metrics_descriptor > metrics-descriptor_mapreduce2.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/OOZIE/artifacts/metrics_descriptor > metrics-descriptor_oozie.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/PIG/artifacts/metrics_descriptor > metrics-descriptor_pig.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/RANGER/artifacts/metrics_descriptor > metrics-descriptor_ranger.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/RANGER_KMS/artifacts/metrics_descriptor > metrics-descriptor_ranger-kms.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/SLIDER/artifacts/metrics_descriptor > metrics-descriptor_slider.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/SMARTSENSE/artifacts/metrics_descriptor > metrics-descriptor_smartsense.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/SPARK/artifacts/metrics_descriptor > metrics-descriptor_spark.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/SQOOP/artifacts/metrics_descriptor > metrics-descriptor_sqoop.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/STORM/artifacts/metrics_descriptor > metrics-descriptor_storm.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/TEZ/artifacts/metrics_descriptor > metrics-descriptor_tez.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/YARN/artifacts/metrics_descriptor > metrics-descriptor_yarn.json
curl -u $user:$password -H 'X-Requested-By: ambari' http://$ambari_server:$ambari_port/api/v1/stacks/HDP/versions/2.4/services/ZOOKEEPER/artifacts/metrics_descriptor > metrics-descriptor_zookeeper.json

Those metrics can then be used as sources to create more custom alerts. It was not implemented for customer’s use case because the default alerts were enough to handle the needs. However, the solution was still studied and may be implemented in the future if the supervision requirements of the company evolve.

Canada - Morocco - France

International locations

10 rue de la Kasbah
2393 Rabbat
Canada

Nous sommes une équipe passionnées par l'Open Source, le Big Data et les technologies associées telles que le Cloud, le Data Engineering, la Data Sciencem le DevOps…

Nous fournissons à nos clients un savoir faire reconnu sur la manière d'utiliser les technologies pour convertir leurs cas d'usage en projets exploités en production, sur la façon de réduire les coûts et d'accélérer les livraisons de nouvelles fonctionnalités.

Si vous appréciez la qualité de nos publications, nous vous invitons à nous contacter en vue de coopérer ensemble.