10.09.2011, 13:51 UTC+2

Sie sind nicht angemeldet.

neu: NagiosFS Remote Monitoring per FUSE

reichhart

Anfänger

Beiträge: 10

Anzahl Nagios-Server: 2

Nagios-Version(en): 2.10

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 300

Anzahl Services: 5200

Betriebssystem(e): Debian

Plugin-Version(en): 1.4.10

Sonstige Addon's: check_remote_by_http

1

22.08.2011, 17:32

neu: NagiosFS Remote Monitoring per FUSE

Hi,

wer experimentierfreudig ist und nicht vor kryptischen man-pages und lückenhafter Doku zurückschreckt, kann gerne mal NagiosFS testen.
Eine kurze Beschreibung steht unter http://www.nagiosfs.de und wird noch erweitert werden.
NagiosFS basiert zwar wie ein gewisser Simple-Script-Hack namens Nagus auch auf FUSE (man will ja nicht auf der LKML gesteinigt werden ;-) ), ist aber kein Mapping für Werte von Localhost, sondern bietet UDP-basiertes Remote-Monitoring in "Echtzeit". Hier ein kurzes Beispiel:

Quellcode

1
2
3
4
5
6
7
8
$ cat /nagiosfs/w302/cat/nagios-cache/fsckage
146
$ cat /nagiosfs/w302/diskusage/home/www
30
$ cat /nagiosfs/w302/process/syslog-ng
1
$ cat /nagiosfs/mail01/mailqsize/admiM
2


Der Overhead von FUSE scheint übrigens nicht sehr gross zu sein: Ein "cat" auf eine virtuelle Datei dauert bei mir oft nur 1 bis 2 ms.

Kritiken gerne per PM.

reichhart

LaMi

Geek

Beiträge: 3 578

Geburtstag: 22.09.

Geschlecht: Männlich

Wohnort: München

Beruf: Berater / Entwickler

Anzahl Nagios-Server: x

Nagios-Version(en): 3.2.x

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: x

Anzahl Services: x

Betriebssystem(e): SLES,CentOS,Debian

Plugin-Version(en): x

NagVis-Version: Git

NDO-Version: -

IDO-Version: -

Perfparse-Version: -

Sonstige Addon's: PNP, Check_MK, Livestatus, Multisite

2

22.08.2011, 19:20

Hallo,

hört sich interessant an. Wie kommen denn die Daten aus dem Nagios Prozess in das Filesystem? Ich habe schon gelesen, dass auf dem Nagios Host der knoerred laufen muss, aber wie kommt der an die Daten?

Grüße,
Lars

reichhart

Anfänger

Beiträge: 10

Anzahl Nagios-Server: 2

Nagios-Version(en): 2.10

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 300

Anzahl Services: 5200

Betriebssystem(e): Debian

Plugin-Version(en): 1.4.10

Sonstige Addon's: check_remote_by_http

3

22.08.2011, 21:21

Hi,

> aber wie kommt der an die Daten?

Ganz einfach: Direkt. :)
Sprich: Über die a) offizielle und die b) halb-deprecated Kernelschnittstelle und die c) POSIX-API.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$ grep '"/sys/.*;' knoerre/do_check_*.c
knoerre/do_check_loadmulti.c:  devptr = stpcpy(devcarrier, "/sys/class/net/");
knoerre/do_check_netlinksdown.c:  devptr = stpcpy(devcarrier, "/sys/class/net/");
$ grep '"/proc/.*;' knoerre/do_check_*.c
knoerre/do_check_cmdline.c:    p = stpcpy(p, "/proc/");
knoerre/do_check_countsockets.c:  strcpy(procfilename, "/proc/net/");
knoerre/do_check_cpu.c:  i = open("/proc/stat", O_RDONLY);
knoerre/do_check_cpu.c:    i = open("/proc/stat", O_RDONLY);
knoerre/do_check_ctxtswitch.c:  i = open("/proc/stat", O_RDONLY);
knoerre/do_check_ctxtswitch.c:  i = open("/proc/stat", O_RDONLY);
knoerre/do_check_dummy.c:  i = open("/proc/uptime", O_RDONLY);
knoerre/do_check_load1.c:  i = open("/proc/loadavg", O_RDONLY);
knoerre/do_check_load1.c:    fd = open("/proc/stat", O_RDONLY);
knoerre/do_check_load15.c:  i = open("/proc/loadavg", O_RDONLY);
knoerre/do_check_load15.c:    fd = open("/proc/stat", O_RDONLY);
knoerre/do_check_load5.c:  i = open("/proc/loadavg", O_RDONLY);
knoerre/do_check_load5.c:    fd = open("/proc/stat", O_RDONLY);
knoerre/do_check_loadmulti.c:  i = open("/proc/sys/kernel/hostname", O_RDONLY);
knoerre/do_check_loadmulti.c:  i = open("/proc/swaps", O_RDONLY);
knoerre/do_check_loadmulti.c:  i = open("/proc/loadavg", O_RDONLY);
knoerre/do_check_loaduser.c:    p = stpcpy(name, "/proc/");
knoerre/do_check_longprocp.c:  stpcpy(p,"/proc/uptime");
knoerre/do_check_longprocp.c:    p = stpcpy(name, "/proc/");
knoerre/do_check_longprocp.c:    p = stpcpy(name, "/proc/");
knoerre/do_check_longuserprocesses.c:  stpcpy(p,"/proc/uptime");
knoerre/do_check_longuserprocesses.c:    p = stpcpy(name, "/proc/");
knoerre/do_check_longuserprocesses.c:    p = stpcpy(name, "/proc/");
knoerre/do_check_mountopts.c:  i=open("/proc/mounts", O_RDONLY);
knoerre/do_check_nettraf.c:  rf = open("/proc/net/dev", O_RDONLY);
knoerre/do_check_nettraf.c:  rf = open("/proc/net/dev", O_RDONLY);
knoerre/do_check_proccount.c:  i = open("/proc/loadavg", O_RDONLY);
knoerre/do_check_proccountovz.c:    p = stpcpy(pname, "/proc/");
knoerre/do_check_proccounttg.c:  i = open("/proc/loadavg", O_RDONLY);
knoerre/do_check_process.c:    p = stpcpy(pathname, "/proc/");
knoerre/do_check_swap.c:  i = (int32_t) open("/proc/meminfo", O_RDONLY);
knoerre/do_check_swap.c:    p = stpcpy(bufp, "/proc/meminfo empty\n");
knoerre/do_check_swaps.c:  i = (int64_t) open("/proc/swaps", O_RDONLY);
knoerre/do_check_swaps.c:    l = stpcpy(bufp, "/proc/swaps empty - no swaps present\n");
knoerre/do_check_uptime.c:  i = open("/proc/uptime", O_RDONLY);


Ansonsten könnte man nicht so niedrige Latenzen erreichen.
Das soll jetzt nicht heissen, dass ich für Latenzen meine Seele verkaufen würde, aber es hat auch angenehme Seiteneffekte wie hohe Zuverlässigkeit und relativ schnelle Reaktion auch bei sehr hoher Load.

reichhart

LaMi

Geek

Beiträge: 3 578

Geburtstag: 22.09.

Geschlecht: Männlich

Wohnort: München

Beruf: Berater / Entwickler

Anzahl Nagios-Server: x

Nagios-Version(en): 3.2.x

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: x

Anzahl Services: x

Betriebssystem(e): SLES,CentOS,Debian

Plugin-Version(en): x

NagVis-Version: Git

NDO-Version: -

IDO-Version: -

Perfparse-Version: -

Sonstige Addon's: PNP, Check_MK, Livestatus, Multisite

4

22.08.2011, 22:23

Zitat

Ganz einfach: Direkt. :)


Ach so. Hm, dann hab ich das ganze wohl falsch verstanden. Das ist also ein Agent um die Daten aus den zu überwachenden Hosts rauszuquetschen, richtig? Und die erfassten Daten werden dann auf dem Nagios Host als Filesystem angeboten um dann von dort aus ins Nagios gepumpt zu werden?

Btw. Ein Bildchen könnte helfen.

Grüße,
Lars

reichhart

Anfänger

Beiträge: 10

Anzahl Nagios-Server: 2

Nagios-Version(en): 2.10

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 300

Anzahl Services: 5200

Betriebssystem(e): Debian

Plugin-Version(en): 1.4.10

Sonstige Addon's: check_remote_by_http

5

23.08.2011, 13:21

Übersicht NagiosFS/ngtx

Zitat


Das ist also ein Agent um die Daten aus den zu überwachenden Hosts rauszuquetschen, richtig?


Ich würde einen simplen, 20 KB großen Daemon zwar nicht als Softwareagenten bezeichnen ;), aber ja - es funktioniert so.

Zitat


Und die erfassten Daten werden dann auf dem Nagios Host als Filesystem angeboten um dann von dort aus ins Nagios gepumpt zu werden?


Ins Nagios oder woanders hin, ja. Damit ist ja jedem frei gestellt, wie er das nutzen will. Eine Anwendung ist beispielsweise als "Wrapper", wenn Kunden eigene Tools oder Monitoringsysteme oder was auch immer verwenden: Sie bekommen dann einen einfachen "Blick" auf den remote host.

Zitat


Btw. Ein Bildchen könnte helfen.


äh...oh... ja... thx! Es steht jetzt unter www.nagiosfs.de ganz unten unter "Overview" verlinkt.

reichhart

LaMi

Geek

Beiträge: 3 578

Geburtstag: 22.09.

Geschlecht: Männlich

Wohnort: München

Beruf: Berater / Entwickler

Anzahl Nagios-Server: x

Nagios-Version(en): 3.2.x

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: x

Anzahl Services: x

Betriebssystem(e): SLES,CentOS,Debian

Plugin-Version(en): x

NagVis-Version: Git

NDO-Version: -

IDO-Version: -

Perfparse-Version: -

Sonstige Addon's: PNP, Check_MK, Livestatus, Multisite

6

23.08.2011, 20:37

Ok, verstanden. Danke.

Zitat

Ich würde einen simplen, 20 KB großen Daemon zwar nicht als Softwareagenten bezeichnen ;), aber ja - es funktioniert so.


Ach so. Agent ist also ein Unwort für die Monströsitäten, die sonst so erschaffen werden? :D

Btw. schau dir mal die check_mk Agenten an, die sind sogar noch kleiner (Bis auf windoof). Sind eben nur Shell-Scripte.

reichhart

Anfänger

Beiträge: 10

Anzahl Nagios-Server: 2

Nagios-Version(en): 2.10

Verteiltes Monitoring: Nein

Redundantes Monitoring: Nein

Anzahl-Hosts: 300

Anzahl Services: 5200

Betriebssystem(e): Debian

Plugin-Version(en): 1.4.10

Sonstige Addon's: check_remote_by_http

7

23.08.2011, 21:33

Zitat


Ach so. Agent ist also ein Unwort für die Monströsitäten, die sonst so erschaffen werden? :D


Es gibt zwar einige "Lösungen" aus dem Nagios-Umfeld, die man so bezeichnen könnte, aber ich meinte ganz neutral den informationstechnischen Begriff (http://de.wikipedia.org/wiki/Software-Agent).

Zitat


Btw. schau dir mal die check_mk Agenten an, die sind sogar noch kleiner (Bis auf windoof). Sind eben nur Shell-Scripte.


check_mk ist mir natürlich bekannt, aber es ist für extreme Situationen nicht so geeignet wie meine Software. Wenn eine Kiste eine Load/min von 1600 hat, der syslog schon per OOM-Kill in den Datenhimmel ging und ein ssh-Login unmöglich ist, liefert Dir Nagios mit meiner Software immer noch Werte, um nachvollziehen zu koennen, was gerade abgeht.

Außerdem haben Kollegen von mir schon nachweisen können, dass beispielsweise auf grossen OpenVZ-Hosts mit vielen virtuellen Instanzen auch einfache Scripts die Load sehr deutlich hochtreiben können, wenn auf jedem virtuellen Server so ein Script läuft, auch wenn das Script 95% seiner Existenz nur per "sleep" schläft.

Es handelt sich um ein größeres Netz mit fast 3000 Hosts und sehr vielen PHP-Anwendungen. Manch einer kann sich gar nicht vorstellen, wie man mit PHP einen Server rocken kann. ;)

Oder ein anderes Beispiel bez. Loadverursachung und Performance von Scripts:
Vor längerer Zeit hatte ich ein Script, das mir aus der Nagios-Konfiguration bestimmte Daten ausgelesen hat. Irgendwann lief es 8 Minuten wegen der inzwischen gewachsenen Konfiguration. Dann habe ich es in raw C geschrieben und es brauchte nur noch einen Sekundenbruchteil.
(Um irgendwelchen Flames vorzubeugen ;): Ja, ich weiss wie man Schleifen vermeidet, kenne wichtige Bash-interne EnvVars und kenne Perfomancetricks. Aber es war halt Bash.)

reichhart

Ähnliche Themen