Dispositif d'alarme : programme

Une autre option consiste à définir un script en tant que périphérique d'alarme . Comme tous les scripts sont démarrés en tant qu'utilisateur server SKOOR Engine , il peut être nécessaire d'ajuster le fichier sudoers sur le système d'exploitation pour pouvoir les exécuter. Soyez TRÈS prudent sur les paramètres d'autorisation, pour éviter la 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-terminante

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

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

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

Via le type de dispositif d'alarme Programme , il est possible de sortir l'alarme dans un fichier texte ou une base de données. La partie MESSAGE peut être configurée avec le modèle d'alarme (voir section Ajouter un modèle d'alarme ).

Programme d'alarme pour une sortie CSV

Définition courte 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 comme 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 périphérique 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';

CSV résultant dans Excel :

Programme d'alarme pour une sortie DB

Définition de 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 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 sujet ne sera utilisé pour le piège) :

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 de 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"

Piège résultant :