k8s-elk

日志按体现方式分类

• 标准输出:输出到控制台,使用kubectl logs可以看到
• 日志文件:写到容器的文件系统的文件

Kubernetes应用日志收集

针对标准输出

以DaemonSet方式在每个Node上部署一个日志收集程序,采集/var/lib/docker/containers/目录下所有容器日志
1638059644621.png

针对容器中日志文件

在Pod中增加一个容器运行日志采集器,使用emtyDir共享日志目录让日志采集器读取到日志文件
1638059704210.png

ELK Stack日志系统

ELK 是三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。
分别是:
• Elasticsearch:搜索、分析和存储数据
• Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储
• Kibana:数据可视化
• Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向 Logstash 和 Elasticsearch 发送数
据。里面应用最多的是Filebeat,是一个轻量级日志采集器
1638059915081.png

搭建日志系统

• 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/
1638062273219.png

日志收集

• 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
1638064274272.png

监控容器输出

索引前缀

    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

1638064735262.png

1638064914692.png

你可能感兴趣的:(k8s-elk)