|
farndt3
Anmeldungsdatum: 13. Februar 2020
Beiträge: Zähle...
|
Hallo, ich verwende eine leicht angepasste Version eines NRPE Scriptes zur Überwachung meiner KVM VMs mit virsh.
Das funktioniert auch gut nur seit 18.04 bekomme ich Probleme mit SED und AWK.
Das Script an sich läuft ohne Probleme durch. Nur der NRPE User (nagios, ohne loginshell usw.) Hat Probleme beim sed und awk.
der virsh Befehl an sich wird ausgeführt und liefert die gleiche Ausgabe mit und ohne Serviceuser. Betroffene Zeile:
LIST=$(virsh list --all | sed '1,2d' | sed '/^$/d'| awk '{print $2":"$3}') Es scheint als entfernt der die Gesamte ausgabe. | Id Name State
----------------------------------------------------
- Spielwiese shut off
|
Hat jemand eine Idee warum das so ist? Verwendete Script
https://github.com/sadsfae/nagios-plugins/blob/master/nagios-plugin-check-libvirt/check_libvirt
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13242
|
Herzlich willkommen hier im Forum! farndt3 schrieb:
ich verwende eine leicht angepasste Version eines NRPE Scriptes zur Überwachung meiner KVM VMs mit virsh.
Das funktioniert auch gut nur seit 18.04 bekomme ich Probleme mit SED und AWK.
Das Script an sich läuft ohne Probleme durch. Nur der NRPE User (nagios, ohne loginshell usw.) Hat Probleme beim sed und awk.
Mal sehen; vielleicht liegt es auch woanders.
der virsh Befehl an sich wird ausgeführt und liefert die gleiche Ausgabe mit und ohne Serviceuser.
Kannst Du diese Ausgabe mal bitte posten? Also virsh list --all.
Betroffene Zeile:
LIST=$(virsh list --all | sed '1,2d' | sed '/^$/d'| awk '{print $2":"$3}') Es scheint als entfernt der die Gesamte ausgabe. | Id Name State
----------------------------------------------------
- Spielwiese shut off
|
Da ist kein einziger Doppelpunkt, obwohl da in jeder Zeile einer sein muss. Soll das die Ausgabe der ganzen Zeile sein, oder was ist das?
Hat jemand eine Idee warum das so ist?
Also, Deine Zeile nimmt die Ausgabe von virsh list --all, löscht die ersten beiden Zeilen und alle Leerzeilen. Für die übrig gebliebenen gibt es Feld 2 und Feld 3 getrennt durch einen Doppelpunkt aus. Das ganze kann man auch mit einem sed oder einem awk erreichen.
Verwendete Script
https://github.com/sadsfae/nagios-plugins/blob/master/nagios-plugin-check-libvirt/check_libvirt
Oh jeh. Das Skript hat einige Merkwürdigkeiten, z.B. Zeile 55 | for host in $(echo $LIST)
|
Das würde man natürlich so schreiben Und da sind noch ein paar Dinge, die man einfacher machen könnte. Es wäre auch gut, Du postest mal exakt das Skript, das Du ausführst. Du erwähnst ja, dass Du es geändert hast gegenüber dem Original.
|
|
farndt3
(Themenstarter)
Anmeldungsdatum: 13. Februar 2020
Beiträge: 8
|
Hallo, Ich habe versucht das script so weit zu testen das ich der Meinung bin das der sed, awk teil Probleme macht.
Der virsh teil an sich gibt eine Ausgabe an den nrpe dienst, wenn man den teil im script entfernt. der virsh list --all befehl gibt folgendes aus. | Id Name State
----------------------------------------------------
- Spielwiese shut off
|
Das Exakte script: 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 | #!/bin/sh
# check_kvm - Check that a virtual machine is running.
# Written by Karl Rink <krink@csun.edu>
#
#----------------------------------------------------------------------
# COPYRIGHT : 12.2010 California State University, Northridge
#
# AUTHOR : Karl Rink
#
# BELONGS TO : Qemu/Kvm Nagios Integration
#
# DESCRIPTION : Runs "virsh list" and returns the available vms
#
# $Revision: 1.0 $
#
# Permission to use, copy, modify, distribute, and sell this software
# and its documentation for any purpose is hereby granted without fee,
# provided that the above copyright notice appear in all copies and that
# both that copyright notice and this permission notice appear in
# supporting documentation.
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHOR OR SUSE BE LIABLE FOR ANY CLAIM, DAMAGES
# OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
# THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#----------------------------------------------------------------------
# Install: Put this script in nagios client directory libexec/check_kvm
# As a nagios nrpe plugin, add the following line to your client nrpe.cfg
# command[virt_check_kvm]=/opt/nagios/libexec/check_kvm
# No sudo is necessary if you simply add nagios user to the libvirt group
# libvirtd:x:118:nagios
PATH=/bin:/usr/bin:/sbin:/usr/sbin
export PATH
#LIST=$(virsh list --all | sed '1,2d' | sed '/^$/d'| awk '{print $2":"$3}')
LIST=$(virsh list --all | sed '1,2d' | sed '/^$/d'| awk '{print $2":"$3}')
if [ ! "$LIST" ]; then
EXITVAL=3 #Status 3 = UNKNOWN (orange)
echo "Unknown guests"
exit $EXITVAL
fi
OK=0
WARN=0
CRIT=0
NUM=0
for host in $(echo $LIST)
do
name=$(echo $host | awk -F: '{print $1}')
state=$(echo $host | awk -F: '{print $2}')
NUM=$(expr $NUM + 1)
if ! grep -Fxq $name "/usr/lib/nagios/plugins/check_kvm_exceptionlist"
then
case "$state" in
laufend|running) OK=$(expr $OK + 1) ;;
Ausgeschaltet) WARN=$(expr $WARN + 1) ;;
shutdown|shut*|crashed) CRIT=$(expr $CRIT + 1) ;;
*) CRIT=$(expr $CRIT + 1) ;;
esac
fi
done
EXITVAL=0
#if [ "$NUM" -eq "$OK" ]; then
# EXITVAL=0 #Status 0 = OK (green)
#fi
#
if [ "$WARN" -gt 0 ]; then
EXITVAL=1 #Status 1 = WARNING (yellow)
fi
if [ "$CRIT" -gt 0 ]; then
EXITVAL=2 #Status 2 = CRITICAL (red)
fi
echo Hosts:$NUM Laufend:$OK Aus:$WARN CRIT:$CRIT - $LIST
exit $EXITVAL
|
Es ist um die Deutschen Begriffe und eine Exceptionlist erweitert.
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13242
|
Also, ich packe Deine Beispielausgabe von virsh in eine Datei "data": Id Name State
----------------------------------------------------
- Spielwiese shut off Wenn ich die ursprüngliche Zeile darauf loslasse, gibt es dies: | $ sed '1,2d' data | sed '/^$/d'| awk '{print $2":"$3}'
Spielwiese:shut
|
Das kann man ersetzt durch einen einzigen awk-Aufruf: | $ awk 'NR>2 && !/^$/ {print $2 ":" $3}' data
Spielwiese:shut
|
Die Frage ist, was ist vor 18.04 dabei herausgekommen, so dass jetzt das Skript nicht mehr funktioniert? Da die Werte in den Feldern offensichtlich Leerzeichen enthalten können (siehe "shut off"), frage ich mich, wie das überhaupt mal sauber funktioniert hat. Hat sich die Ausgabe von virsh vielleicht geändert? Muss man noch eine Option mitgeben, um ein bestimmtes Format zu bekommen? Vielleicht will man auch eher so etwas | $ awk 'NR>2 && !/^$/ {s=""; for (i=3;i<=NF;++i) { if(s) s=s " "; s=s $i}; print $2 ":" s}' data
Spielwiese:shut off
|
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
rklm schrieb: Hat sich die Ausgabe von virsh vielleicht geändert? Muss man noch eine Option mitgeben, um ein bestimmtes Format zu bekommen?
Das originale Script (wie oben verlinkt) funktioniert auch bei mehreren VMs. Über die Sinnhaftigkeit lässt sich streiten, aber es gibt eine einzeilige Ausgabe mit allen relevanten Infos. Beispiel:
root@usrv[~]› virsh list --all
Id Name Status
--------------------------
2 arch running
- para shut
root@usrv[~]› bash VirshList.bash
hosts:2 OK:1 WARN:0 CRIT:1 - arch:running para:shut
root@usrv[~]› Wäre also interessant das angepasste Script zu sehen.
|
|
farndt3
(Themenstarter)
Anmeldungsdatum: 13. Februar 2020
Beiträge: 8
|
Hallo, Das Script geht auch bei 18.04 wenn man es als normaler User ausführt. Jedoch der NRPE User triggert jedes mal "Unknown guests". Dieser Läuft als Dienstnutzer Nagios. Ich kann den Fehler auf mehreren Testsystemen nachstellen, also gehe ich nicht von einem auf eine Maschine Beschränkten Problem aus. Die awk Zeile habe ich versuchsweise eingebaut, diese wirft den selben Fehler, mit einem normalen Benutzer geht es jedoch. Ich mutmaße es wurde etwas geändert bei den berechtigungen von Dienstnutzern.
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Darf der Nutzer denn überhaupt auf libvirt zugreifen? "Unknown guests" wirft das Script, wenn das erstellen der LISTE-Variable fehlschlägt.
|
|
farndt3
(Themenstarter)
Anmeldungsdatum: 13. Februar 2020
Beiträge: 8
|
Ja darf er. Wenn ich die Zeile auf den Reinen Virshbefehl eindampfe kommt am Server Folgendes statt Unknown guest an. | Hosts:4 Laufend:0 Aus:0 CRIT:4 - Id Name State ----------------------------------------------------
|
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Was kommt denn bei sudo -u DerNagiosBenutzer bash -c "virsh list --all" für eine Ausgabe?
|
|
farndt3
(Themenstarter)
Anmeldungsdatum: 13. Februar 2020
Beiträge: 8
|
Interessant:
/usr/lib/nagios/plugins# sudo -u nagios bash -c "virsh list --all"
Id Name State
Ich hatte mit einer anderen Version des Befehles keinen Erfolg. Es scheint als kommt keine Komplette Antwort.
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Und du hast Ubuntu oder was anderes? Versuch es mal so: Am Kopf des Scriptes zwei Variablen einfügen (ausprobieren, welche greift geht auch) export LIBVIRT_DEFAULT_URI="qemu:///system"
export VIRSH_DEFAULT_CONNECT_URI=$LIBVIRT_DEFAULT_URI Eigentlich™ führt der Befehl virsh list den Befehl virsh --connect qemu:///system list aus, zumindest bei Ubuntu. Dafür ist in Ubuntu eine Variable gesetzt, die das vereinfacht, bei anderen Systemen, wie bspw. Debian oder wie in meinem Fall arch, ist das nicht der Fall. Da muss man entweder die Variable setzen - oder den Aufruf anpassen. Welche auf deinem System greift, kannst du ausprobieren. Oder beide reinschreiben.
|
|
farndt3
(Themenstarter)
Anmeldungsdatum: 13. Februar 2020
Beiträge: 8
|
Also ich habe zwei sachen versucht.
das von dir genannte eingetragen, was leider keinen Erfolg brachte.
Und das direkte eintragen des virsh connect als befehl im script, was auch keine Veränderung Brachte. Der User hat aber libvirt als Gruppe. Update: die sudo -u methode funktioniert
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
sudo -u nagios bash -c "virsh --connect qemu:///system list --all"
bringt das selbe Ergebnis?
|
|
farndt3
(Themenstarter)
Anmeldungsdatum: 13. Februar 2020
Beiträge: 8
|
| sudo -u nagios bash -c "virsh --connect qemu:///system list --all"
|
Brachte das Korrekte Ergebnis Ein Neustart des NRPE Dienstes hat den rest gerichtet. Das Script läuft nun mit "virsh --connect qemu:///system list --all" Danke für eure Hilfe ☺
|
|
ChickenLipsRfun2eat
Anmeldungsdatum: 6. Dezember 2009
Beiträge: 12067
|
Und das Problem besteht unter 18.04 Server? Und seit welchem Release? Könnte man ggf. ins Wiki eintragen, falls das noch mal jemand braucht.
|