我正在尝试可视化卡巴纳中的一些数据
让我们举一个例子:
我有几个销售某些产品的条目,它们的交易ID是一个事件,成本是另一个事件。
Line 1 {"event" : {"transId" : "q4h56", "prod" : "notebook"} }
Line 2 {"event" : {"transId" : "q4h56", "cost" : 100 } }
Line 3 {"event" : {"transId" : "rt45e", "prod" : "crayons" } }
Line 4 {"event" : {"transId" : "rt45e", "cost" : 75 } }
Line 5 {"event" : {"transId" : "gr56d", "prod" : "pen" } }
Line 6 {"event" : {"transId" : "gr56d", "cost" : 83 } }
Line 7 {"event" : {"transId" : "uh65r", "prod" : "paper" } }
Line 8 {"event" : {"transId" : "uh65r", "cost" : 49 } }
Line 9 {"event" : {"transId" : "yh5er", "prod" : "crayons" } }
Line 10 {"event" : {"transId" : "yh5er", "cost" : 140 } }
Line 11 {"event" : {"transId" : "23yg5", "prod" : "pen" } }
Line 12 {"event" : {"transId" : "23yg5", "cost" : 83 } }
我想要实现的目标:
1:使用日志存储:
是否可以将transId相似的事件合并为单个事件,如下所示:
Line 1 {"event" : {"transId" : "q4h56", "prod" : "notebook", "cost" : 100} }
Line 2 {"event" : {"transId" : "rt45e", "prod" : "crayons", "cost" : 75 } }
Line 3 {"event" : {"transId" : "gr56d", "prod" : "pen", "cost" : 83 } }
Line 4 {"event" : {"transId" : "uh65r", "prod" : "paper", "cost" : 49 } }
Line 5 {"event" : {"transId" : "yh5er", "prod" : "crayons", "cost" : 140} }
Line 6 {"event" : {"transId" : "23yg5", "prod" : "pen", "cost" : 83 } }
由于日志存储每次解析一行,所以这似乎无法实现
我需要存储一堆全局键/值对,以便以后使用,例如CCD_ 1,并且如果相同的transId再次出现。
*[@metadata]
对于每一行日志存储解析都是唯一的,并且在下一个日志存储解析周期中不可用。如果我没有错的话!
2:使用Kibana:
有没有可能将我们销售的每种类似产品的[成本]总和可视化
因为成本没有与产品名称对应
在可视化中查看这些产品,不提供成本。
如何映射这些,某种动态查找/连接,我觉得Kibana不支持它,如果我没有错的话!
有什么建议吗
同样,这只是一个示例数据,实际使用具有类似情况的事件的syslog。
感谢
您可以在logstash中使用聚合过滤器来完成此操作。您的用例类似于文档中的示例1。
如果事件的顺序是可变的,那么执行示例3。在这种情况下,将产品名称和成本都存储在映射中,然后event.cancel所有源事件。
也许Logstash的聚合过滤器可以帮助您实现这一点。
考虑样本数据:
{"event" : {"transId" : "q4h56", "prod" : "notebook"} }
{"event" : {"transId" : "q4h56", "cost" : 100 } }
{"event" : {"transId" : "rt45e", "prod" : "crayons" } }
{"event" : {"transId" : "rt45e", "cost" : 75} }
{"event" : {"transId" : "gr56d", "prod" : "pen" } }
{"event" : {"transId" : "gr56d", "cost" : 83} }
{"event" : {"transId" : "uh65r", "prod" : "paper" } }
{"event" : {"transId" : "uh65r", "cost" : 49} }
{"event" : {"transId" : "yh5er", "prod" : "crayons" } }
{"event" : {"transId" : "yh5er", "cost" : 140 } }
{"event" : {"transId" : "23yg5", "prod" : "pen" } }
{"event" : {"transId" : "23yg5", "cost" : 83} }
以下聚合筛选器将根据transId
值聚合行。
aggregate {
task_id => "%{[event][transId]}"
code => "
map['event'] ||= {}
map['event']['transId'] ||= event.get('[event][transId]')
map['event']['prod'] ||= event.get('[event][prod]')
map['event']['cost'] ||= event.get('[event][cost]')
event.cancel()
"
push_previous_map_as_event => true
}
这将为您提供一个同时具有prod
和cost
字段的事件。