需将WorkBuddy日志接入ELK服务器,三种互斥路径:一、Filebeat采集本地日志文件;二、API推送至Logstash HTTP接口;三、Web界面导出后定时归档注入ELK。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜
如果您希望为WorkBuddy构建集中化、可长期留存且支持全文检索与可视化分析的日志能力,则需将其日志输出接入独立的ELK日志服务器。以下是实现该目标的三种互斥且可并行部署的技术路径:
一、通过Logstash Filebeat双通道采集WorkBuddy本地日志文件
该方式适用于WorkBuddy已部署在Linux服务器上且日志以标准文本格式落盘的场景,利用轻量级Filebeat替代Logstash直接读取文件,降低资源开销并提升采集稳定性。
1、确认WorkBuddy日志目录权限:执行
,确保
用户对该目录具有读取权限;若无,执行
并重启filebeat服务。
2、在Filebeat配置文件
中添加WorkBuddy输入模块:
3、在
下新增如下配置块:
4、
5、
6、
7、
8、
9、
10、
11、启用Filebeat内置Elasticsearch输出或转发至Logstash:
12、若直连ES,在
中配置
及TLS证书路径;
13、若经Logstash中转,在
中配置
,并确保Logstash启用了
输入插件。
14、执行
(可选,用于补充系统上下文),随后运行
初始化索引模板。
15、启动服务:
。
二、配置WorkBuddy API日志推送至Logstash HTTP接口
该方式适用于WorkBuddy已启用RESTful日志查询API且具备主动推送能力的版本,通过将日志事件实时POST至Logstash的HTTP端点,实现结构化日志的零解析转发。
1、在Logstash配置目录
中定义HTTP输入:
2、
3、
4、
5、
6、
7、
8、
9、在
段增强字段语义:
10、
11、
12、
13、
14、
15、
16、配置输出至Elasticsearch:
17、
18、
19、
20、
21、
22、
23、
24、验证配置语法:
。
25、启动Logstash服务:
。
26、修改WorkBuddy服务配置,在
或环境变量中设置日志推送地址为
,并启用
。
三、对接WorkBuddy Web管理界面日志中心的导出能力构建定时归档管道
该方式适用于无法修改WorkBuddy服务端配置、仅具备Web访问权限的受限环境,通过周期性调用其日志中心导出接口获取CSV/JSON快照,并注入ELK进行离线分析。
1、使用curl或Python requests模拟登录WorkBuddy Web管理界面,提取会话Cookie与CSRF Token:
2、
。
3、从响应头或HTML中提取
值,保存至变量
。
4、构造导出请求URL,例如:
5、
。
6、执行带认证的导出请求:
7、
。
8、编写Logstash配置
,使用
输入插件监听
目录下的新JSON文件:
9、
10、
11、
12、
13、
14、
15、
16、
17、在
中统一时间戳字段并标记来源:
18、
19、
20、
21、
22、配置输出至Elasticsearch并指定索引前缀:
23、
24、
25、
26、
27、
28、
29、设置crontab每日凌晨执行导出脚本并触发Logstash文件监听:
30、
。
ls -ld /opt/workbuddy/logsfilebeatsudo usermod -a -G workbuddy filebeat/etc/filebeat/filebeat.ymlfilebeat.inputs- type: filestream enabled: true paths: - "/opt/workbuddy/logs/*.log" fields: service: workbuddy fields_under_root: trueoutput.elasticsearchhosts: ["https://es-cluster.example.com:9200"]output.logstashhosts: ["logstash-server.example.com:5044"]beatssudo filebeat modules enable systemsudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["https://es-cluster.example.com:9200"]'sudo systemctl daemon-reload && sudo systemctl enable filebeat && sudo systemctl start filebeat/etc/logstash/conf.d/workbuddy-http.confinput { http { port => 8081 codec => "json" response_headers => { "Access-Control-Allow-Origin" => "*" } }}filterfilter { if [module] and [level] { mutate { add_field => { "[@metadata][index]" => "workbuddy-%{+YYYY.MM.dd}" } } date { match => ["timestamp", "ISO8601"] } }}output { elasticsearch { hosts => ["http://localhost:9200"] index => "%{[@metadata][index]}" ssl_enabled => false }}sudo -u logstash /usr/share/logstash/bin/logstash -t -f /etc/logstash/conf.d/workbuddy-http.confsudo systemctl start logstashapplication.ymlhttp://logstash-server.example.com:8081log.push.enabled=truecurl -X POST "https://wb-admin.example.com/login" -d "username=admin" -d "password=***" -c cookies.txtX-CSRF-TOKENTOKENhttps://wb-admin.example.com/api/v1/logs/export?service=task-engine&level=ERROR&since=2026-04-10T00:00:00Z&until=2026-04-10T23:59:59Z&format=jsoncurl -b cookies.txt -H "X-CSRF-TOKEN: $TOKEN" -o /tmp/workbuddy-daily-20260410.json "$EXPORT_URL"/etc/logstash/conf.d/workbuddy-csv-import.conffile/tmp/input { file { path => "/tmp/workbuddy-daily-*.json" start_position => "beginning" sincedb_path => "/var/lib/logstash/sincedb_workbuddy_import" codec => "json" }}filterfilter { date { match => ["log_time", "ISO8601"] target => "@timestamp" } mutate { add_field => { "source" => "web-export" } }}output { elasticsearch { hosts => ["http://localhost:9200"] index => "workbuddy-web-archive-%{+YYYY.MM.dd}" }}0 2 * * * /usr/local/bin/export-workbuddy-logs.sh && sleep 10 && touch /tmp/workbuddy-daily-$(date +\%Y\%m\%d).json