K8S学习笔记之k8s日志收集实战

网友投稿 306 2022-09-10

K8S学习笔记之k8s日志收集实战

0x00 简介

本文主要介绍在k8s中收集应用的日志方案,应用运行中日志,一般情况下都需要收集存储到一个集中的日志管理系统中,可以方便对日志进行分析统计,监控,甚至用于机器学习,智能分析应用系统问题,及时修复应用所存在的问题。

在k8s集群中应用一般有如下日志输出方式

直接遵循docker官方建议把日志输出到标准输出或者标准错误输出输出日志到容器内指定目录中应用直接发送日志给日志收集系统

本文会综合部署上述日志收集方案。

日志收集组件说明

elastisearch 存储收集到的日志kibana 可视化收集到的日志logstash 汇总处理日志发送给elastisearch 存储filebeat 读取容器或者应用日志文件处理发送给elastisearch或者logstash,也可用于汇总日志fluentd 读取容器或者应用日志文件处理发送给elastisearch,也可用于汇总日志fluent-bit 读取容器或者应用日志文件处理发送给elastisearch或者fluentd

0x01 部署

# 本次实验使用了3台虚拟机做k8s集群,每台虚拟机3G内存

部署前的准备

# 拉取文件git clone k8s-loggit checkout v1# 创建 logging namespacekubectl apply -f logging-namespace.yaml

部署elastisearch

# 本次部署虽然使用 StatefulSet 但是没有使用pv进行持久化数据存储# pod重启之后,数据会丢失,生产环境一定要使用pv持久化存储数据# 部署kubectl apply -f elasticsearch.yaml# 查看状态kubectl get pods,svc -n logging -o wide# 等待所有pod变成running状态 # 访问测试# 如果测试都有数据返回代表部署成功kubectl run curl -n logging --image=radial/busyboxplus:curl -i --ttynslookup elasticsearch-loggingcurl ''清理测试kubectl delete deploy curl -n logging

部署kibana

# 部署kubectl apply -f kibana.yaml# 查看状态kubectl get pods,svc -n logging -o wide# 访问测试# 浏览器访问下面输出的地址 看到 kibana 界面代表正常# 11.11.11.112 为集群中某个 node 节点ipKIBANA_NODEPORT=$(kubectl get svc -n logging | grep kibana-logging | awk '{print $(NF-1)}' | awk -F[:/] '{print $2}')echo "fluentd 以 daemoset 方式部署# 在每个节点上启动fluentd容器,收集k8s组件,docker以及容器的日志# 给每个需要启动fluentd的节点打相关label# kubectl label node lab1 beta.kubernetes.io/fluentd-ds-ready=truekubectl label nodes --all beta.kubernetes.io/fluentd-ds-ready=true# 部署kubectl apply -f fluentd-es-configmap.yamlkubectl apply -f fluentd-es-ds.yaml# 查看状态kubectl get pods,svc -n logging -o wide

kibana查看日志

# 创建index fluentd-k8s-*,由于需要拉取镜像启动容器,可能需要等待几分钟才能看到索引和数据

# 查看日志

0x03 应用日志收集测试

应用日志输出到标准输出测试

# 启动测试日志输出kubectl run echo-test --image=radial/busyboxplus:curl -- sh -c 'count=1;while true;do echo log to stdout $count;sleep 1;count=$(($count+1));done'# 查看状态kubectl get pods -o wide# 命令行查看日志ECHO_TEST_POD=$(kubectl get pods | grep echo-test | awk '{print $1}')kubectl logs -f $ECHO_TEST_POD# 刷新 kibana 查看是否有新日志进入

应用日志输出到容器指定目录(filebeat收集)

# 部署kubectl apply -f log-contanier-file-filebeat.yaml# 查看kubectl get pods -o wide

# 添加index filebeat-k8s-* 查看日志

应用日志输出到容器指定目录(fluent-bit收集)

# 部署kubectl apply -f log-contanier-file-fluentbit.yaml# 查看kubectl get pods -o wide

# 添加index fluentbit-k8s-* 查看日志

应用直接发送日志到日志系统

# 本次测试应用直接输出日志到 elasticsearch# 部署kubectl apply -f log-contanier-es.yaml# 查看kubectl get pods -o wide

# 添加index k8s-app-* 查看日志

# 本次测试应用直接输出日志到 elasticsearch# 部署kubectl apply -f log-contanier-es.yaml# 查看kubectl get pods -o wide

# 添加index k8s-app-* 查看日志

清理

kubectl delete -f log-contanier-es.yamlkubectl delete -f log-contanier-file-fluentbit.yamlkubectl delete -f log-contanier-file-filebeat.yamlkubectl delete deploy echo-test

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:K8S学习笔记之kubernetes 日志架构
下一篇:K8S学习笔记之ETCD启动失败注意事项
相关文章

 发表评论

暂时没有评论,来抢沙发吧~