Logstash多行编解码器用于Celery堆栈跟踪

7 投票
1 回答
2047 浏览
提问于 2025-04-18 02:55

我正在尝试为logstash创建一个配置,以正确解析Celery的日志格式,包括多行的错误堆栈信息。日志输出的一个例子可能是这样的:

[2014-04-15 15:11:27,350: DEBUG/Worker-4] Doing some work.
[2014-04-15 15:11:27,362: ERROR/MainProcess] Task core.tasks.sometask[92dc34bd-8139-4f98-b359-d78caf68381d] raised unexpected: ValueError('Foobar',)
Traceback (most recent call last):
  File "./venvs/backend-33/lib/python3.4/site-packages/celery/app/trace.py", line 238, in trace_task
    R = retval = fun(*args, **kwargs)
  File "./venvs/backend-33/lib/python3.4/site-packages/celery/app/trace.py", line 416, in __protected_call__
    return self.run(*args, **kwargs)
  File "util.py", line 151, in wrapper
    rv = func(self, *args, **kwargs)
  File "tasks.py", line 104, in do_something_useful
    raise ValueError('Foobar')
ValueError: Foobar

在某个时候,我让Grok准备好解析单行输出,但多行的就成了问题。这段配置:

input {
    stdin {
        codec => multiline {
            'negate' => true
            'pattern' => '^\['
            'what' => 'previous'
        }
    }
}

output {
    stdout { 
        codec => rubydebug
    }
}

基本上是直接从Logstash的文档中复制过来的,用于处理多行的内容,但当我运行它时,根本没有任何输出。

我尝试使用多行过滤器,但结果还是一样。我还试着用--verbose选项运行logstash,但没有得到任何有用的信息。这到底是怎么回事呢?

1 个回答

3

经过一番搜索,我找到了答案。看来多行编解码器和标准输入不太兼容。现在改用文件输入,就可以正常工作了。

参考链接:https://logstash.jira.com/browse/LOGSTASH-1629

撰写回答