filebeat-sidecar模式采集pod应用日志

2023-11-02

1、将镜像上传服务器

包括filebeat镜像和应用服务镜像

2、新增sidecar.yml文件

根据自己的服务配置加入以下内容

---
apiVersion: v1
kind: Service
metadata:
  name: test-app
  labels:
    app: test-app
spec:
  selector:
    app: test-app
  ports:
  - protocol: TCP
    port: 8901
    targetPort: 8901
    name: test-port
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: test-filebeat-config
  labels:
    k8s-app: filebeat
data:
  filebeat.yml: |-
    filebeat.prospectors:
    - type: log
      paths:
        - /logdata/*.log
      tail_files: true
      fields:
        pod_name: '${pod_name}'
        POD_IP: '${POD_IP}'
    setup.template.name: "app-logs"
    setup.template.pattern: "app-logs-*"
    output.kafka:
        hosts: ["134.64.15.155:9092"]
        topic: kafka_log_sidecar
        partition.round_robin:
          reachable_only: true

# deployment, 也可通过daemonset方式
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app
spec:
  replicas: 1
  minReadySeconds: 15     #滚动升级15s后标志pod准备就绪
  strategy:
    rollingUpdate:        #replicas为2, 升级过程中pod个数在1-3个之间
      maxSurge: 1         #滚动升级时会先启动1个pod
      maxUnavailable: 1   #滚动升级时允许pod处于Unavailable的最大个数
  selector:
    matchLabels:
      app: test-app
  template:
    metadata:
      labels:
        app: test-app
    spec:
      terminationGracePeriodSeconds: 30 #30秒内优雅关闭程序
      containers:
      - image: 134.64.15.155:5000/docker.elastic.co/beats/filebeat:6.2.4     #提前下载下来到私有镜像库的镜像(官方的可能会被墙)
        name: filebeat
        args: [
          "-c", "/opt/filebeat/filebeat.yml",
          "-e",
        ]
        env:
        - name: POD_IP
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: status.podIP
        - name: pod_name
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        securityContext:
          runAsUser: 0
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 200m
            memory: 200Mi
        volumeMounts:
        - name: config               #将configmap的内容放到容器本地目录
          mountPath: /opt/filebeat/
        - name: data
          mountPath: /usr/share/filebeat/data
        - name: logdata       #同一个pod内的两个应用共享目录logdata, 一个写一个读
          mountPath: /logdata
      - name: test-app
        image: 134.64.15.155:5000/kuberneteservice-dev:v1  #提供具体服务的app镜像
        command: ["nohup","sh", "KuberneteService", "&"]
        ports:
        - containerPort: 8901
        volumeMounts:
        - name: logdata       #指定挂在目录到logdata
          mountPath: /log
      volumes:
      - name: data
        emptyDir: {}
      - name: logdata         #定义logdata为EmptyDir类型挂载目录
        emptyDir: {}
      - name: config
        configMap:
          name: test-filebeat-config  #使用前面定义的configmap
          items:
          - key: filebeat.yml
            path: filebeat.yml

3、kubectl部署应用

部署应用

kubectl apply -f sidecar.yml

查看应用部署情况

kubectl get all | grep test-app
在这里插入图片描述

如果运行失败可以查看运行情况,删除应用重新部署

查看失败详情,会在最后一行显示问题详情:
kubectl describe pods pod名
在这里插入图片描述

删除部署应用:

kubectl delete service test-app
kubectl delete configmap test-filebeat-config
kubectl delete deployment.apps test-app

查看pod运行情况

查看容器(应用服务)运行情况

kubectl exec -it pod名 -c test-app /bin/bash

在这里插入图片描述

查看容器(filebeat)运行情况

kubectl exec -it pod名 -c filebeat /bin/bash
在这里插入图片描述

查看pod日志

查看filebeat日志:
kubectl logs -f pod名 -c filebeat
查看应用日志:
kubectl logs -f pod名 -c test-app
在这里插入图片描述

4、kafka消费数据

./kafka-console-consumer.sh --bootstrap-server 134.64.15.155:9092 --topic kafka_log_sidecar

数据格式:

{
    "@timestamp": "2022-12-07T03:04:07.290Z",
    "@metadata": {
        "beat": "filebeat",
        "type": "doc",
        "version": "6.2.4",
        "topic": "kafka_log_sidecar"
    },
    "source": "/logdata/out.log",
    "offset": 9464,
    "message": "2022-12-07 03:04:00.001 ERROR [schedulerFactoryBean_Worker-6] c.c.u.c.d.c.RefreshWorker {\"Message\":\"engine is null,please check engine is avaliable.\",\"User\":\"root\",\"Name\":\"cmdb\"}",
    "prospector": {
        "type": "log"
    },
    "fields": {
        "POD_IP": "10.240.4.59",
        "pod_name": "test-app-7d646dd5b4-zr9h4"
    },
    "beat": {
        "name": "test-app-7d646dd5b4-zr9h4",
        "hostname": "test-app-7d646dd5b4-zr9h4",
        "version": "6.2.4"
    }
}

5、遇到问题及解决(持续更新)

连接kafka 报错

报错内容:Failed to connect to broker [:9092 dial tcp: lookup on server misbehaving

解决:
修改server.properties配置文件,在配置文件里添加这两项:

listeners=PLAINTEXT://xx.xx.xx.xx:9092
advertised.listeners=PLAINTEXT://xx.xx.xx.xx:9092

cni0的IP问题

报错内容:Kubernetes之network: failed to set bridge addr: “cni0“ already has an IP address different from xxx问题

解决:
去pod所在主机执行以下命令:

sudo ifconfig cni0 down    
sudo ip link delete cni0

6、采集方式对比

在这里插入图片描述

从上述表格中可以看出:

原生方式相对功能太弱,一般不建议在生产系统中使用,否则问题调查、数据统计等工作很难完成;
DaemonSet方式在每个节点只允许一个日志agent,相对资源占用要小很多,但扩展性、租户隔离性受限,比较适用于功能单一或业务不是很多的集群;
Sidecar方式为每个POD单独部署日志agent,相对资源占用较多,但灵活性以及多租户隔离性较强,建议大型的K8S集群或作为PAAS平台为多个业务方服务的集群使用该方式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

filebeat-sidecar模式采集pod应用日志 的相关文章

随机推荐

  • 探索MVVM -- 体会DataBinding的魅力

    前言 本文用到的demo是以 ONE 一个 的API为基础 模仿其功能实践一下MVVM的用法 以感受MVVM架构为主要目的 并未完全模仿其功能 代码结构借鉴了Google的sample 虽然谷歌今年出了一个架构组件指南 来指导开发者构建Ap
  • pdf加密在线破解

    http www unlock pdf com
  • wsl+ zsh + oh-my-zsh配置

    wsl zsh oh my zsh配置 经常在windows平台办公 配置一些开发环境时在Linux中会比较简单 参照了在Linux服务器中的配置 同步在WSL中 测试平台 WIN10 X64专业版 V1903 只支持WSl V1 WSL
  • Unity编辑器扩展之Excel表转CS文件(C#类)

    前言 这里我们需要理解动态生成CS文件的一些基础 https blog csdn net qq 37254346 article details 103216761 怎样读取Excel表这里就不说了 Excel表转CS文件 这是我们需要转的
  • EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)

    1 前言 1 本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法 包含底层时序和读写的代码 2 大部分代码是EEPROM芯片通用的 但是其中关于某些时间的要求 是和具体芯片相关的 和主控芯片和外设芯片都有关系 需要具体分析
  • Android中mmap原理及应用简析

    1 mmap介绍 mmap是一种内存映射文件的方法 即将一个文件或者其他对象映射到进程的地址空间 实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对应关系 实现这样的映射关系后 进程就可以采用指针的方式读写操作这一块内存 而系统会自动
  • 网络参考模型

    网络参考模型 1 OSI参考模型 1 1 产生背景 在网络发展的早期时代 网络技术的发展变化速度非常快 计算机网络变得越来越复杂 新的协议和应用不断产生 而网络设备大部分都是按厂商自己的标准生产 不能兼容 很难相互间进行通信 为了解决网络之
  • 【python数据挖掘课程】十七.社交网络Networkx库分析人物关系(初识篇)

    这是 Python数据挖掘课程 系列文章 也是我大数据金融学院上课的部分内容 本章主要讲述复杂网络或社交网络基础知识 通过Networkx扩展包绘制人物关系 并分析了班级学生的关系学院信息 本篇文章为初始篇 基础文章希望对你有所帮助 如果文
  • 面试突击37:线程安全问题的解决方案有哪些?

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 线程安全是指某
  • anaconda切换为国内源

    查看配置文件 conda config show windows下 1 添加清华源 命令行中直接使用以下命令 conda config add channels https mirrors tuna tsinghua edu cn anac
  • Unity3d 物体速度快直接穿透墙体没有发生碰撞怎么办?

    1 Edit gt Project Setting gt Time 调节TimeManager的fixed Timestep
  • 如何在Linux虚拟机或服务器上发布或部署一个Spring项目

    1 开放端口 项目需要使用哪些端口就开放哪些端口 开放方法如下 1 进入控制台 选择安全组 2 点击蓝色连接 点击手动添加 3 添加需要开放的端口 2 安装服务器远程连接工具 Xshell 的安装使用 Xshell是一个终端模拟软件 换言之
  • stm32 USB HID单点触摸屏上报安卓触摸信号

    此工程在个人博客使用stm32配置自定义的HID设备基础上修改 在上个博客中我们介绍了如何使用stm32配置成自定义的HID设备 使用usb通讯 但是仅仅只是实现了基于USB的通讯 真正需要运用的时候还需要在此基础上定义我们自己的协议 然后
  • Unity接入越南社交软件Zalo登录之获取用户信息

    根据Unity接入越南社交软件Zalo登录 Android 之SDK接入接入SDK后 需要获取用户name id 头像 性别的信息 这一篇文章教你如何获取 根据官网文档获取用户信息API ZaloSDK Instance getProfil
  • CPU和线程概述、线程池如何合理设置

    目录 1 物理核 虚拟核 单核cpu和多核cpu 2 进程和线程 理解 对比 线程切换 线程开销 3 串行 并发 并行 串行 并发 并行 4 多核下线程数量选择 计算密集型 IO密集型 提高性能的方向 5 并发编程网上关于线程池的总结 参考
  • PAT A1039使用string也可以不超时!!!

    亲测 直接使用map
  • AJAX & Axios 总结

    AJAX Axios 1 AJAX 1 1 作用 与服务器进行数据交换 异步交互 异步和同步 1 2 基本使用 1 3 案例 SelectUserServlet register html register html中的
  • 层层逼近,了解Norm系需要解决的问题及其衍生变体

    引自 https zhuanlan zhihu com p 33173246 https blog csdn net xiao lxl article details 72730000 https github com switchable
  • linux audit日志通过syslog转发到远端

    流程 开启audit 配置rsyslog读audit log文件 转发到远端 1 开启audit 重启audit service auditd restart 确认audit log产生日志 cat var log audit audit
  • filebeat-sidecar模式采集pod应用日志

    文章目录 1 将镜像上传服务器 2 新增sidecar yml文件 3 kubectl部署应用 部署应用 查看应用部署情况 查看pod运行情况 查看容器 应用服务 运行情况 查看容器 filebeat 运行情况 查看pod日志 4 kafk