Seit einer Woche läuft auf einem Laptop bei mir zu Hause der ELK-Stack und sammelt per Syslog die Logs aller meiner Devices an drei Standorten. In unregelmässigen Abständen werde ich hier über Erkenntnisse berichten, die ich dank der zentralisierten Analyse der Logs gemacht habe.
Heute geht es um snmpd und Mounts, deren Attribute der Daemon nicht auslesen kann. Dies äussert sich auf ELK mit folgenden Log-Meldungen:
... snmpd[1234] Cannot statfs /var/lib/docker/containers/: Permission denied ... ... snmpd[1234] Cannot statfs /var/lib/docker/aufs/mnt/: Permission denied ... ... snmpd[1234] Cannot statfs /run/docker/netns/: Permission denied ... ... snmpd[1234] Cannot statfs /run/user/1000/gvfs: Permission denied ... ... snmpd[1234] Cannot statfs /sys/kernel/debug/tracing: Permission denied ...
Ich versuchte mit verschiedenen Einträgen in /etc/snmp/snmpd.conf das auslesen dieser Mounts zu verhindern. Zuerst mittels der Direktive ignoredisk:
... ignoredisk /run/user/* ignoredisk /var/lib/docker/containers/* ignoredisk /var/lib/docker/aufs/mnt/* ignoredisk /run/docker/netns/* ignoredisk /sys/kernel/debug/tracing ...
Das Blacklisting hatte leider keine Wirkung.
Auch der umgekehrte Weg, das Whitelisting, funktionierte nicht:
... #includeAllDisks 10% disk / 10% ...
Nach längeren Recherchen im Netz musste ich zum Schluss kommen, dass man solche Meldungen nicht mit Anpassungen an der SNMP-Konfiguration unterdrücken kann. Der Grund:
Because as I wrote in comment #2, snmpd reads /proc/mounts and runs statfs on each entry there. If any statfs call fails it logs an error. So, either stafs must not fail (i.e. no „net:[4026532288]“ entries in /proc/mounts) or snmpd must be fixed to log something more useful and only once.
snmpd iteriert über die Einträge in /proc/mounts und führt ein statfs auf jeden Mountpoint durch. Das ist der Moment, in dem die Fehlermeldung geloggt wird.
Eine potentielle Lösung:
There needs to be an option to just make snmpd not try to look at these sort of mount points. The problem is that ignoreDisk only works for the devices, not mount points and a tmpfs has no „device“ name to match it by.
Quelle: snmpd storage reports all tmpfs and floods logfile
Dem Problem begegne ich nun, indem ich mit rsyslog solche snmpd-Fehlermeldungen ausfiltere und nicht zu Logstash übermittle. Der Filter dazu lautet:
... if $programname == 'snmpd' and $msg contains 'statfs' then { stop } ...