https://www.qikqiak.com/post/install-efk-stack-on-k8s/
http://www.maogx.win/posts/45/
#在k8s集群中应用一般有如下日志输出方式:
直接遵循docker官方建议把日志输出到标准输出或者标准错误输出
输出日志到容器内指定目录中
应用直接发送日志给日志收集系统
#k8s集群中的pod产生的日志(stdout/stderr)都存放在对应node的/var/lib/docker/containers/(决定于docker安装时指定的哪个是数据目录)下
#日志收集组件说明:
elastisearch 存储收集到的日志
kibana 可视化收集到的日志
logstash 汇总处理日志发送给elastisearch 存储
filebeat 读取容器或者应用日志文件处理发送给elastisearch或者logstash,也可用于汇总日志
fluentd 读取容器或者应用日志文件处理发送给elastisearch,也可用于汇总日志
fluent-bit 读取容器或者应用日志文件处理发送给elastisearch或者fluentd
#在进行日志收集的过程中,我们首先想到的是使用Logstash,因为它是ELK stack中的重要成员,但是在测试过程中发现,Logstash是基于JDK的,在没有产生日志的情况单纯启动Logstash就大概要消耗500M内存,在每个Pod中都启动一个日志收集组件的情况下,使用logstash有点浪费系统资源,经人推荐我们选择使用Filebeat替代,经测试单独启动Filebeat容器大约会消耗12M内存,比起logstash相当轻量级。
#Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch、Fluentd 和 Kibana(EFK)技术栈,也是官方现在比较推荐的一种方案。
#Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档。
#Elasticsearch 通常与 Kibana 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 允许你通过 web 界面来浏览 Elasticsearch 日志数据。
#Fluentd是一个流行的开源数据收集器,我们将在 Kubernetes 集群节点上安装 Fluentd,通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。
#前提,已经做了nfs的动态pv,安装好了helm、nginx-ingress
一、创建logging namespace
kubectl apply -f namespace_logging.yaml
or
kubectl create namespace logging
kubectl get ns
二、首先开始部署一个3节点的 Elasticsearch 集群
helm repo add micro http://mirror.azure.cn/kubernetes/charts/
helm install --name elasticsearch micro/elasticsearch --namespace logging -f ./micro-1.30.0.yaml --tls --debug
三、部署kibana
helm install --name kibana micro/kibana --namespace logging -f ./micro-3.2.2.yaml --tls --debug
四、部署fluentd
helm install --name fluentd-elasticsearch micro/fluentd-elasticsearch --namespace logging -f ./micro-2.0.7.yaml --tls --debug
五、访问kibana
https://kibana.kubernetes.ingress:32443/
创建索引