Check_MK Konfiguration main.mk

Als Betriebssystem für das Monitoring System wird aktuell ein SuSE Linux Enterprise Server 11 eingesetzt. Weiter stützt sich das System dann auf die Open Monitoring Distribution OMD, die auch die Check_MK Installation beinhaltet. Auf der Homepage gibt es auch Installationspakete für weitere Linux-Distributionen:

Open Monitoring Distribution – http://omdistro.org
Check_MK – https://mathias-kettner.de/check_mk.html

Hier zeige ich eine Check_MK Konfigurationsdatei main.mk. Diese stammt aus einem Monitoringsystem, wurde aber um einige Hosts gekürzt. Auch wurden Hostnamen und IP-Adressen durch „fiktive“ Werte ersetzt. Dadurch kann es sein, dass darauffolgende Definitionen mal auf einen nicht existenten Host zeigen. Aber als Beispiel für eigene Konfigurationen kann es genutzt werden.

all_hosts

In diesem Abschnitt werden die zu überwachenden Hosts eingetragen. Damit die Abfrage richtig funktioniert, müssen die angegebenen Hostnamen auflösbar sein.
Auch können an die Hostnamen getrennt durch das Pipe-Zeichen „|“ Tags definiert werden, die in weiteren Definitionen verwendet werden können.

all_hosts = [ ’srvvmnagios‘,              \
  ’srv1|windows-tag‘,                     \
  ’sap1|windows-tag|sap‘,                 \
  ’srv2|backup|windows-tag‘,              \
  ’srv3|windows-tag|web-tag‘,             \
  ’srv4|windows-tag|citrix‘,              \
  ’srv5|windows-tag|sometag‘,             \
  ’srv6|ping‘,                            \
  ’srv7|windows-tag|owntag‘,              \
  ‚www.google.de|ping‘,                   \
  ’srv8|ping|web-tag‘,                    \
  ’srv9|vmware-tag‘,                      \
  ’switch1|snmp-switch|snmp‘,             \
  ’switch2|snmp-switch|snmp|nobulk‘,      \
  ‚192.168.209.38|snmp-lom|snmp|ILO‘,     \
  ‚192.168.108.53|snmp|snmp-backup-tag‘ , \
  ‚192.168.108.52|snmp‘ ,                 \
  ‚client1|ping‘ ]

Native Nagios Konfigurationsoptionen beeinflussen

Mit der Variable extra_host_conf können native Nagios Optionen beeinflusst werden und z.B. an per Tag gruppierte Hosts oder gar all_hosts übergeben werden.

Die Timeperiod GoodForSleep habe ich über die Nagios Konfiguration ~/etc/nagios/conf.d/timeperiods.cfg eingerichtet.

extra_host_conf[„notification_interval“] = [ ( „0“, ALL_HOSTS ) ]
extra_host_conf[„notification_period“] = [ ( „GoodForSleep“, ALL_HOSTS ) ]
extra_service_conf[„notification_interval“] = [ ( „0“, ALL_HOSTS, ALL_SERVICES ) ]
extra_service_conf[„contact_groups“] = [ ( „admins“, ALL_HOSTS, ALL_SERVICES ) ]
extra_service_conf[„notification_period“] = [ ( „GoodForSleep“, ALL_HOSTS, ALL_SERVICES ) ]

#Auszug der Nagios Konfig timeperiods.cfg
define timeperiod{
timeperiod_name GoodForSleep
alias Only Good For Sleep
sunday 06:00-22:00
monday 06:00-22:00
tuesday 06:00-22:00
wednesday 06:00-22:00
thursday 06:00-22:00
friday 06:00-22:00
saturday 06:00-22:00
}

Einstellungen zu Benachrichtigungen

Mit folgenden Optionen können Einstellungen zu Benachrichtigungen gesetzt werden.

Den eigentlichen Kontakt habe ich über die Nagios Konfig der eingesetzen OMD-Installation gesetzt (~/etc/nagios/conf.d/contact.cfg).

define_contactgroups = „true“
define_contactgroups = {
  „admins“         : „General Admins“,
  „backups-admins“ : „Backup Admins“,
}

contactgroup_members[ „admins“ ] = [ „Administrator“ ]
contactgroup_members[ „backup-admins“ ] = [ „NagiosContact2“ ]

host_contactgroups = [
  ( ‚admins‘, ALL_HOSTS ),
  ( ‚backup-admins‘, [ ‚backup‘ ], ALL_HOSTS ),
]

#Auszug contact.cfg der Nagios Konfig
define contact {
contact_name Administrator
contactgroups admins
alias home
host_notifications_enabled 1
service_notifications_enabled 1
host_notification_period 24×7
service_notification_period 24×7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands service-notify-by-email
host_notification_commands host-notify-by-email
email mail.addresse@domain.com
}

Einrichten von Aliases für Hosts

extra_host_conf[„alias“] = [
  ( „ServerAlias1“, [ „server04“ ], ),
  ( „ServerAlias2“, [ „srv04“ ] ),
  ( „ServerAlias3“, [ „srv13“ ], ),
  ( „ServerAlias4“, [ „srv08“], ),
  ( „ServerAlias5“, [ „srv38“], ),
  ( „ServerAlias6“, [ „srv39“], ),
  ( „ServerAlias7“, [ „srv35“], ),
  ( „ServerAlias8“, [ „srv27“], ),
  ( „ServerAlias9“, [ „srv-e2k7-01“], ),
  ( „ServerAlias10“, [ „srv-e2k7-02“], ),
  ( „ServerAlias11“, [ „srv56“], ),
  ( „ServerAlias12“, [ „srv50“], ),
  ( „ServerAlias13“, [ „srv22“], ),
  ( „ServerAlias14“, [ „srv23“], ),
  ( „ServerAlias15“, [ „srv82“], ),
  ( „ServerAlias16“, [ „sap1“], ),
  ( „ServerAlias17“, [ „sap2“], ),
  ( „ServerAlias18“, [ „sap2“], ),
  ( „ServerAlias19“, [ „192.168.0.1“ ], ),
]

Service Group für alle Services einrichten

service_groups = [ ( „Everything“, ALL_HOSTS, ALL_SERVICES ) ]

Generelle und individuelle Schwellenwerte für Filesysteme definieren

filesystem_default_levels[„levels“] = ( 90.0, 95.0 )

check_parameters += [
  ( { „levels“ : (95.0, 97.0)}, [ „srv1“ ], [ „fs_C:“ ] ),
  ( { „levels“ : (97.0, 98.0)}, [ „srv2“ ], [ „fs_G:“ ] ),
  ( { „levels“ : (95.0, 96.0)}, [ „srv3“ ], [ „fs_D:“ ] ),
  ( { „levels“ : (95.0, 96.0)}, [ „srv4“ ], [ „fs_E:“ ] ),
  ( { „levels“ : (95.0, 96.0)}, [ „srv5“ ], [ „fs_D:“ ] ),
  ( { „levels“ : (95.0, 96.0)}, [ „srvvm01“ ], [ „fs_VMSTORE“ ] ),
  ( { „levels“ : (95.0, 96.0)}, [ „srvvm01“ ], [ „fs_VMSTORE2“ ] ),
  ( { „memory“ : (195.0, 196.0)}, [ „client1“ ], [ „Memory and pagefile“ ] ),
  ( { „memory“ : (195.0, 196.0)}, [ „client1“ ], [ „Memory Usesd“ ] ),
]

Schwellenwerte für TCP-Verbindungen abgefragt durch Netstat definieren

Bei Windows Systemen muss die Installation des Nagios Agent um das netstat-Plugin ergänzt werden. Dazu einfach aus der OMD-Installation das netstat-Plugin (~/share/check_mk/agents/windows/plugins) in den Unterordner plugins des Installationsverzeichnis des Check_MK-Agents auf der Windows-Maschine kopieren. Ggf. den Check_MK-Dienst auf der Windows Seite neu starten.

tcp_conn_stats_default_levels = { „TIME_WAIT“ : (20, 50), „ESTABLISHED“ : (100, 200) }
check_parameters += [
( { „TIME_WAIT“ : (30, 70), „ESTABLISHED“ : (1000, 1200) } , [ „srv3“ ], [ „TCP Connections“ ] ),
( { „TIME_WAIT“ : (300, 350), „ESTABLISHED“ : (100, 150) } , [ „srv2“ ], [ „TCP Connections“ ] ),
( { „TIME_WAIT“ : (300, 350), „ESTABLISHED“ : (100, 150) } , [ „srvvmnagios“ ], [ „TCP Connections“ ] ),
]

check_parameters += [
( { „TIME_WAIT“ : (20, 50), „ESTABLISHED“ : (600, 700) }, [ „srv-dc-01“ ], [ „TCP connections“ ] ),
( { „TIME_WAIT“ : (20, 50), „ESTABLISHED“ : (500, 600) }, [ „srv-dc-02“ ], [ „TCP connections“ ] ),
( { „TIME_WAIT“ : (20, 50), „ESTABLISHED“ : (100, 200) }, [ „srv-dc-03“ ], [ „TCP connections“ ] ),
( { „TIME_WAIT“ : (20, 50), „ESTABLISHED“ : (100, 200) }, [ „srv-dc-04“ ], [ „TCP connections“ ] ),
( { „TIME_WAIT“ : (20, 50), „ESTABLISHED“ : (450, 500) }, [ „srv101“ ], [ „TCP connections“ ] ),
]

TCP-Port Monitoring per Windows netstat

checks += [
  ( „srv1“, „win_netstat“, „TCP Port 80 via win_netstat“, { „local_port“: 80, „state“ : „LISTENING“, „proto“ : „TCP“ }, ),
]

Beispiele für Windows Eventlog Filtering

Das Windows Eventlog sinnvoll zu filtern ist eine harte Aufgabe. Ich habe mittlerweile darauf verzichtet und überwache das Eventlog nur noch auf gewünschte Ereignisse per Powershell-Skript o.ä.

logwatch_patterns = {
‚System‘: [
  ( ‚I‘, ‚UmrdpService*‘ ),
  ( ‚I‘, ‚Print*‘ ),
  ( ‚I‘, ‚TermServDevices Driver*‘ ),
  ( ‚I‘, ‚TermServDevices Der*‘ ),
  ( ‚I‘, ‚Cdrom Fehlerhafter Block bei.*Device.*CdRom1*‘ ),
],
‚Application‘: [
  ( ‚I‘, ‚The Windows default user language is not set to the same primary language as Application*‘ ),
  ( ‚I‘, ‚Microsoft-Windows-User_Profiles_Service.*S-1-5-21-1797234533-318345655-14044532-4500‘ ),
  ( ‚I‘, ‚Group_Policy_Printers.*filter expand‘ ),
  ( ‚I‘, ‚.user registry handles leaked from*‘ ),
],
‚Security‘: [
  ( ‚I‘, ‚Microsoft-Windows-Security-Auditing.*Es wurde versucht, das Kennwort eines Kontos zu*‘ ),
  ( ‚I‘, ‚Microsoft-Windows-Security-Auditing Fehler beim Anmelden eines Kontos*‘ ),
]
}

Beispiele für Einstellungen um per Inventarisierung gefundene Prüfungen zu ignorieren

Hier ist auch das generelle Ignorieren von Windows Eventlogs eingestellt.

ignored_services = [
  ( [ „srv1“ ], [ „fs_G:“, „fs_H:“, „fs_I:“, „fs_J:“, „fs_K:“, „fs_L:“, „fs_M:“ ] ),
  ( [ „srv2“ ], [ „fs_N:“ ] ),
  ( [ „sap1“ ], [ „fs_Z:“, „ESX*“ ] ),
  ( [ „clnt1“ ], [ „SMB“ ] ),
  ( [ „srv1“ ], [ „Multipath *“, „fs_VM*“ ] ),
  ( [ „srv3“ ], [ „CUPS Queue ue-ra220“ ] ),
  ( [ „clnt2“ ], [ „Interface IntelR 82579LM Gigabit Network Connection-QoS Packet Scheduler-0000“, „Interface IntelR 82579LM Gigabit Network Connection-WFP LightWeight Filter-0000“, „Interface WAN Miniport*“ ] ),
  ( [ „switch1“ ], [ „Some Port Description“ ] ),
  ( [ „someoldciscoswitch1“ ], [ „Power internal power supply“ ] ),
  ( [ „snmp-switch“ ], ALL_HOSTS, [ „Interface\s\d+“ ]),
  ( [ „windows-tag“ ], ALL_HOSTS, [ „LOG Application“, „LOG Security“, „LOG System“ ]),
  ( [ „windows-tag“ ], ALL_HOSTS, [ „LOG Directory Service“ ]),
  ( [ „client1“ ], ALL_HOSTS, [ „Memory and pagefile“, „Memory used“ ])
]

Einstellungen zur Windows Speicherauslastung

memory_win_default_levels = {
  „memory“ : (90.0, 95.0),
  „pagefile“ : (768, 384),
  „average“ : 60,
}

Prozesse überwachen

Hier die Einstellungen, um zu prüfen ob u.a. „1-15“ Prozess laufen.

checks += [
  ( „srv1“, „ps“, „JAVA“, ( „java.exe“, 1, 1, 1, 1 ) ),
  ( „srv2“, „ps“, „JAVA2“, ( „java.exe“, 1, 1, 1, 1 ) ),
  ( „srv3“, „ps“, „SomeProcess“, ( „SomeProcess.exe“, 1, 1, 1, 1 ) ),

  # Checks with Macro names
  ( ’srv1′, ‚ps‘, ’svchost.exe‘, {
    ‚process‘: ’svchost.exe‘,
    ‚warnmin‘: 1,
    ‚warnmax‘: 15,
    ‚okmin‘: 1,
    ‚okmax‘: 15,
    #’cpulevels‘: (90.0, 98.0),
    #’cpu_average‘: 15,
    ‚virtual_levels‘: 1000, #000000,
    ‚resident_levels‘: 1000, #000000,
  }
)
,
]

Windows Prozess-Monitoring per WMI

Um WMI nutzen zu können muss das wmicchecks-Plugin auf den Windows Agent in den Plugins-Ordner kopiert werden. Das Skript befindet sich auch unter „~/share/check_mk/agents/windows…“.

checks += [
  ( „srv1“, „wmic_process“, „svchost.exe-srv1“, ( „svchost.exe“, 700, 750, 10, 15, 80, 90)),
  ( „srv2“, „wmic_process“, „svchost.exe-srv2“, ( „svchost.exe“, 700, 750, 100, 150, 80, 90)),
  ( „srv3“, „wmic_process“, „svchost.exe-srv3“, ( „svchost.exe“, 500, 600, 100, 150, 80, 90)),
]

Prüfung ob Windows-Dienste laufen

Die Namen der Dienste müssen dem Kurznamen in der Windows-Maschine entsprechen. Die Namen können z.B. per services.msc und dann in den Eigenschaften der Dienste gefunden werden. Dort ist es die Angabe Dienstname.

checks += [
  ( „srv1“, „services“, „MSSQLSERVER“, None ),
  ( „srv1“, „services“, „someservice1“, None ),
  ( „srv1“, „services“, „someservice2“, None ),
  ( „srv2“, „services“, „someservice3“, None ),
  ( „srv2“, „services“, „someservice4“, None ),
  ( „srv2“, „services“, „someservice5“, None ),
]

Mögliche Einstellungen für SNMP-Communities

snmp_communities = [
  ( „ReadCommunitiy1“, [„192.168.1.5“] ),
  ( „ReadCommunitiy2“, [„192.168.0.2“] ),
  ( „ReadCommunitiy3“, [„192.168.1.1“] ),
  ( „ReadCommunitiy4“, [„srv6“] ),
  ( „ReadCommunitiy5“, [„snmp-lom“], ALL_HOSTS ),
  ( „ReadCommunitiy6“, [„snmp-switch“], ALL_HOSTS ),
]

Beispiele für Legacy-Checks

extra_nagios_conf += r“““

define command {
  command_name check-disk-smb
  command_line /opt/omd/versions/1.20/lib/nagios/plugins/check_disk_smb -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -W DOMAIN -u su -p PW -s $ARG3$
}

define command {
  command_name check-http
  command_line /opt/omd/versions/1.20/lib/nagios/plugins/check_http -I $HOSTADDRESS$
}

define command {
  command_name check-http-401
  command_line /opt/omd/versions/1.20/lib/nagios/plugins/check_http -I $HOSTADDRESS$ -e 401
}

define command {
  command_name check_3par_pd
  command_line /opt/omd/versions/1.20/lib/nagios/plugins/check_3par $HOSTADDRESS$ $ARG1$ check_pd
}

define command {
  command_name check_3par_node
  command_line /opt/omd/versions/1.20/lib/nagios/plugins/check_3par $HOSTADDRESS$ $ARG1$ check_node
}

define command {
  command_name check_tcp2
  command_line /opt/omd/versions/1.20/lib/nagios/plugins/check_tcp -H $HOSTADDRESS$ -4 -p $ARG1$

}
„““

legacy_checks += [
(( „check_tcp2!9001“, „TCP Port 9001“, True), [ „srv1“ ] ),
(( „check-disk-smb!90!95!SomeShareName“, „SMB“, True), [ „srv1“ ] ),
(( „check-http!/“, „Homepage“, True), [ „srv2“ ] ),
(( „check_3par_port_fc!3paradm“, „3PAR FC Port“, True), [ „some3PAR-serviceproc“ ] ),
(( „check_mssql!srv1!admin!SomePW“, „MSSQL Connection“, True), [ „srv1“ ] ),
(( „check_mssql!srv1!admin!SomePW!’select count(*) from tablename‘ -r ‚632‘ -w 2 -c 5“, „MSSQL Query“, True), [ „srv1“ ] ),
]

Definition von Hostgroups mit Angabe einzelner Server oder über Host-Tags

define_hostgroups = „true“
host_groups = [
( „SLA“, [ „srv1“, \
    „srv2“, \
    „srv3“, \
    „srv4, ] ),
( „Switches“, [ „switch1“, \
    „switch2“, \
    „switch3“, \
    „switch4“, \
    „switch5“, ] ),
( „DCs“, [ „srv-dc-01“, \
    „srv-dc-02“, \
    „srv-dc-03“, \
    „srv-dc-04“, ] ),
( „Clients“, [ „clnt01“, \
    „clnt02“, \
    „clnt03“, \
    „clnt04“, ] ),
( „VMware“, [ „srv-vm01“, \
    „srv-vm02“, \
    „srv-vm03“, \
    „srv-vm04“, \
    „srv-vm05“ ] ),

( „Citrix Farm“, [„citrix“], ALL_HOSTS ),
( „SAP“, [„sap“], ALL_HOSTS),

]

Beispiel um die Möglichkeit VMware zu prüfen zu nutzen

Auf dem VMware-Server muss dafür SSH freigeschaltet sein.

# VM01
datasource_programs.append((
  „/omd/sites/site/share/check_mk/agents/special/agent_vsphere -u ‚root‘ -s ‚password‘ „
  „-i hostsystem,virtualmachine,datastore,counters –direct „
  „–hostname ’srvvm01′ –timeout 5 192.168.0.32“, [ „srvvm01“ ]
))

Schreibe einen Kommentar