<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://b-ds.fr/atom.xml" rel="self" type="application/atom+xml" /><link href="https://b-ds.fr/" rel="alternate" type="text/html" /><updated>2026-06-04T07:37:25+02:00</updated><id>https://b-ds.fr/atom.xml</id><title type="html">Benjamin Dos Santos</title><author><name>Benjamin Dos Santos</name></author><entry><title type="html">Elasticsearch : drainer un membre du cluster</title><link href="https://b-ds.fr/log/drainer-un-noeud-elasticsearch/" rel="alternate" type="text/html" title="Elasticsearch : drainer un membre du cluster" /><published>2016-10-28T00:00:00+02:00</published><updated>2016-10-28T00:00:00+02:00</updated><id>https://b-ds.fr/log/drainer-un-noeud-elasticsearch</id><content type="html" xml:base="https://b-ds.fr/log/drainer-un-noeud-elasticsearch/"><![CDATA[<p>Parfois il peut être intéressant de “drainer” un membre de son cluster
Elasticsearch de toutes ses données, avant de réaliser une maintenance planifiée
par exemple.</p>

<p>Vous pouvez réaliser cette action en vous basant sur l’IP du noeud, son nom ou
hostname :</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl -XPUT 'localhost:9200/_cluster/settings?pretty' -d '{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  }
}'

curl -XPUT 'localhost:9200/_cluster/settings?pretty' -d '{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.*"
  }
}'

curl -XPUT 'localhost:9200/_cluster/settings?pretty' -d '{
  "transient" : {
    "cluster.routing.allocation.exclude._name" : "els01"
  }
}'

curl -XPUT 'localhost:9200/_cluster/settings?pretty' -d '{
  "transient" : {
    "cluster.routing.allocation.exclude._hostname" : "els01.prd.sfo.domain.tld"
  }
}'
</code></pre></div></div>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Admin Sys" /><summary type="html"><![CDATA[Parfois il peut être intéressant de “drainer” un membre de son cluster Elasticsearch de toutes ses données, avant de réaliser une maintenance planifiée par exemple.]]></summary></entry><entry><title type="html">Optimiser la configuration d’une carte LSI pour un RAID SSD</title><link href="https://b-ds.fr/log/configurer-carte-lsi-raid-ssd/" rel="alternate" type="text/html" title="Optimiser la configuration d’une carte LSI pour un RAID SSD" /><published>2016-07-13T00:00:00+02:00</published><updated>2016-07-13T00:00:00+02:00</updated><id>https://b-ds.fr/log/configurer-carte-lsi-raid-ssd</id><content type="html" xml:base="https://b-ds.fr/log/configurer-carte-lsi-raid-ssd/"><![CDATA[<p>D’après les recommandations LSI, les paramètres à utiliser pour tirer les
meilleurs performances d’un RAID SSD sont :</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Read Cache: DISABLED
Write Cache: WriteThrough
IO: DIRECT
</code></pre></div></div>

<p>En pratique :</p>

<h3 id="activer-le-writethrough">Activer le <code class="language-plaintext highlighter-rouge">WriteThrough</code></h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MegaCli <span class="nt">-LDSetProp</span> <span class="nt">-WT</span> <span class="nt">-Immediate</span> <span class="nt">-Lall</span> <span class="nt">-aAll</span>
</code></pre></div></div>

<h3 id="désactiver-readahead--read-caching">Désactiver <code class="language-plaintext highlighter-rouge">ReadAhead / Read Caching</code></h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MegaCli <span class="nt">-LDSetProp</span> <span class="nt">-NORA</span> <span class="nt">-Immediate</span> <span class="nt">-Lall</span> <span class="nt">-aAll</span>
</code></pre></div></div>

<h3 id="activer-direct-io">Activer <code class="language-plaintext highlighter-rouge">Direct IO</code></h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>MegaCli <span class="nt">-LDSetProp</span> <span class="nt">-Direct</span> <span class="nt">-Immediate</span> <span class="nt">-Lall</span> <span class="nt">-aAll</span>
</code></pre></div></div>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Admin Sys" /><summary type="html"><![CDATA[D’après les recommandations LSI, les paramètres à utiliser pour tirer les meilleurs performances d’un RAID SSD sont :]]></summary></entry><entry><title type="html">MegaCli : commandes utiles</title><link href="https://b-ds.fr/log/megacli/" rel="alternate" type="text/html" title="MegaCli : commandes utiles" /><published>2016-04-19T00:00:00+02:00</published><updated>2016-04-19T00:00:00+02:00</updated><id>https://b-ds.fr/log/megacli</id><content type="html" xml:base="https://b-ds.fr/log/megacli/"><![CDATA[<p><code class="language-plaintext highlighter-rouge">MegaCli</code> est probablement l’un des pires utilitaires CLI jamais écrit. Voici
quelques commandes très utiles.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Show status</span>
MegaCli <span class="nt">-AdpAllInfo</span> <span class="nt">-aAll</span>

<span class="c"># Get physical drive info</span>
MegaCli <span class="nt">-PDList</span> <span class="nt">-aAll</span>

<span class="c"># Get virtual disk info</span>
MegaCli <span class="nt">-LDInfo</span> <span class="nt">-Lall</span> <span class="nt">-aAll</span>

<span class="c"># Display configuration</span>
MegaCli <span class="nt">-CfgDsply</span> <span class="nt">-aAll</span>

<span class="c"># Dump eventlog events to file 'events' and open it</span>
MegaCli <span class="nt">-AdpEventLog</span> <span class="nt">-GetEvents</span> <span class="nt">-f</span> events <span class="nt">-aAll</span> <span class="o">&amp;&amp;</span> less events

<span class="c"># Disable autoLearnMode for the RAID battery</span>
<span class="nb">echo</span> <span class="s2">"autoLearnMode=1"</span> <span class="o">&gt;</span> tmp.txt <span class="se">\</span>
  <span class="o">&amp;&amp;</span> MegaCli <span class="nt">-AdpBbuCmd</span> <span class="nt">-SetBbuProperties</span> <span class="nt">-f</span> tmp.txt <span class="nt">-a0</span>

<span class="c"># Disable cache when battery broken</span>
MegaCli <span class="nt">-LDSetProp</span> NoCachedBadBBU <span class="nt">-LALL</span> <span class="nt">-aALL</span>
</code></pre></div></div>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Admin Sys" /><summary type="html"><![CDATA[MegaCli est probablement l’un des pires utilitaires CLI jamais écrit. Voici quelques commandes très utiles.]]></summary></entry><entry><title type="html">Warmup du cache Varnish</title><link href="https://b-ds.fr/log/warmup-cache-varnish/" rel="alternate" type="text/html" title="Warmup du cache Varnish" /><published>2014-10-19T00:00:00+02:00</published><updated>2014-10-19T00:00:00+02:00</updated><id>https://b-ds.fr/log/warmup-cache-varnish</id><content type="html" xml:base="https://b-ds.fr/log/warmup-cache-varnish/"><![CDATA[<p><em>Warmup</em> votre cache peut être indispensable afin d’éviter un léger pic
de charge inutile lorsque vous dirigez du trafic sur une instance fraichement
<em>spawn</em>.</p>

<p>La première solution se base sur le <code class="language-plaintext highlighter-rouge">sitemap</code> de votre site. Simple,
probablement <em>Quick &amp; Dirty</em>, mais efficace :</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c">#!/usr/bin/env bash</span>

<span class="k">while </span><span class="nb">test</span> <span class="nt">-n</span> <span class="s2">"</span><span class="nv">$1</span><span class="s2">"</span><span class="p">;</span> <span class="k">do
  case</span> <span class="nv">$1</span> <span class="k">in</span>
    <span class="nt">--sitemap</span><span class="p">|</span><span class="nt">-s</span><span class="p">)</span>
      <span class="nv">sitemap</span><span class="o">=</span><span class="nv">$2</span>
      <span class="nb">shift</span>
      <span class="p">;;</span>
    <span class="nt">--http_verb</span><span class="p">|</span><span class="nt">-h</span><span class="p">)</span>
      <span class="nv">http_verb</span><span class="o">=</span><span class="nv">$2</span>
      <span class="nb">shift</span>
      <span class="p">;;</span>
    <span class="k">*</span><span class="p">)</span>
      <span class="nb">echo</span> <span class="s2">"Unknown argument: </span><span class="nv">$1</span><span class="s2">"</span>
      <span class="nb">exit </span>3
      <span class="p">;;</span>
  <span class="k">esac</span>
  <span class="nb">shift
</span><span class="k">done

</span><span class="nv">tmpfile</span><span class="o">=</span><span class="si">$(</span><span class="nb">mktemp</span> /tmp/<span class="si">$(</span><span class="nb">basename</span> <span class="nv">$0</span><span class="si">)</span>.XXXXXX<span class="si">)</span>
<span class="nv">sitemap</span><span class="o">=</span><span class="k">${</span><span class="nv">sitemap</span>:<span class="p">=</span><span class="s1">'http://myawesometenmillionsvisitorsmediawebsite.tld/sitemap.xml'</span><span class="k">}</span>
<span class="nv">http_verb</span><span class="o">=</span><span class="k">${</span><span class="nv">http_verb</span>:<span class="p">=</span><span class="s1">'GET'</span><span class="k">}</span>

curl <span class="nt">--silent</span> <span class="nv">$sitemap</span> | <span class="nb">grep</span> <span class="se">\&lt;</span>loc<span class="se">\&gt;</span> | <span class="nb">sed</span> <span class="s1">'s/.*&lt;loc&gt;//'</span> | <span class="nb">sed</span> <span class="s1">'s|&lt;/loc&gt;||'</span> <span class="se">\</span>
  <span class="o">&gt;&gt;</span> <span class="nv">$tmpfile</span>

<span class="nb">cat</span> <span class="nv">$tmpfile</span> | xargs <span class="nt">-I</span> % <span class="nt">-n</span> 1 <span class="nt">-P</span> 16 curl <span class="nt">-X</span><span class="nv">$http_verb</span> %
<span class="nb">rm</span> <span class="nv">$tmpfile</span></code></pre></figure>

<p>À noter que vous pouvez également vous en servir pour <em>PURGE</em> le cache en
modifiant le verbe HTTP.</p>

<p>La seconde méthode consiste à utiliser <a href="https://www.varnish-software.com/blog/warming-varnish-cache-varnishreplay">varnishreplay</a> :</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">ssh www.varnish-cache.org varnishlog <span class="nt">-w</span> - | varnishreplay <span class="nt">-a</span> localhost:6081 <span class="nt">-r</span> -</code></pre></figure>

<p>Généralement j’utilise la première méthode tout en ajustant le trafic en
adaptant le poids de ces nouvelles instances.</p>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Admin Sys" /><summary type="html"><![CDATA[Warmup votre cache peut être indispensable afin d’éviter un léger pic de charge inutile lorsque vous dirigez du trafic sur une instance fraichement spawn.]]></summary></entry><entry><title type="html">Reboot d’un système linux passé en “read-only”</title><link href="https://b-ds.fr/log/reboot-un-systeme-linux-en-readonly/" rel="alternate" type="text/html" title="Reboot d’un système linux passé en “read-only”" /><published>2014-02-16T00:00:00+01:00</published><updated>2014-02-16T00:00:00+01:00</updated><id>https://b-ds.fr/log/reboot-un-systeme-linux-en-readonly</id><content type="html" xml:base="https://b-ds.fr/log/reboot-un-systeme-linux-en-readonly/"><![CDATA[<p>Un de vos serveurs linux est passé en <i lang="en">read only</i>, vous
souhaitez redémarrer le système mais la commande <code class="language-plaintext highlighter-rouge">reboot</code> vous retourne un
<code class="language-plaintext highlighter-rouge">bus error</code>. Pas de panique, essayez <a href="http://en.wikipedia.org/wiki/Magic_SysRq_key">Magic SysRq key</a> :</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo </span>1 <span class="o">&gt;</span>/proc/sys/kernel/sysrq
<span class="nb">echo </span>b <span class="o">&gt;</span>/proc/sysrq-trigger
</code></pre></div></div>

<p>En dernier recours, cette méthode est toujours mieux qu’un reboot électrique.</p>

<p>Enfin il est préférable de vérifier l’état de vos disques (SMART) et
contrôler l’intégrité de vos systèmes de fichiers avec <code class="language-plaintext highlighter-rouge">fsck</code>.</p>

<p>À noter que dans mon cas ce problème est survenu suite à un taux élevé
d’I/O wait, sur du hardware grande série.</p>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Admin Sys" /><summary type="html"><![CDATA[Un de vos serveurs linux est passé en read only, vous souhaitez redémarrer le système mais la commande reboot vous retourne un bus error. Pas de panique, essayez Magic SysRq key :]]></summary></entry><entry><title type="html">Un serveur HTTP en une ligne de commande</title><link href="https://b-ds.fr/log/un-serveur-http-en-une-ligne-de-commande/" rel="alternate" type="text/html" title="Un serveur HTTP en une ligne de commande" /><published>2013-12-03T00:00:00+01:00</published><updated>2013-12-03T00:00:00+01:00</updated><id>https://b-ds.fr/log/un-serveur-http-en-une-ligne-de-commande</id><content type="html" xml:base="https://b-ds.fr/log/un-serveur-http-en-une-ligne-de-commande/"><![CDATA[<p>Vous avez besoin de lancer un serveur HTTP “basique” de manière ponctuelle
sans pour autant vous encombrer avec Apache, Nginx […] ?</p>

<p>Voici différentes méthodes pour y parvenir :</p>

<h3 id="avec-python">Avec Python</h3>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">python <span class="nt">-m</span> SimpleHTTPServer</code></pre></figure>

<h3 id="avec-ruby--200">Avec Ruby (&gt;= 2.0.0)</h3>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">ruby <span class="nt">-run</span> <span class="nt">-e</span> httpd <span class="nb">.</span> <span class="nt">-p</span> 8080</code></pre></figure>

<h3 id="avec-php--54-en-dernier-recours-">Avec PHP (&gt;= 5.4), en dernier recours ;)</h3>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash">php <span class="nt">-S</span> 127.0.0.1:8080</code></pre></figure>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Admin Sys" /><summary type="html"><![CDATA[Vous avez besoin de lancer un serveur HTTP “basique” de manière ponctuelle sans pour autant vous encombrer avec Apache, Nginx […] ?]]></summary></entry><entry><title type="html">Détecter un disque SSD sous Linux</title><link href="https://b-ds.fr/log/detecter-un-disque-ssd-sous-linux/" rel="alternate" type="text/html" title="Détecter un disque SSD sous Linux" /><published>2013-08-16T00:00:00+02:00</published><updated>2013-08-16T00:00:00+02:00</updated><id>https://b-ds.fr/log/detecter-un-disque-ssd-sous-linux</id><content type="html" xml:base="https://b-ds.fr/log/detecter-un-disque-ssd-sous-linux/"><![CDATA[<p>Ayant un parc de serveurs dédiés avec des configurations matérielles diverses
et variées (disques SATA, SAS, SSD …) j’ai récemment eu le besoin de
déterminer si un disque est un <strong>SSD</strong>, ou pas.</p>

<p>L’objectif ? Créer des <em><a href="http://docs.puppetlabs.com/guides/custom_facts.html">customs facts</a></em> pour affiner la configuration de
certains services comme MySQL via Puppet, enrichir mon inventaire …</p>

<p>Après quelques recherches je suis tombé sur <a href="http://unix.stackexchange.com/a/65602">cette solution</a> :</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="nb">cat</span> /sys/block/sda/queue/rotational</code></pre></figure>

<p>La valeur <em>0</em> est retournée pour les disques SSD, <em>1</em> pour ceux à plateaux.</p>

<p>Mis en pratique avec Facter, cela donne quelque chose dans ce style :</p>

<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="nb">require</span> <span class="s1">'facter'</span>

<span class="no">Facter</span><span class="p">.</span><span class="nf">add</span><span class="p">(</span><span class="s1">'ssd'</span><span class="p">)</span> <span class="k">do</span>
  <span class="n">confine</span> <span class="ss">:kernel</span> <span class="o">=&gt;</span> <span class="s1">'Linux'</span>

  <span class="n">ssd</span> <span class="o">=</span> <span class="p">[]</span>
  <span class="no">Facter</span><span class="o">::</span><span class="n">value</span><span class="p">(</span><span class="s1">'blockdevices'</span><span class="p">).</span><span class="nf">split</span><span class="p">(</span><span class="s1">','</span><span class="p">).</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">disk</span><span class="o">|</span>
    <span class="n">file</span> <span class="o">=</span> <span class="s2">"/sys/block/</span><span class="si">#{</span><span class="n">disk</span><span class="si">}</span><span class="s2">/queue/rotational"</span>
    <span class="n">output</span> <span class="o">=</span> <span class="no">Facter</span><span class="o">::</span><span class="no">Util</span><span class="o">::</span><span class="no">FileRead</span><span class="p">.</span><span class="nf">read</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
    <span class="n">ssd</span><span class="p">.</span><span class="nf">push</span><span class="p">(</span><span class="n">disk</span><span class="p">)</span> <span class="k">if</span> <span class="n">output</span><span class="p">.</span><span class="nf">to_i</span> <span class="o">==</span> <span class="mi">0</span>
  <span class="k">end</span>

  <span class="n">setcode</span> <span class="p">{</span> <span class="n">ssd</span><span class="p">.</span><span class="nf">join</span><span class="p">(</span><span class="s1">','</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span></code></pre></figure>

<p>Si vous connaissez d’autres solutions, je suis preneur !</p>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Admin Sys, Linux, SSD, Puppet, Facter" /><summary type="html"><![CDATA[Ayant un parc de serveurs dédiés avec des configurations matérielles diverses et variées (disques SATA, SAS, SSD …) j’ai récemment eu le besoin de déterminer si un disque est un SSD, ou pas.]]></summary></entry><entry><title type="html">Migrer un domaine vers Amazon Route 53</title><link href="https://b-ds.fr/log/migrer-un-domaine-vers-route53/" rel="alternate" type="text/html" title="Migrer un domaine vers Amazon Route 53" /><published>2013-08-01T00:00:00+02:00</published><updated>2013-08-01T00:00:00+02:00</updated><id>https://b-ds.fr/log/migrer-un-domaine-vers-route53</id><content type="html" xml:base="https://b-ds.fr/log/migrer-un-domaine-vers-route53/"><![CDATA[<p><em><strong>Màj 17/08/2013</strong> : Route53 permet désormais
d’<a href="http://aws.typepad.com/aws/2013/08/health-check-graphs-and-zone-file-imports-for-amazon-route-53.html">importer ses zones</a>.</em></p>

<p><a href="http://aws.amazon.com/route53/">Route 53</a> est le service DNS d’Amazon Webservices. 
Ce service est rentable, haute disponibilité et “low latency” car il utilise 
entre autre un réseau Anycast.</p>

<p>Mis à part cela, Route 53 permet surtout de faire des trucs vraiment 
cool comme :</p>

<ul>
  <li>
    <p><code class="language-plaintext highlighter-rouge">Weighted Round Robin</code> avec <code class="language-plaintext highlighter-rouge">Health check</code> HTTP(S) : dès 
que le service HTTP d’une machine est innaccessible elle est automatiquement 
desactivée du round robin jusqu’à son retour.</p>
  </li>
  <li>
    <p>routage du trafic vers plusieurs sites en se basant sur la latence 
du client : vitale lorsque vous avez plusieurs datacenter et que vous voulez
que vos visiteurs soient dirigés vers celui le plus proche.</p>
  </li>
</ul>

<p>Entrons dans le vif du sujet :</p>

<ul>
  <li>
    <p>Pour nous faciliter la vie, il existe un excellent outil nommé
<a href="https://github.com/barnybug/cli53/">cli53</a> permettant de gérer ses Zones 
Route 53 via l’API d’AWS. 
C’est du Python, il utilise boto et le tout s’installe via <code class="language-plaintext highlighter-rouge">pip</code> : <code class="language-plaintext highlighter-rouge">pip install cli53</code></p>
  </li>
  <li>
    <p>Pour ne rien perdre au passage, il est nécessaire d’extraire sa zone DNS.
Généralement vous pouvez la récuperer au format texte sur l’interface de votre 
registrar.</p>

    <p>Sinon vous pouvez toujours vous débrouiller avec <code class="language-plaintext highlighter-rouge">dig -t AXFR domain.tld</code>
si autorisé ou au pire <code class="language-plaintext highlighter-rouge">dig -t any domain.tld</code>.</p>
  </li>
  <li>
    <p>Créez un fichier <code class="language-plaintext highlighter-rouge">domain.tld</code> avec le contenu de la zone obtenue à l’étape 
précédente.</p>
  </li>
  <li>
    <p>Pour que l’import fonctionne il faut que le fichier soit au format BIND.
Pensez à ajouter <code class="language-plaintext highlighter-rouge">$ORIGIN domain.tld.</code> au début du fichier si besoin etc …</p>
  </li>
  <li>
    <p>Ensuite il va falloir configurer <code class="language-plaintext highlighter-rouge">boto</code> pour que <strong>cli53</strong> puisse discuter
avec l’API d’AWS, via variables d’environnnement par exemple :</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
</code></pre></div>    </div>
  </li>
  <li>
    <p>Maintenant vous pouvez créer votre zone chez Amazon : <code class="language-plaintext highlighter-rouge">cli53 create domain.tld</code> 
ou via la console AWS</p>
  </li>
  <li>
    <p>Importez votre configuration bind <code class="language-plaintext highlighter-rouge">cli53 import domain.tld --file domain.tld --replace --wait</code></p>
  </li>
  <li>
    <p>Enfin, il ne vous reste plus qu’à déléguer votre domaine aux serveurs DNS d’Amazon. 
Vous pouvez obtenir la liste (4 dans mon cas) sur la console ou via 
la commande <code class="language-plaintext highlighter-rouge">cli53 info domain.tld</code>.</p>
  </li>
</ul>

<p>Bonne migration !</p>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Admin Sys, DNS, Amazon Web Services" /><summary type="html"><![CDATA[Màj 17/08/2013 : Route53 permet désormais d’importer ses zones.]]></summary></entry><entry><title type="html">J’ai changé mon nom d’utilisateur Github</title><link href="https://b-ds.fr/log/changement-nom-utilisateur-github/" rel="alternate" type="text/html" title="J’ai changé mon nom d’utilisateur Github" /><published>2013-01-22T00:00:00+01:00</published><updated>2013-01-22T00:00:00+01:00</updated><id>https://b-ds.fr/log/changement-nom-utilisateur-github</id><content type="html" xml:base="https://b-ds.fr/log/changement-nom-utilisateur-github/"><![CDATA[<p>Tout ceux qui utilisent mes super modules Puppet ou mes autres projets
hébergés sur Github ont malheureusement dû rencontrer quelques soucis.</p>

<p>J’ai changé mon nom d’utilisateur <code class="language-plaintext highlighter-rouge">Benjamin-Ds</code> en <code class="language-plaintext highlighter-rouge">bdossantos</code>.</p>

<p>Pour réparer vos <code class="language-plaintext highlighter-rouge">submodules</code> et <code class="language-plaintext highlighter-rouge">remote</code> assurez-vous d’avoir corrigé les urls
en remplaçant mon ancien nom d’utilisateur par le nouveau.</p>

<p>Pour rappelle cela ce passe dans les fichiers <code class="language-plaintext highlighter-rouge">.git/config</code> et <code class="language-plaintext highlighter-rouge">.gitmodules</code> :</p>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># .gitmodules</span>
<span class="o">[</span>submodule <span class="s2">"modules/couchdb"</span><span class="o">]</span>
    path <span class="o">=</span> modules/couchdb
    url <span class="o">=</span> git://github.com/bdossantos/puppet-module-couchdb.git</code></pre></figure>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># .git/config</span>
<span class="o">[</span>submodule <span class="s2">"modules/couchdb"</span><span class="o">]</span>
    url <span class="o">=</span> git://github.com/Benjamin-Ds/puppet-module-couchdb.git</code></pre></figure>

<p>Je m’excuse pour les éventuels déploiements que j’aurais pu casser.
Il faut dire que mes dépôts sont vraiment “très populaires” …</p>]]></content><author><name>Benjamin Dos Santos</name></author><category term="Git, Github" /><summary type="html"><![CDATA[Tout ceux qui utilisent mes super modules Puppet ou mes autres projets hébergés sur Github ont malheureusement dû rencontrer quelques soucis.]]></summary></entry><entry><title type="html">Agrégation de graphiques avec Munin</title><link href="https://b-ds.fr/log/agregation-avec-munin/" rel="alternate" type="text/html" title="Agrégation de graphiques avec Munin" /><published>2012-08-25T00:00:00+02:00</published><updated>2012-08-25T00:00:00+02:00</updated><id>https://b-ds.fr/log/agregation-avec-munin</id><content type="html" xml:base="https://b-ds.fr/log/agregation-avec-munin/"><![CDATA[<p>Récemment j’ai eu besoin de combiner les graphiques Munin de tous
mes serveurs frontaux Nginx du même pool.</p>

<p>Dans cet exemple je vais combiner les graphiques générés par
les plugins <strong>nginx_request</strong> et <strong>if_ethX</strong> pour les
serveurs <strong>s0{1..4}.domain.tld</strong></p>

<h3 id="agrégation-du-nombre-de-requêtesseconde-http">Agrégation du nombre de requêtes/seconde (HTTP)</h3>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># file : /etc/munin/munin-conf.d/static.domain.tld</span>

<span class="o">[</span>domain.tld<span class="p">;</span>static.domain.tld]
update no
contacts no
nginx_requests.graph_title Nginx requests
nginx_requests.graph_vlabel Nginx requests per second
nginx_requests.total.draw LINE2
nginx_requests.graph_args <span class="nt">--base</span> 1000
nginx_requests.graph_category nginx
nginx_requests.total.label req/sec
nginx_requests.total.type DERIVE
nginx_requests.total.min 0
nginx_requests.total.sum <span class="se">\</span>
    s01.domain.tld:nginx_request.request <span class="se">\</span>
    s02.domain.tld:nginx_request.request <span class="se">\</span>
    s03.domain.tld:nginx_request.request <span class="se">\</span>
    s04.domain.tld:nginx_request.request</code></pre></figure>

<h3 id="agrégation-la-bande-passante-de-vos-interfaces-réseaux">Agrégation la bande passante de vos interfaces réseaux</h3>

<figure class="highlight"><pre><code class="language-bash" data-lang="bash"><span class="c"># file : /etc/munin/munin-conf.d/static.domain.tld</span>

<span class="o">[</span>domain.tld<span class="p">;</span>static.domain.tld]
update no
contacts no
bandwidth.graph_title Total Bandwidth <span class="k">in </span>MB/s
bandwidth.graph_category Network
bandwidth.graph_vlabel MB/s
bandwidth.totalup.sum <span class="se">\</span>
    s01.domain.tld:if_eth0.up <span class="se">\</span>
    s02.domain.tld:if_eth0.up <span class="se">\</span>
    s03.domain.tld:if_eth0.up <span class="se">\</span>
    s04.domain.tld:if_eth0.up
bandwidth.totalup.label Total up Bandwidth
bandwidth.totaldown.sum <span class="se">\</span>
    s01.domain.tld:if_eth0.down <span class="se">\</span>
    s02.domain.tld:if_eth0.down <span class="se">\</span>
    s03.domain.tld:if_eth0.down <span class="se">\</span>
    s04.domain.tld:if_eth0.down
bandwidth.totaldown.label Total down Bandwidth</code></pre></figure>

<h3 id="résultats">Résultats</h3>

<p>
  <img src="https://b-ds.fr/files/images/munin/nginx_requests-day.png" alt="nginx requests" width="497" height="280" style="display:block;margin:0 auto;" />
  <!--
  <br />
  <img src="https://b-ds.fr/files/images/munin/bandwidth-day.png" alt="bandwidth" width="497" height="280" style="display:block;margin:0 auto;" />
  -->
</p>

<h3 id="ressources">Ressources</h3>

<ul>
  <li><a href="http://blog.loftninjas.org/2010/04/08/an-evening-with-munin-graph-aggregation/">an evening with Munin graph aggregation</a></li>
  <li><a href="http://blog.veggie.fr/index.php?2009/01/01/17/12/28">Combiner des graphs avec Munin : température interne et externe</a></li>
  <li><a href="http://munin-monitoring.org/wiki/aggregate_examples">How to create aggregate graphs</a></li>
</ul>]]></content><author><name>Benjamin Dos Santos</name></author><category term="AdminSys" /><summary type="html"><![CDATA[Récemment j’ai eu besoin de combiner les graphiques Munin de tous mes serveurs frontaux Nginx du même pool.]]></summary></entry></feed>