【ELK】Filebeat采集Docker容器日志

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


介绍

  • Filebeat 是一个用于转发和集中日志数据的轻量级传送器。

  • Filebeat 作为agent安装在服务器上,监视指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。

  • Filebeat 的工作原理如下:当启动 Filebeat 时,它会启动一个或多个input查找指定的日志数据位置。对于 Filebeat 找到的每个日志,Filebeat 都会启动一个harvester。每个harvester都会读取单个日志以获取新内容,并将新日志数据发送到 libbeat,libbeat 会聚合事件并将聚合数据发送到您为 Filebeat 配置的输出。

filebeat是如何工作的

Filebeat 由两个主要组件组成:input和harvester。这些组件协同工作来跟踪文件并将事件数据发送到指定的output。

什么是harvester:

  1. harvester负责读取单个文件的内容。
  2. harvester逐行读取每个文件,并将内容发送到输出。
    每个文件启动一个harvester。
  3. harvester负责打开和关闭文件,这意味着harvester运行时文件描述符保持打开状态。

什么是input:

  1. input负责管理harvester并查找所有可供读取的源。

  2. 如果input类型为log,则input会查找驱动器上与定义的全局路径匹配的所有文件,并为每个文件启动harvester。每个input都在自己的 Go 协程中运行。

  3. 以下示例将 Filebeat 配置为从与指定 glob 模式匹配的所有日志文件中收集行:

    shell 复制代码
    filebeat.inputs:
    - type: log
      paths:
        - /var/log/*.log
        - /var/path2/*.log

不同的harvester goroutine采集到的日志数据都会发送至一个全局的队列queue中,filebeat默认启用的是基于内存的缓存队列。

每当队列中的数据缓存到一定的大小或者超过了定时的时间(默认1s),会被注册的client从队列中消费,发送至配置的后端。目前可以设置的client有kafka、elasticsearch、redis等。

使用

部署filebeat

  1. 上传压缩包

  2. 解压

    shell 复制代码
    tar xf filebeat-8.9.0.linux-amd64.tar.gz
  3. 配置

    shell 复制代码
    ## filebeat.yml
    # ============================== Filebeat input ==============================
    filebeat.inputs:
    - type: container
      stream: all
      paths: 
      - /data/docker/containers/*/*.log
      format: docker
      fields:
      multiline:
        # 做多行日志聚合,此处是针对java的异常堆栈信息聚合(所有非年-月-日开头的日志会被聚合到最开始匹配到的那一行展示)
        type: pattern
        pattern: '^\d+.\d+.\d+|^\d+.\w{3}.\d+'
        negate: true
        match: after  
      
      processors:
      - add_docker_metadata:  # 添加当前主机的信息,包括 os、hostname、ip 等
          host: "unix:///var/run/docker.sock"
      - add_docker_metadata: ~  # 如果存在 Docker 环境,则自动添加容器、镜像的信息。默认将 labels 中的点 . 替换成下划线 _
    
    # ============================== Filebeat modules ==============================
    
    filebeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: false
      #reload.period: 10s
    
    # ======================= Elasticsearch template setting =======================
    setup.template.settings:
      index.number_of_shards: 1
    output.elasticsearch:
      # Array of hosts to connect to.
    
      hosts: ["http://172.21.105.64:19200"]
    
      # Protocol - either `http` (default) or `https`.
      protocol: "http"
    
      # Authentication credentials - either API key or username/password.
      #api_key: "id:api_key"
      username: "elastic"
      password: "qianyue@2021#"
      ssl.verification_mode: "none"  
  4. 配置系统服务

    shell 复制代码
    # cat /usr/lib/systemd/system/auto_agent_filebeat.service
    [Unit]
    Description=filebeat
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    User=root
    WorkingDirectory=/home/auto-op-mgr/auto_agent/app/auto_agent_filebeat
    ExecStart=/home/auto-op-mgr/auto_agent/app/auto_agent_filebeat/filebeat -e --strict.perms=false  -c /home/auto-op-mgr/auto_agent/app/auto_agent_filebeat/filebeat.yml
    # 设置为掉线自动重启,进程强制杀掉后会自动重新启动
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
相关推荐
码间留白4 小时前
手把手把 GitHub 推上阿里云 ECS:Actions CI/CD 全链路避坑实录(折腾好几天,到 2 分钟见绿)
运维·阿里云·ci/cd·docker·devops·github actions
Vex2une4 小时前
Docker Desktop WSL2后端:2026年性能调优与避坑实战指南
windows·docker·desktop·gpu容器·容器开发·virtiofs·buildkit
程序员老赵5 小时前
Docker 部署青龙面板:轻松搭建定时任务管理平台
前端·docker·开源
TTATTC5 小时前
为什么单会话聊天做不好复杂工程?Claude Code 创作者的并发 Worktree 与记忆闭环实践
docker·开源
TTATTC5 小时前
状态机驱动长事务,还是 DAG 编排高并发?高可靠业务流程引擎的双核架构设计
docker·开源
殷忆枫5 小时前
告别依赖地狱!在 Ubuntu 上用 Docker 极速部署 Home Assistant 与 MQTT,并接入 Siri 与嵌入式 C 终端
linux·ubuntu·docker
千桐科技7 小时前
qModel算法模型平台功能解析:从源码到 Docker 镜像,部署能自动完成哪些工作?
运维·docker·容器·qmodel
mengge.cloud9 小时前
1019Namespace ,Contexts ,Kubernetes Pod
运维·服务器·网络·云原生·容器·kubernetes·云计算
江湖有缘9 小时前
Docker实战 | 使用Docker部署Imagor Studio图片编辑工具
java·docker·eureka
Xxtaoaooo9 小时前
私人日记不想散落在多个App?我用DailyTxT把记录、搜索和图片都放进自己的NAS
docker·nas·dailytxt