Pad's Notes

Conseils, Astuces d'un SysOps

By +

Calculé la mémoire consommé par apache

La commande suivante va vous calculer la totalités de la mémoire utilisé par Apache ainsi que la taille de vos processus Apache.

La commande se base sur PS, les configurations d’apache et php ne sont pas lu.
Si votre processus apache se nome httpd, vous devez adaptez la commande en remplaçant apache2 par httpd :)

ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Proccess Size (MB): "x/((y-1)*1024)}'

By +

Mapper correctement un clavier US International Mac

Pour information, il se est mappé de cette manière :

Clavier sans fil Apple Anglais International

Il y a plusieurs manière de procéder

Modification global pour tous les utilisateurs

Ajouter dans le fichier /etc/X11/xinit/xinitrc

# fix keyboard layout switching §± and `~
xmodmap -e "keycode 49 = section plusminus section plusminus section plusminus"
xmodmap -e "keycode 94 = grave asciitilde grave asciitilde dead_grave dead_horn"

Configuration pour votre utilisateur

Editer ou cree le fichier ~/.Xmodmap pour y ajouter

# fix keyboard layout switching §± and `~
keycode 94=grave asciitilde grave asciitilde dead_grave dead_horn
keycode 49=section plusminus section plusminus section plusminus3

Configuration pour votre session (valide jusqu’au redemarrage de X)

Exécuter dans un terminal

xmodmap -e "keycode 49 = section plusminus section plusminus section plusminus"
xmodmap -e "keycode 94 = grave asciitilde grave asciitilde dead_grave dead_horn"

By +

Varnish est plus intelligent que vous !

Utiliser la configuration built-in

Comme nous l’indique ops42, Varnish fonctionne très bien avec ça configuration « built-in ».

Au fur et a mesure, beaucoup de sysops (comme moi) ont mis en place, a tord, des configurations Varnish de plus en plus complexe.
La seul configuration a mettre en place est celle lié a vos backends

Objectif d’une modification de vcl

Toutes modification des VLC sera donc un hotfix pour corrigé un problème lié a votre application.

Exemple

OpenPhoto à actuellement un bug, un css est géré a chaque hit, cela ajoute au minimum 5 secondes au temps de changement de la page.

Dans ce cas, j’ai ajouté dans les différentes VLC la configuration suivante :

VLC Fetch

sub vcl_fetch {
    # Fix https://github.com/photo/frontend/issues/1104
    if (req.http.host ~ "photos\.domain\.ltd)" && req.url ~ "^/assets/themes/fabrizio1.0/stylesheets/lessc") {
        unset beresp.http.set-cookie;
        unset beresp.http.expires;
        unset beresp.http.Cache-Control;
        set beresp.http.Cache-Control = "public";
    }
}

VLC Deliver

sub vcl_deliver {
    # Fix https://github.com/photo/frontend/issues/1104
    if (req.http.host ~ "photos\.domain\.ltd" && req.url ~ "^/assets/themes/fabrizio1.0/stylesheets/lessc") {
        unset resp.http.Pragma;
    }
}

Proposition d’une configuration de base

sources sur Github

By +

Activer Facebook Graph Search

Pour vous inscrire a la beta de Graph Search, rendez vous a cette adresse https://www.facebook.com /about /graphsearch

Article complet sur Graph Search Decryptage : Le social search graph facebook

By +

Template Varnish

Le but de cette configuration est de simplifier au maximum la mise en place de Varnish.

Avant d’appliquer la configuration a votre Varnish, vous devez éditer le fichier backend.vcl pour configurer votre backend.

Cette configuration reste minimaliste et utilise la configuration « builtin » qui fonctionne très bien à conditions que les RFC soient respecté.

By +

Commandes pratique pour Varnish 3.0 – varnishtop, varnishlog

  • Nombre de requetes transmisent au backend
    varnishtop -i TxURL
    varnishlog -b | grep 'TxURL'
  • Nombre de requete reçuent des clients par Varnish
    varnishtop -i RxURL
    varnishlog -c | grep 'RxURL'
  • Liste les Cookies reçuent des clients par Varnish
    varnishtop -i RxHeader -I Cookie
    varnishlog -c | grep 'Cookie: '
  • Affiche le Host le plus requetes
    varnishtop -i RxHeader -I '^Host:'
    varnishlog -i RxHeader | grep 'Host: '

By +

Configurer Google Analytiques dans OpenPhoto

Activer le plugin

Éditer votre fichier de configuration :

src/userdata/configs/[OpenPhotoDomainName].ini

ajouter

activePlugins = "GoogleAnalytics"

Pour activer plusieurs plugins, il faut les listé en les séparant par une virgule

Configuration du plugin

Apres avoir consulté le code source car, il la CLI pour configurer cela n’est pas encore développé, j’ai découvert, qu’il faut simplement ajouter dans le fichier (créé les dossier manquant et le fichier) :

src/userdata/plugins/[OpenPhotoDomainName].GoogleAnalytics.ini

une ligne contenant votre id de la maniere suivante :

id = google id

By +

VimTips – Remplacer les majuscules par des minuscules

  • Remplacer les minuscules en majuscules:
    :%s/[a-z]/\U&/
  • Remplacer les majuscules en minuscules:
    :%s/[A-Z]/\L&/
  • Convertir la selection en majuscule : gU
  • Convertir la selection en minuscule : gu

By +

Killer des requetes MySQL en fonction de leur temps d’execution

Toutes les requetes killé sont affiché par le script, cela vous permet de generer un log ou de vous envoyer un mail pour chaque requete killé.

#!/usr/bin/env sh

MYCNF='/root/.my.cnf'
BIN_DEPS='mysql mysqladmin'

for BIN in $BIN_DEPS; do
    which $BIN 1>/dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo "Error: Required file could not be found: $BIN"
        exit 1
    fi
done

# === FUNCTION ===
f_log() {
    logger "$0 - $@"
    echo "$@"
}

mysqladmin --defaults-extra-file=$MYCNF status 1>/dev/null 2>&1
if [ "$?" -ne "0" ]; then
    f_log "MySQL status unavailable, exiting"
    exit 1
else
    f_log $(mysqladmin --defaults-extra-file=$MYCNF status)
fi

# Kill select >= 5min
for QUERY_ID in $(mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e 'SELECT id FROM information_schema.processlist WHERE INFO LIKE "SELECT%" and TIME >= "300"'); do
    f_log "* kill SELECT query $QUERY_ID"
    f_log $(mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e "SELECT Info FROM information_schema.processlist WHERE id = $QUERY_ID")
    mysqladmin kill $QUERY_ID
done

# Kill update >= 5min
for QUERY_ID in $(mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e 'SELECT id FROM information_schema.processlist WHERE INFO LIKE "update%" and TIME >= "300"'); do
    f_log "* kill UPDATE query $QUERY_ID"
    f_log $(mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e "SELECT Info FROM information_schema.processlist WHERE id = $QUERY_ID")
    mysqladmin --defaults-extra-file=$MYCNF kill $QUERY_ID
done

# Kil sleep >= 1min
for QUERY_ID in $(mysql --defaults-extra-file=$MYCNF --skip-column-names -B -e 'SELECT id FROM information_schema.processlist WHERE COMMAND LIKE "Sleep" and TIME >= "60"'); do
    f_log "* kill SLEEP query $QUERY_ID"
    mysqladmin --defaults-extra-file=$MYCNF kill $QUERY_ID
done

Des remarques, des questions, n’hesitez pas a laisser un commenter ou a me forker :)

Source sur GitHub

By +

Mise en place de Monit

Monit a pour fonction de « surveiller » service et/ou les ressources système et d’exécuter une ou plusieurs actions en fonction de condition. Par exemple, il peut redémarrer Nginx si celui ci ne répond plus.

Configuration de base épuré

set daemon  60
set logfile syslog facility log_daemon

## Interface web de monit
#set httpd port 2812 and
#     allow login:motdepasse

include /etc/monit/conf.d/*

Configuration des services

Dans /etc/monit/conf.d/, j’y ai placé un fichier de configuration par service :

apache2

check process apache with pidfile /var/run/apache2.pid
    start program = "/etc/init.d/apache2 start"
    stop program  = "/etc/init.d/apache2 stop"
    if children > 149 then restart
    if totalmem > 4096 MB for 5 cycles then restart
    if 3 restarts within 5 cycles then timeout

clamd

check process clamd with pidfile /var/run/clamav/clamd.pid
   group clamav
   start program = "/etc/init.d/clamav-daemon start"
   stop  program = "/etc/init.d/clamav-daemon stop"
   if failed unixsocket /var/run/clamav/clamd.ctl then restart
   if 5 restarts within 5 cycles then timeout

dovecot

check process dovecot with pidfile /var/run/dovecot/master.pid
   group dovecot
   start program = "/etc/init.d/dovecot start"
   stop  program = "/etc/init.d/dovecot stop"
   if failed host 127.0.0.1 port 143 protocol imap then restart
   if failed host 127.0.0.1 port 993 type tcpssl sslauto protocol imap then restart
   if 5 restarts within 5 cycles then timeout

freshclam

check process freshclam with pidfile /var/run/clamav/freshclam.pid
   group clamav
   start program = "/etc/init.d/clamav-freshclam start"
   stop  program = "/etc/init.d/clamav-freshclam stop"
   if 5 restarts within 5 cycles then timeout

mysql

check process mysql with pidfile /var/lib/mysql/mysql.pid
   group mysql
   start program = "/etc/init.d/mysql start"
   stop program = "/etc/init.d/mysql stop"
   if failed host localhost port 3306 then restart
   if 5 restarts within 5 cycles then timeout

named

check process named with pidfile /var/run/named/named.pid
 start program = "/etc/init.d/bind9 start"
 stop program = "/etc/init.d/bind9 stop"
 if failed host 127.0.0.1 port 53 type tcp protocol dns then restart
 if failed host 127.0.0.1 port 53 type udp protocol dns then restart
 if 5 restarts within 5 cycles then timeout

postfix

check process postfix with pidfile /var/spool/postfix/pid/master.pid
   group mail
   start program = "/etc/init.d/postfix start"
   stop  program = "/etc/init.d/postfix stop"
   if failed host localhost port 25 protocol smtp then restart
   if 5 restarts within 5 cycles then timeout

sshd

check process sshd with pidfile /var/run/sshd.pid
   start program  "/etc/init.d/ssh start"
   stop program   "/etc/init.d/ssh stop"
   if failed port 22 protocol ssh then restart
   if 5 restarts within 5 cycles then timeout