【问题标题】:Adding user information to centralized logging with ELK stack使用 ELK 堆栈将用户信息添加到集中式日志记录
【发布时间】:2015-02-16 02:00:21
【问题描述】:
我正在使用 ELK 堆栈(第一个项目)来集中服务器的日志并使用 Kibana 可视化一些实时统计信息。日志存储在 ES 索引中,我有另一个包含用户信息(IP、姓名、人口统计)的索引。我正在尝试:
将用户信息与服务器日志相匹配,匹配 IP。我想在 Kibana 仪表板中包含这些信息(例如,实时显示连接用户的用户名)。
使用过滤和处理的信息创建新索引(例如,访问某个 url 超过 3 次的用户)。
解决这些问题的最佳设计是什么(例如,通过过滤器在 logstash 阶段包含用户名、执行计划作业……)?如果处理任务(2)变得更复杂,使用 MongoDB 会更好吗?
谢谢!
【问题讨论】:
标签:
mongodb
elasticsearch
logstash
kibana
【解决方案1】:
我最近想将一些日志数据与用户数据(包含 IP 以及其他数据)交叉引用,并且只使用了 elasticsearch 的 bulk import API。这意味着从 RDBMS 中提取数据,将其转换为 JSON 并输出符合批量导入 API 所需格式的平面文件(基本上是在描述索引和类型的行前面加上前缀)。
这应该适用于初始导入,然后可以在存储用户数据的任何地方使用触发器来实现您的增量。可能只是写入一个平面文件并像其他日志一样处理。其他选项可能是JDBC River。
【解决方案2】:
我也想知道数据最初存储在哪里(数据库,直接从服务器推送......)。但是,我最初使用 ELK 堆栈使用 BCP(在计划任务上运行)的批处理文件从数据库服务器中提取数据并将其存储到平面文件中,使用 Logstash 监视文件,并在 LS 中操作数据配置(grok 过滤器)。您还可以考虑使用简单的控制台/Web 应用程序来操作数据,然后再使用 Logstash。
如果可能,我会尝试通过 SQL Server SPROC/BCP 命令提取您的数据并匹配 Logstash 中返回的完整消息。然后,您可以将信息存储在单个索引中。
我希望这会有所帮助,因为我绝不是专家,但如果您能更具体地了解当前数据存储的详细信息,我很乐意为您回答更多问题;即数据如何进入 Logstash。 RabbitMQ 是另一个有价值的工具,可以查看您的输入源。