EFK 日志系统收集K8s日志 之 容器标准输出日志

一、日志收集的需求背景:• 业务发展越来越庞大,服务器越来越多
? • 各种访问日志、应用日志、错误日志量越来越多
? • 开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
? • 运维需实时关注业务访问情况
 
二、容器特性给日志采集带来的难度:? • K8s弹性伸缩性:导致不能预先确定采集的目标? • 容器隔离性:容器的文件系统与宿主机是隔离,导致日志采集器读取日志文件受阻
 
三、应用程序日志记录分为两类:? • 标准输出:输出到控制台,使用kubectl logs可以看到 (比如Nginx 的日志就是输出到控制台)
? • 日志文件:写到容器的文件系统的文件(比如Tomcat的日志就是写入到容器中的文件系统的文件)
 
四、Kubernetes应用日志收集

EFK 日志系统收集K8s日志 之 容器标准输出日志

文章插图
 
针对标准输出:以DaemonSet方式在每个Node上部署一个日志收集程序,采集/var/lib/Docker/containers/目录下所有容器日志
针对容器中日志文件:在Pod中增加一个容器运行日志采集器,使用emtyDir共享日志目录让日志采集器读取到日志文件
 
五、EFK Stack日志系统
EFK 日志系统收集K8s日志 之 容器标准输出日志

文章插图
 
EFK 是三个开源软件的缩写,提供一套完整的企业级日 志平台解决方案 。分别是:
• Elasticsearch:搜索、分析和存储数据• Filebeat :是本地文件的日志数据采集器,可监控日志目录或特定日志文件,并将它们转发给Elasticsearch或Logstatsh进行索引、kafka等• Kibana:数据可视化六、部署ES 单点+ filebeat + kibana 实现Kubernetes应用日志收集1、集群信息 主机名
IP地址
节点信息
Master
192.168.31.61
master 节点 8核8G
Node-1
192.168.31.63
node 节点 8核12G
Node-2
192.168.31.66
node 节点 8核12G
Node-3
192.168.31.67
node 节点 8核12G
NFS
192.168.31.100
nfs 存储节点 8核12G
2、软件版本 软件名
版本
备注
kubernetes
v1.18.6
 
Elasticsearch
v7.9.2
单点
Filebeat
v7.9.2
 
Kibana
v7.9.2
 
Nfs-client-provisioner
v1.2.8
动态PV
3、部署NFS 服务#创建 NFS 存储目录mkdir -p /home/elk#安装nfs服务yum -y install nfs-utils rpcbind#修改配置文件echo "/home/elk *(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports#启动服务systemctl start nfs && systemctl start rpcbind#设置开机启动systemctl enable nfs-server && systemctl enable rpcbind4、集群所有节点都要安装nfs-utilsyum -y install nfs-utils#记住,所有节点都要安装nfs-utils,否则无法使用pv5、部署动态PV5.1、创建NFS 动态PV专属命名空间[root@master-1 ~]# kubectl create ns nfsnamespace/nfs created 5.2、使用Helm 部署nfs-client-provisioner注意事项:(1)、nfs-client-provisioner部署到刚刚创建的nfs命名空间下(2)、storageClass.name #指定storageClassName名称,用于 PVC 自动绑定专属动态 PV 上(3)、需要指定NFS服务器的IP 地址(192.168.31.100),以及共享名称路径(/home/elk)#添加helm charts repo[root@master-1 es-single-node]# helm repo add helm-stable https://charts.helm.sh/stable[root@master-1 es-single-node]# helm repo updatecat >elastic-client-nfs.yaml << EOF# NFS 设置nfs:server: 192.168.31.100path: /home/elkstorageClass:# 此配置用于绑定 PVC 和 PVname: elastic-nfs-client# 资源回收策略#主要用于绑定的PVC删除后,资源释放后如何处理该PVC在存储设备上写入的数据 。#Retain:保留,删除PVC后,PV保留数据;#Recycle:回收空间,删除PVC后,简单的清除文件;(NFS和HostPath存储支持)#Delete:删除,删除PVC后,与PV相连接的后端存储会删除数据;(AWS EBS、Azure Disk、Cinder volumes、GCE PD支持)reclaimPolicy: Retain# 使用镜像image:repository: kubesphere/nfs-client-provisioner# 副本数量replicaCount: 3EOF#helm 部署 nfs-client-provisioner[root@master-1 es-single-node]# helm install elastic-nfs-storage -n nfs --values elastic-client.yaml helm-stable/nfs-client-provisioner --version 1.2.85.3、查看 nfs-client-provisioner Pod 运行状态[root@master-1 es-single-node]# kubectl get pods -n nfsNAMEREADYSTATUSRESTARTSAGEelastic-nfs-storage-nfs-client-provisioner-78c7754777-8kvlg1/1Running028melastic-nfs-storage-nfs-client-provisioner-78c7754777-vtpn81/1Running028melastic-nfs-storage-nfs-client-provisioner-78c7754777-zbx8s1/1Running028m


推荐阅读