用于存储计量数据的 ELK 堆栈
ELK stack for storing metering data
在我们的项目中,我们使用 ELK 堆栈将日志集中存储在一个地方。但是我注意到 ElasticSearch 的最新版本支持各种聚合。此外,Kibana 4 还支持以漂亮的图形方式构建图形。即使是最新版本的 grafana 现在也可以使用 Elastic Search 2 数据源。
那么,所有这一切是否意味着 ELK 堆栈现在可以用于存储系统内部收集的计量信息,或者它仍然不能被视为现有解决方案的有力竞争者:Graphite、Influx DB 等等。
如果是这样,是否有人在生产中使用 ELK 进行计量?能否请您分享您的经验?
为了澄清概念,我认为计量数据是可以聚合并显示在图表中的东西 'over time',而不是主要用例正在搜索的常规日志消息。
非常感谢
是的,您可以使用 Elasticsearch 来存储和分析 时间序列 数据。
更准确地说 - 这取决于您的用例。对于我的用例中的示例(金融工具价格变动历史数据,开发中)我能够每秒插入 40.000 个文档(~125 字节文档,每个文档有 11 个字段 - 1 个时间戳、字符串和小数,意思是 5MB/s 有用数据) 14 hrs/day,在单节点(192GB 的大型现代服务器ram) 由企业 SAN 支持( 由旋转磁盘 支持,而不是 SSD!)。我去存储多达 1TB 的数据,但我预测 2-4TB 也可以在单个节点上工作。
除 30GB 的 ES_HEAP_SIZE 外,所有这些都是 默认配置文件设置 。我怀疑通过一些调整可以在该硬件上获得更好的写入性能(例如,我发现 iostat 报告设备利用率为 25-30% 很奇怪,就好像 Elastic 正在限制它/保存 i/o 带宽用于读取或合并...但也可能是 %util 是 SAN 设备的不可靠指标..)
查询性能也很好 - 查询/Kibana 图 return 很快,只要您限制结果数据集的时间 and/or 其他字段。
在这种情况下,您将不使用 Logstash 加载数据,而是大批量批量插入 直接到 Elasticsearch。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
您还需要定义一个映射 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html 以确保 elastic 按照您的需要解析您的数据(数字、日期等)创建想要的索引级别等..
此用例的其他推荐做法是每天使用单独的索引(或month/week,具体取决于您的插入率),并确保索引是用 足够的分片创建的,足以容纳 1 天的数据(默认情况下,新索引是用 5 个分片创建的,分片的性能在之后开始下降分片增长到一定大小 - 通常是几十 GB,但它可能因您的用例而异 - 您需要 measure/experiment).
使用 Elasticsearch aliases https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html 有助于处理多个索引,并且是通常推荐的最佳实践。
在我们的项目中,我们使用 ELK 堆栈将日志集中存储在一个地方。但是我注意到 ElasticSearch 的最新版本支持各种聚合。此外,Kibana 4 还支持以漂亮的图形方式构建图形。即使是最新版本的 grafana 现在也可以使用 Elastic Search 2 数据源。
那么,所有这一切是否意味着 ELK 堆栈现在可以用于存储系统内部收集的计量信息,或者它仍然不能被视为现有解决方案的有力竞争者:Graphite、Influx DB 等等。 如果是这样,是否有人在生产中使用 ELK 进行计量?能否请您分享您的经验?
为了澄清概念,我认为计量数据是可以聚合并显示在图表中的东西 'over time',而不是主要用例正在搜索的常规日志消息。
非常感谢
是的,您可以使用 Elasticsearch 来存储和分析 时间序列 数据。
更准确地说 - 这取决于您的用例。对于我的用例中的示例(金融工具价格变动历史数据,开发中)我能够每秒插入 40.000 个文档(~125 字节文档,每个文档有 11 个字段 - 1 个时间戳、字符串和小数,意思是 5MB/s 有用数据) 14 hrs/day,在单节点(192GB 的大型现代服务器ram) 由企业 SAN 支持( 由旋转磁盘 支持,而不是 SSD!)。我去存储多达 1TB 的数据,但我预测 2-4TB 也可以在单个节点上工作。
除 30GB 的 ES_HEAP_SIZE 外,所有这些都是 默认配置文件设置 。我怀疑通过一些调整可以在该硬件上获得更好的写入性能(例如,我发现 iostat 报告设备利用率为 25-30% 很奇怪,就好像 Elastic 正在限制它/保存 i/o 带宽用于读取或合并...但也可能是 %util 是 SAN 设备的不可靠指标..)
查询性能也很好 - 查询/Kibana 图 return 很快,只要您限制结果数据集的时间 and/or 其他字段。
在这种情况下,您将不使用 Logstash 加载数据,而是大批量批量插入 直接到 Elasticsearch。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html
您还需要定义一个映射 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html 以确保 elastic 按照您的需要解析您的数据(数字、日期等)创建想要的索引级别等..
此用例的其他推荐做法是每天使用单独的索引(或month/week,具体取决于您的插入率),并确保索引是用 足够的分片创建的,足以容纳 1 天的数据(默认情况下,新索引是用 5 个分片创建的,分片的性能在之后开始下降分片增长到一定大小 - 通常是几十 GB,但它可能因您的用例而异 - 您需要 measure/experiment).
使用 Elasticsearch aliases https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html 有助于处理多个索引,并且是通常推荐的最佳实践。