Your SlideShare is downloading. ×
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Gestion des logs sur une plateforme web
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Gestion des logs sur une plateforme web

941

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
941
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. GESTION DES LOGS SUR UNE PLATEFORME WEB
  • 2. AU MENU Les logs , pourquoi faire ? Logger en java : comment, avec quoi Coté système : syslog and friends Centralisation des logs : les outils récents
  • 3. APPROCHE TRADITIONNELLE <ab>@l,vu pue ntoe lslg dn ~tma/tf/os? bru al os ovz etyr e os as /octsuflg <ab>o aueciia bru n n rtcl <e> hm,j rgre dv mk e ead
  • 4. POURQUOI ON PARLE PEU DES LOGS Pas exactement glamour Difficile à vendre aux clients, et donc au management
  • 5. POURQUOI IL FAUDRAIT EN PARLER Connaissance de l'usage d'une application Connaissance de l'usage d'une plateforme Détection d'anomalies Et bien sûr debuggage
  • 6. CE QU'ON ATTEND D'UN SYSTÈME DE LOGS Collecte de messages issus de différentes sources Normalisation des messages issus de ces sources Accessibilité des messages Simplification de la recherche d'information
  • 7. CE QU'ON N'ATTEND PAS FORCÉMENT D'UN SYSTÈME DE LOGS Archivage pour raison légales Stockage infini de fichiers
  • 8. MAIS QU'EST-CE QU'UNE LOG ? Un message émis par une application (donc par un développeur) Qui / Quand / Où / Quoi
  • 9. LOGGER EN JAVA
  • 10. AU COMMENCEMENT ÉTAIT LOG4J Créé par Ceki Gülcü Utilisé depuis 1823
  • 11. PUIS VINRENT... jdk-logging Introduction d'un framework de logging dans le JDK 1.4 Peu de succès : API limitée, log levels non standards commons-logging Tentative de création d'une facade pour unifier des implémentations différentes Succès mitigé
  • 12. POUR EN ARRIVER À SLF4J ET LOGBACK Créés par ... Ceki Gülcü slf4j Successeur de commons-logging Bindings pour les autres frameworks logback Successeur de log4j
  • 13. LES RAISONS DE CHOISIR SLF4J Approche "facade" Bindings pour une intégration facile sfjaijr #fcd l4-p.a aae lgakcascjr#ipeetto obc-lsi.a mlmnain lgakcr.a #ipeetto obc-oejr mlmnain jloe-l4.a #rmlc cmoslgigjr c-vrsfjjr epae omn-ogn.a lgjoe-l4.a #rmlc lgj o4-vrsfjjr epae o4 jlt-l4 #big jv.tllgig u-osfj rde aaui.ogn
  • 14. LES RAISONS DE CHOISIR LOGBACK Plus performant Semble avoir une meilleure gestion de la concurrence Configuration similaire à log4j Format des messages à la StringFormat
  • 15. LES RAISONS DE CHOISIR LOGBACK Reload des configurations Modularisation via des includes, des variables... Gestion des conditions (if, else) Gestion de la rotation Gestion de la compression (bof)
  • 16. LOGBACK : MODULARISATION DES CONFIGS <nldd icue> <mCniuao/ jxofgrtr> <rprynm=pten poet ae"atr" vle"{rgn au=$oii} %{dM/yyH:ms.S} dd/Myy-Hm:sSS [Xpd][XppesoI} %{i} %{hSsind] [XueI} [XuiuI} %{srd] %{nqed] [XfntoaI} %{ucinld] [tra] %hed %ee %:L-%s%" lvl C% mgn soe =cnet/ cp "otx"> <nld rsuc=lgakapne-osl.m"> icue eore"obc-pedrcnoexl/ <nld rsuc=lgakapne-ryo.m"> icue eore"obc-pedrgalgxl/ <nld rsuc=lgakapne-iexl/ icue eore"obc-pedrfl.m"> <nld rsuc=lgakcso-ogr.m"> icue eore"obc-utmlgesxl/ <nld rsuc=lgakro.m"> icue eore"obc-otxl/ <icue> /nldd
  • 17. LOGBACK : GESTION DE CONDITIONS <nldd icue> <fcniin"rpry"sFlLge".qasgoeae"re)> i odto=poet(ueieogr)eulInrCs(tu"" <hn te> <otlvl"NO> ro ee=IF" <pedrrfrf"IE> apne-e e=FL" <pedrrfrf"EF> apne-e e=GL" <apne-e>/pedrrf<ro> /pedrrf<apne-e>/ot <te> /hn <le es> <otlvl"NO> ro ee=IF" <pedrrfrf"TOT> apne-e e=SDU" <apne-e>/ot /pedrrf<ro> <es> /le <i> /f <icue> /nldd
  • 18. INTERLUDE QUELQUES BONNES PRATIQUES
  • 19. NIVEAU DE LOG CHOISIR LE BON LOG LEVEL N'EST PAS UNE OPTION / tu soy / re tr lge.eu(Smti'vr bdhpee" ogrdbg"oehn ey a apnd)
  • 20. CONTENU DU MESSAGE Donner un maximum de contexte : identifiants, contenu des variables Le MDC est là pour automatiser ça #fle o itretr itr r necpo Srn ueI =gtsrdoeo(; tig srd eUeISmhw) MCpt"srd,ueI) D.u(ueI" srd; #lgakpten obc atr %{srd XueI}
  • 21. CONTENU DU MESSAGE Eviter les informations sensibles Eviter les codes d'erreur ésotériques lge.ro(Err00"; ogrerr"ro 04) Ne pas oublier la stacktrace lge.ro(Errwiedigsuf,e; ogrerr"ro hl on tf" ) #v s lge.ro() ogrerre;
  • 22. PERFORMANCE Eviter les logs dans des boucles Conditionner les logs si construction de message complexe i (ogriDbgnbe(){ f lge.seuEald) lge.eu(Pitn {,{ ad{" vle,vle,vle) ogrdbg"rnig } } n }, au1 au2 au3; }
  • 23. COMME TOUT CODE, LES LOGS SONT À REFACTORER Après recette en dev Après passage en prod
  • 24. LE DÉVELOPPEUR EST LE PREMIER RESPONSABLE DE LA QUALITÉ DES LOGS
  • 25. LES LOGS SYSTÈME Messages système avec syslog Nettoyage avec logrotate
  • 26. SYSLOG Un protocole créé dans les années 80 pour gérer les logs sendmail, puis unix Utilisé pour écrire des logs sur disque, mais aussi pour envoyer ces logs à d'autres machines
  • 27. LES COMPOSANTES D'UN MESSAGE SYSLOG Timestamp Message Hostname Facility : le composant système qui a envoyé le message (0 : kernel, 2 : mail, 16: local0...). Figé Severity : de 0 (Emergency) à 7 (Debug) PRI (8 * Facility + Severity = useless) Le pid du process Limité à de l'ASCII sur 1024 bytes
  • 28. EXEMPLE DE MESSAGE SYSLOG <8 CO Ot41:70 spotdg-e2189--(ot CD(c /& rnprs7> RN c 41:1 upr-iidv 30 ro) M d & u-at rpr /t/rnhul) eot ecco.ory
  • 29. SYSLOG AND FRIENDS Les limitations du syslog originel ont donné lieu à des implémentations concurrentes D'abord syslog-ng Puis rsyslog
  • 30. EXEMPLE DE CONFIGURATION RSYSLOG /t/sso.of ecrylgcn $oLa iusc #poie spotfrlclsse lgig Mdod mxok rvds upr o oa ytm ogn $oLa iko Mdod mlg #poie kre lgigspot(rvosydn b rlg) rvds enl ogn upr peiul oe y kod #Mdodimr #poie -MR- msaecpblt $oLa mak rvds -AK- esg aaiiy #poie UPsso rcpin rvds D ylg eeto #Mdodiup $oLa md #UPevru 54 $DSreRn 1 $cinieealTmlt RYLGTaiinlieomt AtoFlDfutepae SSO_rdtoaFlFra $nldCni /t/sso./.of Icueofg ecrylgd*cn
  • 31. EXEMPLE DE CONFIGURATION RSYSLOG /t/sso./0dfutcn ecrylgd5-eal.of # #Frtsm sadr lgfls Lgb fclt. is oe tnad o ie. o y aiiy # at,uhrv* uhatpi. /a/o/uhlg vrlgat.o **at,uhrvnn .;uhatpi.oe -vrlgsso /a/o/ylg #rn* co. /a/o/rnlg vrlgco.o #amn* deo. -vrlgdeo.o /a/o/amnlg kr. en* -vrlgkr.o /a/o/enlg #p. lr* -vrlglrlg /a/o/p.o mi. al* -vrlgmi.o /a/o/allg #sr* ue. -vrlgue.o /a/o/srlg
  • 32. EXEMPLE DE CONFIGURATION RSYSLOG /t/sso./9galg.of ecrylgd9-ryo2cn $epaeGalgOtu,<PI>%P-AE %IETM%%OTAE tmlt ryo2upt"%R% APNM% TMSAP HSNM% %RCD %SI%%TUTRDDT%%s%n POI% MGD SRCUE-AA mg" $cinowrDfutepaeGalgOtu **@o-olco.yoanlcl54 AtoFradealTmlt ryo2upt . lgcletrmdmi.oa:1
  • 33. LOGROTATE
  • 34. OBJECTIFS DE LOGROTATE Ne pas laisser les logs devenir trop volumineuses Ne pas laisser s'accumuler les archives de logs
  • 35. PRINCIPE DE LOGROTATE Le script / t / r n d i y l g o a eest exécuté ecco.al/ortt tous les jours Et traite par défaut toutes les configurations présentes dans /t/ortt. eclgoaed
  • 36. EXEMPLE DE CONFIGURATION /t/ortt./pce eclgoaedaah2 /a/w//os*lg/a/o/pce/lg { vrww*lg/.o vrlgaah2*o diy al msigk isno dtet aex rtt 1 oae 0 mxg 1 aae 0 cmrs opes iepy fmt cet 64ro am rae 4 ot d saesrps hrdcit psrtt otoae i [- /a/u/pce.i ] te f f vrrnaah2pd ; hn /t/ntdaah2rsat>/e/ul ecii./pce etr dvnl f i edcit nsrp }
  • 37. LIMITES DE LOGROTATE Système de datation pas très souple Pas le meilleur ami des applications java
  • 38. LA CENTRALISATION DES LOGS Récolter / transformer : logstash Stocker / afficher : graylog2, kibana, elasticsearch
  • 39. LOGSTASH UN PIPELINE DE TRAITEMENT D'ÉVÈNEMENTS COMPOSÉ : d'inputs : f l , s s o ... ie ylg de filtres et codecs : m l i i e g o , m t t ... utln, rk uae d'outputs : g a l g e a t c e r h l b a o r y o , l s i s a c , i r t ... Cela donne un système extrêmement souple
  • 40. LOGSTASH : EXEMPLE D'INPUT Tail d'un fichier sur disque fl { ie tp = "yaah-ces ye > m-pceacs" pt = [/a/o/pce/yacs.o" ah > "vrlgaah2m-ceslg] ecue= [*g" xld > ".z] dbg= tu eu > re tg = [acs' as > 'ces] }
  • 41. LOGSTASH : EXEMPLE DE FILTRE Structuration d'un message avec g o rk go { rk tg = [acs' as > 'ces] #121..4-[9Ot21:64:9+20|yevrf| 7.902||0/c/020:80 00]msre.r #43PS /pw/2gsinar HT/.|0|18570||12 4|OT d/sv/etonie TP112034|495-124 pten= "{PCEACS_ATR} atr > %AAH_CESPTEN" pten_i = "dt/t/osahaetpten." atrsdr > /aaeclgts/gn/atrsd } Définition d'une pattern AAH_CESPTEN%COEBAKT%PP}{OTcretsre}{IE PCEACS_ATR {LS_RCE}{IE%HS:urn_evr%PP} %ITpr}{IE%WR:eb %ETNEUIAHAA_RSA:eus} {N:ot%PP}{ODvr} {XEDDRPTPRMO_TRrqet HT/{UBRhtvrin%PP}{AHO_UBRrsos}{IE TP%NME:tpeso}{IE%DS_RNME:epne%PP} %DS_RNME:ye}{IE%DS_RNME:eus_ie {AHO_UBRbts%PP}{AHO_UBRrqettm} %PP}{AHO_UBRttlrqettm}{IE%DS_RWR:hSsind {IE%DS_RNME:oa_eus_ie%PP}{AHO_ODppesoI} %PP}{AHO_ODpd%PP}{NQEI:nqed {IE%DS_RWR:i}{IE%UIU_DuiuI}
  • 42. LOGSTASH : EXEMPLE DE FILTRE Suppression d'un message avec g e rp ge { rp tg as = [acs' > 'ces] ngt = tu eae > re mth = ["msae,"iae/ ] ac > @esg" /mgs" }
  • 43. LOGSTASH : EXEMPLE DE FILTRE Modification d'un message avec m t t uae mtt { uae tg as gu sb } = [ao_in] > 'nnsg' = [ > "msae, @esg" "m/r?in(09-AZ+" /yulsg=[-az-]), "m/r?in<RVT> /yulsg=PIAE" ]
  • 44. LOGSTASH : EXEMPLE DE FILTRE Recomposition d'une stacktrace avec m l i i e utln mliie{ utln tp = "yjv-ye ye > m-aatp" pten= "" atr > ^s wa = "rvos ht > peiu" }
  • 45. LOGSTASH : EXEMPLE D'OUTPUT Envoi des logs vers graylog2 et vers la console gl { ef hs = "ylgcletrcm ot > m-o-olco.o" tg = [acs' as > 'ces] lvl= "no ee > if" } sdu {dbg= tu } tot eu > re
  • 46. LOGSTASH : LES LIMITES Refactoring fréquents, donc upgrades douloureux Consommation CPU et mémoire
  • 47. GRAYLOG2 UN SYSTÈME EN DEUX PARTIES graylog2-server, un collecteur écrit en java graylog2-web, une webapp rails Le tout se base sur le format GELF (attention gros changements à venir)
  • 48. LE FORMAT GELF UNE VERSION ENRICHIE ET SOUPLE DU FORMAT SYSLOG { "eso" "." vrin: 10, "ot:"w1, hs" ww" "hr_esg" "hr msae, sotmsae: Sot esg" "ulmsae:"akrc hrmr suf, fl_esg" Bctae eennoe tf" "ietm" 19892.1, tmsap: 2199842 "ee" 1 lvl: , "aiiy:"amn-akn" fclt" pyetbced, "ie:"vrwwsmfl.b, fl" /a/w/oeier" "ie:36 ln" 5, "ue_d:4, _sri" 2 "smtiges" "o" _oehn_le: fo }
  • 49. GRAYLOG2-SERVER UN AGENT JAVA QUI : récolte les logs qui lui sont envoyées (par logstash, une appli java...) les stocke dans une instance elasticsearch
  • 50. GRAYLOG2-WEB UNE WEBAPP QUI : affiche tous les messages permet une recherche multi-critères dispose d'un mécanisme de permissions permet d'explorer les données avec des requêtes libres
  • 51. VU DE HAUT CA DONNE © http://www.graylog2.org/
  • 52. GRAYLOG2-WEB : LISTE DES MESSAGES
  • 53. GRAYLOG2-WEB : DÉTAIL D'UN MESSAGE
  • 54. GRAYLOG2-WEB : CONFIGURATION LOGBACK <pedrnm=GL"cas"emoa.obcgl.efpedr> apne ae"EF ls=m.ocrlgakefGlApne" <aiiylgakgl<fclt> fclt>obc-ef/aiiy <ryo2evrot$galgot<galgsrehs> galgsrehs>{ryoHs}/ryo2evrot <ryo2evrot121/ryo2evrot galgsrepr>20<galgsrepr> <slgenm>re/slgenm> ueograetu<ueograe <stranm>re/stranm> uehedaetu<uehedae <ryo2evreso>..<galgsrevrin galgsrevrin096/ryo2evreso> <hntrsod10<cukhehl> cukhehl>00/hntrsod <esgpten%%E<msaeatr> msaeatr>mrx/esgpten <diinlil>i:pd/diinlil> adtoafedpd_i<adtoafed <diinlil>rgn_rgn/diinlil> adtoafedoii:oii<adtoafed <diinlil>srd_srd/diinlil> adtoafedueI:ueI<adtoafed <diinlil>nqed_nqed/diinlil> adtoafeduiuI:uiuI<adtoafed <diinlil>hSsind_hSsind/diinlil> adtoafedppesoI:ppesoI<adtoafed <apne> /pedr
  • 55. GRAYLOG2-WEB : LES LIMITES Peu de problèmes applicatifs mais... Migrations infernales Changements technologiques fréquents Recherche textuelle parfois déroutante pour l'utilisateur
  • 56. EXEMPLE D'APPLICATION : SUIVI D'UNE REQUÊTE On veut pouvoir suivre une requête dans tous les système de l'application On va donc générer un identifiant unique pour cette requête, et le faire passer de couche en couche RqetedrstUIU_D%UIU_De eusHae e NQEI {NQEI} 122.0.2|7.4011[4Ot21:90:0+20| 7.31110122..1|2/c/030:52 00] scr.iiot.oa|4|E /sruigclbc=o.otrstaa euedgpselcl43GT j/otn?alakfsRue.eDt HT/.|0|1|36|36|hbqeh379vgeo1 TP11205114714733ug9sibbvvbt| 238UjswZQAIRcAA 57|mGKYWAB9tAAV
  • 57. EXEMPLE D'APPLICATION : SUIVI D'UNE REQUÊTE Coté applicatif java, il faut pouvoir recevoir cet id sous forme de header http, ou ampq / AQ / MP MCpt"NQEI" msaegtedr(.e(UIU_D,Srn.ls); D.u(UIU_D, esg.eHaes)gt"NQEI" tigcas) / o / u / HT / TP MCptMCUIU,rqetgtedr"NQEI") D.u(D_NQE eus.eHae(UIU_D); Mais aussi le faire passer sous forme de header Msaerprispoete =nwMsaerpris) esgPoete rpris e esgPoete(; poete.eHae(UIU_D,MCgt"NQEI") rprisstedr"NQEI" D.e(UIU_D); dgpsebthidxr2/021-03:404[24][5km25v1vrr2u5 iiot-ac-nee 41/031:85.2 301 udkks1s2h30jo] [27d7f7838503de13 [mcaYWAHpeAAu f63dbdfa9e5fbe23] UjnwZQAADIAA] [d1a27c082b47ac17 [ipesnTsEeuo-]IF 6560f84b9e9273a0] SmlAycakxctr1 NO cmdgpsebthcr.o luce.eRlcrcnJbanhreoao:1o.iiot.ac.oejb anhrNweiTaigoLuceDcrtr5 Apnigt Nwei tascinteprmtr=301 pedn o eRlc rnato h aaee 24
  • 58. (TENTATIVE DE DÉMO GRAYLOG2)
  • 59. CENTRALISATION DES LOGS : LES AUTRES OPTIONS SAAS Systèmes de collecte Systèmes de visualisation
  • 60. SAAS : LES ACTEURS Splunk Papertrail Loggly
  • 61. COLLECTE : FLUME “Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.” Créé chez Cloudera, donné à la fondation Apache Orienté big data Beaucoup plus souple que scribe
  • 62. COLLECTE : FLUENTD “Fluentd is a fully free and fully open-source log collector that instantly enables you to have a ‘Log Everything’ architecture with 125+ types of systems. Fluentd treats logs as JSON, a popular machine-readable format. It is written primarily in C with a thin-Ruby wrapper that gives users flexibility.” Créé chez TreasureData Assez proche de logstash Beaucoup d'inputs / outputs, peu de filtres
  • 63. VISUALISATION : KIBANA Projet indépendant, passé depuis sous l'ombrelle elasticsearch Se branche sur n'importe quel index elasticsearch Une option à suivre, malgré quelques lacunes de sécurité
  • 64. QUESTIONS ?

×