我正在尝试设置logstash input mongodb插件,以便从我的数据库中读取审计,但所有解析策略似乎都有问题,我不知道如何定制任何内容。
“flatte”parse_方法工作得很好,但它忽略了mongodb对象ID,并且除了在log_输入字段中之外,不会在任何地方输出它们。
“简单”parse_method包括对象标识,但以我无法弄清楚如何使用日期过滤器解析日期的方式输出日期(例如,“2017-02-12 16:30:00UTC”)。然后,在没有合适的时间戳的情况下,插件似乎会自行生成与当前时间无关的时间戳(例如,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_输入字段中提取组织?
我试过以下方法:
filter {
ruby {
code => "event.set('organization', eval(event.get('[log_entry]')))"
}
}
但这带来了一个rubyexception:错误日志。过滤器。ruby-发生ruby异常:(eval):1:语法错误,意外的tINTEGER
如果使用simple
parse_方法,则可以使用以下模式轻松解析时间戳yyyy-MM-dd HH:MM:ss-ZZZ
,您可以将其添加到日期过滤器中。
filter {
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss ZZZ" ]
}
}
关于最后一点,我建议检查since.*
设置,该设置允许您保留已处理内容的光标,并且只在下次日志存储重新启动时从该光标开始。
我试图在logstash 5.1.2上运行插件,并得到错误:直接事件字段引用(即event['field']='value')已被禁用,以支持使用event get和set方法(例如event.set('field','value'))。有关更多详细信息,请参阅Logstash 5.0破坏性更改文档。 19:20:09.456[LogStash::Runner]信息LogStash。输入。mong
问题内容: 在Logstash文档中找不到关系数据库的任何输入插件。 用logstash从一个关系数据库表中导入数据的最佳方法是什么?是否使用JDBC将Elastic Search直接连接到数据库? 问题答案: 您将需要使用JDBC River(https://github.com/jprante/elasticsearch-river- jdbc )将JDBC数据加载到elasticsearch
我在运行conf文件时遇到了这个错误 这是我的会议文件
我一直在尝试编码来查找给定数组元素的LCM。我的代码如下 我的问题是,当我输入时,输出控制台会冻结。我尝试了另一种没有while循环的方法。也就是说,消除了while循环,并在最后添加了一个if循环。 但现在编译器抛出一个错误,指出并非所有代码路径都返回一个值。有人能帮我解决代码中的问题吗?我是一名编程初学者。提前谢谢!!
问题内容: 通过控制台进行任何输入的数据类型(如我使用BufferedReader类所做的那样)为String。之后,我们将其类型转换为需要查询的数据类型(如Inter.parseInt()为整数)。但是在C语言中,我们可以接受任何输入原始数据类型,而在Java中,所有输入类型都是Neccerily String。为什么是这样? 问题答案: 控制台输入实际上以一系列字节而不是字符串的形式读入。这是
现在,你已经在运用 MATLAB 的命令行了,输入命令语句,就会看到结果出现在命令窗口中。 这一节介绍如何: 控制输出值的格式 用MATLAB命令隐藏输出 在命令行中输入长的命令 编辑命令行