1. 17 应用的日志采集与分析
应用和系统日志可以让你了解集群内部的运行状况。日志对调试问题和监控集群活动非常有用。 大部分现代化应用都有某种日志记录机制;同样地,大多数容器引擎也被设计成支持某种日志记录机制。 针对容器化应用,最简单且受欢迎的日志记录方式就是写入标准输出和标准错误流。
但是,由容器引擎或运行时提供的原生功能通常不足以满足完整的日志记录方案。 例如,如果发生容器崩溃、Pod 被逐出或节点宕机等情况,你仍然想访问到应用日志。 因此,日志应该具有独立的存储和生命周期,与节点、Pod 或容器的生命周期相独立。 这个概念叫 集群级的日志 。集群级日志方案需要一个独立的后台来存储、分析和查询日志。 Kubernetes 没有为日志数据提供原生存储方案,但是你可以集成许多现有的日志解决方案到 Kubernetes 集群中。
集群级日志架构假定在集群内部或者外部有一个日志后台。 如果你对集群级日志不感兴趣,你仍会发现关于如何在节点上存储和处理日志的描述对你是有用的。
1.1. Kubernetes 中的基本日志记录
[root@linux-node1 ~]# vim counter-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: counter
spec:
containers:
- name: count
image: busybox
args: [/bin/sh, -c,
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
用下面的命令运行 Pod
[root@linux-node1 ~]# kubectl create -f counter-pod.yaml
pod/counter created
使用 kubectl logs 命令获取日志:
[root@linux-node1 ~]# kubectl logs counter
0: Tue Aug 11 22:56:22 UTC 2020
1: Tue Aug 11 22:56:23 UTC 2020
2: Tue Aug 11 22:56:24 UTC 2020
3: Tue Aug 11 22:56:25 UTC 2020
4: Tue Aug 11 22:56:26 UTC 2020
5: Tue Aug 11 22:56:27 UTC 2020
6: Tue Aug 11 22:56:28 UTC 2020
7: Tue Aug 11 22:56:29 UTC 2020
8: Tue Aug 11 22:56:30 UTC 2020
...
一旦发生容器崩溃,你可以使用命令 kubectl logs 和参数 --previous 检索之前的容器日志。 如果 pod 中有多个容器,你应该向该命令附加一个容器名以访问对应容器的日志。[-c CONTAINER]