首页 > 其他分享 >使用Filebeat收集K8S应用日志

使用Filebeat收集K8S应用日志

时间:2022-11-15 17:34:28浏览次数:78  
标签:filebeat name 收集 app Filebeat test 日志 K8S

简介: Logstash收集Kubernetes的应用日志, 发现logstash十分消耗内存(大约500M), 而改用filebeat(大约消耗10多M内存)。 在进行日志收集的过程中,我们首先想到的是使用Logstash,因为它是ELK stack中的重要成员,但是在测试过程中发现,Logsta.

 

Logstash收集Kubernetes的应用日志,

发现logstash十分消耗内存(大约500M),   

而改用filebeat(大约消耗10多M内存)。

 

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

方案选择

 

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

 

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

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

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

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

     

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

 

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

测试

 

我们部署一个应用对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”

注意事项

 

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

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

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

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

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

 

创建应用

 

 

部署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日志。

本文转移K8S技术社区-技巧 | 使用Filebeat收集K8S应用日志

标签:filebeat,name,收集,app,Filebeat,test,日志,K8S
From: https://www.cnblogs.com/gaoyanbing/p/16893159.html

相关文章

  • 第一章第4节: k8s服务service发现与负载均衡_New
                   ......
  • K8S固定Pod IP和Mac地址
    简介   客户有个需求,服务的授权是通过主机的Mac地址进行绑定,原部署方式是通过dockerrun--networkhost指定主机网络的方式运行,如今需要迁移到Kubernetes环境,在De......
  • DCOS之k8s的容器监测探针
    大部分的应用程序我们在部署的时候都会适当的添加监控,对于运行载体容器则更应该如此。kubernetes提供了livenessprobes来检查我们的应用程序。它是由节点上的kubelet定期......
  • ASP .NET Core 集成 Loki 记录日志
    简介GrafanaLoki是一个水平可扩展,高可用性,多租户的日志聚合系统,由Grafana团队设计和开发,基于Apatch2.0开源。其有三部分组成:Loki是主服务器,负责存储日志和处理查询......
  • AOP记录日志操作
    AOP的定义AOP通过预编译方式和运行期动态代理实现,在不修改源代码的情况下,给程序动态统一添加功能的一种技术,简称AOP,一句话总结:在不改变原有代码的条件下,对功能进行......
  • GC日志打印添加以及说明
        项目经常自动重启,但是没有gc日志和dump文件。可以使用一下命令添加日志:    -XX:+PrintGCDetails-XX:+UseStringDeduplication-Xmx100M-XX:+UseG1G......
  • k8s中查看各个组件的启动命令
    方式1:可以直接到kube-system中,查看各个组件的PODYAML定义文件方式2:到目录下/etc/kubernetes/manifests查看组件的定义文件方式3:通过pgrep命令,如查看kubelet$tr\\0......
  • 10-1 k8s认证及serviceacount
    k8s有2类认证时的账号:1useraccount:也称为用户账号2serviceaccount:也称为服务账号,访问k8s集群apiserver时用到的认证信息,包括用户名,账号,密码....serviceaccount:......
  • 13-1 k8s网络插件CNI
    k8s网络插件CNICNI:ContainerNetworkInterface:最主要功能就是实现Pod资源能够跨宿主机进行通信Flannel:最成熟、最简单的选择Calico:性能好、灵活性最强,目前的企业......
  • 13-3 k8s网络插件-flannel安装
    flannel安装:1、yaml方式安装:在已经安装好k8s集群之上部署flannel:获取flannelyaml文件,应用官方的yaml文件:若以下无法下载:https://kubernetes.io/docs/concepts/cl......