Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Icinga: Definition von individuellen host-abhängigen Limits

Alles rund um die Server (Web-, Mail-, Datenbank-, Datenaustausch-, etc.) die man unter Linux betreiben kann

Moderator: Moderatoren

Antworten
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 2218
Registriert: 10. Nov 2012, 11:00

Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von gehrke »

Moin *

Ich mache grad meine ersten Schritte mit Icinga2.

Beim Monitoring der Anzahl der laufenden Prozesse sehe ich, dass meine Server typischerweise eine kleinere Anzahl an Prozessen (~100 - 200) haben als die Desktops mit Gnome (~250 bis 350).

Der standardmäßige Check hat diese Limits definiert, die so ein 08/15-Gnome üblicherweise überschreitet:
*Warnung: 250
*Kritisch: 400

Dies würde ich gern sauber definieren, sprich: andere Grenzwerte für Server- als für Desktopsysteme.
Der Stand mein aktuellen Config funktioniert leider nur temporär - im Abstand von ca. 30 Sekunden werden entweder die gewünschten Limits angewendet oder die Default-Werte.

/etc/icinga2/zones.d/master/services.conf

Code: Alles auswählen

apply Service "procs" {
  import "generic-service"
  check_command = "procs"

 if (host.vars.type == "desktop" ) {
   vars.procs_critical = 500
   vars.procs_warning = 350
  } else {
   vars.procs_critical = 300
   vars.procs_warning = 200
  }

 command_endpoint = host.vars.client_endpoint
 assign where host.vars.client_endpoint
}
Den Parameter 'type' gebe ich in der Host-Definition mit:

Code: Alles auswählen

object Host "j2.gehrke.local" {
  check_command = "hostalive"
  address = "j2.gehrke.local"
  vars.client_endpoint = name
  vars.os = "Linux"
  vars.type = "desktop"
}
Ich beobachte, dass im Abstand von unter einer Minute unterschiedliche Grenzwerte angelegt werden: Entweder 250.00/400.00 oder 350.00/500.00
Dementsprechend flappt der Status des Services bei identischer Prozesszahl kontinuierlich zwischen OK und Warning.

Bemerkenswert, dass das von mir im else-Bereich definierte Pärchen 200/300 nie zum tragen kommt. Auch nicht bei anderen Hosts, die eine solche Parametrisierung haben:

Code: Alles auswählen

  vars.type = "server"
Jemand einen Tipp, woran das liegen kann?
TNX

Glückauf, gehrke
Keinen Bock mehr auf zentralisierte soziale Netzwerke von US-Konzernen?
Join the fediverse: https://fediverse.party/en/fediverse/ (Friendica, Mastodon, Diaspora und vieles mehr)
Benutzeravatar
Geier0815
Administrator
Administrator
Beiträge: 4393
Registriert: 14. Jun 2004, 09:12

Re: Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von Geier0815 »

Eigentlich würde ich sagen das es so richtig aussieht. Ich bin aber auch nicht der große Held was icinga angeht. Und ich persönlich würde die warn und crit auch eher in den einzelnen hosts definieren, aber wie gesagt...

Was Du mal gucken könntest: Bei
if (host.vars.type == "desktop" ) {
würde ich mal das Leerzeichen vor der schließenden runden Klammer raus nehmen.
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 2218
Registriert: 10. Nov 2012, 11:00

Re: Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von gehrke »

Das Leerzeichen habe ich entfernt - das war es nicht.
TNX
Keinen Bock mehr auf zentralisierte soziale Netzwerke von US-Konzernen?
Join the fediverse: https://fediverse.party/en/fediverse/ (Friendica, Mastodon, Diaspora und vieles mehr)
Benutzeravatar
Geier0815
Administrator
Administrator
Beiträge: 4393
Registriert: 14. Jun 2004, 09:12

Re: Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von Geier0815 »

Check mal ob deine Variable "host.vars.type" überhaupt richtig erkannt wird.
icinga2 object list --type Host
Damit solltest Du den Rückgabewert sehen können, wenn Du im richtigen Host-Abschnitt guckst.
Ansonsten verwundert mich deine Aussage zu den wechselnden Werten bzw den Zeiten in denen das geschieht. Die meisten Ereignisse werden alle 5 Minuten abgefragt, einige minütlich, aber das die Werte dazwischen geändert werden? Sehr merkwürdig. "systemctl reload icinga2" hast Du nach jeder Änderung der Konfiguration ausgeführt? Und Du siehst auch in icingaweb (der grafischen Oberfläche per Browser) das während des Countdowns die Werte sich ändern?
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 2218
Registriert: 10. Nov 2012, 11:00

Re: Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von gehrke »

Geier0815 hat geschrieben: 16. Dez 2020, 23:59 Check mal ob deine Variable "host.vars.type" überhaupt richtig erkannt wird.
icinga2 object list --type Host
Damit solltest Du den Rückgabewert sehen können, wenn Du im richtigen Host-Abschnitt guckst.
Ah, jetzt kommen wir der Sache schon näher. Via CLI hineinzuschauen, so weit war ich bislang noch nicht. Das dürfte sehr hilfreich sein.
TNX

Code: Alles auswählen

# icinga2 object list --name j2.gehrke.local
Object 'j2.gehrke.local' of type 'Zone':
  % declared in '/etc/icinga2/zones.conf', lines 23:1-23:30
  * __name = "j2.gehrke.local"
  * endpoints = [ "j2.gehrke.local" ]
    % = modified in '/etc/icinga2/zones.conf', lines 24:9-24:42
  * global = false
  * name = "j2.gehrke.local"
  * package = "_etc"
  * parent = "master"
    % = modified in '/etc/icinga2/zones.conf', lines 25:9-25:25
  * source_location
    * first_column = 1
    * first_line = 23
    * last_column = 30
    * last_line = 23
    * path = "/etc/icinga2/zones.conf"
  * templates = [ "j2.gehrke.local" ]
    % = modified in '/etc/icinga2/zones.conf', lines 23:1-23:30
  * type = "Zone"
  * zone = ""

Object 'j2.gehrke.local' of type 'Endpoint':
  % declared in '/etc/icinga2/zones.conf', lines 21:1-21:34
  * __name = "j2.gehrke.local"
  * host = ""
  * log_duration = 86400
  * name = "j2.gehrke.local"
  * package = "_etc"
  * port = "5665"
  * source_location
    * first_column = 1
    * first_line = 21
    * last_column = 34
    * last_line = 21
    * path = "/etc/icinga2/zones.conf"
  * templates = [ "j2.gehrke.local" ]
    % = modified in '/etc/icinga2/zones.conf', lines 21:1-21:34
  * type = "Endpoint"
  * zone = ""

Object 'j2.gehrke.local' of type 'Host':
  % declared in '/etc/icinga2/zones.d/master/hosts.conf', lines 1:0-1:29
  * __name = "j2.gehrke.local"
  * action_url = ""
  * address = "j2.gehrke.local"
    % = modified in '/etc/icinga2/zones.d/master/hosts.conf', lines 3:3-3:30
  * address6 = ""
  * check_command = "hostalive"
    % = modified in '/etc/icinga2/zones.d/master/hosts.conf', lines 2:3-2:29
  * check_interval = 300
  * check_period = ""
  * check_timeout = null
  * command_endpoint = ""
  * display_name = "j2.gehrke.local"
  * enable_active_checks = true
  * enable_event_handler = true
  * enable_flapping = false
  * enable_notifications = true
  * enable_passive_checks = true
  * enable_perfdata = true
  * event_command = ""
  * flapping_threshold = 0
  * flapping_threshold_high = 30
  * flapping_threshold_low = 25
  * groups = [ ]
  * icon_image = ""
  * icon_image_alt = ""
  * max_check_attempts = 3
  * name = "j2.gehrke.local"
  * notes = ""
  * notes_url = ""
  * package = "_etc"
  * retry_interval = 60
  * source_location
    * first_column = 0
    * first_line = 1
    * last_column = 29
    * last_line = 1
    * path = "/etc/icinga2/zones.d/master/hosts.conf"
  * templates = [ "j2.gehrke.local" ]
    % = modified in '/etc/icinga2/zones.d/master/hosts.conf', lines 1:0-1:29
  * type = "Host"
  * vars
    * client_endpoint = "j2.gehrke.local"
      % = modified in '/etc/icinga2/zones.d/master/hosts.conf', lines 4:3-4:29
    * os = "Linux"
      % = modified in '/etc/icinga2/zones.d/master/hosts.conf', lines 5:3-5:19
    * type = "desktop"
      % = modified in '/etc/icinga2/zones.d/master/hosts.conf', lines 6:3-6:23
  * volatile = false
  * zone = "master"
Geier0815 hat geschrieben: 16. Dez 2020, 23:59 Ansonsten verwundert mich deine Aussage zu den wechselnden Werten bzw den Zeiten in denen das geschieht. Die meisten Ereignisse werden alle 5 Minuten abgefragt, einige minütlich, aber das die Werte dazwischen geändert werden? Sehr merkwürdig. "systemctl reload icinga2" hast Du nach jeder Änderung der Konfiguration ausgeführt? Und Du siehst auch in icingaweb (der grafischen Oberfläche per Browser) das während des Countdowns die Werte sich ändern?
Reload nach jeder Änderung, ja. Wie oben erwähnt, war ich bislang noch gar nicht so weit, via CLI auf Icinga und den Status zuzugreifen - insofern rührte meine Beobachtung bis dato ausschließlich von icingaweb.
Keinen Bock mehr auf zentralisierte soziale Netzwerke von US-Konzernen?
Join the fediverse: https://fediverse.party/en/fediverse/ (Friendica, Mastodon, Diaspora und vieles mehr)
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 2218
Registriert: 10. Nov 2012, 11:00

Re: Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von gehrke »

Bin noch nicht wirklich weiter gekommen, aber das debug.log zeigt das, was ich beschrieben habe:

Code: Alles auswählen

# tail -f /var/log/icinga2/debug.log | grep 'j2' | grep "perfdata = 'procs"
[2020-12-17 19:26:02 +0100] debug/IdoMysqlConnection: Query: UPDATE icinga_servicestatus SET acknowledgement_type = '0',  active_checks_enabled = '1',  check_command = 'procs',  check_source = 'j2.gehrke.local',  check_type = '0',  current_check_attempt = '1',  current_notification_number = '0',  current_state = '0',  endpoint_object_id = 319,  event_handler_enabled = '1',  execution_time = '0.030935',  flap_detection_enabled = '0',  has_been_checked = '1',  instance_id = 1,  is_flapping = '0',  is_reachable = '1',  last_check = FROM_UNIXTIME(1608229561),  last_hard_state = '0',  last_hard_state_change = FROM_UNIXTIME(1608229561),  last_state_change = FROM_UNIXTIME(1608229561),  last_time_critical = FROM_UNIXTIME(1607862767),  last_time_ok = FROM_UNIXTIME(1608229561),  last_time_unknown = FROM_UNIXTIME(1608227467),  last_time_warning = FROM_UNIXTIME(1608229532),  latency = '0',  long_output = '',  max_check_attempts = '5',  next_check = FROM_UNIXTIME(1608229618),  normal_check_interval = '1',  notifications_enabled = '1',  original_attributes = 'null',  output = 'PROCS OK: 285 processes ',  passive_checks_enabled = '1',  percent_state_change = '99',  perfdata = 'procs=285;350;500;0;',  problem_has_been_acknowledged = '0',  process_performance_data = '1',  retry_check_interval = '0.500000',  scheduled_downtime_depth = '0',  service_object_id = 404,  should_be_scheduled = '1',  state_type = '1',  status_update_time = FROM_UNIXTIME(1608229561) WHERE service_object_id = 404

[2020-12-17 19:26:33 +0100] debug/IdoMysqlConnection: Query: UPDATE icinga_servicestatus SET acknowledgement_type = '0',  active_checks_enabled = '1',  check_command = 'procs',  check_source = 'j2.gehrke.local',  check_type = '0',  current_check_attempt = '1',  current_notification_number = '0',  current_state = '1',  endpoint_object_id = 319,  event_handler_enabled = '1',  execution_time = '0.030845',  flap_detection_enabled = '0',  has_been_checked = '1',  instance_id = 1,  is_flapping = '0',  is_reachable = '1',  last_check = FROM_UNIXTIME(1608229592),  last_hard_state = '0',  last_hard_state_change = FROM_UNIXTIME(1608229561),  last_state_change = FROM_UNIXTIME(1608229592),  last_time_critical = FROM_UNIXTIME(1607862767),  last_time_ok = FROM_UNIXTIME(1608229561),  last_time_unknown = FROM_UNIXTIME(1608227467),  last_time_warning = FROM_UNIXTIME(1608229592),  latency = '0.000592',  long_output = '',  max_check_attempts = '5',  next_check = FROM_UNIXTIME(1608229621),  normal_check_interval = '1',  notifications_enabled = '1',  original_attributes = 'null',  output = 'PROCS WARNING: 289 processes ',  passive_checks_enabled = '1',  percent_state_change = '99',  perfdata = 'procs=289;250;400;0;',  problem_has_been_acknowledged = '0',  process_performance_data = '1',  retry_check_interval = '0.500000',  scheduled_downtime_depth = '0',  service_object_id = 404,  should_be_scheduled = '1',  state_type = '0',  status_update_time = FROM_UNIXTIME(1608229592) WHERE service_object_id = 404
Verkürzt:
Zuerst werden die Limits 350;500 angelegt, 31 Sekunden später 250;400.
Bei 289 Prozessen bleibt die erste Variante grün, die zweite wird gelb.
Keinen Bock mehr auf zentralisierte soziale Netzwerke von US-Konzernen?
Join the fediverse: https://fediverse.party/en/fediverse/ (Friendica, Mastodon, Diaspora und vieles mehr)
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 2218
Registriert: 10. Nov 2012, 11:00

Re: Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von gehrke »

Bin immer noch nicht dahinter gestiegen, wo die Grenzwerte überschrieben werden.

Habe die Config umgestellt und vereinfacht, nun werden die Grenzwerte über Templates für den Host definiert. Das erscheint einfacher und eleganter, zumal auf diesem Wege weitere Funktionalitäten mit wenig Aufwand abgebildet werden können:

Code: Alles auswählen

# cat /etc/icinga2/conf.d/templates.conf 
template Host "generic-host" {
  max_check_attempts = 3
  check_interval = 1m
  retry_interval = 30s

  check_command = "hostalive"
}

template Host "linux-server" {
  import "generic-host"

  vars.os = "Linux"
  vars.type = "server"
  vars.procs_critical = 300
  vars.procs_warning = 200
}
template Host "linux-desktop" {
  import "generic-host"

  vars.os = "Linux"
  vars.type = "desktop"
  vars.procs_critical = 500
  vars.procs_warning = 350
}
[...]

Code: Alles auswählen

# cat /etc/icinga2/zones.d/master/services.conf
[...]
apply Service "procs" {
  import "generic-service"

  check_command = "procs"

  command_endpoint = host.vars.client_endpoint
  assign where host.vars.client_endpoint
}

Code: Alles auswählen

# cat /etc/icinga2/zones.d/master/hosts.conf 
object Host "j2.gehrke.local" {
  import "linux-desktop"

  address = "j2.gehrke.local"
  vars.client_endpoint = name
}
[...]
Sieht IMHO einfacher aus und funktioniert prima, aber ändert leider gar nichts an meinem Problem: Alle 30 Sekuden werden unverändert andere Grenzwerte angelegt. :???:
Keinen Bock mehr auf zentralisierte soziale Netzwerke von US-Konzernen?
Join the fediverse: https://fediverse.party/en/fediverse/ (Friendica, Mastodon, Diaspora und vieles mehr)
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 2218
Registriert: 10. Nov 2012, 11:00

Re: Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von gehrke »

Es liegt zumindest nicht an der statischen Konfiguration. Eine kontinuierliche Abfrage alle 15 Sekunden zeigt keinerlei Veränderung bei den Grenzwerten, die richtig gesetzt sind:

Code: Alles auswählen

# watch -n 15 "date; icinga2  object list --name j2.gehrke.local | grep 'procs_'"
So 27. Dez 08:53:54 CET 2020
    * procs_critical = 500
    * procs_warning = 350
Bleibt das Flapping bei der Anzeige von icingaweb2 und die Ausgaben im debug.log.
Beides springt immer wieder kurzzeitig auf 250.00/400.00. Für beide Werte finden sich keine Hinweise in der Config:

Code: Alles auswählen

# grep -r '400' /etc/icinga2/*
<leer>
Das scheinen also Default-Werte aus dem Code zu sein.
Keinen Bock mehr auf zentralisierte soziale Netzwerke von US-Konzernen?
Join the fediverse: https://fediverse.party/en/fediverse/ (Friendica, Mastodon, Diaspora und vieles mehr)
Benutzeravatar
gehrke
Moderator
Moderator
Beiträge: 2218
Registriert: 10. Nov 2012, 11:00

Re: Icinga: Definition von individuellen host-abhängigen Limits

Beitrag von gehrke »

Zumindest habe ich schon mal jemanden gefunden, der exakt das selbe Problem hat:
https://monitoring-portal.org/t/procs-w ... tical/4072

Nur leider keine Lösung...
Keinen Bock mehr auf zentralisierte soziale Netzwerke von US-Konzernen?
Join the fediverse: https://fediverse.party/en/fediverse/ (Friendica, Mastodon, Diaspora und vieles mehr)
Antworten