私有部署ELK,搭建自己的日志中心(五)-- 使用filebeat采集K8S pod的jvm日志

一、背景

前文采集的日志是来源于虚拟机,在云原生下的容器化部署时,需要采集Pod里的jvm日志。

二、术语

1、临时存储emptyDir

emptyDir在Pod被分配到Node时创建的,它的初始内容为空,并且无须指定宿主机上对应的目录文件,因为kubernetes会自动分配一个目录,当Pod销毁时,EmptyDir中的数据也会被永久删除,所以也被称为临时存储。

2、ConfigMap

filebeat.yml保存在配置存储ConfigMap里,filebeat进程加载该文件。

filebeat -c /etc/filebeat.yml

三、整体设计

在同一个pod里,使用sidecar模式再部署一个filebeat容器,由它读取jvm容器输出的日志文件。

filebeat本身启动的时候,配置文件filebeat.yml挂载到configMap,供我们方便修改。

filebeat要读取jvm容器的日志文件,通过emptyDir共享日志文件;前者负责读取,后者负责写入。
在这里插入图片描述

四、deployment.yaml

1、增加filebeat容器

      containers:
        - name: filebeat-container
          env:
            - name: APPNAME
              value: {{ .Values.appName }}
          image: docker.elastic.co/beats/filebeat:8.0.1
          args:
            - -c
            - /etc/filebeat.yml
          volumeMounts:
            - name: storage-logs
              mountPath: /opt/{{ .Values.appName }}/logs
            - name: filebeat-volume
              mountPath: /etc/filebeat.yml
              readOnly: true
              subPath: filebeat.yml
  • 创建一个名称为storage-logs的临时存储emptyDir
	  volumes:
        - name: storage-logs
          emptyDir: {}
  • jvm容器把日志文件挂载到storage-logs
		volumeMounts:
            - mountPath: /opt/{{ .Values.appName }}/logs
              name: storage-logs

2、ConfigMap配置存储

新增一个名称为filebeat-volume的ConfigMap

	volumes:
        - name: storage-logs
          emptyDir: {}
        #################
        - configMap:
            name: filebeat-config
          name: filebeat-volume

配置存储新增一个名称为filebeat-config的配置:
在这里插入图片描述

下面的截图,可以看出,key值对应上文的“subPath: filebeat.yml”

在这里插入图片描述

  • yaml详情
kind: ConfigMap
apiVersion: v1
metadata:
  name: filebeat-config
  namespace: java-service
data:
  #对应上文 subPath: filebeat.yml
  filebeat.yml: |
    filebeat.inputs:
      - type: log
        enabled: true
        backoff: "1s"
        tail_files: false
        paths:
          - /opt/*/logs/*.log
        multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
        multiline.negate: false
        multiline.match: after
        document_type: jvm
        fields:
            app: ${APPNAME}

    output.logstash:
      enabled: true
      hosts: ["192.168.8.29:5044"]   

3、jvm容器修改日志的存储

由nfs调整为emptyDir:

  • 修改前:
	- name: {{ .Values.appName }}
		volumeMounts:
            - mountPath: /opt/{{ .Values.appName }}/logs
              name: volume-resources
              subPath: logs
     volumes:
        - name: volume-resources
          persistentVolumeClaim:
            claimName: application-resources


  • 修改后:
	- name: {{ .Values.appName }}
		volumeMounts:
            - mountPath: /opt/{{ .Values.appName }}/logs
              name: storage-logs
     volumes:
        - name: storage-logs
          emptyDir: {}

五、总结

1、一定要让filebeat能够读取到被采集的日志,比如本文就是采用emptydir临时文件的方式共享。
2、filebeat容器本身启动的时候,注意需加载filebeat,yml配置。这里使用了args的方式指定配置文件所在路径。

	args:
        - -c
        - /etc/filebeat.yml

而/etc/filebeat.yml是挂载到configMap。

这一块踩过的坑就是,没有启动filebeat进程。所以这个必不可少,再次提醒。

3、由于整个deployment.yaml比较大,我就不详细贴出来其内容。而且不同的公司不一,需要你基于原本的配置修改。
下面仅以截图示意:
在这里插入图片描述

这就是k8s的边车模式,除了适用于本文的日志采集方案,还可以被用来做监控、证书管理等。

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8s一键部署ELK是指使用Kubernetes进行一键部署Elasticsearch、Logstash和Kibana的组合。ELK是一套日志分析和可视化平台,用于收集、解析和展示大量的日志数据。它可以帮助用户对日志数据进行搜索、分析和监控,以便更好地理解应用程序的性能和故障情况。通过k8s一键部署ELK,用户可以方便地在Kubernetes集群中部署和管理ELK组件。 具体步骤如下: 1. 在Kubernetes集群中创建一个命名空间(namespace)用于部署ELK组件。 2. 创建持久卷(PersistentVolume)和持久卷声明(PersistentVolumeClaim),用于存储Elasticsearch的数据。 3. 创建ConfigMap,将ELK组件的配置文件存储为Kubernetes资源。 4. 使用Kubernetes的Deployment或StatefulSet来创建Elasticsearch实例,并将其配置为使用持久卷进行数据存储。 5. 创建Logstash的Deployment或StatefulSet,配置它与Elasticsearch进行数据交互。 6. 创建Kibana的Deployment或StatefulSet,配置它与Elasticsearch进行数据展示和查询。 通过以上步骤,用户就可以在Kubernetes集群中一键部署ELK,并开始使用它来对日志数据进行收集、解析和展示。这样可以方便地监控应用程序的运行情况,及时发现和解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [分配任务调度XXL-JOB,使用ELK + Kafka + Filebeat日志收集,文件上传使用七牛云,数据加密AES,每](https://download.csdn.net/download/weixin_42140625/16073929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [k8s一键安装mysql8单机版](https://blog.csdn.net/wangxin_wangxin/article/details/128723587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值