Apache: obtenir l’IP source depuis un en-tête conditionel dans les logs

Dans le cadre d’un environnement web haute disponibilité il y a généralement des répartiteurs de charge HTTP comme HAproxy ou des reverse proxies comme Apache ou Nginx en frontal qui vont s’occuper de répartir la charge et/ou filtrer une partie des requêtes pour ménager les serveurs d’application de backend.

Le principal problème rencontré dans ce type d’architecture est que, généralement, le service web de frontend va masquer l’IP source du client, réduisant la tracabilité de celui-ci sur les backends. Nous allons ici partir du principe que le service web de frontend retransmet l’IP au backend via un en-tête HTTP nommé X-Real-IP. Continuer à lire

GIT: supprimer un submodule

Git dispose d’une fonctionnalité de sous modules très intéressante quand il s’agit de relier plusieurs projets entre eux. Cela permet ainsi de relier un répertoire à un autre repository git, par exemple pour une librairie C/C++ à intégrer en statique dans un projet principal.

L’intégration du sous module est assez simple en revanche la suppression des traces du sous module n’est pas forcément triviale, git ne disposant pas d’une commande git submodule rm <path>.

Voici donc la solution, pour un sous module installé dans le répertoire lib/custom_submodule.

Vous allez ici supprimer le lien vers le submodule du repository et ses références dans le repository local.

Si vous souhaitez intégrer nativement un sous module, copiez au préalable le répertoire lib/custom_submodule et après le git rm, replacez le à l’endroit initial puis ajoutez les fichiers au repository avec git add

Ansible: gérer les clefs SSH de ses serveurs

Ansible est un outil d’industrialisation puissant. Il permet notamment de gérer les clefs publiques SSH de vos utilisateurs en les déployant sur un ensemble de machines.

Nous allons ici étudier le module authorized_key fourni par ansible.

Déploiement de clef SSH

Dans un premier temps nous allons parler de la tâche permettant de déployer les clefs SSH. Continuer à lire

Linux: Ajout de CPU à chaud

Sur un système Linux récent (noyau > 2.6.24) il est possible de changer le nombre de CPU de la machines à chaud, qu’on soit en machine virtuelle ou physique.

Pour vérifier l’état d’activation d’un CPU, il suffit d’afficher le fichier concernant le CPU mentionné

Si online est à 1 le CPU est activé et si c’est à 0 il est désactivé

Pour cela il suffit de s’interfacer avec le sous système /sys pour changer l’état actif/inactif du CPU en poussant 0 ou 1 dans le champ online

Pour activer tous les CPU d’un coup, faîtes une boucle:

A des fins de tests vous pouvez également désactiver des CPU en spécifiant 0 au lieu de 1, la seule limitation étant que le cpu0 n’est pas désactivable.

Surcharger le DNS utilisé par dhclient

La configuration DNS sous UNIX est située dans le fichier /etc/resolv.conf.

Dans une configuration classique pour un serveur ce fichier est statique. Il est créé lors de la première installation en se référant au paramétrage spécifié dans l’installeur.

Pour une configuration dynamique en DHCP, généralement un client, c’est le binaire dhclient qui va s’occuper de modifier les lignes de configuration afin de mettre les DNS reçus via DNS ainsi que les zones de recherches et suffixe DNS.

Le principal problème que nous allons essayer de résoudre ici est essentiellement une problématique de type cloud. Continuer à lire

Régler un problème de lecture sur une vue MySQL/MariaDB

Suite à un peu de troubleshoot ces derniers jours je suis tombé sur un problème MySQL difficile à comprendre lors d’un requêtage sur mes vues lors de la création d’une instance dupliquée d’une base de production destinée à des tests de charge.

L’erreur lors du requêtage sur la vue avec un utilisateur non privilégiée était la suivante:

Continuer à lire

AWS + Ansible: scheduler automatisé d’allumage/extinction d’instances

Amazon Web Services (AWS) est très bien interfacé avec Ansible. Nous allons voir dans cet article comment créer quelques économies d’infrastructure en designant un planficateur de démarrage et d’arrêt d’instances.

Nous partirons du principe que vous avez déjà utilisé AWS et que vous avez déjà vu les bases d’Ansible.

Nous utiliserons ici une syntaxe ansible 2.0 Continuer à lire

Ansible: dump & injection de dump

Ansible est un excellent orchestrateur d’infrastructure agent-less. Nous n’avions pas encore eu le temps de le couvrir sur ce blog, malgré que je l’utilise beaucoup au quotidien pour orchestrer, mettre en production, maintenir une infrastructure de quelques centaines de serveurs.

Ansible est capable de faire des dumps et restaurations de fichiers SQL de façon très simple et, depuis la version 2.0, ceux-ci peuvent être compressés. Continuer à lire

Optimiser ses images PNG sans perte

Les images PNG sont monnaie courante dans le web. De meilleure qualité que les images JPEG et permettant la transparence, elle prennent aussi plus de place.

Pour l’affichage sur le web il est important d’optimiser ces échanges, que ce soit pour ses utilisateurs ou pour améliorer son ranking.

Pour cela, installez tout d’abord l’outil optipng:

Continuer à lire

Linux: Ajout de RAM à chaud

Sur les systèmes Linux récents, il est possible d’ajouter de la RAM à chaud si votre Linux est sur une système de virtualisation. Suivant les outils utilisés et le système de virtualisation vous pouvez avoir 2 cas:

  • Lorsque vous ajoutez de la RAM à chaud le système virtualisé la prend en compte directement (virtualisation avec KVM par exemple, ou VMWare + openvm-tools récents)
  • Lorsque vous ajoutez de la RAM à chaud le système ne la prend pas en compte mais le système de virtualisation oui.

Dans le second cas, si votre distribution est assez récente (Debian 7 et 8 par exemple), vous pouvez lancer une action manuelle afin d’activer les nouveaux espaces mémoires de la machine:

Si cela fonctionne vous n’aurez pas d’erreur à l’écran comme quoi l’argument est invalide. Auquel cas, votre système Linux est trop ancien et vous devrez le redémarrer.

InfluxDB: tags avec listener graphite

InfluxDB possède un collecteur graphite permettant de connecter toutes sortes de logiciels compatibles comme collectd ou icinga2 afin de stocker des métriques.

Avec la configuration de base du collecteur graphite d’InfluxDB, vos métriques ressembleront à ca:

Le problème principal de ce type de métrique est le requêtage. En effet, une métrique simple comme celle ci ne peut être obtenue qu’au moyen d’une regexp, il n’y a pas de critière discriminant. Le second problème est qu’il vous sera impossible d’utiliser le système de templates sur grafana. Continuer à lire