使用ELK堆栈将用户信息添加到集中式日志记录中

时间:2014-12-17 13:45:27

标签: mongodb elasticsearch logstash kibana

我正在使用ELK堆栈(第一个项目)来集中服务器的日志并使用Kibana可视化一些实时统计信息。日志存储在ES索引中,我有另一个索引,其中包含用户信息(IP,名称,人口统计信息)。我想:

  1. 使用与IP匹配的服务器日志加入用户信息。我想在Kibana仪表板中包含此信息(例如,实时显示已连接用户的用户名)。

  2. 使用过滤和处理过的信息创建新索引(例如,访问次数超过特定网址3倍的用户)。

  3. 哪个是解决这些问题的最佳设计(例如,通过过滤器在logstash阶段包含用户名,执行预定作业,......)?如果处理任务(2)变得更复杂,那么使用MongoDB会更好吗?

    谢谢!

2 个答案:

答案 0 :(得分:0)

我最近想要将一些日志数据与用户数据(包含其他数据中的IP)进行交叉引用,并且只使用了elasticsearch的{​​{3}}。这意味着从RDBMS中提取数据,将其转换为JSON并输出符合批量导入API所需格式的平面文件(基本上为描述索引和类型的行添加前缀)。

这应该适用于初始导入,然后可以使用任何存储用户数据中的触发器来实现delta。可能只需写入平面文件并像其他日志一样处理。其他选项可能是bulk import API

答案 1 :(得分:0)

我也很想知道最初存储数据的位置(DB,直接从服务器推送......)。但是,我最初使用ELK堆栈使用批处理文件从数据库服务器取回数据,该批处理文件利用BCP(在计划任务上运行)并将其存储到平面文件,使用Logstash监视文件,以及操作LS内的数据config(grok过滤器)。您还可以考虑使用简单的控制台/ Web应用程序来在使用Logstash进行格式化之前操作数据。

如果可能,我会尝试通过SQL Server SPROC / BCP命令提取数据,并匹配Logstash中返回的完整消息。然后,您可以将信息存储在单个索引中。

我希望这有帮助,因为我绝不是专家,但如果您对当前数据存储的详细信息有所了解,我将很乐意为您解答更多问题;即数据如何进入Logstash。 RabbitMQ是另一个有价值的工具,可以查看您的输入源。