hazet68
Anmeldungsdatum: 13. Februar 2017
Beiträge: Zähle...
|
Hallo zusammen, ich versuche gerade anhand von http://svops.com/blog/snmp-traps-with-logstash/ snmptraps zu sammeln.
Derzeit scheitere ich an der Übergabe der Variablen TRAPDOPTS an den snmptrapd. in der /etc/default/snmptrapd habe ich folgendes eingetragen:
| TRAPDOPTS=" -A -Lf /var/log/snmptrap -p /var/run/snmptrapd.pid -m ALL -F '{ \"type\": \"snmptrap\", \"timestamp\": \"%04y-%02m-%02l %02h:%02j:%02k\", \"host_ip\":\"%a\", \"trapEnterprise\": \"%N\", \"trapSubtype\": \"%q\", \"trapType\": %w, \"trapVariables\": \"%v\" }\n' "
|
Beim starten des snmptrapd meckert er mir dann couldn't open "type": -- errno 110 ("Connection timed out")
ins logfile. Der Start des snmptrapd mit dem Aufruf | snmptrapd -A -Lf /var/log/snmptrap -p /var/run/snmptrapd.pid -m ALL -F '{ \"type\": \"snmptrap\", \"timestamp\": \"%04y-%02m-%02l %02h:%02j:%02k\", \"host_ip\":\"%a\", \"trapEnterprise\": \"%N\", \"trapSubtype\": \"%q\", \"trapType\": %w, \"trapVariables\": \"%v\" }\n'
|
klappt problemlos. Ich habe dann mal mit set -x versucht das Quting ein bisschen zu zerlegen und da sieht man dann, daß die shell die Variable TRAPDOPTS versaut: | export TRAPDOPTS=" -A -Lf /var/log/snmptrap -p /var/run/snmptrapd.pid -m ALL -F '{ \"type\": \"snmptrap\", \"timestamp\": \"%04y-%02m-%02l %02h:%02j:%02k\", \"host_ip\":\"%a\", \"trapEnterprise\": \"%N\", \"trapSubtype\": \"%q\", \"trapType\": %w, \"trapVariables\": \"%v\" }\n' "
+ export 'TRAPDOPTS= -A -Lf /var/log/snmptrap -p /var/run/snmptrapd.pid -m ALL -F '\''{ "type": "snmptrap", "timestamp": "%04y-%02m-%02l %02h:%02j:%02k", "host_ip":"%a", "trapEnterprise": "%N", "trapSubtype": "%q", "trapType": %w, "trapVariables": "%v" }\n'\'' '
+ TRAPDOPTS=' -A -Lf /var/log/snmptrap -p /var/run/snmptrapd.pid -m ALL -F '\''{ "type": "snmptrap", "timestamp": "%04y-%02m-%02l %02h:%02j:%02k", "host_ip":"%a", "trapEnterprise": "%N", "trapSubtype": "%q", "trapType": %w, "trapVariables": "%v" }\n'\'' '
snmptrapd $TRAPDOPTS
+ snmptrapd -A -Lf /var/log/snmptrap -p /var/run/snmptrapd.pid -m ALL -F ''\''{' '"type":' '"snmptrap",' '"timestamp":' '"%04y-%02m-%02l' '%02h:%02j:%02k",' '"host_ip":"%a",' '"trapEnterprise":' '"%N",' '"trapSubtype":' '"%q",' '"trapType":' %w, '"trapVariables":' '"%v"' '}\n'\'''
|
Hat jemand eine Idee wie ich hier besser quoten könnte? Danke, Harry
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
Hallo und herzlich willkommen hier im Forum! Wenn die Shell das auswerten soll, wird es knifflig. Wie Du mit dem kleinen Testprogramm auf meiner Benutzerseite sehen kannst, werden die einzelnen Teil des Formatstrings in mehrere Argumente zerhackt: 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 | $ TRAPDOPTS=" -A -Lf /var/log/snmptrap -p /var/run/snmptrapd.pid -m ALL -F '{ \"type\": \"snmptrap\", \"timestamp\": \"%04y-%02m-%02l %02h:%02j:%02k\", \"host_ip\":\"%a\", \"trapEnterprise\": \"%N\", \"trapSubtype\": \"%q\", \"trapType\": %w, \"trapVariables\": \"%v\" }\n' "
$ args.sh $TRAPDOPTS
24 args
arg[1]: <-A>
arg[2]: <-Lf>
arg[3]: </var/log/snmptrap>
arg[4]: <-p>
arg[5]: </var/run/snmptrapd.pid>
arg[6]: <-m>
arg[7]: <ALL>
arg[8]: <-F>
arg[9]: <'{>
arg[10]: <"type":>
arg[11]: <"snmptrap",>
arg[12]: <"timestamp":>
arg[13]: <"%04y-%02m-%02l>
arg[14]: <%02h:%02j:%02k",>
arg[15]: <"host_ip":"%a",>
arg[16]: <"trapEnterprise":>
arg[17]: <"%N",>
arg[18]: <"trapSubtype":>
arg[19]: <"%q",>
arg[20]: <"trapType":>
arg[21]: <%w,>
arg[22]: <"trapVariables":>
arg[23]: <"%v">
arg[24]: <}
'>
|
Mir fällt im Moment kein halbwegs übersichtlicher Weg ein das hinzubekommen. Wenn die Shell auf jeden Fall eine bash ist, dann kann man das mit einem Array erschlagen: 1
2
3
4
5
6
7
8
9
10
11
12
13 | $ TRAPDOPTS=(-A -Lf /var/log/snmptrap -p /var/run/snmptrapd.pid -m ALL -F '{ "type": "snmptrap", "timestamp": "%04y-%02m-%02l %02h:%02j:%02k", "host_ip":"%a", "trapEnterprise": "%N", "trapSubtype": "%q", "trapType": %w, "trapVariables": "%v" }\n')
$ args.sh "${TRAPDOPTS[@]}"
9 args
arg[1]: <-A>
arg[2]: <-Lf>
arg[3]: </var/log/snmptrap>
arg[4]: <-p>
arg[5]: </var/run/snmptrapd.pid>
arg[6]: <-m>
arg[7]: <ALL>
arg[8]: <-F>
arg[9]: <{ "type": "snmptrap", "timestamp": "%04y-%02m-%02l %02h:%02j:%02k", "host_ip":"%a", "trapEnterprise": "%N", "trapSubtype": "%q", "trapType": %w, "trapVariables": "%v" }
>
|
Muss das überhaupt in eine Variable? Kannst Du das Format ggf. aus einer Datei lesen lassen?
|
hazet68
(Themenstarter)
Anmeldungsdatum: 13. Februar 2017
Beiträge: 3
|
Naja, das wäre halt der Standardweg um den snmptrad-daemon zu konfigurieren und per init zu starten. Ich würde mich da ungern vom Standard weg bewegen. Wenn ich mich da weg bewege, dann kann ich das ja auch gleich im init-Script hart verdrahten...
|
hazet68
(Themenstarter)
Anmeldungsdatum: 13. Februar 2017
Beiträge: 3
|
Also:
Die Zuweisung über ein Array funktioniert auch nicht. Ich habe jetzt in /etc/defaults/snmptrapd folgendes reingenommen: | TRAPDOPTS=(-A -Lf /var/log/snmptrap -p /run/snmptrapd.pid -m ALL -F '{ \"type\": \"snmptrap\", \"timestamp\": \"%04y-%02m-%02l %02h:%02j:%02k\", \"host_ip\":\"%a\", \"trapEnterprise\": \"%N\", \"trapSubtype\": \"%q\", \"trapType\": %w, \"trapVariables\": \"%v\" }\n')
|
und /etc/init.d/snmptrapd beim Aufruf enstprechend angepasst: | start-stop-daemon --quiet --start --oknodo --exec /usr/sbin/snmptrapd \
-- "${TRAPDOPTS[@]}"
|
Der Daemon startet dann aber nicht sondern wirft einen Fehler: 1
2
3
4
5
6
7
8
9
10
11
12
13 | systemctl status snmptrapd.service
snmptrapd.service - LSB: SNMP Trap daemon
Loaded: loaded (/etc/init.d/snmptrapd; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2017-02-13 15:08:27 CET; 6min ago
Docs: man:systemd-sysv-generator(8)
Feb 13 15:08:26 scanlog systemd[1]: Starting LSB: SNMP Trap daemon...
Feb 13 15:08:27 scanlog snmptrapd[10477]: /etc/init.d/snmptrapd: 10: /etc/default/snmptrapd: Syntax error: "(" unexpected
Feb 13 15:08:27 scanlog systemd[1]: snmptrapd.service: Control process exited, code=exited status=2
Feb 13 15:08:27 scanlog systemd[1]: Failed to start LSB: SNMP Trap daemon.
Feb 13 15:08:27 scanlog systemd[1]: snmptrapd.service: Unit entered failed state.
Feb 13 15:08:27 scanlog systemd[1]: snmptrapd.service: Failed with result 'exit-code'.
|
Ich habe die Änderung wieder rückgängig gemacht und den Parameter im init-Script hart verdrahtet. Nicht sehr schön...
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12822
|
hazet68 schrieb:
Die Zuweisung über ein Array funktioniert auch nicht. Ich habe jetzt in /etc/defaults/snmptrapd folgendes reingenommen: | TRAPDOPTS=(-A -Lf /var/log/snmptrap -p /run/snmptrapd.pid -m ALL -F '{ \"type\": \"snmptrap\", \"timestamp\": \"%04y-%02m-%02l %02h:%02j:%02k\", \"host_ip\":\"%a\", \"trapEnterprise\": \"%N\", \"trapSubtype\": \"%q\", \"trapType\": %w, \"trapVariables\": \"%v\" }\n')
|
Du hast die Backslashe nicht rausgeworfen, wie ich das gezeigt habe. Das bedeutet, dass Du zu viele in Deiner Variablen hast.
und /etc/init.d/snmptrapd beim Aufruf enstprechend angepasst: | start-stop-daemon --quiet --start --oknodo --exec /usr/sbin/snmptrapd \
-- "${TRAPDOPTS[@]}"
|
Wie wird die /etc/defaults/snmptrapd denn eingebunden? Und: welche Shell ist in der Shebang von /etc/init.d/snmptrapd deklariert? Ggf. musst Du nur hier von /bin/sh auf /bin/bash ändern. Die sh kennt nämlich keine Arrays.
Der Daemon startet dann aber nicht sondern wirft einen Fehler: 1
2
3
4
5
6
7
8
9
10
11
12
13 | systemctl status snmptrapd.service
snmptrapd.service - LSB: SNMP Trap daemon
Loaded: loaded (/etc/init.d/snmptrapd; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2017-02-13 15:08:27 CET; 6min ago
Docs: man:systemd-sysv-generator(8)
Feb 13 15:08:26 scanlog systemd[1]: Starting LSB: SNMP Trap daemon...
Feb 13 15:08:27 scanlog snmptrapd[10477]: /etc/init.d/snmptrapd: 10: /etc/default/snmptrapd: Syntax error: "(" unexpected
Feb 13 15:08:27 scanlog systemd[1]: snmptrapd.service: Control process exited, code=exited status=2
Feb 13 15:08:27 scanlog systemd[1]: Failed to start LSB: SNMP Trap daemon.
Feb 13 15:08:27 scanlog systemd[1]: snmptrapd.service: Unit entered failed state.
Feb 13 15:08:27 scanlog systemd[1]: snmptrapd.service: Failed with result 'exit-code'.
|
Ist das wirklich der Dämon oder die Shell? Ich denke, es ist eher letzteres.
Ich habe die Änderung wieder rückgängig gemacht und den Parameter im init-Script hart verdrahtet. Nicht sehr schön...
Wie gesagt, das war vermutlich nicht nötig (s.o.).
|