ELK Stack收集Kubernetes应用日志
需求背景
-
业务发展越来越庞大,服务器越来越多
-
各种访问日志、应用日志、错误日志量越来越多
-
开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
-
运维需实时关注业务访问情况
容器特性给日志采集带来的难度
容器特性给日志采集带来的难度:
-
K8s弹性伸缩性:导致不能预先确定采集的目标
-
容器隔离性:容器的文件系统与宿主机是隔离,导致 日志采集器读取日志文件受阻
日志按体现方式分类
应用程序日志记录体现方式分为两类:
-
标准输出:输出到控制台,使用kubectl logs可以看到
-
日志文件:写到容器的文件系统的文件
示例:标准输出
kubectl run nginx --image=nginx |
日志文件在宿主机上的路径
kubectl get pod -o wide #查看pod所在节点 |
#采集所有容器的日志 |
示例:日志文件
kubectl run tomcat --image=tomcat |
方式一:使用emptyDir数据卷挂载容器日志路径到宿主机上,DaemonSet方式部署,在每个节点部署日志采集器采集日志。
vim tomcat.yaml
apiVersion: v1 |
方式二:使用emptyDir数据卷共享应用容器的日志让日志采集器容器能够采集到
vim tomcat.yaml
apiVersion: v1 |
Kubernetes应用日志收集
ELK Stack日志系统
ELK 是三个开源软件的缩写,提供一套完整的企业级日 志平台解决方案。
分别是:
-
Elasticsearch:搜索、分析和存储数据
-
Logstash :采集日志、格式化、过滤,最后将数据 推送到Elasticsearch存储
-
Kibana:数据可视化
-
Beats :集合了多种单一用途数据采集器,用于实 现从边缘机器向 Logstash 和 Elasticsearch 发送数 据。里面应用最多的是Filebeat,是一个轻量级日 志采集器
部署nfs-pv自动供给
#安装nfs安装包(每个k8s节点都要安装) |
搭建日志系统:
-
elasticsearch.yaml # ES数据库
-
kibana.yaml # 可视化展示
日志收集:
-
filebeat-kubernetes.yaml # 采集所有容器标准输出
-
app-log-stdout.yaml # 标准输出测试应用
-
app-log-logfile.yaml # 日志文件测试应用
可视化展示日志:
-
查看索引(日志记录集合):Management -> Stack Management -> 索引管理
-
将索引关联到Kibana:索引模式 -> 创建 -> 匹配模式 -> 选择时间戳
-
在Discover选择索引模式查看日志