java - 用于存储计量数据的 ELK 堆栈

标签 java elasticsearch elastic-stack metering

在我们的项目中,我们使用 ELK 堆栈将日志存储在一个集中的位置。但是我注意到 ElasticSearch 的最新版本支持各种聚合。此外,Kibana 4 还支持以漂亮的图形方式构建图形。即使是最新版本的 grafana 现在也可以使用 Elastic Search 2 数据源。

那么,所有这些是否意味着 ELK 堆栈现在可以用于存储系统内部收集的计量信息,或者它仍然不能被视为现有解决方案的有力竞争者:Graphite、Influx DB 等等。 如果是这样,是否有人在生产中使用 ELK 进行计量?能否分享一下您的经验?

为了阐明概念,我将计量数据视为可以聚合并“随时间”显示在图表中的数据,而不是主要用例正在搜索的常规日志消息。

提前致谢

最佳答案

是的,您可以使用 Elasticsearch 来存储和分析时间序列数据。

更准确地说 - 这取决于您的用例。对于我的用例中的示例(金融工具价格变动历史数据,开发中)我能够插入40.000 个文档/秒(~125 字节文档,每个文档有 11 个字段 - 1 个时间戳、字符串和小数,意味着 5MB/s 的有用数据)14 小时/day,在单个节点(具有 192GB 内存的大型现代服务器)上,由公司 SAN(由旋转磁盘支持,而不是 SSD!)。我打算存储高达 1TB 的数据,但我预计 2-4TB 的数据也可以在单个节点上工作。

除了 30GB 的 ES_HEAP_SIZE 之外,所有这些都是默认配置文件设置。我怀疑通过一些调整可以在该硬件上获得更好的写入性能(例如,我发现 iostat 报告设备利用率为 25-30% 很奇怪,就好像 Elastic 正在限制它/为读取保留 i/o 带宽或合并...但也可能是 %util 是 SAN 设备的不可靠指标..)

查询性能也很好 - 只要您用时间和/或其他字段限制结果数据集,查询/Kibana 图返回速度很快。

在这种情况下,您将不会使用 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确保弹性按照您的需要解析您的数据(数字、日期等),创建所需的索引级别等。

此用例的其他推荐做法是每天使用单独的索引(或每月/每周,具体取决于您的插入率),并确保索引是使用<创建的em>刚好足以容纳 1 天数据的分片(默认情况下,新索引使用 5 个分片创建,分片的性能在​​分片增长超过一定大小后开始下降 - 通常是几十 GB ,但它可能因您的用例而异——您需要测量/实验)。

使用 Elasticsearch 别名 https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-aliases.html有助于处理多个索引,并且是通常推荐的最佳实践。

关于java - 用于存储计量数据的 ELK 堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37126331/

相关文章:

java - Universal-Image-Loader 中多重继承的一个不确定性

java - 运行 mvn clean install 时出现 Maven 错误?

elasticsearch - Kibana:如何基于两个字段进行可视化

elasticsearch - 防止字段的相同值的Elasticsearch查询彼此相邻出现

elasticsearch - 为什么图标标识的字段是 '?'而不是像官方示例一样的 't'?

elasticsearch - 在Kibana 4中显示多行

java - 在 netbeans 中单击“运行”时不显示 Jpanel

java - 我可以在不重新启动 JVM 的情况下在 JavaFX 8 中重新加载样式表吗?

Elasticsearch 最佳实践 : use directly from the frontend or from the backend

python - 具有范围的Elastic Search复合分组