Checking Kubernetes Log With kubectl logs Command

In Kubernetes, viewing logs is essential for troubleshooting and monitoring the health of applications. The kubectl logs command is primarily used to fetch the logs from a particular pod.

This guide provides various practical examples of checking logs for pods and other resources in Kubernetes.

kubectl logs command

Kubernetes logs give insights into the behavior of your applications running within pods. Each container in a pod generates logs, and kubectl logs helps you fetch those logs.

By default, this command retrieves logs from the first container of a pod, but you can specify other containers when necessary.

Basic syntax:

kubectl logs <pod_name> [container_name] [flags]

Viewing logs of a single container pod

To view logs of a single container pod, simply specify the pod name. Here’s an example of fetching logs from a pod named dev-app-pod:

kubectl logs dev-app-pod

Output

2024-09-13T12:35:47.123Z Starting application...
2024-09-13T12:35:47.456Z Connecting to database...
2024-09-13T12:35:48.789Z Listening on port 8080...
2024-09-13T12:35:50.123Z Application started successfully.

Viewing logs of a multi-container pod

In a multi-container pod, each container generates its own log. To view logs from a specific container, you can add the container name to the kubectl logs command.

kubectl logs my-multi-container-pod -c my-container

Output.

2024-09-13T12:36:00.123Z Initializing container `my-container`.
2024-09-13T12:36:00.789Z Processing incoming request...
2024-09-13T12:36:02.567Z Sending response...

Viewing logs with timestamps

By default, logs do not show timestamps. To view logs with timestamps, use the --timestamps flag.

kubectl logs dev-app-pod --timestamps

Output.

2024-09-13T12:35:47.123Z Starting application...
2024-09-13T12:35:47.456Z Connecting to database...
2024-09-13T12:35:48.789Z Listening on port 8080...
2024-09-13T12:35:50.123Z Application started successfully.

Streaming logs (Real-time logs)

To stream logs in real time as they are being generated, use the -f (follow) option.

kubectl logs dev-app-pod -f

Output.

2024-09-13T12:35:50.123Z Application started successfully.
2024-09-13T12:36:00.456Z Received request from 192.168.1.10
2024-09-13T12:36:00.789Z Processing request...
2024-09-13T12:36:01.234Z Sending response...

This command will continuously stream new log entries until you stop it with Ctrl+C.

Viewing logs of previous instances of pods

When a pod is restarted, you can view the logs from its previous instance using the --previous flag.

kubectl logs dev-app-pod --previous

Output.

2024-09-13T12:30:40.123Z Shutting down application...
2024-09-13T12:30:41.567Z Application stopped.

Filtering logs by tail count

If you're only interested in the most recent log entries, you can use the --tail flag to display a limited number of logs.

kubectl logs dev-app-pod --tail=5

Output.

2024-09-13T12:35:48.789Z Listening on port 8080...
2024-09-13T12:35:50.123Z Application started successfully.
2024-09-13T12:36:00.456Z Received request from 192.168.1.10
2024-09-13T12:36:00.789Z Processing request...
2024-09-13T12:36:01.234Z Sending response...

Using labels to fetch logs

Instead of fetching logs by specifying pod names, you can fetch logs by labels. This is particularly useful when you have many pods with the same label.

kubectl logs -l app=dev-app

Output.

2024-09-13T12:35:47.123Z Starting application...
2024-09-13T12:35:47.456Z Connecting to database...
2024-09-13T12:35:48.789Z Listening on port 8080...
2024-09-13T12:35:50.123Z Application started successfully.

This will retrieve logs from all pods with the label app=dev-app.

Viewing logs from a specific node

If you need to troubleshoot logs from pods running on a particular node, use the following command to list logs from that node.

kubectl logs -l app=dev-app --field-selector spec.nodeName=node-1

Output.

2024-09-13T12:40:22.123Z Pod on node-1 initializing...
2024-09-13T12:40:23.456Z Starting the service on node-1.

This retrieves logs from pods on a node labeled node-1.

Conclusion

The kubectl logs command is a powerful tool for monitoring and troubleshooting Kubernetes applications. By leveraging various options and flags, you can gain deep insights into your pod's behavior, filter logs effectively, and even stream logs in real time for immediate feedback.

✍️
Author: Hitesh Jethwa has more than 15+ years of experience with Linux system administration and DevOps. He likes to explain complicated topics in easy to understand way.