在我们的项目中,我们使用 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/