Log Tailing
Skaffold has built-in support for tailing logs for containers built and deployed by Skaffold on your cluster
to your local machine when running in either dev
, debug
or run
mode.
Note
Log Tailing is enabled by default fordev
and debug
.Log Tailing is disabled by default for
run
mode; it can be enabled with the --tail
flag.
Log Structure
To view log structure, run skaffold run --tail
in examples/microservices
skaffold run --tail
will produce an output like this
For every log line, skaffold will prefix the pod name and container name if they’re not the same.
In the above example, leeroy-web-75ff54dc77-9shwm
is the pod name and leeroy-web
is container name
defined in the spec for this deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: leeroy-web
labels:
app: leeroy-web
spec:
replicas: 1
selector:
matchLabels:
app: leeroy-web
template:
metadata:
labels:
app: leeroy-web
spec:
containers:
- name: leeroy-web
image: gcr.io/k8s-skaffold/leeroy-web
ports:
- containerPort: 8080
Skaffold will choose a unique color for each container to make it easy for users to read the logs.
JSON Parsing
In some cases, logs may simply be JSON objects.
If you know this ahead of time and know that you’d like to only get specific fields from these objects,
you can add a deploy.logs.jsonParse
stanza to your skaffold.yaml
file to configure which fields you’d like to see.
apiVersion: skaffold/v2beta27
kind: Config
build:
artifacts:
- image: skaffold-example
deploy:
logs:
jsonParse:
fields: ["message", "severity"]
kubectl:
manifests:
- k8s-*
In the above example, only the fields message
and severity
will be gathered from the incoming JSON logs.
So, if the logs coming through were structured like so:
[getting-started] {"timestampSeconds":1643740871,"timestampNanos":446000000,"severity":"INFO","thread":"main","message":"Hello World!","context":"default"}
with the deploy.logs.jsonParse
config added, they would look like this:
[getting-started] message: Hello World!, severity: INFO