Skip to content

Commit

Permalink
[container_log] Add pods support
Browse files Browse the repository at this point in the history
In Kubernetes/OpenShift rotated logs have no symbolic link in
/var/log/containers and they cannot be retrieved using `oc logs` either,
so there is no way to get these rotated logs in a SOS report.

This patch proposes extending the `container_log` to make it also
capable of retrieving logs from `var/log/pods` using a plugin boolean
option called `rotated`.

When retrieving the pods directory, all logs will be retrieved from it
regardless of size, as it is implicit that the intent is to get all
rotated logs.

This patch also adds the `maxage` option to the `container_log` plugin,
allowing the retrieval of logs that are not older than `maxage` hours.

This affects bot the normal containers log gathering as well as the pods
gathering.

Closes #3677
Signed-off-by: Gorka Eguileor <[email protected]>
  • Loading branch information
Akrog committed Jun 20, 2024
1 parent 606bd81 commit 20212ba
Showing 1 changed file with 30 additions and 5 deletions.
35 changes: 30 additions & 5 deletions sos/report/plugins/container_log.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,51 @@
# See the LICENSE file in the source distribution for further information.

import os
from sos.report.plugins import Plugin, IndependentPlugin
from sos.report.plugins import Plugin, IndependentPlugin, PluginOpt


class ContainerLog(Plugin, IndependentPlugin):

short_desc = 'All logs under /var/log/containers'
plugin_name = 'container_log'
logdir = '/var/log/containers/'
poddir = '/var/log/pods/'
files = (logdir, )

option_list = [
PluginOpt('rotated', default=False, val_type=bool,
desc='get all logs from /var/log/pods regardless of size, '
'which will include all rotated logs'),
PluginOpt('maxage', default=None, val_type=int,
desc='gather only logs with `mtime` not older than this many'
' hours')
]

def setup(self):
maxage = self.get_option('maxage')
sizelimit = None
# Remove size limit from containers logs when getting rotated, since
# they are just symlinks to the pods logs
if self.get_option('rotated'):
# This should not happen, but better safe than sorry
if not os.path.exists(self.poddir):
self._log_warn(f"could not find {self.poddir}, skipping it")
else:
sizelimit = 0
self.add_copy_spec(self.poddir, sizelimit=sizelimit,
maxage=maxage)

if self.get_option('all_logs'):
self.add_copy_spec(self.logdir)
self.add_copy_spec(self.logdir, maxage=maxage)
else:
self.collect_subdirs()
self.collect_subdirs(sizelimit=sizelimit, maxage=maxage)

def collect_subdirs(self, root=logdir):
def collect_subdirs(self, root=logdir, sizelimit=None, maxage=None):
"""Collect *.log files from subdirs of passed root path
"""
for dir_name, _, _ in os.walk(root):
self.add_copy_spec(self.path_join(dir_name, '*.log'))
self.add_copy_spec(self.path_join(dir_name, '*.log'),
sizelimit=sizelimit,
maxage=maxage)

# vim: set et ts=4 sw=4 :

0 comments on commit 20212ba

Please sign in to comment.