Skip to main content

Pod Logs

The logs collectors can be used to include logs from running pods. This collector can be included multiple times with different label selectors and/or namespaces.

Parameters

In addition to the shared collector properties, the logs collector accepts the following parameters:

selector (Required)

The selector to use to find matching pods. If this selector returns more than one pod, all matching pods will be collected.

Multiple selectors are possible, but the results are a logical AND, not a logical OR, meaning that the resulting set of pod may not contain the expected results (possibly no results). It is best to use separate collectors to generate individual logs for different service pods.

Example

The pod labels in service1-deployment.yaml:

metadata:
name: service1
labels:
app.kubernetes.io/name: service1

The collector YAML in support-bundle.yaml:

  collectors:
- logs:
selector:
- app.kubernetes.io/name=service1
name: service1/logs
namespace (Optional)

The namespace to search for the pod selector in. If this is not provided, it will default to the current namespace of the context.

name (Required)

Name will be used to create a folder in the support bundle where logs will be saved. Name can contain slashes to create a path in the support bundle.

containerNames (Optional)

ContainerNames is an array of container names. If specified, logs for each container in the list will be collected. If omitted, logs for all containers in the pod are collected, including init containers.

limits (Optional)

Provided to limit the size of the logs. By default, this is set to maxLines: 10000. Either maxAge or maxLines can be provided, but not both.

limits.maxAge

The duration of the maximum oldest log to include. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". For duration string format see time.ParseDuration.

limits.maxLines

The number of lines to include, starting from the newest.

limits.maxBytes

The maximum file size of a collected pod log. Defaults to an integer value of 5000000 bytes, which is 5MB. The value can only be set as an integer value for the maxBytes limit.

timestamps (Optional)

When set to true, each log line will be prefixed with an RFC3339 timestamp from the Kubernetes API. Defaults to false.

Example Collector Definition

apiVersion: troubleshoot.sh/v1beta2
kind: SupportBundle
metadata:
name: sample
spec:
collectors:
- logs:
selector:
- app=api
namespace: default
name: api/container/logs
containerNames:
- api
- node
limits:
maxAge: 720h
- logs:
selector:
- app=backend
namespace: default
name: backend/container/logs
containerNames:
- db
limits:
maxLines: 1000
maxBytes: 5000000

Included resources

When this collector is executed, it will include the following files in a support bundle:

/cluster-resources/pods/logs/[namespace]/[pod-name]/[container-name].log

The actual log files are stored under cluster-resources/pods/logs/. A symlink is created at /[name]/[pod-name]/[container-name].log pointing to the actual file, so logs can be accessed via either path.

This will be created for each pod that matches the selector.

If any errors are encountered, the following file will be created:

/[name]/[pod-name]/[container-name]-errors.json

[
"failed to get log stream: container node is not valid for pod api-6fd69d8f78-tmtf7"
]