前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8S学习笔记之k8s日志收集实战

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

作者头像
Jetpropelledsnake21
发布2019-04-09 15:46:03
1.4K0
发布2019-04-09 15:46:03
举报
文章被收录于专栏:JetpropelledSnakeJetpropelledSnake

0x00 简介

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

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

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

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

日志收集组件说明

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

0x01 部署

代码语言:javascript
复制
# 本次实验使用了3台虚拟机做k8s集群,每台虚拟机3G内存
部署前的准备
代码语言:javascript
复制
# 拉取文件
git clone https://github.com/mgxian/k8s-log.git
cd k8s-log
git checkout v1

# 创建 logging namespace
kubectl apply -f logging-namespace.yaml
部署elastisearch
代码语言:javascript
复制
# 本次部署虽然使用 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 --tty
nslookup elasticsearch-logging
curl 'http://elasticsearch-logging:9200/_cluster/health?pretty'
curl 'http://elasticsearch-logging:9200/_cat/nodes'
exit

# 清理测试
kubectl delete deploy curl -n logging
部署kibana
代码语言:javascript
复制
# 部署
kubectl apply -f kibana.yaml

# 查看状态
kubectl get pods,svc -n logging -o wide

# 访问测试
# 浏览器访问下面输出的地址 看到 kibana 界面代表正常
# 11.11.11.112 为集群中某个 node 节点ip
KIBANA_NODEPORT=$(kubectl get svc -n logging | grep kibana-logging | awk '{print $(NF-1)}' | awk -F[:/] '{print $2}')
echo "http://11.11.11.112:$KIBANA_NODEPORT/"
部署fluentd收集日志
代码语言:javascript
复制
# fluentd 以 daemoset 方式部署
# 在每个节点上启动fluentd容器,收集k8s组件,docker以及容器的日志

# 给每个需要启动fluentd的节点打相关label
# kubectl label node lab1 beta.kubernetes.io/fluentd-ds-ready=true
kubectl label nodes --all beta.kubernetes.io/fluentd-ds-ready=true

# 部署
kubectl apply -f fluentd-es-configmap.yaml
kubectl apply -f fluentd-es-ds.yaml

# 查看状态
kubectl get pods,svc -n logging -o wide
kibana查看日志
代码语言:javascript
复制
# 创建index fluentd-k8s-*,由于需要拉取镜像启动容器,可能需要等待几分钟才能看到索引和数据
代码语言:javascript
复制
# 查看日志

0x03 应用日志收集测试

应用日志输出到标准输出测试
代码语言:javascript
复制
# 启动测试日志输出
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收集)
代码语言:javascript
复制
# 部署
kubectl apply -f log-contanier-file-filebeat.yaml

# 查看
kubectl get pods -o wide
代码语言:javascript
复制
# 添加index filebeat-k8s-* 查看日志
应用日志输出到容器指定目录(fluent-bit收集)
代码语言:javascript
复制
# 部署
kubectl apply -f log-contanier-file-fluentbit.yaml

# 查看
kubectl get pods -o wide
代码语言:javascript
复制
# 添加index fluentbit-k8s-* 查看日志
应用直接发送日志到日志系统
代码语言:javascript
复制
# 本次测试应用直接输出日志到 elasticsearch

# 部署
kubectl apply -f log-contanier-es.yaml

# 查看
kubectl get pods -o wide
代码语言:javascript
复制
# 添加index k8s-app-* 查看日志
代码语言:javascript
复制
# 本次测试应用直接输出日志到 elasticsearch

# 部署
kubectl apply -f log-contanier-es.yaml

# 查看
kubectl get pods -o wide
代码语言:javascript
复制
# 添加index k8s-app-* 查看日志
清理
代码语言:javascript
复制
kubectl delete -f log-contanier-es.yaml
kubectl delete -f log-contanier-file-fluentbit.yaml
kubectl delete -f log-contanier-file-filebeat.yaml
kubectl delete deploy echo-test

全文链接:https://juejin.im/post/5b6eaef96fb9a04fa25a0d37

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-03-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 简介
  • 0x01 部署
    • 部署前的准备
      • 部署elastisearch
        • 部署kibana
          • 部署fluentd收集日志
            • kibana查看日志
              • 0x03 应用日志收集测试
                • 应用日志输出到标准输出测试
                • 应用日志输出到容器指定目录(filebeat收集)
                • 应用日志输出到容器指定目录(fluent-bit收集)
                • 应用直接发送日志到日志系统
                • 清理
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档