Kubernetes Part6 ---- ELK Stack收集Kubernetes应用日志
需求背景
•业务发展越来越庞大,服务器越来越多
•各种访问日志、应用日志、错误日志量越来越多
•开发人员排查问题,需要到服务器上查日志,效率低、权限不好控制
•运维需实时关注业务访问情况
K8S环境中需要查看的应用日志
应用程序日志记录体现方式分为两类:
•标准输出:输出到控制台,使用kubectl logs可以看到
•日志文件:写到容器的文件系统的文件
日志获取方式
针对标准输出:以DaemonSet方式在每个Node上部署一个日志收集程序,采集/var/lib/docker/containers/目录下所有容器日志
针对容器中日志文件:在Pod中增加一个容器运行日志采集器,使用emtyDir共享日志目录让日志采集器读取到日志文件
ELK 日志系统介绍
ELK 是三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。
分别是:
•Elasticsearch:搜索、分析和存储数据
•Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储
•Kibana:数据可视化
•Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向Logstash 和Elasticsearch 发送数据。里面应用最多的是Filebeat,是一个轻量级日志采集器。
ELK 日志系统安装配置
准备YAML文件
[root@k8s-master03 elk]# ls -l total 20 -rw-r--r-- 1 root root 2108 Jan 1 18:09 app-log-logfile.yaml -rw-r--r-- 1 root root 528 Jan 1 18:09 app-log-stdout.yaml -rw-r--r-- 1 root root 1450 Jan 1 18:09 elasticsearch.yaml -rw-r--r-- 1 root root 3166 Jan 1 18:09 filebeat-kubernetes.yaml -rw-r--r-- 1 root root 924 Jan 1 18:09 kibana.yaml
搭建日志系统:
•elasticsearch.yaml # ES数据库
•kibana.yaml # 可视化展示
日志收集:
•filebeat-kubernetes.yaml # 采集所有容器标准输出
•app-log-stdout.yaml # 标准输出测试应用
•app-log-logfile.yaml # 日志文件测试应用
应用YAML
[root@k8s-master03 elk]# kubectl apply -f elasticsearch.yaml deployment.apps/elasticsearch created persistentvolumeclaim/es-pvc created service/elasticsearch created [root@k8s-master03 elk]# kubectl apply -f kibana.yaml deployment.apps/kibana created service/kibana created [root@k8s-master03 elk]# kubectl get pod -n ops NAME READY STATUS RESTARTS AGE elasticsearch-549b496f94-hnj4v 1/1 Running 0 79s grafana-757fcd5f7c-wdnt4 1/1 Running 0 90m kibana-55c8979979-kxqgh 1/1 Running 0 72s [root@k8s-master03 elk]# kubectl get svc -n ops NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE elasticsearch ClusterIP 10.106.236.50 <none> 9200/TCP 106s grafana NodePort 10.100.91.227 <none> 80:30030/TCP 90m kibana NodePort 10.109.229.66 <none> 5601:30601/TCP 99s kube-state-metrics ClusterIP 10.106.88.221 <none> 8080/TCP,8081/TCP 71m node-exporter ClusterIP None <none> 9100/TCP 78m prometheus NodePort 10.108.216.228 <none> 9090:30090/TCP 104m
NodePort访问 http://172.16.0.21;30601 验证可以登录
应用 filebeat 获取所有容器标准输出
[root@k8s-master03 elk]# kubectl apply -f filebeat-kubernetes.yaml configmap/filebeat-config created configmap/filebeat-inputs created daemonset.apps/filebeat created clusterrolebinding.rbac.authorization.k8s.io/filebeat created clusterrole.rbac.authorization.k8s.io/filebeat created serviceaccount/filebeat created [root@k8s-master03 elk]# kubectl get pod -n ops | grep file filebeat-7s9xq 1/1 Running 0 41s filebeat-qg7jw 1/1 Running 0 41s
查看索引(日志记录集合):Management -> Stack Management -> 索引管理
将索引关联到Kibana:索引模式-> 创建-> 匹配模式-> 选择时间戳
一般一个索引对应一个应用日志
导航至 discover
基于条件过滤 (只看ops namespace下的pod日志)
kubernetes.namespace : "ops"
查看索引(日志记录集合):Management -> Stack Management -> 索引管理