Archives par mot-clé : nagios

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

Ipfire : Configurer Nagios

Voici la procédure que j’ai suivis pour configurer nagios dans ipfire.nagios dans ipfire

Procédure :

  • Créer l’utilisateur nagios et lui attribuer la propriété sur nagios.

[code lang= »bash »]
useradd nagios -s /bin/false -d /var/nagios
chown nagios: /etc/nagios/*.cfg
chown nagios: /etc/nagios/objects/*.cfg
chown nagios: /var/nagios/ -R
sed -i.bak ‘s/^nagios_user=.*/nagios_user=nagios/’ /etc/nagios/nagios.cfg
sed -i.bak ‘s/^nagios_group=.*/nagios_group=nagios/’ /etc/nagios/nagios.cfg
sed -i.bak ‘s/^NagiosUser=.*/NagiosUser=nagios/’ /etc/init.d/nagios
sed -i.bak ‘s/^NagiosGroup=.*/NagiosGroup=nagios/’ /etc/init.d/nagios
[/code]

  • Configurer son compte utilisateur, modifier /etc/nagios/objects/contacts.cfg

[code lang= »bash »]define contact{
contact_name webmaster; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias webmaster ; Full name of user

email webmaster@jbsky.fr ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members webmaster
}[/code]

  • Modifier le mot de passe:

[code lang= »bash »]htpasswd -c /etc/nagios/htpasswd.users webmaster
[/code]

  • Ajouter la commande dans le fichier /etc/nagios/objects/commands.cfg

[code lang= »bash »]# ‘check_https_ipfire’ command definition
define command{
command_name check_https_ipfire
command_line $USER1$/check_http -S -I $HOSTADDRESS$ $ARG1$ -p 444 -a admin:motdepass
}[/code]

  • Rectifier le service https sur le port 444, chercher check_http dans le fichier cat /etc/nagios/objects/localhost.cfg et le tout remplacer par

[code lang= »bash »]define service{
use local-service ; Name of service template to use
host_name localhost
service_description HTTPS_444
check_command check_https_ipfire
notifications_enabled 0
}[/code]

  • Changer le format de date dans /etc/nagios/nagios.cfg

[code lang= »bash »]
sed -i.bak ‘s/^date_format=.*/date_format=euro/’ /etc/init.d/nagios
[/code]

  • Modifié les commandes de notification dans  /etc/nagios/objects/commands.cfg pour que nagios envoie des mails, ajouter le package sendEmail depuis pakfire.

[code lang= »bash »]
# ‘notify-host-by-email’ command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b ***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n** " | /usr/local/bin/sendEmail -f agent.nagios@jbsky.fr -t $CONTACTEMAIL$ -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ ** " -s 10.0.0.4 -xp motdepass -v
}

# ‘notify-host-by-email’ command definition
define command{
command_name host-notify-by-email
command_line /usr/bin/printf "%b ***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n** " | /usr/local/bin/sendEmail -f agent.nagios@jbsky.fr -t $CONTACTEMAIL$ -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ ** " -s 10.0.0.4 -xp motdepass -v
}

# ‘notify-service-by-email’ command definition
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b ***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/local/bin/sendEmail -f agent.nagios@jbsky.fr -t $CONTACTEMAIL$ -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -s 10.0.0.4 -xp motdepass -v

}

# ‘notify-service-by-email’ command definition
define command{
command_name service-notify-by-email
command_line /usr/bin/printf "%b ***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/local/bin/sendEmail -f agent.nagios@jbsky.fr -t $CONTACTEMAIL$ -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -s 10.0.0.4 -xp motdepass -v
}
[/code]

  • Recharger Nagios:

[code lang= »bash »]/etc/init.d/nagios reload[/code]

  1. Application Iphone intéressante:

TM-Lite
Fournir l’URL complète: http://IP:1008/nagios/cgi-bin