OpenShift - View node logs using the oc adm node-logs command

by
Jeremy Canfield |
Updated: June 01 2025
| OpenShift articles
If you are not familiar with the oc command, refer to OpenShift - Getting Started with the oc command.
The oc get nodes command will return the list of nodes.
~]$ oc get nodes
NAME STATUS ROLES AGE VERSION
my-node-edge-lm6wz Ready infra,worker 519d v1.23.5+012e945
my-node-edge-pmlls Ready infra,worker 519d v1.23.5+012e945
my-node-infra-c4v5h Ready infra,worker 519d v1.23.5+012e945
my-node-infra-mc8rc Ready infra,worker 519d v1.23.5+012e945
my-node-infra-p9cjv Ready infra,worker 519d v1.23.5+012e945
my-node-master-0 Ready master 522d v1.23.5+012e945
my-node-master-1 Ready master 522d v1.23.5+012e945
my-node-master-2 Ready master 522d v1.23.5+012e945
my-node-worker-lk5vm Ready compute,worker 61d v1.23.5+012e945
my-node-worker-pj4r4 Ready compute,worker 61d v1.23.5+012e945
The oc adm node-logs command can then be used to display the node logs. I would first go with this command to get the list of available logs in the master nodes.
~]$ oc adm node-logs --role master --path=/
ip-10-29-146-118.us-east-2.compute.internal README
ip-10-29-146-118.us-east-2.compute.internal audit/
ip-10-29-146-118.us-east-2.compute.internal btmp
ip-10-29-146-118.us-east-2.compute.internal btmp-20240401
ip-10-29-146-118.us-east-2.compute.internal chrony/
ip-10-29-146-118.us-east-2.compute.internal containers/
ip-10-29-146-118.us-east-2.compute.internal crio/
ip-10-29-146-118.us-east-2.compute.internal etcd/
ip-10-29-146-118.us-east-2.compute.internal glusterfs/
ip-10-29-146-118.us-east-2.compute.internal journal/
ip-10-29-146-118.us-east-2.compute.internal kube-apiserver/
ip-10-29-146-118.us-east-2.compute.internal lastlog
ip-10-29-146-118.us-east-2.compute.internal oauth-apiserver/
ip-10-29-146-118.us-east-2.compute.internal oauth-server/
ip-10-29-146-118.us-east-2.compute.internal openshift-apiserver/
ip-10-29-146-118.us-east-2.compute.internal openvswitch/
ip-10-29-146-118.us-east-2.compute.internal osd-audit/
ip-10-29-146-118.us-east-2.compute.internal ovn/
ip-10-29-146-118.us-east-2.compute.internal pods/
ip-10-29-146-118.us-east-2.compute.internal private/
ip-10-29-146-118.us-east-2.compute.internal qemu-ga/
ip-10-29-146-118.us-east-2.compute.internal samba/
ip-10-29-146-118.us-east-2.compute.internal sssd/
ip-10-29-146-118.us-east-2.compute.internal tallylog
ip-10-29-146-118.us-east-2.compute.internal wtmp
ip-10-29-20-28.us-east-2.compute.internal README
ip-10-29-20-28.us-east-2.compute.internal audit/
ip-10-29-20-28.us-east-2.compute.internal btmp
ip-10-29-20-28.us-east-2.compute.internal btmp-20240401
ip-10-29-20-28.us-east-2.compute.internal chrony/
ip-10-29-20-28.us-east-2.compute.internal containers/
ip-10-29-20-28.us-east-2.compute.internal crio/
ip-10-29-20-28.us-east-2.compute.internal etcd/
ip-10-29-20-28.us-east-2.compute.internal glusterfs/
ip-10-29-20-28.us-east-2.compute.internal journal/
ip-10-29-20-28.us-east-2.compute.internal kube-apiserver/
ip-10-29-20-28.us-east-2.compute.internal lastlog
ip-10-29-20-28.us-east-2.compute.internal oauth-apiserver/
ip-10-29-20-28.us-east-2.compute.internal oauth-server/
ip-10-29-20-28.us-east-2.compute.internal openshift-apiserver/
ip-10-29-20-28.us-east-2.compute.internal openvswitch/
ip-10-29-20-28.us-east-2.compute.internal osd-audit/
ip-10-29-20-28.us-east-2.compute.internal ovn/
ip-10-29-20-28.us-east-2.compute.internal pods/
ip-10-29-20-28.us-east-2.compute.internal private/
ip-10-29-20-28.us-east-2.compute.internal qemu-ga/
ip-10-29-20-28.us-east-2.compute.internal samba/
ip-10-29-20-28.us-east-2.compute.internal sssd/
ip-10-29-20-28.us-east-2.compute.internal tallylog
ip-10-29-20-28.us-east-2.compute.internal wtmp
ip-10-29-86-25.us-east-2.compute.internal README
ip-10-29-86-25.us-east-2.compute.internal audit/
ip-10-29-86-25.us-east-2.compute.internal btmp
ip-10-29-86-25.us-east-2.compute.internal btmp-20240401
ip-10-29-86-25.us-east-2.compute.internal chrony/
ip-10-29-86-25.us-east-2.compute.internal containers/
ip-10-29-86-25.us-east-2.compute.internal crio/
ip-10-29-86-25.us-east-2.compute.internal etcd/
ip-10-29-86-25.us-east-2.compute.internal glusterfs/
ip-10-29-86-25.us-east-2.compute.internal journal/
ip-10-29-86-25.us-east-2.compute.internal kube-apiserver/
ip-10-29-86-25.us-east-2.compute.internal lastlog
ip-10-29-86-25.us-east-2.compute.internal oauth-apiserver/
ip-10-29-86-25.us-east-2.compute.internal oauth-server/
ip-10-29-86-25.us-east-2.compute.internal openshift-apiserver/
ip-10-29-86-25.us-east-2.compute.internal openvswitch/
ip-10-29-86-25.us-east-2.compute.internal osd-audit/
ip-10-29-86-25.us-east-2.compute.internal ovn/
ip-10-29-86-25.us-east-2.compute.internal pods/
ip-10-29-86-25.us-east-2.compute.internal private/
ip-10-29-86-25.us-east-2.compute.internal qemu-ga/
ip-10-29-86-25.us-east-2.compute.internal samba/
ip-10-29-86-25.us-east-2.compute.internal sssd/
ip-10-29-86-25.us-east-2.compute.internal tallylog
ip-10-29-86-25.us-east-2.compute.internal wtmp
For example, to display all kubelet logs from all of the master nodes.
oc adm node-logs --role master --unit kubelet
This will typically return a log of stdout, so almost always you are going to want to include --tail to limit the output.
oc adm node-logs --role master --unit kubelet --tail=50
--grep can be include to only return lines that match a pattern.
oc adm node-logs --role worker --unit kubelet --tail 50 --grep 'certificate has expired'
Did you find this article helpful?
If so, consider buying me a coffee over at