<p>When describing a node, there are history conditions that show up.</p>
<pre><code>Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Tue, 10 Aug 2021 10:55:23 +0700   Tue, 10 Aug 2021 10:55:23 +0700   CalicoIsUp                   Calico is running on this node
  MemoryPressure       False   Mon, 16 Aug 2021 12:02:18 +0700   Thu, 12 Aug 2021 14:55:48 +0700   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Mon, 16 Aug 2021 12:02:18 +0700   Thu, 12 Aug 2021 14:55:48 +0700   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Mon, 16 Aug 2021 12:02:18 +0700   Thu, 12 Aug 2021 14:55:48 +0700   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                False   Mon, 16 Aug 2021 12:02:18 +0700   Mon, 16 Aug 2021 11:54:02 +0700   KubeletNotReady              PLEG is not healthy: pleg was last seen active 11m17.462332922s ago; threshold is 3m0s
</code></pre>
<p>I have 2 questions:</p>
<ol>
<li>I think those conditions only show the latest status. How can I access the full-time history of the previous conditions?</li>
<li>Suggest me the tool that converts node condition to something like pod events for log centralize.</li>
</ol>

<p>You're right, the <code>kubectl describe &lt;NODE_NAME&gt;</code> command shows the current condition status (<code>False</code>/<code>True</code>).</p>
<p>You can monitor Nodes events using the following command:</p>
<pre><code># kubectl get events --watch --field-selector involvedObject.kind=Node 
LAST SEEN   TYPE      REASON                 OBJECT         MESSAGE
3m50s       Warning   EvictionThresholdMet   node/kworker   Attempting to reclaim inodes
44m         Normal    NodeHasDiskPressure    node/kworker   Node kworker status is now: NodeHasDiskPressure
</code></pre>
<p>To view only status related events, you can use <code>grep</code> with the previous command:</p>
<pre><code># kubectl get events --watch --field-selector involvedObject.kind=Node | grep &quot;status is now&quot;
44m         Normal    NodeHasDiskPressure    node/kworker   Node kworker status is now: NodeHasDiskPressure
</code></pre>
<p>By default, these events are retained for <a href="https://github.com/kubernetes/kubernetes/blob/da53a247633cd91bd8e9818574279f3b04aed6a5/cmd/kube-apiserver/app/options/options.go#L71-L72" rel="noreferrer">1 hour</a>. However, you can run the <code>kubectl get events --watch --field-selector involvedObject.kind=Node</code> command from within a Pod and collect the output from that command using a log aggregation system like <a href="https://grafana.com/oss/loki/" rel="noreferrer">Loki</a>. I've described this approach with a detailed explanation <a href="https://stackoverflow.com/a/68212477/14801225">here</a>.</p>
