Donnerstag, der 03. Oktober 2024 - 16:38 Uhr

Icinga2 / Nagios – Agentless Monitoring von Windows

erstellt am: 05.12.2016 | von: DevLink | Kategorie(n): Linux | Keine Kommentare

Bei diesem Thema werde ich ein bisschen auf Windows Monitoring mit Icinga2/Nagios eingehen. Getestet wurde hier auf Basis von CentOS 7 mit Icinga2.
Ich werde hier keine Anleitung schreiben, wie Icinga oder CentOS installiert oder konfiguriert wird, dafür gibts tolle Dokumentationen der Hersteller.

Mich interessierte eher die Frage, was kann ich mit Icinga alles machen, ohne viel schnickschnack auf meinen Clients einzurichten. Die kurze Antwort: seeeehr seeehr viel.

Aber was brauche ich dafür alles?
Antwort: Plugins.

Was mir alles aktuell so einfällt: Alle gängigen Nagios Plugins, Perl und NRPE sollten über die Kataloge installiert werden. Das wichtigste überhaupt: check_wmi_plus.pl Andere Plugins werde ich in einzelnen Themen noch weiter behandeln.

Was wird denn so alles geprüft? Standardmäßig: CPU, RAM, HDD, ping.
Um Windows Clients überhaupt überwachen zu können, muss der NSClient++ installiert sein.

Ein paar Einträge die in der nsclient.ini geändert werden müssen:

;Section for NRPE (NRPEServer.dll) (check_nrpe) protocol options.
[/settings/NRPE/server]
allow arguments = true
allow commands = true
allow nasty characters = true
insecure = true
CheckSystem=1
CheckDisk=1
allowed hosts =

; TODO
[/modules]
CheckSystem=1
CheckDisk=1
CheckWMI=1

Wenn das soweit eingerichtet ist, dann einfach mal über die Shell testen.
Wenn alles gut klappt sollte es ungefähr so aussehen:


[root@icinga plugins]# ./check_nrpe -H 192.168.1.1
I (0.5.0.62 2016-09-14) seem to be doing fine...


[root@icinga plugins]# ./check_nt -H 192.168.1.1 -p 12489 -v CLIENTVERSION -s password
NSClient++ 0.5.0.62 2016-09-14

Mit dem WMI Plugin sieht das wieder etwas anders aus.
Damit das funktioniert muss man vorher in den Firewalleinstellungen von Windows WMI zulassen.
Am besten nutzt ihr Google um herauszufinden wie man WMI User einrichtet oder allgemein gibts eine sehr schöne FAQ auf der Seite des Plugins.


[root@icinga plugins]# ./check_wmi_plus.pl -H 192.168.1.1 -u 'domain\username' -p 'password' -m checkcpu OK - Average CPU Utilisation 0.10%|'Avg CPU Utilisation'=0.10%;

Das geile an NRPE und check_nt ist einfach, dass man mit Performancecountern einfach alles auslesen kann.
Mit NRPE funktioniert das wunderbar auch über die WMI Schnitstelle. Dazu mehr in den kommenden Beiträgen über diverse Plugins.

Als ich angefangen habe mit Icinga, war ich natürlich extremst aufgeschmissen, darum ist das auch ein bisschen Selbstdokumentation für zukünftige Projekte.
Ich war selbst auf der Suche nach einer simplen Lösung, wie ich Windows Clients ohne große Mühe einrichten kann.
Das es nicht simpel ist, habe auch ich schnell begriffen. Aber es hat doch relativ lange gedauert das ganze System zu verstehen.

An dieser Stelle (auch wenns vielleicht keiner von dene mitbekommt) ein großes Lob an die Entwickler.

Die Definitionen bestehen immer aus drei Teilen. Als erstes haben wir den Command der in der commands.conf definiert wird. Über die services.conf werden die entsprechenden commands mit services eingespeißt. Zum Schluss dann noch die entsprechende Host.conf,
welcher eigentlich keiner großen Änderungen vom Standard bedarf.

Ein paar Beispiele:

Für Nagios dürft ihr die folgenden Definitionen gerne selbst anpassen.

# testserver.conf in /etc/icinga2/conf.d/hosts

object Host "windowstestserver" {
		
display_name = "Ein Windows Server"
import "generic-host"
		
address = "192.168.1.1"
vars.os = "Windows"
		
check_command = "ping"
			
//Festlegen der TimePeriod Variable. 24x7, 9to5 und never in /etc/icinga2/conf.d/timeperiods.conf vordefiniert.
		
vars.sla = "24x7"
}
#Check commands für nrpe und check_wmi_plus in der commands.conf

object CheckCommand "nrpe-arg" {
  import "plugin-check-command"
  command = [ PluginDir + "/check_nrpe" ]
  arguments = {
	"-c" = "$remote_nrpe_command$"
	"-H" = "$address$"
	"-a" = {
          	value= "$remote_nrpe_arguments$" 
          	order = 1
        	}
  }
}

object CheckCommand "check_wmi" {
  import "plugin-check-command"
  command = [ PluginDir + "/check_wmi_plus.pl" ]
 
  arguments = {
    "--inidir" = "$wmi_inidir$"
    "-H" = "$wmi_host$"
    "-A" = "$wmi_authfile_path$"
    "-m" = "$check_mode$"
    "-s" = "$wmi_submode$"
    "-a" = "$wmi_arg1$"
    "-o" = "$wmi_arg2$"
    "-3" = "$wmi_arg3$"
    "-4" = "$wmi_arg4$"
    "-y" = "$wmi_delay$"
    "-w" = "$wmi_warn$"
    "-c" = "$wmi_crit$"
	"-t" = "$wmi_timeout$"
    "--nodatamode" = {
      set_if = "$wmi_nodatamode$"
    }
  }
 
  vars.wmi_authfile_path = "/etc/icinga2/wmi.auth"
  vars.wmi_inidir = "/etc/check_wmi_plus/check_wmi_plus.d"
  vars.wmi_nodatamode = false
  vars.wmi_host = "$address$"
 
}
# Service Checks für Windows Dienste in der extra angelegten windows-services.conf Datei

apply Service "CPU" {
	import "generic-service"
	assign where host.vars.os == "Windows"
	check_command = "nrpe-arg"
	vars.remote_nrpe_command = "checkcpu"
	vars.remote_nrpe_arguments = "ShowAll=short"
} 

apply Service "RAM-Auslastung" {
	import "wmi-service"

	vars.check_mode = "checkmem"
    
	vars.wmi_warn = "90"
	vars.wmi_crit = "95"

	assign where host.vars.os == "Windows"
	ignore where host.vars.disable_wmi
}

apply Service "HDD C:" {
	import "wmi-service"

	vars.check_mode = "checkdrivesize"
	vars.wmi_arg1 = "C:"
	vars.wmi_warn = "90"
	vars.wmi_crit = "95"

	assign where host.vars.os == "Windows"
	ignore where host.vars.disable_wmi
}


apply Service "Network Adapter" {
	import "wmi-service"

	vars.check_mode = "checknetwork"
	vars.wmi_arg1 = "192.168.1"
	vars.wmi_timeout = "30"

	assign where host.vars.os == "Windows"
}

apply Service "Services" {
	import "wmi-service"

	vars.check_mode = "checkservice"
	vars.wmi_arg1 = "auto"
	vars.wmi_warn = "10"
	vars.wmi_crit = "15"
	vars.wmi_timeout = "30"

	assign where host.vars.os == "Windows"
	ignore where host.vars.disable_wmi
}

apply Service "System Uptime" {
	import "generic-service"
	assign where host.vars.os == "Windows"
	check_command = "nrpe-arg"
	vars.remote_nrpe_command = "CheckUptime"
	vars.remote_nrpe_arguments ="MinWarn=2m!MinCrit=1m"
} 

apply Service "Operating System" {
	import "generic-service"
	assign where host.vars.os == "Windows"
	check_command = "nrpe-arg"
	vars.remote_nrpe_command = "Check_WMI"
	vars.remote_nrpe_arguments ="query=Select Version,Caption from win32_OperatingSystem"
} 

################# Checks für mehrere Festplatten ##################

# Eintrag in der entsprechenden host.conf: vars.disk = "D" oder vars.disk2 = "E"
# Der Servvice ist natürlich erweiterbar (copy + paste)

apply Service "HDD 2" {
	import "wmi-service"
	display_name = "HDD " + host.vars.disk + ":" 

	vars.check_mode = "checkdrivesize"
	vars.wmi_arg1 = host.vars.disk
	vars.wmi_warn = "90"
	vars.wmi_crit = "95"

	assign where host.vars.os == "Windows" && host.vars.disk
	ignore where host.vars.disable_wmi
}


apply Service "HDD 3"{
	import "wmi-service"
	display_name = "HDD " + host.vars.disk2 + ":" 

	vars.check_mode = "checkdrivesize"
	vars.wmi_arg1 = host.vars.disk2
	vars.wmi_warn = "90"
	vars.wmi_crit = "95"

	assign where host.vars.os == "Windows" && host.vars.disk2
	ignore where host.vars.disable_wmi
}


Das wären mal die Standardchecks für ein Windowssystem. Zu den einzelnen Services gebe ich mal keine Erklärung ab sondern verweise einfach mal auf folgende links:

Icinga 2 Dokumentation
Check WMI Plus Dokumentation



, , , , , , ,

Keine Kommentare


Bis jetzt noch keine Kommentare

Einen Kommentar abgeben

Themen:

55 Artikel in 6 Kategorien:

  • Exchange Server (16)
  • Linux (6)
  • Microsoft Server (7)
  • Scripting (3)
  • Tutorials (10)
  • Windows (13)