新闻详情

新闻详情

首页 / 资讯中心 / 详情

docker-elk 集成指南:用 Filebeat 采集 Docker 容器日志并转发至 Elasticsearch

发布时间:2026/10/1 2:40:46来源:尧图网络
docker-elk 集成指南:用 Filebeat 采集 Docker 容器日志并转发至 Elasticsearch
日志分析可观测性运维DevOps【免费下载链接】docker-elkThe Elastic stack (ELK) powered by Docker and Compose.项目地址https://gitcode.com/gh_mirrors/do/docker-elk点击查看免费下载Filebeat 是 Elastic 生态中的轻量级日志采集器shipper以 Agent 形式部署在服务器上监听指定日志文件或数据源、收集日志事件并转发给 Elasticsearch 或 Logstash 进行索引。本指南基于 docker-elk 仓库的 Filebeat 扩展讲解如何在 ELK 栈中启用 Filebeat、完成用户与权限初始化、逐段解读官方filebeat.yml配置以及如何通过 Docker Autodiscover 自动发现容器日志。读完本文你将掌握在 docker-elk 中以 Compose 叠加方式接入 Filebeat 的完整实战方案。一、Filebeat 在 docker-elk 中的定位在 docker-elk 默认栈中docker-compose.yml日志链路由 Logstash 承担而 Filebeat 扩展 提供了另一条数据采集路径由 Filebeat 作为轻量 Agent 直接读取 Docker 容器日志再写入 Elasticsearch。两者可以并存Filebeat 适合从宿主机侧采集容器标准输出日志的场景且默认配置下它会把日志直接输出到 Elasticsearchoutput.elasticsearch不经由 Logstash。Filebeat 扩展位于 extensions/filebeat由四个文件组成Dockerfile基于官方镜像docker.elastic.co/beats/filebeat:${ELASTIC_VERSION:-9.5.4}构建镜像版本跟随根目录.env中的ELASTIC_VERSIONfilebeat-compose.ymlCompose 服务定义负责挂载配置、绑定 Docker 套接字与容器日志目录、注入密码环境变量config/filebeat.ymlFilebeat 核心配置包括 Autodiscover、输出、监控与 HTTP 健康检查端点README.md本指南所依据的官方使用说明。二、启用 Filebeat 扩展前置条件与启动命令2.1 前置条件filebeat_internal与beats_system用户该扩展要求filebeat_internal与beats_system两个用户已被创建并初始化密码。如果这两个用户尚未在栈的首次启动过程中初始化需要参考 How to re-execute the setup 重新运行 setup 容器完成初始化。这两个用户的分工如下filebeat_internalFilebeat 写入 Elasticsearch 时使用的服务账号映射到自定义角色filebeat_writerbeats_systemElasticsearch 内置用户被monitoringBeats 自身指标监控上报配置所使用。密码分别通过环境变量FILEBEAT_INTERNAL_PASSWORD与BEATS_SYSTEM_PASSWORD注入均可在根目录.env文件中定义。2.2 用户初始化背后的实现用户与角色的创建逻辑在 setup/entrypoint.sh 中。脚本中声明了用户及对应角色filebeat_internal → filebeat_writer随后调用 setup/lib.sh 中的ensure_role、check_user_exists、set_user_password、create_user等函数通过 Elasticsearch 的/_security/role、/_security/userREST API 完成角色创建与用户创建/改密。filebeat_internal使用的角色权限定义在 setup/roles/filebeat_writer.json集群权限manage_ilm、manage_index_templates、manage_ingest_pipelines、monitor、read_pipeline——分别对应索引生命周期管理ILM、索引模板、摄取管道的管理以及集群监控与管道读取索引权限对filebeat-*索引授予create_doc写入文档与manage管理索引权限。这意味着 Filebeat 写出的索引默认以filebeat-前缀命名并具备创建索引模板与执行 ILM 的权限与官方 Filebeat 的索引命名约定一致。如果filebeat_internal用户尚未初始化可以按主仓库 README 的说明重新执行 setup$ docker compose up setupsetup 服务通过非默认 profilesetup排除在常规docker compose up之外需要显式按名称启动或使用--profilesetup。重新运行时脚本会重置.env中已定义密码的用户的密码并同步内置角色权限。2.3 启动 Filebeat 服务在仓库根目录执行 Docker Compose并追加指向filebeat-compose.yml的命令行参数$ docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml updocker compose -f支持一次传入多个 Compose 文件后加载的 filebeat-compose.yml 会与根目录 docker-compose.yml 合并在其基础上追加filebeat服务。该服务加入elk网络并depends_on: elasticsearch确保 Elasticsearch 先就绪声明了FILEBEAT_INTERNAL_PASSWORD、BEATS_SYSTEM_PASSWORD两个环境变量取自.env。三、逐段解读 Filebeat 配置文件Filebeat 配置存放在 config/filebeat.yml修改时可参考官方 Filebeat 配置参考文档Configuration reference按需调整。下面按配置块逐一拆解。3.1 基础标识与模块配置name: filebeat filebeat.config: modules: path: ${path.config}/modules.d/*.yml reload.enabled: falsenameBeats 实例名称出现在监控数据与部分文档字段中filebeat.config.modules.path指向modules.d/目录下的模块配置支持通配符加载reload.enabled: false关闭模块配置热加载修改模块配置后需重启容器生效。3.2 Docker Autodiscover自动发现容器日志filebeat.autodiscover: providers: - type: docker hints.enabled: true hints.default_config: type: container paths: - /var/lib/docker/containers/${data.container.id}/*-json.log templates: - condition: contains: docker.container.image: elasticsearch config: - module: elasticsearch server: input: type: container paths: - /var/lib/docker/containers/${data.container.id}/*-json.log这是整个配置最核心的部分type: docker使用 Docker Autodiscover Provider。它会订阅 Docker 事件流在容器启动/停止时自动发现日志源hints.enabled: true开启 Hints 机制允许通过 Docker 标签如co.elastic.logs/enabled按容器定制采集行为hints.default_config未设置任何 hint 标签的容器使用的默认采集配置——type: container表示按容器日志读取paths指向 Docker 标准 JSON 日志文件位置其中${data.container.id}是 Autodiscover 注入的变量会被替换为实际容器 IDtemplates对匹配条件的容器应用专门的模块配置。示例中当容器镜像包含elasticsearch时启用elasticsearch模块以容器日志方式解析 Elasticsearch 的 JSON 格式日志从而获得字段化的日志文档如日志级别、节点名等。3.3 处理器与云元数据processors: - add_cloud_metadata: ~add_cloud_metadata处理器自动从部署环境AWS、GCP、Azure 等读取实例元数据并附加到事件中便于跨云环境定位日志来源在非云环境如本机 Docker下它只是静默跳过不影响采集。3.4 Beats 自身监控上报monitoring: enabled: true elasticsearch: username: beats_system password: ${BEATS_SYSTEM_PASSWORD}enabled: true开启 Beats 自身的指标监控将 Filebeat 的运行状态CPU、内存、吞吐等上报到 Elasticsearch上报时使用beats_system内置用户与${BEATS_SYSTEM_PASSWORD}环境变量中配置的密码这也是扩展要求初始化beats_system用户的原因。3.5 输出到 Elasticsearchoutput.elasticsearch: hosts: [ http://elasticsearch:9200 ] username: filebeat_internal password: ${FILEBEAT_INTERNAL_PASSWORD}hostsElasticsearch 地址列表。这里使用 Compose 网络内的服务名elasticsearch端口 9200无需暴露到宿主机认证使用filebeat_internal用户及${FILEBEAT_INTERNAL_PASSWORD}密码与 2.2 节创建的账号一一对应。如果需要改走 Logstash 链路例如希望先经过 Logstash 管道处理可将该块替换为output.logstash指向logstash:5044Logstash 的 Beats 输入端口见 docker-compose.yml。3.6 HTTP 健康检查端点http: enabled: true host: 0.0.0.0开启 HTTP 端点用于健康检查Filebeat 会在0.0.0.0:5066Beats 默认 HTTP 端口提供状态查询接口容器编排或监控系统可据此判断 Filebeat 是否存活。四、Compose 服务定义为什么以 root 运行并绑定 Docker 套接字filebeat-compose.yml 中的关键设计值得展开说明services: filebeat: build: context: extensions/filebeat/ args: ELASTIC_VERSION: ${ELASTIC_VERSION} user: root command: - -e - --strict.permsfalse volumes: - ./extensions/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro,Z - type: bind source: /var/lib/docker/containers target: /var/lib/docker/containers read_only: true - type: bind source: /var/run/docker.sock target: /var/run/docker.sock read_only: trueuser: root官方 filebeat 镜像默认以 uid 1000 的filebeat用户运行此处改用 root是为了能够读取宿主机的 Docker 套接字与容器日志目录docker.sock和/var/lib/docker/containers属 root 权限-e日志输出到 stderr便于被 Docker 日志驱动捕获配合栈内其他组件统一查看--strict.permsfalse关闭配置文件的权限检查允许挂载宿主上非 root 属主的filebeat.yml避免因文件属主不符导致启动失败三个卷配置文件以只读方式挂载到镜像内默认路径/usr/share/filebeat/filebeat.yml/var/lib/docker/containers只读挂载供 Autodiscover 按 3.2 节的路径读取 JSON 日志/var/run/docker.sock只读挂载供 Autodiscover 订阅 Docker 事件流、探测容器元数据。五、修改配置与重启生效由于reload.enabled: false且配置以只读卷挂载任何对filebeat.yml的修改都需要重启 Filebeat 容器才能生效$ docker compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml restart filebeat注意重启命令必须与启动命令保持一致同时传入根 Compose 文件与扩展 Compose 文件否则 Compose 会因找不到filebeat服务而报错。修改配置前建议先在官方配置参考中核对参数名与取值范围避免因拼写或缩进错误导致容器启动失败。六、验证与排障思路检查健康端点在栈内网络访问http://filebeat:5066/或从宿主机执行docker exec进入 filebeat 容器后curl localhost:5066确认 HTTP 端点响应正常确认用户已初始化若启动日志出现认证失败401或提示用户不存在说明filebeat_internal/beats_system尚未初始化回到 2.2 节重新执行docker compose up setup确认日志读取Filebeat 以 stderr 输出运行日志docker compose logs filebeat可查看是否发现容器、是否有读取错误确认索引写入在 Kibana 的 Discover 中检索filebeat-*索引模式或在 Elasticsearch 中查询GET /filebeat-*/_count验证日志是否已成功落库。索引写入依赖 filebeat_writer.json 中授予的filebeat-*索引权限。七、进一步阅读Filebeat 扩展说明本指南所依据的原始文档Filebeat 配置文件Filebeat Compose 服务定义Filebeat 镜像构建定义setup 服务与用户初始化filebeat_internal 用户角色权限如何重新执行 setup主仓库 README若需了解如何在 Docker 容器中运行与配置 Filebeat 的更多细节可参考 Elastic 官方文档的 Run Filebeat on Docker 与 Filebeat 配置参考页面在栈内也可对照 extensions/filebeat/config/filebeat.yml 的注释链接继续深入。赞分享日志分析可观测性运维DevOps【免费下载链接】docker-elkThe Elastic stack (ELK) powered by Docker and Compose.项目地址https://gitcode.com/gh_mirrors/do/docker-elk点击查看免费下载相关推荐如何用KKJSBridge实现高效WebView复用开发者必看教程如何用KKJSBridge实现高效WebView复用开发者必看教程 在移动应用开发中WebView的性能优化一直是前端与客户端开发的痛点。频繁创建和销毁We90DaysOfDevOps 实战在 Elastic Stack 中通过 Docker Compose 集成 Filebeat 日志采集90DaysOfDevOps 实战在 Elastic Stack 中通过 Docker Compose 集成 Filebeat 日志采集 导读 本文聚焦于 9文档/教程ComfyUI-SeedVR2视频超分辨率终极指南从安装到实战的完整解决方案ComfyUI SeedVR2视频超分辨率终极指南从安装到实战的完整解决方案 你是否正在寻找一款能够将低分辨率视频和图片提升到4K级别画质的AI工具Comf人工智能计算机视觉视频处理图像处理媒体生成AI 应用上一篇MeshCentral 远程管理快速上手从零到生产部署的完整指南下一篇AI 数据标注工具 X-AnyLabeling 入门3 条命令拿到第一批自动标注结果创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

洛克王国世界PVP进阶:首领化养成与阵容复盘全攻略 2026/10/1 3:29:17

洛克王国世界PVP进阶:首领化养成与阵容复盘全攻略

1. 整体设计与思路拆解1.1 从一个PVP玩家的视角看《洛克王国:世界》的竞技逻辑《洛克王国:世界》的PVP,可不是简单地把宠物摆上去、技能乱按一通。我玩下来的感觉是,它更像是一场“回合制博弈资源管理预判心理战”的混合体。你不仅…

阅读更多 →
Linux终端编辑器nano、vi和Vim:从入门到实战对比 2026/10/1 3:29:17

Linux终端编辑器nano、vi和Vim:从入门到实战对比

1. 三个终端编辑器:nano、Vi 和 Vim,到底该学哪个先说个很多新手都经历过的场景:好不容易通过 SSH 登上一台 Linux 服务器,想改一下 Nginx 的配置文件,输入vi /etc/nginx/nginx.conf,文件是打开了&#xff…

阅读更多 →
在线测压网站全指南:工具选型、指标解读与k6/Locust实战 2026/10/1 3:29:17

在线测压网站全指南:工具选型、指标解读与k6/Locust实战

1. 先搞清楚“在线测压网站”到底在测什么“在线测压网站”这六个字,我第一次看到的时候也愣了一下——是测血压的?还是给网站做体检的?放到开发和运维的语境里,答案很明确:它指的是通过浏览器界面就能发起并发压力测试…

阅读更多 →
基于U-Net的TOF-MRA脑血管分割实战:从数据预处理到模型训练 2026/10/1 3:29:17

基于U-Net的TOF-MRA脑血管分割实战:从数据预处理到模型训练

简介:医学图像分割是深度学习在医疗影像分析中的核心任务之一,目标是从复杂图像中精准提取目标结构。脑部血管成像中,TOF-MRA作为一种无创血管成像模态,为脑血管疾病的评估提供了高质量影像数据。由于血管结构细小且背景像素占比极…

阅读更多 →
基于SpringBoot的小区物业管理系统开发:状态机、事务与答辩要点全解析 2026/10/1 3:29:17

基于SpringBoot的小区物业管理系统开发:状态机、事务与答辩要点全解析

如果你的毕业设计题目正好落在“基于Java的小区物业管理系统”或者“基于SpringBoot的智慧社区物业综合管理平台”这一类,那这篇博文值得你从头读完。这类题目每年在计算机毕业设计选题里出现率极高,因为物业管理天然涵盖房产、业主、报修、缴费、公告、…

阅读更多 →
C/C++重复符号错误排查指南:从duplicate symbol到extern声明修复 2026/10/1 3:29:10

C/C++重复符号错误排查指南:从duplicate symbol到extern声明修复

如果你在编译 OpenClaw(或者任何一个 C/C 项目)的时候,链接阶段蹦出这么一行:ld: duplicate symbol _claw_global_configin claw_config.o and main.o那恭喜你,你踩中了一个经典的全局变量重复定义问题。这类报错在 C …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉