Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LyonJug : centralisation des logs 2014/01

Vladislav Pernin
January 19, 2014
1.3k

LyonJug : centralisation des logs 2014/01

Live coding : mise en place d'une chaîne complète, robuste, performante et scalable avec Logstash, Spring AMQP, RabbitMQ, elasticsearch et Kibana.
Retour d'expérience sur un projet de centralisation des logs en production depuis 2012 chez un grand compte.
Indexation de milliers de logs par seconde, chercher instantanément dans des centaines de Go de logs et dashboards de l'activité d'un environnement en quelques clics.

Vladislav Pernin

January 19, 2014
Tweet

Transcript

  1. Devinette Que peut-on faire avec : • un morceau de

    bois • un lapin • un bonsai • une cahute
  2. Pourquoi • Beaucoup de serveurs • Accès aux machines limité

    ou impossible • Ninja du | sed awk tail cat grep • Simplifier l'accès • Diagnostic • Statistiques / performance
  3. Cible • Système temps réel (1s) • Robuste • Scalable

    • Sans perte • Recherche facile • Complexité limitée
  4. Migration vers 1.2.x lourde à effectuer Codec Nouveau schéma JSON

    @fields.maprop -> maprop sélection par type -> conditional
  5. Tail intelligent : rotation multi-ligne avec regexp sur début &

    fin détection nouveaux fichiers wildcard et récursif exclusion start_position
  6. Découpage via grok Pattern custom WEBLOGIC_SERVER ####<%{WLSDATE:date}> <%{WORD:level}> <% {DATA:appender}>

    <%{DATA:hostname}> <%{DATA:servername}> <% {DATA:threadname}> <?(?:<)?%{DATA:subsystem}?(?:>)?> <% {DATA:new_data_1}> <> <%{DATA:datenouse}> <%{DATA:beacode}> <% {WLS_MESSAGE:wlsmessage}>
  7. Très puissant mais pas facilement dégogable regex à optimiser pour

    la performance voir grokdebug.cloudfoundry.com
  8. input exec sur des scripts SQL ex : statistiques détaillées

    sur les requêtes SQL Oracle capturées par le Grid
  9. Exemple de customisation : Retry sur la création de la

    river ES Gestion d'une liste de brokers
  10. if watchdog_timeout then; echo Probleme, sans doute sur les regex

    de Grok fi Process watcher (cron/supervisord) et redémarrage
  11. Le watchdog_timeout peut arriver sur le parsing d'une énorme log

    Exemple : avec un AOPLogger sur les arguments sans limite !
  12. Assez performant mais empreinte CPU importante en charge Rapport gain

    / coût : Ok pour 50-100 lignes/s < 1-5% CPU 2000 lignes/s 150% CPU
  13. Shipper light, feature -, perf +, jeune, à surveiller Exemple

    : logstash-forwarder (anciennement Lumberjack)
  14. RabbitMQ pas conseillé par le fondateur car « complexité, standard

    mouvant et performance en mode persistant » Conseille redis ou zeromq … persistence, sécurité, installation ... Mon avis : marche très bien avec le lapin dans mon cas
  15. Sortie statsd / Graphite Retour arrière chez ERDF car trop

    de complexité, produit hors souche, pas automatisable facilement, api bizarre, besoin/périmètre ?
  16. Un fichier sincedb par type de logs Un filesystem dédié

    … sinon si le FS hôte est plein, Logstash, selon la configuration va relire l'input complet à chaque itération
  17. Queue avec limite de taille / retry avec un offer

    timeout une fois plein … mais pas avec 200 ms d'attente
  18. Utilisation d'une surcouche à log4j « maison » hérité d'un

    autre projet du client, une sorte de MDC un peu évolué fait bien le travail … mais sur log4j A minima utilisation de la façade slf4j
  19. A partir de 8 000 messages/s, on tombe sur un

    vieux problème de contention très connu dans log4j ! On ne rencontre pas forcément ce débit là tous les jours
  20. Existe des équivalents Logback mais ne semblent pas packagé et

    plutôt spécifique Simple à faire à la main
  21. Pas si évident à mettre en œuvre et à paramétrer

    pour un bon fonctionnement en production frame_max,hearbeat,tcp_listen_options inet_dist_listen... disk_free_limit,vm_memory_high_watermark cluster_partition_handling
  22. Cron forçant la fermeture des connexions si des queues ont

    des messages en attente et pas de consumer
  23. Intégration aux normes de sécurité de l'entreprise impeccable avec la

    federation pour transport des logs d'une zone réseau à une autre en respectant le sens des flux
  24. Attention à la problématique des nœuds non synchronisés, perte de

    messages possibles, ordre de redémarrage des nœuds et partitions failures Résolu en version 3.1
  25. Scale moyennement Plus de nœuds == HA Multiplier les queues

    Récentes federated queues … au détriment de la complexité
  26. Assez performant (5000 stacktraces/s sans tuning) sur un SAN Recherche

    parmi 30 millions lignes de logs en quelques millisecondes
  27. River RabbitMQ très pratique Petit bug de robustesse en cours

    de merge (05/2013) … mais deprecated en 1.0 pas très compliqué à reproduire sous un autre forme
  28. Mapping à mettre au point (montée en compétence indispensable) De

    moins en moins de travail à faire avec les releases récentes à la fois de Logstash et d'elasticsearch
  29. Mapping custom : Compression (par défaut désormais) Élimination de la

    duplication Analyseur custom Élision Type précis Indexation multi field
  30. En cas de nouveau mapping : attendre prochaine rotation d'index

    (jour/semaine) réindexer, possible sans interruption avec des alias
  31. Pas possible de faire des recherches très complexes (join, group

    by multiple, …) Plus ouvert avec le récent module d'agrégation en remplacement des facets dans la 1.0
  32. Facette : très puissant mais attention au scope, les OOM

    viennent vite Doc values pour stockage sur disque
  33. Message fourni à elasticsearch sans identifiant, génération par es Sauf

    pour certains cas où on peut déduire l'identifiant de la log (Grid Oracle) et updater le document dans es
  34. 3 nœuds obligatoires sinon : soit pas de HA soit

    split brain 1 nœud peut être simplement master-only
  35. Paramétrage gateway... et discovery.zen... obligatoire Unicast Attention à la version

    du JDK, 7 mais pas forcément la toute dernière version
  36. Pas plus de la moitié de la RAM pour la

    heap Filter cache à paramétrer Fréquence et pause GC à surveiller Lock HEAP dans la RAM (mlockall) Pas swapper Nombre de CPUs important
  37. Remarques diverses Fait ressortir tous les défauts des applications (visible

    dans les logs) de manière criante … et aussi ceux des logs eux mêmes
  38. Multi lignes : plus simple avec délimiteur de début et

    de fin, comme Weblogic Lignes de logs auto porteuses
  39. Décision de : filtrer (groker) côté agent côté serveur logguer

    directement en json ou json_event (format Logstash)
  40. Autres pistes rsyslog tail intelligent, wildcard mais pas multiligne …

    en fait si depuis quelques mois mais très limité
  41. syslog-ng : pas multiligne, ni wildcard sauf dans version premium

    Destination AMPQ pas disponible en premium
  42. syslog-ng : buffer de sortie, lorsqu'il est plein, drop silencieusement

    les logs même si l'input est un fichier, on pourrait arrêter le tail
  43. syslog-ng : logs avec apache tee -a | logger +

    rotation logrotate / apachectl graceful
  44. flume : recherche immédiate dans Hadoop pas évidente … pas

    encore … intéractive déjà possible
  45. Piste intéressante : sink flume avec un split sur elasticsearch

    et HDFS/HBase ou en écoute de HDFS/HBase
  46. Graylog2 • installation ! (ruby, gem …), full Java dernière

    version . • spécifique GELF • Logback en GELF • mongodb nécessaire • mapping figé ? • un seul index (max … récemment) • analitycs idem que Kibana
  47. Heka (Mozilla) • 1ere annonce avril 2013 • inspiré de

    Logstash • Go (performant) • plugin • input/output limité (jeune) • module es depuis l'été 2013 by @tlrx • à surveiller
  48. Autres : • Spring XD avec des flux en |

    • Morphlines de Cloudera • Zlogd de Zumba • Utiliser Solr (Logsene@sematext)
  49. Splunk • très puissant • bien intégré • indexation brute

    • reporting sexy • corrélation / alerte • écosystème C et python • plugin by Splunk ou communauté • pas extensible / intégrable • très cher, ex : 4Go/j = 300 000€
  50. Solutions en mode SAAS • Loggly, New Relic, Papertrail, Logentries

    • ok/nécessaire pour application déjà dans le cloud • non maîtrise • flux extérieur • RSSI pas content • coût assez obscur
  51. Apache Kafka • transport des logs • pour les plateformes

    à très forte charge • throughput impressionnant • > 20 000/s en production et > 200 000/s en consommation sur un portable • scalabilité horizontale • nativement persistant • ok dans un écosystème bigdata
  52. Performance Vitesse de lecture d'un fichier par Logstash Vitesse de

    traitement par Logstash Vitesse d'indexation par elasticsearch sur un PC portable avec des access log Apache
  53. Quelques chiffres ERDF 2 - 3 mois de logs pour

    8-10 env = 25 Go d'index elasticsearch capacité de traitement de 800m/s avec deux serveurs (RabbitMQ, Logstash, elasticsearch) 4000 logs/s pendant les rattrapages un test de performance aux limites de 40 min = 1 000 000 logs
  54. Pour finir Jeunesse relative des produits Problèmes d'intégration (contournés) Introduction

    de nouvelles technologies nécessaire (apprentissage, maîtrise, complexité) Overhead, très limité (Logstash et appender 10- 100ms) et rapport gain/perte OK
  55. Pour finir Automatisation d'installation multi environnements/projets/topologies réussie mais longue Des

    cookbooks chef, modules Puppet, Ansible, deb, RPM existent … si ils correspondent à votre environnement Architecture à scaler pour très grande volumétrie En plein mouvement
  56. Pour finir En plein mouvement Support éditeur désormais possible Beaucoup

    de ressources/documentation de qualité, pas le cas il y a deux ans
  57. Pour finir Centralisation des logs de plusieurs environnements et projets

    Temps de diagnostic des problèmes et des tests de performance réduit drastiquement Développeurs & SNx autonomes
  58. Pour finir Visibilité sur le système, son état Transparence sur

    la qualité « visible depuis les logs » Corrélation à travers toute l'architecture, top 10 erreurs, ... Recherche de reproductibilité de bug facile Statistiques diverses ...