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 -> 索引管理

posted @ 2021-01-01 18:48  小兵黑尔  阅读(157)  评论(0编辑  收藏  举报