我想使用 logtash 来解析 python 日志文件,我在哪里可以找到帮助我这样做的资源。例如:
20131113T052627.769:myapp.py:240:信息:用户 Niranjan 已登录
在此我需要捕获时间信息以及一些数据信息。
我想使用 logtash 来解析 python 日志文件,我在哪里可以找到帮助我这样做的资源。例如:
20131113T052627.769:myapp.py:240:信息:用户 Niranjan 已登录
在此我需要捕获时间信息以及一些数据信息。
我们的 Python 日志文件的格式略有不同:
[2014-10-08 19:05:02,846] (6715) DEBUG:Our debug message here
所以我能够创建一个配置文件,而不需要任何特殊模式:
input {
file {
path => "/path/to/python.log"
start_position => "beginning"
}
}
filter {
grok {
match => [
"message", "\[%{TIMESTAMP_ISO8601:timestamp}\] \(%{DATA:pyid}\) %{LOGLEVEL:level}\:%{GREEDYDATA:logmessage}" ]
}
mutate {
rename => [ "logmessage", "message" ]
}
date {
timezone => "Europe/London"
locale => "en"
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}
output {
elasticsearch {
host => localhost
}
stdout {
codec => rubydebug
}
}
这似乎工作正常。
我有完全相同的问题/需求。我真的找不到解决办法。没有可用的 grok 模式真正匹配 python 日志输出,所以我只是继续编写了一个自定义的 grok 模式,我天真地添加到patterns/grok-patterns
.
DATESTAMP_PYTHON %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{INT}
我写的logstash 配置给了我很好的字段。
添加了一些我称之为pymodule的额外字段,它应该向您显示生成日志条目的 python 模块。
我的 logstash 配置文件如下所示(忽略 sincedb_path,这是一种简单的强制 logstash 每次运行时读取整个日志文件的方式):
input {
file {
path => "/tmp/logging_file"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => [
"message", "%{DATESTAMP_PYTHON:timestamp} - %{DATA:pymodule} - %{LOGLEVEL:level} - %{GREEDYDATA:logmessage}" ]
}
mutate {
rename => [ "logmessage", "message" ]
}
date {
timezone => "Europe/Luxembourg"
locale => "en"
match => [ "timestamp" , "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}
output {
stdout {
codec => json
}
}
请注意
我绝对不保证这是最好的,甚至是稍微可以接受的解决方案。