【 云原生 kubernetes 】- 使用Filebeat采集k8s日志

这篇具有很好参考价值的文章主要介绍了【 云原生 kubernetes 】- 使用Filebeat采集k8s日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

⚡️: 日志采集器Logstash其功能虽然强大,但是它依赖java、在数据量大的时候,Logstash进程会消耗过多的系统资源,这将严重影响业务系统的性能,而filebeat就是一个完美的替代者,它基于Go语言没有任何依赖,配置文件简单,格式明了,

简介

​ 用于转发和集中日志数据的轻量级托运器。filebeat比logstash更加轻量级,所以占用系统资源极少,非常适合安装在生产机器上。这就是推荐使用filebeat,也是 ELK Stack 在 Agent 的第一选择。

采集流程:

  • container log --> Kafka topic

镜像构建

官方拉取的镜像,时区是 UTC ,我们想要获取到 CST 时间,并使用 filebeat 用户访问,就需要我们自己重新打镜像,下面是所用的Dockerfile

FROM elastic/filebeat:8.5.1
MAINTAINER ycloud
USER root

RUN apt-get update && apt-get install -y tzdata && rm -rf /var/lib/apt/lists/*

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

USER filebeat

Helm部署

  • helm repo add elastic https://helm.elastic.co
  • helm install filebeat elastic/filebeat

部署十分简单,但是我们可能需要调整Helm chart配置,所以建议把包拉取到本地调整之后再进行部署,下面是详细流程

[root@ycloud ~]# helm repo add elastic https://helm.elastic.co
"elastic" already exists with the same configuration, skipping
[root@ycloud ~]# helm pull elastic/filebeat
[root@ycloud ~]# tar -zxvf filebeat-8.5.1.tgz 
filebeat/Chart.yaml
filebeat/values.yaml
filebeat/templates/NOTES.txt
filebeat/templates/_helpers.tpl
filebeat/templates/clusterrole.yaml
filebeat/templates/clusterrolebinding.yaml
filebeat/templates/configmap.yaml
filebeat/templates/daemonset.yaml
filebeat/templates/deployment.yaml
filebeat/templates/role.yaml
filebeat/templates/rolebinding.yaml
...
[root@ycloud ~]# cd filebeat/ ; ls
Chart.yaml  examples  Makefile  README.md  templates  values.yaml

配置调整

删除赘余部分

我们刚刚拉取了官方的Chart包,中间默认是指定input到Elastic,所以我们需要调整下Deployment模板

[root@ycloud filebeat]# vim templates/daemonset.yaml 
...
{{- if .Values.extraEnvs | default .Values.daemonset.extraEnvs }}
{{ toYaml ( .Values.extraEnvs | default .Values.daemonset.extraEnvs ) | indent 8 }}
{{- end }}
...
...
        {{- range .Values.secretMounts | default .Values.daemonset.secretMounts }}
        - name: {{ .name }}
          mountPath: {{ .path }}
          {{- if .subPath }}
          subPath: {{ .subPath }}
          {{- end }}
        {{- end }}
...
...
      {{- range .Values.secretMounts | default .Values.daemonset.secretMounts }}
      - name: {{ .name }}
        secret:
          secretName: {{ .secretName }}
      {{- end }}
...

⚡️:这里的secrets是挂的elastic的用户名密码,因为我这边是把数据先推到 kafka 而不是 es中,所以这个secrets 部分可以去掉。大家可以根据自己的情况调节。

更新Values

image 部分改为我们自己新build的镜像名称及tag

其余没什么太大改动的,剩下就是filebeat的配置文件,根据自己的情况进行配置,下面是我的一个配置情况

[root@ycloud filebeat]# vim values.yaml 
...
    filebeat.inputs:
    - type: container
      paths:
        - /var/log/containers/*gstrain*.log
      scan_frequency: 1s
      processors:
        - add_kubernetes_metadata:
            in_cluster: true
            namespace: "gstrain"
            matchers:
              - logs_path:
                  logs_path: "/var/log/containers"
                  identifier: "container.id"
            enrichers:
              - deployment
        - drop_fields:
            fields:
              - "/^kubernetes\\.labels\\..*/"
              - "/^kubernetes\\.namespace_labels\\..*/"
              - "/^kubernetes\\.node\\..*/"
              - "/^(agent\\.name|agent\\.id|agent\\.type)$/"

        - drop_event:
            when:
              or:
                - equals:
                    kubernetes.container.name: "istio-proxy"
                - equals:
                    kubernetes.container.name: "istio-init"

    logging.level: debug
    output.kafka:
      hosts: ["10.189.6.130:9092","10.189.6.131:9092","10.189.6.132:9092"]
      topic: "gstrainpod-devel"
      partition.round_robin:
        reachable_only: true
      required_acks: 1
      compression: gzip
      max_message_bytes: 1000000
...
  • filebeat.inputs参数指定要监视的输入类型。在这个配置中,Filebeat监视Docker容器日志,并根据给定的路径来查找所有符合条件(包含“gstrain”字符串的)的容器日志文件。
  • scan_frequency参数设置Filebeat扫描容器日志文件的频率。
  • processors参数指定应该对事件进行的任何预处理步骤。在这个配置中,有几个处理器被定义,包括添加Kubernetes元数据,删除某些字段和事件过滤器等。
  • add_kubernetes_metadata处理器通过查询Kubernetes API来添加Kubernetes标签和注释等元数据信息,使得在后续处理流程中可以更好地对日志进行分类和分析。
  • drop_fields处理器通过正则表达式删除日志事件中不需要的字段,比如Kubernetes相关的字段。
  • drop_event处理器可以丢弃事件,例如当事件来自特定容器时,此处当事件来源于Istio Sidecar容器(istio-proxy和istio-init)时将其丢弃。
  • logging.level参数设置Filebeat的日志级别,这里设置为debug。
  • output.kafka参数定义要将收集的日志数据发送到Kafka的设置。在这个配置中,输出Kafka的地址以及要使用的主题名称等信息都被指定。还可以看到诸如轮询分区、压缩等其他设置。

挂载文件

❌: 这里有一点需要注意,这也是我疑惑的地方,filebeat采集日志,但是配置中的paths路径确实容器内部的路径,也可能中间哪些步骤没有了解清楚,我暂时是将宿主机目录挂载到Pod中,暂时解决这个问题

⭕️: 还有一个地方需要注意,了解的朋友可能知道 /var/log/containers 其实是个软连接,如果我们调整了容器日志的存储路径,也记得要把更改的路径挂上去,不然查询不到实际日志。

下面给出挂载案例,以Docker为 Runtime为例,并且日志路径为 /data/docker/

[root@ycloud filebeat]# vim template/DaemonSet.yaml
...
          volumeMounts:
            - mountPath: /usr/share/filebeat/filebeat.yml
              name: filebeat-config
              readOnly: true
              subPath: filebeat.yml
            - mountPath: /var/log/
              name: log
              readOnly: true
            - mountPath: /data/docker/containers
              name: dockerlog
              readOnly: true
...
...
      volumes:
        - configMap:
            defaultMode: 384
            name: filebeat-filebeat-deployment-config
          name: filebeat-config
        - hostPath:
            path: /var/log/
            type: ''
          name: log
        - hostPath:
            path: /data/docker/containers
            type: ''
          name: dockerlog
...

主流程

filebeat采集容器日志,云原生,云原生,kubernetes,容器

✌️: 我们filebaet采集Pod日志就可以正常运行了,不过我们前面也说了,我这边根据业务实际情况,将日志采集到Kafka 队列中去,通过现有日志系统中的Logstash将日志转发到 ES 中去。

下面就十分简易了,就直接贴个配置好了

input {
    kafka {
        id => "pod_k2e_id"
        bootstrap_servers => "192.168.100.10:9092,192.168.100.20:9092,192.168.100.30:9092"
        topics => "pod"
        auto_offset_reset => "earliest"
        group_id => "group_pod"
        consumer_threads => 90
        codec => json { charset => "UTF-8" }
    }
}

filter {
                        json {
                                source => "message"
                        }

                        mutate {
                                remove_field => ["tags","host","^host.*"]

                        }

                        ruby {
                                code => "event.set('index_day', event.get('@timestamp').time.localtime.strftime('%Y.%m.%d'))"
                        }   

                        mutate {
                                convert => {
                                "index_day" => "string"
                                }   
                        }
}

output {
    if ( [kubernetes][deployment][name] == "ycloud") {
        elasticsearch {
                id => "es_pod_id"
                hosts => ["http://192.168.100.10:9200","http://192.168.100.20:9200","http://192.168.100.30:9200"]
                index => "ycloud_crawl-%{index_day}"
                user => "elastic"
                password => "xxxxxxxxxx"
                codec => json { charset => "UTF-8" }
        }
    }else {
        elasticsearch {
                id => "es_pod2_id"
                hosts => ["http://192.168.100.10:9200","http://192.168.100.20:9200","http://192.168.100.30:9200"]
                index => "ycloud_pod-%{index_day}"
                user => "elastic"
                password => "xxxxxxxxxx"
                codec => json { charset => "UTF-8" } 
        }
    }  
}

结果

这里我们就可以成功采集到我们想要的日志了,不需要的字段也跟使用过滤器来delete掉。文章来源地址https://www.toymoban.com/news/detail-655801.html

到了这里,关于【 云原生 kubernetes 】- 使用Filebeat采集k8s日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生 | Kubernetes 系列】K8s 实战 使用 Kustomize 对 Kubernetes 对象进行声明式管理

    Kustomize 是一个用来定制 Kubernetes 配置的工具。它提供以下功能特性来管理应用配置文件: 从其他来源生成资源 为资源设置贯穿性(Cross-Cutting)字段 组织和定制资源集合 ConfigMap 和 Secret 包含其他 Kubernetes 对象(如 Pod)所需要的配置或敏感数据。 ConfigMap 或 Secret 中数据的来

    2024年01月17日
    浏览(74)
  • Spring Cloud Gateway使用K8S (Kubernetes)的云原生服务发现

    Spring Cloud Gateway通常使用注册中心作为服务发现,但在Kubernetes里面,由于K8S已经集成了服务注册与发现功能,不必要再另外使用注册中心了,而且,还可以使用K8S的服务监控对服务进行监控。 本来按照网上教程,升级到最新版的springboot3.x,结果发现无法发现服务。后来按着

    2024年04月22日
    浏览(47)
  • 【Spring Cloud Kubernetes】使用k8s原生service实现服务注册和发现

    @TOC 现在微服务开发模式应用的越来越广泛,注册中心 Eureka 也逐渐被其它注册中心产品替代,比如阿里出品的 Nacos 。随着云原生相关技术的普及, k8s 迅猛发展,我们把 K8s 中的 Pod 暴露给外部访问,通过少了 Service ,这也是今天的主角。 有没有发现,其实 Service 已经解决了

    2024年02月12日
    浏览(85)
  • K8s部署轻量级日志收集系统EFK(elasticsearch + filebeat + kibana)

    目录 K8s部署EFK(elasticsear + filebeat + kibana)日志收集 一.准备镜像 二.搭建Elasticsearch + kibana 1.在可执行kubectl命令的服务器准备安装的yml文件 2.在elasticsearch-kibana目录下创建配置文件elasticsearch.yml 3.创建kibana配置文件kibana.yml 4.在k8s中创建elasticsearch和kibana的配置文件configmap 5.检查

    2024年02月08日
    浏览(65)
  • k8s与Pod日志采集

    Kubernetes (k8s) 是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。在 k8s 中,Pod 是最小的可部署单元,它可以包含一个或多个容器,并共享存储和网络资源。在这种环境下,日志采集是非常重要的,因为它可以帮助我们理解应用程序的运行状况,快速

    2024年02月08日
    浏览(35)
  • 【云原生-K8s】Kubernetes安全组件CIS基准kube-beach安装及使用

    为了保证集群以及容器应用的安全,Kubernetes 提供了多种安全机制,限制容器的行为,减少容器和集群的攻击面,保证整个系统的安全性。 互联网安全中心(CIS,Center for Internet Security),是一个非盈利组织,致力为互联网提供免费的安全防御解决方案 官网 :https://www.cisecu

    2024年02月06日
    浏览(76)
  • 云原生Kubernetes:K8S概述

    目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 4.K8S网络 二、总结 (1)概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念,云原生更

    2024年02月10日
    浏览(54)
  • k8s部署elk+filebeat;springCloud集成elk+filebeat+kafka+zipkin实现多个服务日志链路追踪聚合到es

    如今2023了,大多数javaweb架构都是springboot微服务,一个前端功能请求后台可能是多个不同的服务共同协做完成的。例如用户下单功能,js转发到后台 网关gateway服务 ,然后到 鉴权spring-sercurity服务 ,然后到 业务订单服务 ,然后到 支付服务 ,后续还有发货、客户标签等等服务

    2024年02月16日
    浏览(46)
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

    目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念? 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几

    2024年02月03日
    浏览(198)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包