ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

90DaysOfDevOps 实战:在 Elastic Stack 中通过 Docker Compose 集成 Filebeat 日志采集

90DaysOfDevOps 实战:在 Elastic Stack 中通过 Docker Compose 集成 Filebeat 日志采集 文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载导读本文聚焦于 90DaysOfDevOps 仓库中 Elastic Stack 监控套件的 Filebeat 扩展2022/Days/Monitoring/Elastic Stack/extensions/filebeat系统讲解如何借助额外的 Docker Compose 覆盖文件把轻量级日志采集器 Filebeat 接入 ELK 栈、如何通过filebeat.yml配置 Docker 日志自动发现与 Elasticsearch 输出以及修改配置后如何热重启容器。读完本文你将掌握在现有 Elastic Stack 基础上按需叠加 Filebeat 扩展的完整套路并理解其底层挂载与权限设计。Filebeat 在 Elastic Stack 中的定位Filebeat 是一款轻量级日志采集器shipper以 Agent 形式部署在服务器上负责监控指定的日志文件或日志来源、采集日志事件并将事件转发到 Elasticsearch 或 Logstash 进行索引。与传统的在 Logstash 中直接采集日志相比Filebeat 占用资源更少、部署更轻是生产环境中日志采集链路的标准起点。在本仓库的 Elastic Stack 监控目录 中核心编排文件是根目录下的docker-compose.yaml它默认启动setup初始化内置用户、elasticsearch、logstash、kibana四个服务。而 Filebeat 并不在默认编排之内它位于extensions/filebeat/扩展目录需要通过额外的 Compose 覆盖文件按需叠加——这正是本仓库主栈 扩展的设计模式不需要时零开销需要时一条命令即可接入。一、将 Filebeat 叠加进现有栈1.1 启动命令在 Elastic Stack 目录的上一级即包含docker-compose.yaml的目录执行以下命令即可在拉起整个栈的同时把 Filebeat 一并启动$ docker-compose -f docker-compose.yaml -f extensions/filebeat/filebeat-compose.yml up要点解析-f docker-compose.yaml加载基础编排提供elasticsearch、logstash、kibana等核心服务-f extensions/filebeat/filebeat-compose.yml加载扩展覆盖文件声明filebeat服务Docker Compose 会按文件顺序合并配置filebeat-compose.yml中通过depends_on: elasticsearch保证 Filebeat 在 Elasticsearch 就绪后再启动。注意原扩展文档中使用的是旧版docker-compose命令当前仓库根目录的编排文件名为docker-compose.yaml使用新版 Docker Compose 插件时命令等价为docker compose -f docker-compose.yaml -f extensions/filebeat/filebeat-compose.yml up。1.2 filebeat-compose.yml 服务定义剖析查看 extensions/filebeat/filebeat-compose.yml该覆盖文件完整定义了 Filebeat 服务的运行方式version: 3.7 services: filebeat: build: context: extensions/filebeat/ args: ELASTIC_VERSION: ${ELASTIC_VERSION} # Run as root instead of filebeat (uid 1000) to allow reading # docker.sock and the hosts filesystem. user: root command: # Log to stderr. - -e # Disable config file permissions checks. Allows mounting # config/filebeat.yml even if its not owned by root. - --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: true environment: ELASTIC_PASSWORD: ${ELASTIC_PASSWORD:-} networks: - elk depends_on: - elasticsearch几个值得深挖的设计点以 root 身份运行注释明确说明以root而非默认的filebeatuid 1000运行是为了能读取宿主机的docker.sock与文件系统这是 Docker 日志采集的前提--strict.permsfalse关闭 Filebeat 对配置文件权限的严格检查允许挂载非 root 属主的filebeat.yml避免因为配置文件权限问题导致启动失败挂载docker.sock与容器日志目录将宿主机/var/run/docker.sock与/var/lib/docker/containers以只读方式绑定挂载进容器配合filebeat.yml中的 Docker autodiscoverFilebeat 才能实时感知新容器并读取其标准输出日志镜像来源看 extensions/filebeat/Dockerfile 可知它仅基于官方镜像docker.elastic.co/beats/filebeat:${ELASTIC_VERSION}版本由.env中的ELASTIC_VERSION变量统一控制与栈内其他组件保持同一版本避免版本不兼容。二、Filebeat 核心配置filebeat.yml 逐段解读Filebeat 的完整配置存放在 extensions/filebeat/config/filebeat.yml本仓库中的配置默认针对采集 Docker 容器日志场景包含四个核心段落2.1 模块与自动发现filebeat.config: modules: path: ${path.config}/modules.d/*.yml reload.enabled: false filebeat.autodiscover: providers: # The Docker autodiscover provider automatically retrieves logs from Docker # containers as they start and stop. - type: docker hints.enabled: truefilebeat.config.modules声明模块配置的存放路径为${path.config}/modules.d/*.yml容器内对应/usr/share/filebeat/modules.d/reload.enabled: false表示启动后不自动热加载模块配置filebeat.autodiscover.providers启用Docker autodiscover提供者并开启hints.enabled: true。这意味着 Filebeat 会跟随 Docker 容器的启停自动发现日志来源无需为每个容器手工编写 input 配置——这正是上一节挂载docker.sock的意义所在。2.2 处理器与云元数据processors: - add_cloud_metadata: ~add_cloud_metadata处理器会自动为每条日志事件附加云厂商元数据例如在 AWS、GCP、Azure 上运行时便于后续在 Kibana 中按云实例维度聚合分析。~在 YAML 中表示 null即使用该处理器的默认配置。2.3 输出到 Elasticsearchoutput.elasticsearch: hosts: [http://elasticsearch:9200] username: elastic password: ${ELASTIC_PASSWORD}hosts指向 Compose 网络elk内的 Elasticsearch 服务名elasticsearch的 9200 端口容器间通过 Docker DNS 解析无需暴露到宿主机username/password使用elastic超级用户认证密码通过环境变量ELASTIC_PASSWORD注入与根目录docker-compose.yaml中setup服务初始化用户密码的机制一致。注意在filebeat-compose.yml中使用了${ELASTIC_PASSWORD:-}形式未设置时为空字符串而配置文件内部直接引用${ELASTIC_PASSWORD}因此部署前必须确保.env中已配置该变量如果希望先经过 Logstash 做加工再入 Elasticsearch可将此段替换为output.logstash指向logstash:5044该端口已在根编排的 logstash 服务中暴露。2.4 HTTP 健康检查端点http.enabled: true http.host: 0.0.0.0开启 Filebeat 内置的 HTTP 端点并监听所有网卡可用于健康检查默认端口 5066可通过http.port调整。这便于在容器编排或监控系统中探活确认 Filebeat 进程状态。三、修改配置后重启 FilebeatFilebeat 的配置变更不会自动生效需要重启容器。由于 Filebeat 的配置通过 bind mount 以只读方式挂载进容器宿主机上修改config/filebeat.yml后执行$ docker-compose -f docker-compose.yaml -f extensions/filebeat/filebeat-compose.yml restart filebeat要点重启时仍须同时传入两个-f文件保证 Compose 能解析到filebeat服务配置挂载为:ro只读容器内无法修改必须从宿主机侧编辑 config/filebeat.yml修改任何配置项输出目标、autodiscover、处理器等后按上述命令重启即可生效。四、从源码结构看 Filebeat 扩展的集成逻辑从仓库目录结构可以清晰看到该扩展的完整组成extensions/filebeat/extensions/filebeat/ ├── Dockerfile # 基于官方 beats/filebeat 镜像版本由 ELASTIC_VERSION 决定 ├── README.md # 扩展使用说明本文主体 ├── config/ │ └── filebeat.yml # 核心采集配置 └── filebeat-compose.yml # Compose 覆盖文件定义服务挂载、权限与依赖同时可以推断本仓库采用扩展即覆盖的统一设计范式apm-server、metricbeat、enterprise-search、logspout、curator等扩展都遵循各自的*-compose.yml覆盖文件 config/配置目录 Dockerfile的相同结构见 extensions/README.md 与 extensions/apm-server/README.md。Filebeat 的接入方式是这套范式在日志采集场景下的具体落地filebeat-compose.yml负责服务编排root 用户、权限开关、三个挂载、网络与依赖config/filebeat.yml负责行为定义自动发现、处理、输出、健康检查Dockerfile只负责锁定镜像版本与主栈的ELASTIC_VERSION保持一致。五、常见问题与排查建议Filebeat 容器反复重启优先检查.env中ELASTIC_PASSWORD是否与根编排中 Elasticsearch 初始化密码一致认证失败会在容器日志中直接体现采集不到新容器日志确认/var/run/docker.sock与/var/lib/docker/containers两个 bind mount 是否成功以及宿主机 Docker 数据目录是否与挂载路径一致不同 Docker 安装方式路径可能不同配置未生效Filebeat 不会热加载filebeat.yml务必执行第三节的restart filebeat命令SELinux 环境挂载卷上的:Z/:z标签用于自动修正 SELinux 上下文在启用 SELinux 的宿主机上不可省略。六、更多参考资料官方 Filebeat 配置参考filebeat.reference.yml全量参数说明与 Docker 运行指南可参见扩展 README 中列出的filebeat-config、filebeat-docker、filebeat-doc链接本仓库中 Filebeat 的配置源自 Elastic 官方 Beats 仓库的deploy/docker/filebeat.docker.yml模板见 config/filebeat.yml 头部注释想了解更完整的官方化配置时可对照该模板若要进一步理解 Filebeat 与 Logstash、Kibana 的协作关系可继续阅读 Logstash 管道配置 与 根编排文件并结合 90DaysOfDevOps 的 监控主题目录 展开系统学习。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 实战在 Elastic Stack 中通过 Docker 扩展部署 Metricbeat 采集服务器指标90DaysOfDevOps 实战在 Elastic Stack 中通过 Docker 扩展部署 Metricbeat 采集服务器指标 本文以 90DaysO文档/教程linux-tutorial 实战Elastic 技术栈 Filebeat 日志采集器安装、配置与原理全解linux tutorial 实战Elastic 技术栈 Filebeat 日志采集器安装、配置与原理全解 导读 本文以本仓库 docs/linux/sof文档教程运维Quickwit Docker 容器日志采集实战OpenTelemetry Collector docker compose 一步接入日志 UIQuickwit Docker 容器日志采集实战OpenTelemetry Collector docker compose 一步接入日志 UI Quic搜索引擎可观测性日志分析链路追踪后端全文检索上一篇开拓者正义之怒动物伙伴三阶段成长模型完全指南下一篇CANN随机数生成样例创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表