日志按体现方式分类
• 标准输出:输出到控制台,使用kubectl logs可以看到
• 日志文件:写到容器的文件系统的文件
Kubernetes应用日志收集
针对标准输出
以DaemonSet方式在每个Node上部署一个日志收集程序,采集/var/lib/docker/containers/目录下所有容器日志
针对容器中日志文件
在Pod中增加一个容器运行日志采集器,使用emtyDir共享日志目录让日志采集器读取到日志文件
ELK Stack日志系统
ELK 是三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。
分别是:
• Elasticsearch:搜索、分析和存储数据
• Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储
• Kibana:数据可视化
• Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向 Logstash 和 Elasticsearch 发送数
据。里面应用最多的是Filebeat,是一个轻量级日志采集器
搭建日志系统
• elasticsearch.yaml # ES数据库
• kibana.yaml # 可视化展示
[root@k8smaster elk]# kubectl get pod,svc -n ops
NAME READY STATUS RESTARTS AGE
pod/elasticsearch-549b496f94-qhsqq 1/1 Running 0 29m
pod/filebeat-2r88l 1/1 Running 0 47s
pod/kibana-55c8979979-slqnx 1/1 Running 0 22m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/elasticsearch ClusterIP 10.104.147.144 9200/TCP 29m
service/kibana NodePort 10.106.165.161 5601:30601/TCP 22m
http://192.168.153.21:30601/
日志收集
• filebeat-kubernetes.yaml # 采集所有容器标准输出
• app-log-stdout.yaml # 标准输出测试应用
• app-log-logfile.yaml # 日志文件测试应用
监控标准输出
部署
[root@k8smaster ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/app-log-stdout-584c76c5d-gn976 1/1 Running 0 12m
pod/app-log-stdout-584c76c5d-q4qrg 1/1 Running 0 12m
pod/app-log-stdout-584c76c5d-w9mdd 1/1 Running 0 12m
pod/nfs-client-provisioner-5f98b5cdfb-snnf4 1/1 Running 0 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/app-log-stdout ClusterIP 10.98.136.234 80/TCP 12m
service/kubernetes ClusterIP 10.96.0.1 443/TCP 28d
访问
[root@k8smaster ~]# curl 10.98.136.234
[root@k8smaster ~]# curl 10.98.136.234
#查询条件
kubernetes.namespace : "default" and message : curl
监控容器输出
索引前缀
output.elasticsearch:
hosts: ['elasticsearch.ops:9200']
index: "nginx-access-%{+yyyy.MM.dd}"
部署
[root@k8smaster elk]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/app-log-logfile-75b98c44bd-c4wrr 2/2 Running 0 2m45s
pod/app-log-logfile-75b98c44bd-kdrr5 2/2 Running 0 2m45s
pod/app-log-logfile-75b98c44bd-q47wj 2/2 Running 0 2m45s
pod/nfs-client-provisioner-5f98b5cdfb-snnf4 1/1 Running 0 24m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/app-log-logfile ClusterIP 10.97.194.178 80/TCP 2m45s
service/kubernetes ClusterIP 10.96.0.1 443/TCP 28d
访问
[root@k8smaster elk]# curl 10.97.194.178/status.html
ok
[root@k8smaster elk]# curl 10.97.194.178/status.html
ok