Kubernetes中心化日志,是将日志放到统一的日志收集平台上。我不想引入那么中间件,因为仅供测试使用。这篇博文记录怎样使用filebeat+elasticsearch+kibana实现Kubernetes的日志收集。
在这之前你可能需要
-
安装elasticsearch stack,可以参考CentOS 7搭建单机ElasticSearch。
-
基本的安全配置,参考:设置Elastic基本认证
Kubernetes环境下日志方式
Kuberentes官网提到了几种日志收集的模式,基本包括容器直连,Sidebar方式和DaemonSet方式。
我觉得DaemonSet方式是最好的,因为它受Kubernetes控制面板管理,在每个节点上部署一个日志收集的专用Pod(相比sidebar模式节约资源同时减少容器侵入)。
Kubernetes的Pod日志在哪里?
参考:where are kubernetes pods logfiles
日志有三个位置
- /var/log/containers
- /var/log/pods
- /var/lib/docker/containers
实际上:这是一个软链接链:
/var/log/containers/<pod-name>_<namespace>_<container-name-container-id>.log
->
/var/log/pods/<namespace>_<pod_name>_<pod_id>/<container_name>/0.log
->
/var/lib/docker/containers/<container-id>/<container-id>-json.log
怎样获取Pod ID:
kubectl get pod -n core gloo-76dffbd956-rmvdz -o jsonpath='{.metadata.uid}'
我的日志收集设计
在我的环境Pod是可以连接外网的(Kubernetes集群外的应用),所以直接发送到了外部的ElasticSearch,也可以在kubernetes集群内部署ELK。之后的结构就不画了,通过kibana可以查看每个Pod的日志。
部署filebeat DaemonSet
这个文件在:
https://gitee.com/oneslideicywater/kubernetes-playground/blob/master/elasticsearch/filebeat-kubernetes.yaml
修改几个地方:
- name: ELASTICSEARCH_HOST
value: 192.168.3.254
- name: ELASTICSEARCH_PORT
value: "9200"
# 配置基本认证才需要改下面的
- name: ELASTICSEARCH_USERNAME
value: elastic
- name: ELASTICSEARCH_PASSWORD
value: changeme
直接:kubectl apply -f xxx.yaml
就ok!
查看日志
在kibana里查看日志,你可以看到一条日志下面很多元信息,查看Pod名是否包含进来。类似这种,忘了截图。这个图就是仅供参考: