ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

技巧 | 使用Filebeat收集K8S应用日志

2021-01-07 21:56:49  阅读:213  来源: 互联网

标签:filebeat name 收集 app Filebeat test 日志 K8S


在进行日志收集的过程中,我们首先想到的是使用Logstash,因为它是ELK stack中的重要成员,但是在测试过程中发现,Logstash是基于JDK的,在没有产生日志的情况单纯启动Logstash就大概要消耗500M内存,在每个Pod中都启动一个日志收集组件的情况下,使用logstash有点浪费系统资源,经人推荐我们选择使用Filebeat替代,经测试单独启动Filebeat容器大约会消耗12M内存,比起logstash相当轻量级。


1

    

方案选择


Kubernetes官方提供了ELK的日志收集解决方案,但是这种方案并不适合所有的业务场景,它本身就有一些局限性,例如:


  • 所有日志都必须是out前台输出,真实业务场景中无法保证所有日志都在前台输出

  • 只能有一个日志输出文件,而真实业务场景中往往有多个日志输出文件

  • Fluentd并不是常用的日志收集工具,我们更习惯用logstash,现使用filebeat替代

  • 我们已经有自己的ELK集群且有专人维护,没有必要再在kubernetes上做一个日志收集服务


基于以上几个原因,我们决定使用自己的ELK集群。



2

    

K8S日志收集解决方案



方案1 每个app的镜像中都集成日志收集组件

优点:    部署方便,kubernetes的yaml文件无须特别配置,可以为每个app自定义日志收集配置

缺点:    强耦合,不方便应用和日志收集组件升级和维护且会导致镜像过大


方案2 单独创建一个日志收集组件跟app的容器一起运行在同一个pod中

优点:    低耦合,扩展性强,方便维护和升级

缺点:    需要对kubernetes的yaml文件进行单独配置,略显繁琐


方案3 将所有的Pod的日志都挂载到宿主机上,每台主机上单独起一个日志收集Pod


优点: 完全解耦,性能最高,管理起来最方便

缺点:    需要统一日志收集规则,目录和输出方式


综合以上优缺点,我们选择使用方案二。该方案在扩展性、个性化、部署和后期维护方面都能做到均衡,因此选择该方案。



图片


我们创建了自己的logstash镜像。创建过程和使用方式见:

https://github.com/rootsongjc/docker-images


镜像地址:

index.tenxcloud.com/jimmy/filebeat:5.4.0



3

    

测试


我们部署一个应用对logstash的日志收集功能进行测试。


创建应用yaml文件fielbeat-test.yaml。


apiVersion: extensions/v1beta1

kind: Deployment

metadata:

  name: filebeat-test

  namespace: default

spec:

  replicas: 3

  template:

    metadata:

      labels:

        k8s-app: filebeat-test

    spec:

      containers:

      - image: sz-pg-oam-docker-hub-001.tendcloud.com/library/filebeat:5.4.0

        name: filebeat

        volumeMounts:

        - name: app-logs

          mountPath: /log

        - name: filebeat-config

          mountPath: /etc/filebeat/

      - image: sz-pg-oam-docker-hub-001.tendcloud.com/library/analytics-docker-test:Build_8

        name : app

        ports:

        - containerPort: 80

        volumeMounts:

        - name: app-logs

          mountPath: /usr/local/TalkingData/logs

      volumes:

      - name: app-logs

        emptyDir: {}

      - name: filebeat-config

        configMap:

          name: filebeat-config

---

apiVersion: v1

kind: Service

metadata:

  name: filebeat-test

  labels:

    app: filebeat-test

spec:

  ports:

  - port: 80

    protocol: TCP

    name: http

  selector:

    run: filebeat-test

---

apiVersion: v1

kind: ConfigMap

metadata:

  name: filebeat-config

data:

  filebeat.yml: |

    filebeat.prospectors:

    - input_type: log

      paths:

        - "/log/*"

        - "/log/usermange/common/*"

    output.elasticsearch:

      hosts: ["172.23.5.255:9200"]

    username: "elastic"

    password: "changeme"

    index: "filebeat-docker-test"



4

    

注意事项


  • 将app的/usr/local/TalkingData/logs目录挂载到logstash的/log目录下。

  • Filebeat容器大概需要10M左右内存。

  • 该文件可以在manifests/test/filebeat-test.yaml找到。

  • 我使用了自己的私有镜像仓库,测试时请换成自己的应用镜像。

  • filebeat镜像制作请参考https://github.com/rootsongjc/docker-images



5

    

创建应用



部署Deployment


kubectl create -f filebeat-test.yaml


查看http://172.23.5.255:9200/_cat/indices将可以看到列表有这样的indices:


green open filebeat-docker-test            7xPEwEbUQRirk8oDX36gAA 5 1   2151     0   1.6mb 841.8kb


访问Kibana的web页面,查看filebeat-docker-test的索引,可以看到filebeat收集到了app日志。


图片




图片


标签:filebeat,name,收集,app,Filebeat,test,日志,K8S
来源: https://blog.51cto.com/15077561/2584801

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有