Browse code

Stage a number of system type logs

This could be ansiblesed a more, for now more or less the bash code
from d-g wrapped in a role.

Change-Id: Ia7fe40f05ca394da9a65fef6383d72f29a532e2f

Andrea Frittoli (andreaf) authored on 2017/12/16 02:35:31
Showing 4 changed files
... ...
@@ -21,6 +21,8 @@
21 21
     - export-devstack-journal
22 22
     - apache-logs-conf
23 23
     - devstack-project-conf
24
+    # capture-system-logs should be the last role before stage-output
25
+    - capture-system-logs
24 26
     - role: stage-output
25 27
       zuul_copy_output:
26 28
         { '{{ devstack_conf_dir }}/local.conf': 'logs',
... ...
@@ -40,7 +42,22 @@
40 40
           '/var/log/mysql.log': 'logs',
41 41
           '/var/log/libvirt': 'logs',
42 42
           '/etc/sudoers': 'logs',
43
-          '/etc/sudoers.d': 'logs' }
43
+          '/etc/sudoers.d': 'logs',
44
+          '{{ stage_dir }}/iptables.txt': 'logs',
45
+          '{{ stage_dir }}/df.txt': 'logs',
46
+          '{{ stage_dir }}/pip2-freeze.txt': 'logs',
47
+          '{{ stage_dir }}/pip3-freeze.txt': 'logs',
48
+          '{{ stage_dir }}/dpkg-l.txt': 'logs',
49
+          '{{ stage_dir }}/rpm-qa.txt': 'logs',
50
+          '{{ stage_dir }}/core': 'logs',
51
+          '{{ stage_dir }}/listen53.txt': 'logs',
52
+          '{{ stage_dir }}/deprecations.log': 'logs',
53
+          '/var/log/ceph': 'logs',
54
+          '/var/log/openvswitch': 'logs',
55
+          '/var/log/glusterfs': 'logs',
56
+          '/etc/glusterfs/glusterd.vol': 'logs',
57
+          '/etc/resolv.conf': 'logs',
58
+          '/var/log/unbound.log': 'logs' }
44 59
       extensions_to_txt:
45 60
         - conf
46 61
         - log
47 62
new file mode 100644
... ...
@@ -0,0 +1,20 @@
0
+Stage a number of system type logs
1
+
2
+Stage a number of different logs / reports:
3
+- snapshot of iptables
4
+- disk space available
5
+- pip[2|3] freeze
6
+- installed packages (dpkg/rpm)
7
+- ceph, openswitch, gluster
8
+- coredumps
9
+- dns resolver
10
+- listen53
11
+- unbound.log
12
+- deprecation messages
13
+
14
+**Role Variables**
15
+
16
+.. zuul:rolevar:: stage_dir
17
+   :default: {{ ansible_user_dir }}
18
+
19
+   The base stage directory.
0 20
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+devstack_base_dir: /opt/stack
0 1
new file mode 100644
... ...
@@ -0,0 +1,38 @@
0
+# TODO(andreaf) Make this into proper Ansible
1
+- name: Stage various logs and reports
2
+  shell:
3
+    cmd: |
4
+      sudo iptables-save > {{ stage_dir }}/iptables.txt
5
+      df -h > {{ stage_dir }}/df.txt
6
+
7
+      for py_ver in 2 3; do
8
+          if [[ `which python${py_ver}` ]]; then
9
+              python${py_ver} -m pip freeze > {{ stage_dir }}/pip${py_ver}-freeze.txt
10
+          fi
11
+      done
12
+
13
+      if [ `command -v dpkg` ]; then
14
+          dpkg -l> {{ stage_dir }}/dpkg-l.txt
15
+      fi
16
+      if [ `command -v rpm` ]; then
17
+          rpm -qa | sort > {{ stage_dir }}/rpm-qa.txt
18
+      fi
19
+
20
+      # gzip and save any coredumps in /var/core
21
+      if [ -d /var/core ]; then
22
+          sudo gzip -r /var/core
23
+          sudo cp -r /var/core {{ stage_dir }}/
24
+      fi
25
+
26
+      sudo ss -lntup | grep ':53' > {{ stage_dir }}/listen53.txt
27
+
28
+      # NOTE(andreaf) Service logs are already in logs/ thanks for the
29
+      # export-devstack-journal log. Apache logs are under apache/ thans to the
30
+      # apache-logs-conf role.
31
+      grep -i deprecat {{ stage_dir }}/logs/*.txt {{ stage_dir }}/apache/*.log | \
32
+          sed -r 's/[0-9]{1,2}\:[0-9]{1,2}\:[0-9]{1,2}\.[0-9]{1,3}/ /g' | \
33
+          sed -r 's/[0-9]{1,2}\:[0-9]{1,2}\:[0-9]{1,2}/ /g' | \
34
+          sed -r 's/[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,4}/ /g' |
35
+          sed -r 's/\[.*\]/ /g' | \
36
+          sed -r 's/\s[0-9]+\s/ /g' | \
37
+          awk '{if ($0 in seen) {seen[$0]++} else {out[++n]=$0;seen[$0]=1}} END { for (i=1; i<=n; i++) print seen[out[i]]" :: " out[i] }' > {{ stage_dir }}/deprecations.log