Kategorien
Randnotiz

Ansible: Logparser

Ich musste mal Ansible Zweck entfremden: Auslesen von Log Dateien und Anzeige nur bestimmter Einträge.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
---
- hosts: hal52b
  gather_facts: no
  vars:
   nummer: [
            " 500",
            " 404"
           ]
 
  tasks:
   - name: Suche Error in Access LOG
     shell:
       chdir: /var/log/apache2
       cmd: "grep -ari -e '^halsec.de' other_vhosts_access.log | cat"
     changed_when: false
     ignore_errors: true
     become: true
     register: grep_cmd
 
   - debug:
       msg: "{{item| regex_findall('\\s\\d{3,5}')}} gefunden"
     when: "item| regex_findall('\\s\\d{3,5}')|intersect(nummer)|length != 0"
     loop: "{{ grep_cmd.stdout_lines }}"

Beim Aufruf des Playbooks lese ich eine Apache Log Datei aus. Mit grep findet die erste grobe Selektion statt. In dem Debug Loop nehmen wir uns Zeile für Zeile und vergleichen 3-5 stellige gefundene Errorcodes mit einer definierten Liste. Kommt der Errorcode in der Liste vor, wird er „OK“ – alle nicht vorkommenden Errorcode werden „skipped“ ausgegeben.

Die Ausgabe kann über Konfiguration der ansible.cfg beeinflusst werden. Bei langen Debug Ausgaben kann es sinnvoll sein, „skipped“ Nachrichten auszublenden. Auch farblich kann die Ausgabe angepasst werden.

Angepasste Farben in der ansible.cfg
1
2
3
4
5
[defaults]
display_skipped_hosts = yes
[colors]
ok = purple
skip = dark gray

„display_skipped_hosts = no“ unterdrückt alle skipped Nachrichten. Da kann/muss mit gespielt werden. Viel Spaß!