我正在尝试设置logstash-input-mongodb插件来读取我的数据库中的审核,但所有解析策略似乎都有问题,我看不到如何自定义任何内容。
“flatten”parse_method工作得非常好,但它忽略了mongodb对象ID,除了在log_entry字段外,它们不会输出它们。
“简单”parse_method包括对象ID,但以我无法弄清楚如何使用日期过滤器解析的方式输出日期(例如,“2017-02-12 16:30:00 UTC”)。然后,在没有适当的时间戳的情况下,插件似乎自己生成时间戳,这与当前时间无关(例如,在2022年)。
我还没有弄清楚“挖掘”方法。
所以我的问题:
可以使用任何配置进行复制,这是我的基本配置:
input {
mongodb {
uri => 'mongodb://localhost:27017/test'
placeholder_db_dir => '/elk/logstash-mongodb/'
placeholder_db_name => 'logstash_sqlite.db'
collection => 'auditcommunications'
batch_size => 1000
parse_method => "flatten"
}
}
filter {
date {
match => [ "timestamp", "ISO8601" ]
}
}
output {
stdout { codec => rubydebug }
}
示例数据包括log_entry:
{
"audit-id" => "58a2edc916e057270065fa74",
"created" => "2017-02-14T11:45:13Z",
"type" => "mongodb-audit",
"audit-type" => "PaymentAudit",
"mongo_id" => "58a2edc916e057270065fa74",
"expiresAt" => "2017-05-15T11:45:13Z",
"lastUpdated" => "2017-02-14T11:45:13Z",
"@timestamp" => 2017-02-14T11:45:13.000Z,
"log_entry" => "{\"_id\"=>BSON::ObjectId('58a2edc916e057270065fa74'), \"order\"=>BSON::ObjectId('a8a2f205790858970046aa59'), \"_type\"=>\"PaymentAudit\", \"lastUpdated\"=>2017-02-14 11:45:13 UTC, \"created\"=>2017-02-14 11:45:13 UTC, \"payment\"=>BSON::ObjectId('58a2edc02eafcd560101ee5f'), \"organization\"=>BSON::ObjectId('56edde0ba33e1c03ff54a5ec'), \"status\"=>\"succeeded\", \"context\"=>{\"type\"=>\"order\", \"id\"=>BSON::ObjectId('58a2e205790852270046ab59')}, \"expiresAt\"=>2017-05-15 11:45:13 UTC, \"__v\"=>0}",
"logdate" => "2017-02-14T11:45:13+00:00",
"__v" => 0,
"@version" => "1",
"context_type" => "order",
"status" => "succeeded",
"timestamp" => "2017-02-14T11:45:13Z"
}
如何从上面的log_entry字段中提取组织?
我尝试了以下内容:
filter {
ruby {
code => "event.set('organization', eval(event.get('[log_entry]')))"
}
}
但是这会抛出一个rubyexception:错误logstash.filters.ruby - 发生了Ruby异常:(eval):1:语法错误,意外的tINTEGER
答案 0 :(得分:1)
如果您使用<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true" >
parse_method,则可以使用可添加到日期过滤器的以下模式simple
轻松解析时间戳。
yyyy-MM-dd HH:mm:ss ZZZ
关于最后一点,我建议检查filter {
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss ZZZ" ]
}
}
设置,这些设置允许您保留已处理的内容的光标,并且只在下次重新启动logstash时从该光标开始。