关于kubernetes的日志分好几种,针对kubernetes本身而言有三种: 1、资源运行时的event事件。比如在k8s集群中创建pod之后,可以通过 kubectl describe pod 命令查看pod的详细信息。 2、容器中运行的应用程序自身产生的日志,比如tomcat、nginx、php的运行日志。比如kubectl logs redis-master-bobr0。这也是官方以及网上多数文章介绍的部分。 3、k8s各组件的服务日志,比如 systemctl status kubelet。 容器日志收集的方式通常有以下几种: 1、容器外收集。将宿主机的目录挂载为容器的日志目录,然后在宿主机上收集。 2、容器内收集。在容器内运行一个后台日志收集服务。 3、单独运行日志容器。单独运行一个容器提供共享日志卷,在日志容器中收集日志。 4、网络收集。容器内应用将日志直接发送到日志中心,比如java程序可以使用log4j 2转换日志格式并发送到远端。 5、通过修改docker的–log-driver。可以利用不同的driver把日志输出到不同地方,将log-driver设置为syslog、fluentd、splunk等日志收集服务,然后发送到远端。
Fluentd-Elasticsearch功能简介
Fluentd is deployed as a DaemonSet which spawns a pod on each node that reads logs, generated by kubelet, container runtime and containers and sends them to Elasticsearch. Fluentd被部署为一个守护进程集,在每个节点上生成一个pod,该pod读取由kubelet、容器运行时和容器生成的日志,并将它们发送到ElasticSearch。
[root@elasticsearch01 fluentd-elasticsearch]# helm install . NAME: sanguine-dragonfly LAST DEPLOYED: Thu Jun 6 16:07:55 2019 NAMESPACE: default STATUS: DEPLOYED
RESOURCES: ==> v1/ServiceAccount NAME SECRETS AGE sanguine-dragonfly-fluentd-elasticsearch 0 0s
==> v1/ClusterRole NAME AGE sanguine-dragonfly-fluentd-elasticsearch 0s
==> v1/ClusterRoleBinding NAME AGE sanguine-dragonfly-fluentd-elasticsearch 0s
==> v1/DaemonSet NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE sanguine-dragonfly-fluentd-elasticsearch 0 0 0 0 0 <none> 0s
==> v1/ConfigMap NAME DATA AGE sanguine-dragonfly-fluentd-elasticsearch 6 0s
NOTES: 1. To verify that Fluentd has started, run:
kubectl --namespace=default get pods -l "app.kubernetes.io/name=fluentd-elasticsearch,app.kubernetes.io/instance=sanguine-dragonfly"
THIS APPLICATION CAPTURES ALL CONSOLE OUTPUT AND FORWARDS IT TO elasticsearch . Anything that might be identifying, including things like IP addresses, container images, and object names will NOT be anonymized.