{"id":2311,"date":"2018-07-26T13:37:13","date_gmt":"2018-07-26T11:37:13","guid":{"rendered":"https:\/\/blog.alwaysdata.com\/?p=2311"},"modified":"2020-02-11T15:29:06","modified_gmt":"2020-02-11T14:29:06","slug":"les-logs-personnalises","status":"publish","type":"post","link":"https:\/\/blog.alwaysdata.com\/fr\/2018\/07\/26\/les-logs-personnalises\/","title":{"rendered":"Les logs personnalis\u00e9s"},"content":{"rendered":"<p>Dernier article de notre s\u00e9rie consacr\u00e9e aux changements apport\u00e9s r\u00e9cemment \u00e0&nbsp;notre <em>reverse-proxy<\/em>. Apr\u00e8s le <a href=\"https:\/\/blog.alwaysdata.com\/fr\/2018\/07\/24\/le-pare-feu-applicatif-web-waf\/\">pare-feu applicatif<\/a> et la gestion du <a href=\"https:\/\/blog.alwaysdata.com\/fr\/2018\/07\/25\/le-cache-http\/\">Cache HTTP<\/a>, nous vous pr\u00e9sentons ici la mise en place des <em>logs personnalis\u00e9s<\/em>.<\/p>\n<div class=\"embed-media__giphy\" style=\"width: 65%; padding-bottom: 48%;\"><img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/pyl1E9trnmwdW\/giphy-downsized-large.gif\" alt=\"Log GIF @Giphy\"><\/div>\n<h2>Logs d\u2019<em>upstreams<\/em><\/h2>\n<p>Chez alwaysdata, un <em>upstream<\/em> est le serveur HTTP que notre proxy va interroger dans le but de servir une de vos pages \u00e0&nbsp;un visiteur. L\u2019upstream peut \u00eatre soit votre application si elle sert un serveur HTTP, soit un serveur tiers comme <em>Apache<\/em> ou <em>uWSGI<\/em>.<\/p>\n<p>Tous les messages \u00e9mis par un <em>upstream<\/em> sur les flux standards<span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2311_1('footnote_plugin_reference_2311_1_1');\" onkeypress=\"footnote_moveToReference_2311_1('footnote_plugin_reference_2311_1_1');\"><sup id=\"footnote_plugin_tooltip_2311_1_1\" class=\"footnote_plugin_tooltip_text\">1)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2311_1_1\" class=\"footnote_tooltip\"><\/span><\/span> sont d\u00e9sormais \u00e9crits dans un fichier, accessible dans le r\u00e9pertoire <code>~\/admin\/logs\/sites\/<\/code>. Ces logs offrent aux d\u00e9veloppeurs et DevOps des applications des informations pr\u00e9cieuses sur le monitoring ou le d\u00e9bogage. Dans le cas d\u2019un <em>upstream personnalis\u00e9<\/em> (comme un service Node.js), ils vont vous permettre d\u2019obtenir les lignes de sorties de votre application, et donc vous faciliter la maintenance, comme en cas de bug au d\u00e9marrage.<\/p>\n<p>L\u2019ensemble des messages de tous les <em>upstreams<\/em> d\u2019un compte <em>alwaysdata<\/em> sont \u00e9crits dans le m\u00eame fichier. Chaque upstream est identifiable par son <code>PID<\/code><span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_2311_1('footnote_plugin_reference_2311_1_2');\" onkeypress=\"footnote_moveToReference_2311_1('footnote_plugin_reference_2311_1_2');\"><sup id=\"footnote_plugin_tooltip_2311_1_2\" class=\"footnote_plugin_tooltip_text\">2)<\/sup><\/a><span id=\"footnote_plugin_tooltip_text_2311_1_2\" class=\"footnote_tooltip\"><\/span><\/span>. Cet identifiant est repr\u00e9sent\u00e9 entre crochets apr\u00e8s la date&nbsp;: <code>[14\/Jul\/2018:10:04:21 +0200] [PID]<\/code>. Lorsqu\u2019un upstream est termin\u00e9\u200a\u2014\u200acomme quand il demeure inoccup\u00e9 trop longtemps\u200a\u2014\u200ale PID affich\u00e9 dans le fichier de log sera probablement diff\u00e9rent apr\u00e8s son red\u00e9marrage. Afin de d\u00e9terminer la correspondance entre upstream et PID et vous permettre de vous y&nbsp;retrouver, deux lignes sont \u00e9crites \u00e0&nbsp;la suite&nbsp;:<\/p>\n<pre><code class=\"plain\">[14\/Jul\/2018:10:04:21 +0200] Upstream starting: \/commande\/d\u00e9marrant\/votre\/upstream ...\n[14\/Jul\/2018:10:04:21 +0200] Upstream started PID: 12345\n<\/code><\/pre>\n<h2>Logs d\u2019acc\u00e8s<\/h2>\n<p>Vous avez d\u00e9sormais la possibilit\u00e9 de choisir le nom commun aux fichiers de logs d\u2019acc\u00e8s HTTP. Pour effectuer cette modification, rendez-vous dans <em>Sites \u2192 Modification \u2192 Logs<\/em>.<\/p>\n<p><img decoding=\"async\" width=\"1000\" height=\"665\" class=\"aligncenter size-full wp-image-2497 embed-media__ad__medium\" src=\"https:\/\/blog.alwaysdata.com\/wp-content\/uploads\/2018\/07\/screenshot-ad-ui-logs.fr_.png\" alt=\"Capture d'\u00e9cran de l'interface d'administration pourla configuration des logs par site\" srcset=\"https:\/\/blog.alwaysdata.com\/wp-content\/uploads\/2018\/07\/screenshot-ad-ui-logs.fr_.png 1000w, https:\/\/blog.alwaysdata.com\/wp-content\/uploads\/2018\/07\/screenshot-ad-ui-logs.fr_-300x200.png 300w, https:\/\/blog.alwaysdata.com\/wp-content\/uploads\/2018\/07\/screenshot-ad-ui-logs.fr_-768x511.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\"><\/p>\n<p>Vous avez la possibilit\u00e9 de changer le format des lignes de sorties. Si vous devez traiter ces fichiers automatiquement via un <em>parser<\/em> ou un script, le format des logs d\u2019acc\u00e8s personnalis\u00e9 vous permet d\u2019obtenir des fichiers dont le format sera compatible avec votre flux de donn\u00e9es. Ce champ accepte aussi bien les noms de variables entre accolades <code>{}<\/code>, qui seront substitu\u00e9es \u00e0&nbsp;leurs valeurs lors de la sortie&nbsp;; que les caract\u00e8res libres. La syntaxe utilis\u00e9e et les variables disponibles sont indiqu\u00e9es dans notre <a href=\"https:\/\/help.alwaysdata.com\/fr\/sites\/formater-les-logs-http\/\">page de documentation des logs<\/a>.<\/p>\n<p>Le format par d\u00e9faut est le suivant&nbsp;:<\/p>\n<pre><code class=\"plain\">{request_hostname} {client_ip} - - [{completion_date:{%d\/%b\/%Y:%H:%M:%S %z}}] {request} {status} {response_size} {referer} {user_agent}\n<\/code><\/pre>\n<p>En sortie, cette cha\u00eene retourne le r\u00e9sultat suivant&nbsp;:<\/p>\n<pre><code class=\"plain\">sandbox.alwaysdata.net 127.0.0.1 - - [16\/Jul\/2018:12:04:07 +0200] \"GET \/wp\/ HTTP\/1.1\" 200 55380 \"-\" \"curl\/7.47.0\"\n<\/code><\/pre>\n<p>Pour personnaliser le format, en sp\u00e9cifiant le protocole utilis\u00e9, le temps \u00e9coul\u00e9 pour r\u00e9pondre \u00e0&nbsp;la requ\u00eate et quelques cha\u00eenes de caract\u00e8res, vous pourriez utiliser la syntaxe de formatage suivante&nbsp;:<\/p>\n<pre><code class=\"plain\">[{completion_date:{%d\/%b\/%Y:%H:%M:%S %z}}] protocole : {protocol} {request} dur\u00e9e = {duration} secondes\n<\/code><\/pre>\n<p>Pour obtenir la sortie suivante&nbsp;:<\/p>\n<pre><code class=\"plain\">[16\/Jul\/2018:12:04:07 +0200] protocole : \"https\" \"GET \/wp\/ HTTP\/1.1\" dur\u00e9e = 0.134 secondes\n<\/code><\/pre>\n<hr>\n<p>Avec des lignes de logs d\u2019acc\u00e8s compl\u00e8tement personnalisables, ainsi qu\u2019un debug d\u2019upstream facilit\u00e9, nous esp\u00e9rons vous faciliter encore la mise en production et la surveillance de vos services sur les plateformes d\u2019<em>alwaysdata<\/em>.<\/p>\n<p>Ce billet cl\u00f4t donc cette s\u00e9rie sur les modifications li\u00e9es au <em>proxy<\/em> de notre infrastructure. Nous construisons ce service pour vous et avec vous, et nous sommes toujours \u00e0&nbsp;votre \u00e9coute. N\u2019h\u00e9sitez pas \u00e0&nbsp;nous laisser un commentaire ou \u00e0&nbsp;nous contacter si certaines fonctionnalit\u00e9s vous manquent&nbsp;!<\/p>\n<div class=\"embed-media__giphy\" style=\"width: 65%; padding-bottom: 36%;\"><img decoding=\"async\" src=\"https:\/\/media.giphy.com\/media\/3og0IG0vkIQpuJoLvO\/giphy.gif\" alt=\"jin yang handshake GIF by Silicon Valley @Giphy\"><\/div>\n<div class=\"speaker-mute footnotes_reference_container\"> <div class=\"footnote_container_prepare\"><p><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_label pointer\" onclick=\"footnote_expand_collapse_reference_container_2311_1();\">Notes<\/span><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_collapse_button\" style=\"display: none;\" onclick=\"footnote_expand_collapse_reference_container_2311_1();\">[<a id=\"footnote_reference_container_collapse_button_2311_1\">+<\/a>]<\/span><\/p><\/div> <div id=\"footnote_references_container_2311_1\" style><table class=\"footnotes_table footnote-reference-container\"><caption class=\"accessibility\">Notes<\/caption> <tbody> \n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2311_1('footnote_plugin_tooltip_2311_1_1');\"><a id=\"footnote_plugin_reference_2311_1_1\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>1<\/a><\/th> <td class=\"footnote_plugin_text\"><code>stdout<\/code> et <code>stderr<\/code><\/td><\/tr>\n\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\" onclick=\"footnote_moveToAnchor_2311_1('footnote_plugin_tooltip_2311_1_2');\"><a id=\"footnote_plugin_reference_2311_1_2\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">\u2191<\/span>2<\/a><\/th> <td class=\"footnote_plugin_text\"><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Identifiant_de_processus\">Process IDentifier<\/a><\/td><\/tr>\n\n <\/tbody> <\/table> <\/div><\/div><script type=\"text\/javascript\"> function footnote_expand_reference_container_2311_1() { jQuery('#footnote_references_container_2311_1').show(); jQuery('#footnote_reference_container_collapse_button_2311_1').text('\u2212'); } function footnote_collapse_reference_container_2311_1() { jQuery('#footnote_references_container_2311_1').hide(); jQuery('#footnote_reference_container_collapse_button_2311_1').text('+'); } function footnote_expand_collapse_reference_container_2311_1() { if (jQuery('#footnote_references_container_2311_1').is(':hidden')) { footnote_expand_reference_container_2311_1(); } else { footnote_collapse_reference_container_2311_1(); } } function footnote_moveToReference_2311_1(p_str_TargetID) { footnote_expand_reference_container_2311_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } } function footnote_moveToAnchor_2311_1(p_str_TargetID) { footnote_expand_reference_container_2311_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } }<\/script>","protected":false},"excerpt":{"rendered":"<p>Besoin de personnaliser vos logs d\u2019acc\u00e8s ou de debug&nbsp;? Nous avons pens\u00e9 \u00e0&nbsp;\u00e7a aussi&nbsp;!<\/p>\n","protected":false},"author":10,"featured_media":2471,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"wp_typography_post_enhancements_disabled":false,"footnotes":""},"categories":[230],"tags":[242,167,244,225],"class_list":["post-2311","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-fr","tag-core-fr","tag-deploiement-fr","tag-proxy-fr","tag-mises-a-jour-fr"],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts\/2311","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/comments?post=2311"}],"version-history":[{"count":0,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/posts\/2311\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/media\/2471"}],"wp:attachment":[{"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/media?parent=2311"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/categories?post=2311"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.alwaysdata.com\/fr\/wp-json\/wp\/v2\/tags?post=2311"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}