Laradock 中的 Logstash搭建 ELK 日志管道的完整实战指南【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch more.项目地址: https://gitcode.com/gh_mirrors/la/laradock导读本文讲解如何在 Laradock 中运行 Logstash——ELK 技术栈中的 L即负责从多源采集日志/事件、经过转换后写入 Elasticsearch 的服务端数据处理管道。你将掌握 Logstash 容器的启动/停止/移除、与 Elasticsearch/Kibana 的版本匹配机制、管道配置文件的编写与热重载以及用命令行做配置校验和插件检查的完整实战方法。Logstash 在 Laradock 中的角色Logstash** 和Kibana构成一套开箱即用的本地日志分析环境。Laradock 将 Logstash 构建为独立的容器镜像版本由根目录.env中的共享变量ELK_VERSION统一控制从而保证 Logstash、Elasticsearch、Kibana 三者版本对齐。在.env.example中该变量的默认值为ELK_VERSION8.19.13见 .env.exampleElastic 官方要求栈内各组件的 major/minor 版本必须匹配这也是 Laradock 使用单一变量驱动三个镜像的原因。启动 Logstash方式一Laradock CLI./laradock start logstash方式二Docker Composedocker compose up -d logstash在 logstash/compose.yml 中logstash服务通过depends_on声明了elasticsearch依赖因此启动 Logstash 时 Elasticsearch 会自动一并拉起——正如文档所述没有 ElasticsearchLogstash 的日志数据无处可送。停止与移除 Logstash暂停容器数据安全之后可再次启动# Laradock CLI ./laradock stop logstash # Docker Compose docker compose stop logstash彻底删除容器# Laradock CLI ./laradock remove logstash # Docker Compose docker compose rm -sf logstash配置总览版本、端口与 JVM 堆内存与许多 Laradock 服务不同Logstash没有logstash/defaults.env文件。它的镜像构建依赖根.env的ELK_VERSION变量而端口与 JVM 堆内存则直接固化在 logstash/compose.yml 中未暴露为.env变量配置项值设置位置端口映射5001:5001logstash/compose.ymlLS_JAVA_OPTS-Xmx1g -Xms1glogstash/compose.yml从源码看logstash/compose.yml 将ELK_VERSION通过build.args传给镜像构建build: context: ./logstash args: - ELK_VERSION${ELK_VERSION}而 logstash/Dockerfile 的第一行即使用该 ARG 指定基础镜像ARG ELK_VERSION FROM logstash:${ELK_VERSION}这意味着只要修改根.env中的ELK_VERSION重新构建 Logstash 镜像即可切换版本且天然与 Elasticsearch/Kibana 保持一致。同时容器通过networks挂接在frontend与backend两个 Laradock 自定义网络上这两个网络定义在根 docker-compose.yml 中。这也是 Logstash 与其他容器通信的基础在管道配置中访问 Elasticsearch 必须使用容器名elasticsearch而不是localhost。配置 Logstash 管道Logstash 的运行由两个挂载进容器的部分驱动服务器配置logstash/config/logstash.yml挂载到容器内/usr/share/logstash/config/logstash.yml管道目录logstash/pipeline/挂载到容器内/usr/share/logstash/pipeline用于存放你的.conf管道文件。两个挂载均在 logstash/compose.yml 的volumes中声明。服务器配置解读logstash/config/logstash.yml 的内容非常精简共四行关键配置http.host: 0.0.0.0 xpack.monitoring.enabled: false config.reload.automatic: true path.config: /usr/share/logstash/pipelinehttp.host: 0.0.0.0Logstash 的 HTTP 接口绑定所有网络接口保证容器外部可访问xpack.monitoring.enabled: false关闭 X-Pack 监控本地开发场景下避免不必要的资源开销与 license 限制config.reload.automatic: true开启配置自动重载管道文件变更后无需重启容器即生效path.config: /usr/share/logstash/pipeline指定管道配置目录与挂载点一致也是--config.test_and_exit校验时扫描的路径。镜像预置的插件与驱动logstash/Dockerfile 在官方镜像之上做了三处定制值得留意USER root RUN rm -f /usr/share/logstash/pipeline/logstash.conf RUN curl -L -o /usr/share/logstash/lib/mysql-connector-java-5.1.47.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar COPY ./pipeline/ /usr/share/logstash/pipeline/ COPY ./config/ /usr/share/logstash/config/ RUN logstash-plugin install logstash-input-beats删除官方镜像自带的示例logstash.conf避免污染你的管道目录通过 curl 下载并内置 MySQL JDBC 驱动mysql-connector-java-5.1.47.jar方便在管道中直接使用jdbcinput 插件查询 MySQL预装logstash-input-beats插件可直接接收 Filebeat/Metricbeat 等 Beats 系列采集器发送的数据。也就是说从 Filebeat 采集服务器日志、用 MySQL JDBC 驱动读取业务数据这两条最常见的管道入口都已开箱即用。最小可用管道示例logstash/pipeline/目录初始是空的仅含一个.gitkeep在放入.conf文件之前 Logstash 不会处理任何数据。一个最小管道——接收 Beats 输入并直接写入 Elasticsearchinput { beats { port 5044 } } output { elasticsearch { hosts [elasticsearch:9200] index logs-%{YYYY.MM.dd} } }将其保存为logstash/pipeline/logstash.confLogstash 会因config.reload.automatic: true自动加载无需重启。两个注意点output 的 host 必须写容器名elasticsearch端口9200对应容器内 Elasticsearch 的 REST 接口不要写localhost因为 Logstash 与 Elasticsearch 各自运行在独立容器中通过frontend/backend网络互联index使用日期通配符%{YYYY.MM.dd}生成按天滚动的索引这是日志场景的常见约定。管道上线前先做语法校验自动重载虽方便但生产管道文件若存在语法错误Logstash 会静默地加载失败。因此改动管道后务必先用测试模式校验# Laradock CLI ./laradock exec -T logstash bin/logstash --config.test_and_exit # Docker Compose docker compose exec -T logstash bin/logstash --config.test_and_exit该命令会校验path.config即/usr/share/logstash/pipeline下的所有管道文件校验通过后直接退出、不会启动管道因此即使容器当前正在处理数据也可以安全地对它执行。-T表示不分配伪终端适合在脚本/CI 中调用。检查已安装插件确认预装的logstash-input-beats或你后来手动安装的插件是否就位# Laradock CLI ./laradock exec -T logstash bin/logstash-plugin list # Docker Compose docker compose exec -T logstash bin/logstash-plugin list输出列表中应能看到logstash-input-beats若你通过管道使用了 MySQLjdbc输入还需要在输出中确认logstash-input-jdbc插件同样存在。常见问题排查No pipeline is running没有管道在运行logstash/pipeline/目录初始为空仅.gitkeepLogstash 必须至少有一个包含input/output块的.conf文件才会开始处理参考上文最小可用管道示例。Cant reach Elasticsearch无法连接 Elasticsearch管道 output 的 host 必须使用容器名elasticsearch而不是localhost两者位于同一 Docker 网络frontend/backend之内。与 Elasticsearch/Kibana 版本不匹配三者共享根.env的ELK_VERSION。如果你手动修改了某一处的版本需要重建全部三个服务使镜像重新构建./laradock rebuild logstash elasticsearch kibana高负载下内存不足JVM 堆内存固化在 logstash/compose.yml 的LS_JAVA_OPTS-Xmx1g -Xms1g本地处理大规模数据时请直接在该文件上调高例如改为-Xmx2g -Xms2g。宿主机 5001 端口被占用该端口硬编码在 logstash/compose.yml 的ports中没有对应的.env变量可覆盖。需要释放宿主机端口或直接编辑该 compose 文件修改映射例如5002:5001容器内端口保持 5001 不变。串联完整的 ELK 工作流Logstash 是 ELK 的中间枢纽Elasticsearch提供搜索与存储后端Kibana提供数据可视化界面。三者由ELK_VERSION统一版本驱动组成一条采集Beats/MySQL/JDBC→ 管道处理Logstash→ 存储检索Elasticsearch→ 可视化Kibana的完整本地日志分析链路。如果你是 Laradock 的新用户建议先阅读Getting Started完成环境初始化再按本文步骤从启动 Logstash 开始搭建你的日志管道。【免费下载链接】laradockFull PHP development environment for Docker. Run Laravel, Symfony, CodeIgniter, Phalcon, WordPress, Drupal, Magento, Moodle, or any PHP project with 70 pre-configured services: Nginx, Apache, PHP-FPM, MySQL, PostgreSQL, MongoDB, Redis, Elasticsearch more.项目地址: https://gitcode.com/gh_mirrors/la/laradock创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考