Lors du développement du site de l’association Proxgroup, j’ai été confronté à un soucis d’envergure, il été nécessaire d’avoir une route qui attrapent toutes les urls car dans mon application, une page peut avoir /unepage mais aussi /undossier/unepage comme url, hors l’option path ne permet pas ce genre de chose facilement, après quelques recherches sur le net, j’ai trouvé l’option pattern qui permet cela :

proxgroup_site_page:
    pattern: /{_locale}/{slug}
    defaults: { _controller: ProxgroupSiteBundle:Site:page, _locale: 'fr' }
    requirements:
        _locale: %available_locale%
        slug: ".+"

Note surprenante : il est impossible de mettre une expression régulière hors des {tag}, pour contourner ce soucis, il faut créer un tag que l’on n’utilise pas mais qui me permet d’ajouter une expression régulière où l’on veux.

Si vous avez une meilleure solution, laissez un com’

Voici un petit tutoriel (mon premier d’ailleurs) sur la mise en place de notification Zabbix via l’application Telegram.

Compilation de Telegram

Il existe une version de Telegram pour linux en ligne de commande, le projet hébergé sur GitHub se nomme Telegram messenger CLI, pour cette partie, il suffit de suivre simplement le tutoriel pour la compilation, pour ma part, je vais détailler les étapes pour une GNU/Debian car mon serveur Zabbix est dessus.

1. Commençons par installer les paquets nécessaire à la compilation :

sudo apt-get install git libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make

2. Puis créer le répertoire utilisateur de Zabbix s’il n’est pas créé par défaut :

mkdir /var/lib/zabbix
chown zabbix:zabbix /var/lib/zabbix

3. On prend ensuite l’identité de Zabbix pour la suite des événements :

sudo su zabbix
cd ~

4. On récupère les sources de Telegram CLI et on compile :

git clone --recursive https://github.com/vysheng/tg.git
cd tg
./configure
make

5. On copie les certificats dans le /etc/ (en Root)

mkdir /etc/telegram-cli
cp *.pub /etc/telegram-cli/
chmod 755 /etc/telegram-cli
chmod 644 /etc/telegram-cli/*

À ce point, nous avons compilé Telegram et il ne reste plus qu’a le configurer correctement.

Configuration

Tout d’abord, nous allons créer un compte Telegram dédié à Zabbix pour qu’il puisse envoyer des messages aux groupes et autres utilisateurs, pour cela, je vous invite à utiliser l’interface Web de Telegram, cela va nous permettre de choisir un nom à afficher ainsi que son avatar.

1. On commence par prendre l’identité de Zabbix :

sudo su zabbix
cd ~/tg

2. On lance Telegram pour la première fois :

bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -D

On attends quelques secondes et l’application nous demande un numéro de téléphone et le code de sécurité, entrez ces informations et saisissez la commande safe_quit

Voila, Telegram est prêt pour l’envoi de nos alertes, passons à la configuration de Zabbix.

Configuration de Zabbix

Voici le script permettant l’envoi de message stocké dans le fichier /usr/lib/zabbix/alertscripts/telegram.sh

#!/bin/bash
# Send Zabbix notification through Telegram
# Copyright (C) 2015 David Cachau
# 
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

export to=$1;
export subject=$2;
export body=$3;

cd /var/lib/zabbix/tg;
nohup bin/telegram-cli -p /var/lib/zabbix/.telegram-cli -c /var/lib/zabbix/.telegram-cli/config -k /etc/telegram-cli/tg-server.pub -vv -REDNW -e "msg $to \"$subject \n $body\"" >> /dev/null 2>&1 &

N’oublions pas de donner le droit d’exécution sur ce fichier :

chmod 755 /usr/lib/zabbix/alertscripts/telegram.sh
chown zabbix:zabbix /usr/lib/zabbix/alertscripts/telegram.sh

Une petite explication sur la commande s’impose : J’ai dû tricher un peu avec la commande nohup car Zabbix envoyai un SIGTERM/SIGINT à mon script, cela empêchai l’envoi correct des messages.

Enfin, créons le Media Type :

Ajouter un Media Type

Et l’action associée :

Ajouté une actions > Action

Voici le contenu des champs :
❌ {HOST.NAME}
✅ {HOST.NAME}
{TRIGGER.NAME}

Ajouté une action > Conditions

Ajouté une actions > Opérations

 Ajouté une actions > Opérations > Ajouter une opération

Il ne reste plus qu’à tester le fonctionnement et le tour est joué.

N’hésitez pas à apporter vos modifications à ce script, n’hésitez pas à commenter ou apporter des suggestions.

Petit post-it pour générer les clés SSH.

ssh-keygen -t dsa -C 'Safranil' -f fichier

Note : le -C permet de choisir le commentaire associé à la clé SSH, par défaut c’est utilisateur@machine, ici j’ai choisi mon pseudonyme.

Pour ce connecter avec la clé privée à un serveur :

ssh -i sshkey utilisateur@machine.domaine.tld

J’ai développé un petit script en Bash afin de migrer les adresses IP dans les fichiers de configuration donnés, il est utile lors d’une migration de serveur / VM où il n’est pas possible de préserver l’ip.

Le script offre aussi la possibilité de sauvegarder les fichiers dans une archive Tar avant de faire les modifications et peut ajouter automatiquement les fichiers de configurations de Apache et Bind ou de n’importe quel répertoire donné.

Le script est disponible sous licence GPL à cette adresse https://git.safranil.fr/safranil/script/blob/master/migrateip.bash.

Si vous avez des soucis ou des améliorations à proposer, vous pouvez laisser un commentaire.

Source photographique : https://www.flickr.com/photos/camknows/4712191684

La clé vfs.fs.discovery qui permet de découvrir les disques montés sur un système n’est pas forcement adapté à toutes les configurations, dans le cas d’un serveur avec CageFS qui permet de chrooté les utilisateurs, cette même clé de configuration qui fait des miracles devient vite un fardeaux !

Pour cela j’ai fait un petit script pour n’afficher que les disques réellement monté par l’OS :

#!/bin/sh

mount |
awk ' BEGIN { FS=OFS=" "; ORS = ""; print "{\"data\":["; } \
{ print "{\"{#FSNAME}\":\""$3"\", \"{#FSTYPE}\":\""$5"\"}"; }
END { print "]}\n"; }' |
sed "s^}{^}, {^g"

Il suffit ensuite de placer ceci dans la configuration de l’agent :

UserParameter=vfs.fs.disk,/usr/share/zabbix/catdisk

Pour terminer il faut modifier le Template OS Linux > Discovery > Mounted filesystem discovery pour y placer ceci comme clé : vfs.fs.disk

Testé sur Zabbix 2.4