快速上手:采集Kubernetes Pod日志¶
下面将带你演示在一个Kubernetes集群中,通过创建LogConfig CRD快速采集Pod的日志。
1. 准备Kubernetes环境¶
可以使用现有Kubernetes集群,或者部署Kubernetes。本地推荐使用Kind搭建Kubernetes集群。
本文的操作需要在本地使用:
请确保本地有kubectl和helm可执行命令。
2. 部署Loggie DaemonSet¶
你可以在 installation 页面查看所有发布的部署chart。
可以选择:
下载chart再部署¶
VERSION=v1.4.0
helm pull https://github.com/loggie-io/installation/releases/download/$VERSION/loggie-$VERSION.tgz && tar xvzf loggie-$VERSION.tgz
<VERSION>
替换成具体的版本号。
然后部署安装:
helm install loggie ./loggie -nloggie --create-namespace
当然你也可以:
直接部署:¶
helm install loggie -nloggie --create-namespace https://github.com/loggie-io/installation/releases/download/$VERSION/loggie-$VERSION.tgz
<VERSION>
替换成具体的版本号。
想使用其他版本镜像?
为了方便体验最新的Fix和特性,我们提供了main分支每次合并后的镜像版本,可通过 这里 进行选择。
同时你可以在helm install命令中增加--set image=loggieio/loggie:vX.Y.Z
来指定具体的Loggie镜像。
部署有问题?
如果尝试部署后出现问题,或者在你的环境中以下演示操作未成功,请参考Kubernetes下部署Loggie,修改相关配置。
3. 采集日志¶
Loggie定义了Kubernetes CRD LogConfig,一个LogConfig表示采集一类Pods的日志采集任务。
3.1 创建被采集的Pods¶
我们先创建一个Pod用于被采集日志的对象。
kubectl create deploy nginx --image=nginx
3.2 定义输出源Sink¶
接着,我们创建一个Loggie定义的CRD Sink实例,表明日志发送的后端。
为了方便演示,这里我们将日志发送至Loggie Agent自身的日志中并打印。
cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: Sink
metadata:
name: default
spec:
sink: |
type: dev
printEvents: true
EOF
可以通过kubectl get sink
查看到已创建的Sink。
3.3 定义采集任务¶
Loggie定义CRD LogConfig,表示一个日志采集任务。我们创建一个LogConfig示例如下所示:
cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: LogConfig
metadata:
name: nginx
namespace: default
spec:
selector:
type: pod
labelSelector:
app: nginx
pipeline:
sources: |
- type: file
name: mylog
paths:
- stdout
sinkRef: default
EOF
可以看到,上面使用了sinkRef引用了刚才创建的sink default CR
。当然,我们还可以直接在Logconfig中使用sink字段,示例如下:
cat << EOF | kubectl apply -f -
apiVersion: loggie.io/v1beta1
kind: LogConfig
metadata:
name: nginx
namespace: default
spec:
selector:
type: pod
labelSelector:
app: nginx
pipeline:
sources: |
- type: file
name: mylog
paths:
- stdout
sink: |
type: dev
printEvents: true
codec:
type: json
pretty: true
EOF
创建完之后,我们可以使用kubectl get lgc
查看到创建的CRD实例。
同时,我们还可以通过kubectl describe lgc nginx
查看LogConfig的事件,以获取最新的状态。
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal syncSuccess 52s loggie/kind-control-plane Sync type pod [nginx-6799fc88d8-5cb67] success
上面的nginx LogConfig通过其中的spec.selector来匹配采集哪些Pod的日志,这里我们使用app: nginx
选择了刚才创建的nginx Pod。
spec.pipeline则表示Loggie的Pipeline配置,我们只采集容器标准输出的日志,所以在paths中填写stdout
即可。
4. 查看日志¶
首先找到所在的nginx pod节点:
kubectl get po -owide -l app=nginx
然后我们找到该节点的Loggie:
kubectl -nloggie get po -owide |grep ${node}
kubectl -nloggie logs -f ${logge-pod}
更多¶
上文只是一个简单的快速演示,部署出现问题或者想了解更多Kubernetes下Loggie如何使用?
- 更全面的部署介绍:Kubernetes下部署Loggie
- Kubernetes下日志采集最佳实践:Kubernetes下的日志采集