需通过Filebeat监控ThinkPHP的runtime/log/目录,使用filestream输入类型、独立YAML配置模块,并输出至Logstash处理后入Elasticsearch;确认日志路径权限、格式规范,启用配置热加载与多行合并。

如果您在ThinkPHP项目中已生成日志文件,但希望将其集中采集并转发至Logstash或Elasticsearch进行统一分析,则需通过Filebeat对runtime/log/目录下的日志实施轻量级监控。以下是针对ThinkPHP日志结构特性的Filebeat配置步骤:
一、确认ThinkPHP日志路径与格式
ThinkPHP默认将日志写入项目根目录下的runtime/log/子目录,按日期生成如2026-04-26.log的文件,内容为纯文本、含时间戳与错误级别,每条日志以换行分隔,无嵌套JSON结构。该格式适配Filebeat默认的单行日志解析模式。
1、进入ThinkPHP项目根目录,执行ls -l runtime/log/确认日志文件存在且可读。
2、使用head -n 3 runtime/log/2026-04-26.log查看前几行,验证日志是否以[2026-04-26 15:22:03]等标准格式开头。
立即学习“PHP免费学习笔记(深入)”;
3、确保运行Filebeat的系统用户对runtime/log/目录具有read权限,禁止授予write权限以防误删或覆盖。
二、部署Filebeat并启用filestream输入
Filebeat 7.16+推荐使用filestream替代已弃用的log类型输入,其性能更优、资源占用更低,且原生支持路径通配与多行合并预设。
1、下载Filebeat压缩包:wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.3-linux-x86_64.tar.gz。
2、解压并重命名目录:tar -zxf filebeat-7.16.3-linux-x86_64.tar.gz && mv filebeat-7.16.3-linux-x86_64 filebeat。
3、备份原始配置:mv filebeat/filebeat.yml filebeat/filebeat.yml.bak。
4、创建新配置文件filebeat/filebeat.yml,写入以下核心内容:
filebeat.config.inputs:
enabled: true
path: ${path.config}/conf/inputs.d/*.yml
reload.enabled: true
reload.period: 10s
filebeat.inputs:
- type: filestream
enabled: true
paths:
- /var/www/your-thinkphp-project/runtime/log/*.log
fields:
app: thinkphp
env: production
fields_under_root: true
三、配置独立日志输入模块(推荐)
将ThinkPHP日志输入定义拆分为独立YAML文件,便于后期扩展多应用共存场景,同时避免主配置臃肿,提升可维护性。
1、创建子配置目录:mkdir -p filebeat/conf/inputs.d。
2、新建filebeat/conf/inputs.d/thinkphp.yml,内容如下:
- type: filestream
id: thinkphp-log-input
enabled: true
paths:
- /var/www/your-thinkphp-project/runtime/log/*.log
exclude_lines: ['^$']
multiline.pattern: '^\[\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
encoding: utf-8
close_inactive: 5m
harvester_buffer_size: 16384
3、确保主配置中filebeat.config.inputs.path指向${path.config}/conf/inputs.d/*.yml,且reload.enabled设为true。
四、设置输出目标为Logstash
Logstash作为中间处理层,可对ThinkPHP原始日志做字段提取、级别映射、敏感信息脱敏等操作,再转发至Elasticsearch,避免直接写入导致索引污染。
1、在filebeat.yml末尾添加output段:
output.logstash:
hosts: ["192.168.10.50:5044"]
ssl.enabled: false
timeout: 30
max_retries: 3
2、确认Logstash监听端口5044已开放,且input插件配置为beats { port => 5044 }。
3、务必禁用output.elasticsearch直连,防止未经清洗的日志直接入库引发Kibana查询异常。
五、启动Filebeat并验证日志采集
启动后Filebeat将立即扫描runtime/log/下所有匹配文件,并持续监控新增日志,每个harvester对应一个活跃日志文件,确保不丢日志、不重复采集。
1、赋予执行权限:chmod +x filebeat/filebeat。
2、前台调试启动:./filebeat/filebeat -e -c filebeat/filebeat.yml。
3、观察终端输出,确认出现Started filebeat及Harvester started for file日志行。
4、向ThinkPHP触发一次错误(如访问不存在的控制器),检查Logstash控制台是否收到含app: "thinkphp"字段的新事件。



















