Superviser une station de disque Synology via NAGIOS.

Le SNMP est le protocol de supervision d’un réseau informatique. A savoir, il existe une distribution OpenSource EyesOfNetwork (EON) qui est dédié à la supervision d’un parc informatique. Même Windows a un service portant le nom d’interruption SNMP, effectivement, il est possible de diagnostiquer la santé du poste de travail. Nagios est un superviseur, pour démarrer je l’ai installé via Pakfire dans Ipfire.

Dans cette page, je tente d’expliquer comment trouver les commandes pour afficher les informations de ma station de disque à partir d’une distribution Linux.

  • Dans la station de disque :
    Monitorer une station de disque SynologyA communauté, mettre: public

Télécharger les MIBS et placer les fichier dans : /root/.snmp/mibs/, et créer un fichier snmp.conf

cat << EOF > /root/.snmp/snmp.conf
mibs +SYNOLOGY-DISK-MIB
mibs +SYNOLOGY-SYSTEM-MIB
mibs +SYNOLOGY-RAID-MIB
EOF

Dans les fichiers MIBS fournis par Synology, en fouillant un peu, on trouve des OBJECT-TYPE avec une liste de champs et leur type d’accès. Ici, je m’interesse qu’aux champs en lecture. Par exemple, je prend le champ « temperature » dans le fichier SYSTEM et je tape la commande ci-dessous pour trouver l’OID :

[root@localhost nagios]# snmptranslate -M+/root/.snmp/mibs/SYNOLOGY-SYSTEM-MIB.txt -On -IR  temperature

Voici l’ensemble des résultats après investigation:

SYSTEM-MIB
	systemStatus		.1.3.6.1.4.1.6574.1.1.0
	temperature		.1.3.6.1.4.1.6574.1.2.0
	powerStatus		.1.3.6.1.4.1.6574.1.3.0
	systemFanStatus		.1.3.6.1.4.1.6574.1.4.1.0
	cpuFanStatus		.1.3.6.1.4.1.6574.1.4.2.0
	modelName		.1.3.6.1.4.1.6574.1.5.1.0
	serialNumber		.1.3.6.1.4.1.6574.1.5.2.0
	version			.1.3.6.1.4.1.6574.1.5.3.0
	upgradeAvailable	.1.3.6.1.4.1.6574.1.5.4.0


SYNOLOGY-DISK-MIB.txt
	diskID			.1.3.6.1.4.1.6574.2.1.1.2.$ARG1$
	diskModel		.1.3.6.1.4.1.6574.2.1.1.3.$ARG1$
	diskType		.1.3.6.1.4.1.6574.2.1.1.4.$ARG1$
	diskStatus		.1.3.6.1.4.1.6574.2.1.1.5.$ARG1$
	diskTemperature		.1.3.6.1.4.1.6574.2.1.1.6.$ARG1$
	

SYNOLOGY-RAID-MIB.txt
	raidName		.1.3.6.1.4.1.6574.3.1.1.2.0
	raidStatus		.1.3.6.1.4.1.6574.3.1.1.3.0

Démonstation :

Ensuite, je teste en ligne de commande :

[root@ipfire nagios]#  ./check_snmp -H $IP -P 1 -C public -o .1.3.6.1.4.1.6574.1.2.0
SNMP OK - 28 | iso.3.6.1.4.1.6574.1.2.0=28

28 est la température du system. Pour éviter l’erreur noté ci-dessous, on fait bien attention d’ajouter  un « .0 » à la fin de l’OID comme ci-dessus mis en évidence en rouge.

Liste complètes des commandes :

define command {
command_name check_synology_version
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.5.3.0 -l "version"
}

define command {
command_name check_synology_upgradeAvailable
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.5.4.0 -l "upgradeAvailable" -s 2
}

define command {
command_name check_synology_temperature
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.2.0 -l "temperature" -s 1 -u C -w 40 -c 50
}

define command {
command_name check_synology_systemStatus
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.1.0 -l "systemStatus" -s 1
}

define command {
command_name check_synology_systemFanStatus
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.4.1.0 -l "systemFanStatus" -s 1
}

define command {
command_name check_synology_serialNumber
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.5.2.0 -l "serialNumber"
}

define command {
command_name check_synology_raidStatus
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.3.1.1.3.0 -l "raidStatus" -s 1
}

define command {
command_name check_synology_raidName
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.3.1.1.2.0 -l "raidName"
}

define command {
command_name check_synology_powerStatus
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.3.0 -l "powerStatus" -s 1
}

define command {
command_name check_synology_modelName
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.5.1.0 -l "modelName"
}

define command {
command_name check_synology_diskTemperature
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.2.1.1.6.$ARG1$ -l "diskTemperature" -u C -w 40 -c 50
}

define command {
command_name check_synology_diskStatus
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.2.1.1.5.$ARG1$ -l "diskStatus" -s 1
}

define command {
command_name check_synology_diskModel
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.2.1.1.3.$ARG1$ -l "diskModel"
}

define command {
command_name check_synology_diskID
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.2.1.1.2.$ARG1$ -l "diskID"
}

define command {
command_name check_synology_cpuFanStatus
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 1 -C $USER2$ -o .1.3.6.1.4.1.6574.1.4.2.0 -l "cpuFanStatus" -s 1
}

Liste complètes des services :

define service {
 host_name diskstation
 service_description check_synology_diskTemperature_0
 check_command check_synology_diskTemperature!0!40!50
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_diskStatus_1
 check_command check_synology_diskStatus!1
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_diskID_0
 check_command check_synology_diskID!0
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_cpuFanStatus
 check_command check_synology_cpuFanStatus
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_diskID_1
 check_command check_synology_diskID!1
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_diskModel_0
 check_command check_synology_diskModel!0
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_diskModel_1
 check_command check_synology_diskModel!1
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_diskStatus_0
 check_command check_synology_diskStatus!0
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_diskTemperature_1
 check_command check_synology_diskTemperature!1!40!50
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_modelName
 check_command check_synology_modelName
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_powerStatus
 check_command check_synology_powerStatus
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_raidName
 check_command check_synology_raidName
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_raidStatus
 check_command check_synology_raidStatus
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_serialNumber
 check_command check_synology_serialNumber
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_systemFanStatus
 check_command check_synology_systemFanStatus
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_systemStatus
 check_command check_synology_systemStatus
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_temperature
 check_command check_synology_temperature!0!40!50
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_upgradeAvailable
 check_command check_synology_upgradeAvailable
 use generic-service ; name of service template to use
}

define service {
 host_name diskstation
 service_description check_synology_version
 check_command check_synology_version
 use generic-service ; name of service template to use
}

source :

http://sodermalm.net/?p=139

Création de machine virtuelle dans ipfire

Cette page explique la procédure pour créer une machine virtuelle dans ipfire. Ne pas oublier d’installer le paquet qemu avec pakfire.

Mise à jour le 23 aout 2016.

Je déplace mes fichiers de configuration sur github.com.

Mise à jour le 29 octobre 2016.

Avec l’aide d’un plugin faisant le liens entre SynthaxHighLighter et pastacode, je réaffiche les scripts.

Ajout du drivers virtio pour le disque dur virtuel.

1/ Création de la carte réseau virtuelle tuntap en orange0

Copier le script dans le repertoire /etc/init.d, il sert à créer la carte réseau pour notre machine virtuelle

Le script est téléchargeable ici.

Donner les droits d’exécution, établir les liens symboliques pour le boot, lancer le script et setup pour attribuer la carte virtuelle à la zone orange.

chmod +x /etc/init.d/tap
ln -s /etc/init.d/tap /etc/rc.d/rc3.d/S17tap
ln -s /etc/init.d/tap /etc/rc.d/rc0.d/K84tap
ln -s /etc/init.d/tap /etc/rc.d/rc6.d/K84tap
/etc/init.d/tap start
setup

2/ Création de(s) bridge(s) en vue du raccordement d’une machine virtuelle

Copier le script dans le répertoire /etc/init.d, il sert à créer un pont réseau. Le script lit les lignes d’un fichier et créée le pont si la variable portant le nom de la carte est à yes.

Le script est téléchargeable ici.

Créer le fichier de configuration des bridges, donner le droits d’exécution du script, établir les liens symboliques pour le boot et lancer le script pour créer le bridge.

cat << EOF > /etc/default/bridge
orange=yes
EOF
chmod +x /etc/init.d/bridge
ln -s /etc/init.d/bridge /etc/rc.d/rc3.d/S21bridge
ln -s /etc/init.d/bridge /etc/rc.d/rc0.d/K83bridge
ln -s /etc/init.d/bridge /etc/rc.d/rc6.d/K83bridge
/etc/init.d/bridge start

3/ Création d’une machine virtuelle

Copier le script dans le répertoire /etc/init.d, il sert à créer si besoin le disque dur virtuel et boot dans la foulé sur une iso (à spécifier dans le script), si l’image disque existe déjà, la machine y boot.

Le script est téléchargeable ici.

Créer le fichier d’attribution des bridges, donner le droits d’exécution du script, établir les liens symboliques pour le boot et lancer le script pour créer le bridge.

chmod +x /etc/init.d/vhost
ln -s /etc/init.d/vhost /etc/rc.d/rc3.d/S99vhost
ln -s /etc/init.d/vhost /etc/rc.d/rc0.d/K01vhost
ln -s /etc/init.d/vhost /etc/rc.d/rc6.d/K01vhost

Il est nécessaire de créer un fichier .vhost par machine virtuelle dans le répertoire /etc/vhost/ pour que le script lance une nouvelle virtualisation.

mkdir /etc/vhost
cat << EOF > /etc/vhost/une_machine.vhost
INDEX=1
RAM=512M
DISK=/PATH/TO/IMG/XXX.img
SIZE=10G
MAC_TAP="01:AA:01:AA:01:AB"
MAC_NET="01:AA:01:AA:01:AA"
ISO=/PATH/TO/ISO
EOF

/etc/init.d/vhost start une_machine

Pour que la machine virtuelle puisse communiquer, il ne reste plus qu’à lui attribuer une adresses IP de même réseau.

Pour que la machine virtuelle s’éteigne correctement, il manque un script perl  (grand merci à hadfl du forum d’Ipfire).
Le script est téléchargeable ici.

4/ Redirection des ports de red0 vers orange0

Surtout, ne pas ajouter d’autres règles comme ACCEPT en entrée sur red, seul une redirection NAT est nécessaire pour accéder à la machine virtuelle dans la DMZ orange. Remplir le formulaire comme ci-dessous.