RQ worker日志聚合:使用ELK Stack与Filebeat
【免费下载链接】rq 项目地址: https://gitcode.com/gh_mirrors/rq/rq
日志聚合的必要性
在分布式系统中,RQ(Redis Queue)worker的日志分散在各个服务器上,难以集中查看和分析。当系统出现故障时,运维人员需要登录多台服务器排查问题,效率低下。本文将介绍如何使用ELK Stack(Elasticsearch、Logstash、Kibana)与Filebeat构建RQ worker日志聚合系统,实现日志的集中收集、存储、分析和可视化。
RQ worker日志配置
日志格式自定义
RQ允许通过配置自定义日志格式,为日志聚合提供结构化数据。修改RQ的日志配置文件rq/logutils.py,设置合适的日志格式:
# 在[rq/logutils.py](https://link.gitcode.com/i/091c686cf38a8ea902a3b17e493d6904)中设置日志格式
DEFAULT_LOGGING_FORMAT = '%(asctime)s %(levelname)s %(name)s %(module)s %(funcName)s %(lineno)d %(message)s'
DEFAULT_LOGGING_DATE_FORMAT = '%Y-%m-%dT%H:%M:%S%z'
日志输出重定向
默认情况下,RQ worker的日志输出到控制台。为了便于Filebeat收集,需要将日志重定向到文件。可以通过修改RQ的CLI配置文件rq/cli/cli.py,添加日志文件输出功能:
# 在[rq/cli/cli.py](https://link.gitcode.com/i/16042587c4a40f691b9a003896b7bcf7)的setup_loghandlers函数中添加FileHandler
import logging
from logging.handlers import RotatingFileHandler
def setup_loghandlers(...):
# ... 现有代码 ...
file_handler = RotatingFileHandler(
'/var/log/rq/worker.log',
maxBytes=10485760, # 10MB
backupCount=10,
encoding='utf-8'
)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
Filebeat配置
安装Filebeat
在RQ worker所在的服务器上安装Filebeat,用于收集日志文件。
配置Filebeat
创建Filebeat配置文件filebeat.yml:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/rq/worker.log
fields:
service: rq-worker
environment: production
fields_under_root: true
output.elasticsearch:
hosts: ["elasticsearch:9200"]
index: "rq-worker-logs-%{+yyyy.MM.dd}"
setup.kibana:
host: "kibana:5601"
setup.template.name: "rq-worker"
setup.template.pattern: "rq-worker-logs-*"
启动Filebeat
filebeat -e -c filebeat.yml
Logstash配置
安装Logstash
在服务器上安装Logstash,用于日志过滤和处理。
配置Logstash
创建Logstash配置文件logstash.conf:
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{DATA:logger} %{DATA:module} %{DATA:function} %{NUMBER:lineno:int} %{GREEDYDATA:message}" }
}
date {
match => [ "timestamp", "yyyy-MM-dd'T'HH:mm:ssZ" ]
target => "@timestamp"
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "rq-worker-logs-%{+yyyy.MM.dd}"
}
stdout { codec => rubydebug }
}
启动Logstash
logstash -f logstash.conf
Elasticsearch与Kibana配置
启动Elasticsearch和Kibana
使用Docker Compose启动Elasticsearch和Kibana:
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"
kibana:
image: docker.elastic.co/kibana/kibana:7.14.0
ports:
- "5601:5601"
depends_on:
- elasticsearch
在Kibana中创建索引模式
- 访问Kibana界面:http://localhost:5601
- 进入Stack Management -> Index Patterns
- 创建索引模式
rq-worker-logs-*,时间字段选择@timestamp
日志可视化
创建Kibana仪表盘
在Kibana中创建可视化图表,如日志级别分布、请求量趋势等。
设置日志告警
在Kibana中配置日志告警,当出现ERROR级别日志或异常模式时发送通知。
总结
通过ELK Stack与Filebeat实现RQ worker日志聚合,能够集中管理和分析日志,提高问题排查效率。关键步骤包括:
- 配置RQ worker输出结构化日志
- 使用Filebeat收集日志并发送到Logstash
- Logstash过滤和处理日志,发送到Elasticsearch
- Kibana可视化日志数据并设置告警
更多关于RQ worker的配置信息,请参考官方文档:docs/workers.md。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




