Impossible de filtrer des messages mal formatés dans syslog-ng

Je fais appel à vous du problème avec syslog-NG. Certains de nos appareils (Principalement des commutateurs HP et SAN) envoyer des messages d'un journal système qui semble ne pas répondre aux exigences RFC 5424.

Pour vous donner quelques exemples:

Si je renifle l'interface réseau du serveur, nous pouvons voir ces "mauvais" messages comme celui-ci. (Comme vous pouvez le voir, après PRI Nous voyons le programme, puis le fuseau horaire et les champs séparés par des virgules. En bref, des champs mixtes, des champs manquants, etc. Pas un message de magazine Message standard):

<190>raslogd: 2017/03/08-16:03:20, [SEC-1203], 53642, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4

Par conséquent, je ne peux actuellement pas filtrer ces messages. J'ai essayé de déterminer le filtre habituel et d'essayer d'imprimer des champs tels que MSGHDR, MSG, PRI Et ainsi de suite, mais je n'ai rien vu.

Le seul moyen de filtrer ce message - Il est facile de définir une interface externe et un fichier en tant que sortie sans aucun modèle.

Par exemple, si je fais un tel filtre:

destination d_INCOMING_ALL   { file("/app/syslog-ng/logs/incoming_all.log"); };

log {
source(s_EXTERNAL);
destination(d_INCOMING_ALL);
};

Je peux voir des messages dans le fichier journal, mais en quelque sorte formaté (je suppose que syslog-NG Ils reformatent):

[root@xxxxxxxxxxxx logs]# grep -i cswc incoming_all.log
Mar 9 09:44:20 cswc-mo8x-hpsan01 raslogd: 2017/03/09-08:34:50, [SEC-1203], 53647, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4
[root@xm1p1034vmo logs]#

Le problème est que je ne peux pas filtrer ces messages de cette manière (Nous obtenons des journaux avec plus de 1000 Dispositifs), J'ai besoin de filtrer les messages provenant de ces appareils! et le seul moyen de le faire - Utiliser le nom d'hôte (cswc-

) ou nom du programme (raslogd

)

Par conséquent, j'ai essayé d'afficher les champs en ajoutant un modèle à ce fichier, par exemple:

destination d_test { 
file ("/app/syslog-ng/logs/test_olivier.log"
template("pri=${priority} date=${ISODATE} host=${HOST} program=${PROGRAM} message=${MSG}\n")
);
};

Mais rien ne fonctionne, rien ne s'affiche. J'ai essayé tous les champs MSG, MESSAGE, MSGHDR etc .. Je ne peux rien afficher. La seule chose qui fonctionne - Ceci est une analyse sans filtres et modèles.

Naturellement, si j'avais utilisé toutes sortes de filtres comme ceux-ci ci-dessous, cela ne fonctionnera pas (Depuis que les champs sont mélangés):

filter f_is_SAN     {
host("cswc.*" flags(ignore-case));
};

Le même pour:

filter f_is_SAN     {
match(".*cswc.*" flags(ignore-case));
};

Toute astuce sur la manière de créer des filtres pour ces messages provenant de ces appareils (par nom d'hôte ou de programme)?

Avec respect,
Invité:

Emilie

Confirmation de:

MMH j'ai trouvé une solution qui semble fonctionner

Je réutilise la destination "Copie locale" comme une source

par exemple:

J'ai un filtre de journal régulier dans lequel toutes les copies sont stockées:

destination d_INCOMING_ALL       { file("/app/syslog-ng/logs/incoming_all.log"); };
log {
source(s_EXTERNAL);
destination(d_INCOMING_ALL);
};

Le message est préservé dans cette réforme "Copie locale". Ensuite, je peux relire ce fichier dans la source et appliquer des filtres à celui-ci. Sale, mais ça marche:

source s_NON_RFC_COMPLIANT {   # new source
file("/app/syslog-ng/logs/incoming_all.log" follow-freq(10));
};

....

destination d_INCOMING_ALL {
file("/app/syslog-ng/logs/incoming_all.log"); # old destination where we keep a local copy of EVERYTHING
};

....

log { # local copy of everything
source(s_EXTERNAL);
destination(d_INCOMING_ALL);
};

....

other filters here

....

filter f_is_Network {
host("cswc.*" flags(ignore-case)) # we want to filter on hosts called cswc-something or program raslogd
or program("raslogd" flags(ignore-case));
};

log { # new source for HP stuff here
source(s_NON_RFC_COMPLIANT);
filter(f_is_Network); # add the filters you need
destination(<your_final_destination_here>);
flags(final);
};

</your_final_destination_here>

Giselle

Confirmation de:

Réellement syslog-ng ne les reformate pas, mais ajoute la bonne en-tête syslog:

9 Martha 09:44:20 cswc-mo8x-hpsan01 raslogd: 2017/03 / 09-08: 34: 50, [SEC-1203], 53647, WWN 10: 00: 50: eb: 1a: 6c: 21: 38 | FID 128, INFO, cswc-mo8x-SAN01, Informations d'entrée: une entrée réussie à travers TELNET / SSH / RSH. Adresse IP: 1.2.3.4

Ce qui suit est ajouté par le magazine System:

9 Martha 09:44:20 cswc-mo8x-hpsan01

Se reposer - Message original:

raslogd: 2017/03 / 09-08: 34: 50, [SEC-1203], 53647, WWN 10: 00: 50: eb: 1a: 6c: 21: 38 | FID 128, INFO, cswc-mo8x-SAN01, Informations d'entrée: une entrée réussie à travers TELNET / SSH / RSH. Adresse IP: 1.2.3.4

Alors, syslog-ng Je suis d'accord avec vous que ces messages ne correspondent pas RFC.

Quant au réglage du filtre, cela signifie que vous n'avez rien à jouer avec.

Je suis plus habitué à plus rsyslog (où vous pouvez vérifier le message en utilisant une expression régulière, par exemple, à la recherche de

raslogd

- Bien que ce ne soit pas nécessairement efficace).

Cependant, le titre qui peut ajouter syslog-ng, vous donne quelques choses que vous devez faire:

Il paraît que syslog-ng Peut signaler le nom d'hôte que, si je suppose, est autorisé à partir de l'adresse IP source. Ainsi, au moins vous pouvez filtrer l'adresse IP d'origine à l'aide de
https://www.balabit.com/sites/ ... -host
ou
https://www.balabit.com/sites/ ... tmask
:


filter hp_hosts { (host(192.168.0.25)) };


Votre filtre hôte actuel ne fonctionne pas, car il n'y a pas de champs dans les messages HOST - Documents pour

host

Condition de filtre:

C'est à dire syslog-ng OSE compare l'expression du filtre avec le contenu de la macro $ {HOST}.


Cependant, vous avez un nom d'hôte (au moins dans votre exemple) dans le message afin que vous puissiez envisager d'utiliser
https://www.balabit.com/sites/ ... ssage
filtre.

Où - Pour moi, si vous pouvez obtenir une liste d'adresses IP source de tous ces appareils (et je ne peux qu'espérer pour toi pour toi), Ensuite, j'utiliserais un filtre de masque de réseau - Ceci est probablement plus efficace que les autres options.

Pour répondre aux questions, connectez-vous ou registre