Dispositif d'alarme : programme

Une autre option consiste à définir un script comme dispositif d'alarme. Comme tous les scripts sont lancés en tant qu'utilisateur du server SKOOR Engine, il peut être nécessaire d'ajuster le fichier sudoers du système d'exploitation pour pouvoir les exécuter. Soyez TRÈS prudent avec les paramètres d'autorisation afin d'éviter toute vulnérabilité du système. 

Paramètre

Description

$1

ID d'alarme

$2

Type d'événement

3

État de l'objet d'origine

4

Nom de l'objet d'origine

stdin / $MESSAGE

Corps du modèle d'alarme associé

Commande auto-terminable

Pour vous assurer qu'un programme d'alarme ne bloque pas accidentellement le processus SKOOR Engine, utilisez la chaîne d'autoterminaison au début d'une commande externe :

(sleep 3; kill -9 -$$) &

Programme du dispositif d'alarme - sortie vers une interface tierce

Grâce au type de dispositif d'alarme Programme, il est possible d'envoyer l'alarme vers un fichier texte ou une base de données. La partie MESSAGE peut être configurée avec le modèle d'alarme (voir la section Ajouter un modèle d'alarme).

Programme d'alarme pour une sortie CSV

Définition abrégée du programme du dispositif d'alarme :

OUT_FILE="/tmp/alarm_out_$1.txt"
MESSAGE=`cat -`
 
# ID=$1, Event_type=$2, Origin_state=$3, Origin_Object_Name=$4
echo "$1; $2; $3; $4; $MESSAGE " > $OUT_FILE

Le fichier généré sur le système d'exploitation aura un contenu similaire à celui-ci après le déclenchement d'une alarme :

91249; AlarmOpened; Major; All Services; 2017.08.25 10:51:25 (MET) AlarmOpened Major on SLO 'All Services' SLO 'All Services' is in state 'Major' as SLO 'Services Zurich' is in state 'Major' as Job 'Tcp' on 'SKOOR Server Winterthur' is in state 'Major'

Définition complexe du programme du dispositif d'alarme :

OUT_FILE="/tmp/alarm_out_$1.csv"

# Header
echo "ID(0);EVENT_TYPE(1); TIMESTAMP_CURRENT(2); TIMESTAMP_OPENED(3); DURATION(4); COMMENT(5); CURRENTLY_ASSIGNED(6); SOURCE_OBJECT_TYPE(7); SOURCE_OBJECT_NAME(8); SOURCE_DEVICE_ADDRESS(9); SOURCE_DEVICE_NAME(10); SOURCE_JOB_INFO(11); SOURCE_OBJECT_STATE(12); SOURCE_VALUES(13); SOURCE_ALARM_LIMITS(14); SOURCE_S_ALARM_INFO (15); SOURCE_L_ALARM_INFO(16); SOURCE_F_ALARM_INFO(17); ORIGIN_OBJECT_NAME(18); ORIGIN_DEVICE_ADDRESS(19); ORIGIN_ DEVICE_NAME(20); ORIGIN _JOB_INFO(21); ORIGIN_OBJECT_TYPE(22); ORIGIN_OBJECT_STATE(23); ORIGIN_VALUES(24); ORIGIN_ ALARM_LIMITS(25); ORIGIN _S_ALARM_INFO(26); ORIGIN _L_ALARM_INFO(27); ORIGIN _F_ALARM_INFO(28); REASON(29)" > $OUT_FILE

# Data
echo "$1"`cat -` >> $OUT_FILE

Un modèle d'alarme avec la définition de corps suivante a été lié au dispositif d'alarme :

;%e; %t; %T; %d; %c; %q; %n; %a; %A; %i; %o; %s; %v; %h; %0; %1; %2; %-n; %-a; %-A; %-I; %-o; %-s; %-v; %-h; %-0; %-1; %-2; %r;

Contenu résultant dans le fichier :

ID(0);EVENT_TYPE(1); TIMESTAMP_CURRENT(2); TIMESTAMP_OPENED(3); DURATION(4); COMMENT(5); CURRENTLY_ASSIGNED(6); SOURCE_OBJECT_TYPE(7); SOURCE_OBJECT_NAME(8); SOURCE_DEVICE_ADDRESS(9); SOURCE_DEVICE_NAME(10); SOURCE_JOB_INFO(11); SOURCE_OBJECT_STATE(12); SOURCE_VALUES(13); SOURCE_ALARM_LIMITS(14); SOURCE_S_ALARM_INFO (15); SOURCE_L_ALARM_INFO(16); SOURCE_F_ALARM_INFO(17); ORIGIN_OBJECT_NAME(18); ORIGIN_DEVICE_ADDRESS(19); ORIGIN_ DEVICE_NAME(20); ORIGIN _JOB_INFO(21); ORIGIN_OBJECT_TYPE(22); ORIGIN_OBJECT_STATE(23); ORIGIN_VALUES(24); ORIGIN_ALARM_LIMITS(25); ORIGIN _S_ALARM_INFO(26); ORIGIN _L_ALARM_INFO(27); ORIGIN _F_ALARM_INFO(28); REASON(29)
91261;AlarmSeverityUp; 2017.08.25 11:05:11 (MET); 2017.08.25 10:59:57 (MET); 5m14s; ; ; All Services; ; ; ; SLO; Major; ; ; 0; 1; 2; Icmp; localhost; SKOOR Server Winterthur; 877; Job; Major; ; Warning: if Any Error code <> 0 (No error) Major: if Any Packet loss = 100.00 %; 0; 1; 2; SLO 'All Services' is in state 'Major' as SLO 'Services Zurich' is in state 'Major' as Job 'Icmp' on 'SKOOR Server Winterthur' is in state 'Major';

Fichier CSV résultant dans Excel :

Programme d'alarme pour une sortie DB

Définition de la base de données pour l'exemple suivant :

/usr/local/bin/mysql -uroot -pxxxx databasename -e"create table alarmlog (ID integer(10),REASON varchar(20),STATE varchar(20),DEVICE varchar(60),MESSAGE varchar(180));"

Définition du programme du dispositif d'alarme (mysql) :

MESSAGE=`cat - | tr "\n" " " | tr "'" "*"`
ID=$1
REASON=$2
STATE=$3
DEVICE=$4

(sleep 3; kill -9 -$$) &
echo $MESSAGE > /tmp/test_log.log
/usr/bin/mysql -uroot -pxxxxx databasename -e "insert into alarmlog (ID,REASON,STATE,DEVICE,MESSAGE) values ('$ID','$REASON','$STATE','$DEVICE','$MESSAGE');"

Exemple de résultat dans la base de données mysql :

MariaDB [databasename]> select * from alarmlog;
+-------+-----------------+-------+--------------+-------------------------------------------------------------------------------------------------------------------------------------+
| ID    | REASON          | STATE | DEVICE       | MESSAGE                                                                                                                             |
+-------+-----------------+-------+--------------+-------------------------------------------------------------------------------------------------------------------------------------+
| 91307 | AlarmOpened     | Minor | All Services | 2017.08.25 12:53:09 (MET) AlarmOpened Minor on SLO *All Services* SLO *All Services* is in state *Minor* as SLO *Services Zurich*...|
| 91307 | AlarmSeverityUp | Major | All Services | 2017.08.25 12:53:18 (MET) AlarmSeverityUp Major on SLO *All Services* SLO *All Services* is in state *Major* as SLO *Services Zur...|
| 91307 | AlarmClosed     | Ok    | All Services | 2017.08.25 12:53:24 (MET) AlarmClosed Ok on SLO *All Services* SLO *All Services* is in state *Ok* as SLO *Services Zurich* is in...|
+-------+-----------------+-------+--------------+-------------------------------------------------------------------------------------------------------------------------------------+

Programme d'alarme pour sortie snmp-trap

Définition du corps du modèle d'alarme (aucun objet ne sera utilisé pour le trap) :

EVENT_TYPE: %e; TIMESTAMP_CURRENT: %t; TIMESTAMP_OPENED: %T; DURATION: %d; COMMENT: %c; CURRENTLY_ASSIGNED: %q; SOURCE_OBJECT_NAME: %n; SOURCE_DEVICE_ADDRESS: %a; SOURCE_DEVICE_NAME: %A; SOURCE_JOB_INFO: %i; SOURCE_OBJECT_TYPE: %o; SOURCE_OBJECT_STATE: %s; SOURCE_VALUES: %v; SOURCE_ALARM_LIMITS: %h; SOURCE_S_ALARM_INFO: %0; SOURCE_L_ALARM_INFO: %1; SOURCE_F_ALARM_INFO:%2; ORIGIN_OBJECT_NAME: %-n; ORIGIN_DEVICE_ADDRESS: %-a; ORIGIN_ DEVICE_NAME: %-A; ORIGIN _JOB_INFO: %-I; ORIGIN_OBJECT_TYPE:: %-o; ORIGIN_OBJECT_STATE: %-s; ORIGIN_VALUES: %-v; ORIGIN_ ALARM_LIMITS: %-h; ORIGIN _S_ALARM_INFO: %-0; ORIGIN _L_ALARM_INFO: %-1; ORIGIN _F_ALARM_INFO:%-2; REASON: %r

Exemple de définition d'un dispositif d'alarme :

MESSAGE=`cat -`
/usr/local/bin/snmptrap -v 1 -c public 10.1.1.131 . 10.1.1.134 6 0 "" . s "ID: $1, EVENT_TYPE: $2, STATE: $3, NAME: $4 " . s "$MESSAGE"

Trap résultant :