作者:Nicolas Ruflin
Elasticsearch 用于多種數(shù)據(jù)類型 —— 其中之一就是指標(biāo)。 隨著多年前 Metricbeat 的推出以及后來我們的 APM 代理的推出,指標(biāo)用例變得更加流行。 多年來,Elasticsearch 在如何處理指標(biāo)聚合和稀疏文檔等方面做出了許多改進。 同時,引入了 TSVB 可視化,使指標(biāo)可視化變得更加容易。 大多數(shù)其他指標(biāo)解決方案都存在一個缺失的概念,即帶維度的時間序列的概念。
2021 年年中,Elasticsearch 團隊著手讓 Elasticsearch 更適合指標(biāo)。 該團隊創(chuàng)建了時間序列數(shù)據(jù)流 (TSDS),它在 8.7 中作為正式發(fā)布?(GA) 發(fā)布。
這篇博文深入探討了 TSDS 的工作原理以及我們?nèi)绾卧?Elastic 可觀察性中使用它,以及吧如何將它用于你自己的指標(biāo)。
TSDS 快速介紹
時間序列數(shù)據(jù)流 (TSDS) 構(gòu)建在 Elasticsearch 中針對時間序列優(yōu)化的數(shù)據(jù)流之上。 要為指標(biāo)創(chuàng)建數(shù)據(jù)流,需要對數(shù)據(jù)流進行額外設(shè)置。 當(dāng)我們使用數(shù)據(jù)流時,首先必須創(chuàng)建一個索引模板:
PUT _index_template/metrics-laptop
{
"index_patterns": [
"metrics-laptop-*"
],
"data_stream": {},
"priority": 200,
"template": {
"settings": {
"index.mode": "time_series"
},
"mappings": {
"properties": {
"host.name": {
"type": "keyword",
"time_series_dimension": true
},
"packages.sent": {
"type": "integer",
"time_series_metric": "counter"
},
"memory.usage": {
"type": "double",
"time_series_metric": "gauge"
}
}
}
}
}
讓我們仔細看看這個模板。 在頂部,我們用 metrics-laptop-* 標(biāo)記索引模式。 可以選擇任何模式,但建議對所有指標(biāo)使用數(shù)據(jù)流命名方案。 下一節(jié)設(shè)置 "index.mode": "time_series"?并確保它是一個 data_stream: "data_stream": {}。
維度
每個時間序列數(shù)據(jù)流至少需要一個維度。 在上面的示例中,host.name 被設(shè)置為維度字段,其中包含 "time_series_dimension": true。 默認情況下最多可以有 16 個維度。 并非每個維度都必須出現(xiàn)在每個文檔中。 維度定義了時間序列。 一般規(guī)則是選擇字段作為唯一標(biāo)識你的時間序列的維度。 通常這是對主機/容器的唯一描述,但對于磁盤指標(biāo)等某些指標(biāo),還需要磁盤 ID。 如果你對默認推薦的維度感到好奇,請查看此 ECS 貢獻的維度屬性。
減少存儲并提高查詢速度
此時,你已經(jīng)擁有一個正常運行的時間序列數(shù)據(jù)流。 將索引模式設(shè)置為時間序列會自動打開合成源。 默認情況下,Elasticsearch 通常會復(fù)制數(shù)據(jù)三次:
- 面向行的存儲(_source 字段)
- 面向列的存儲(對于聚合 doc_values: true)
- 索引(對于過濾和搜索?index: true )
對于合成(synthetic)源,_source 字段不會持久化; 相反,它是根據(jù) doc values 重建的。 特別是在指標(biāo)用例中,保留源代碼幾乎沒有什么好處。
不存儲它意味著存儲量的顯著減少。 時間序列數(shù)據(jù)流根據(jù)維度和時間戳對數(shù)據(jù)進行排序。 這意味著通常一起查詢的數(shù)據(jù)存儲在一起,從而加快了查詢時間。 這也意味著單個時間序列的數(shù)據(jù)點并排存儲在磁盤上。 由于計數(shù)器增加的速率通常相對恒定,因此可以進一步壓縮數(shù)據(jù)。
指標(biāo)類型
但要受益于 TSDS 的所有優(yōu)勢,指標(biāo)字段的字段屬性必須使用 time_series_metric: {type} 進行擴展。 支持多種類型 —— 例如,上面使用了 gauge 和 counter。 為 Elasticsearch 提供有關(guān)指標(biāo)類型的知識允許 Elasticsearch 為不同類型提供更優(yōu)化的查詢并進一步減少存儲使用。
當(dāng)你在數(shù)據(jù)流命名方案下為數(shù)據(jù)流創(chuàng)建自己的模板時,設(shè)置 "priority": 200 或更高是很重要的,否則將應(yīng)用內(nèi)置的默認模板。
攝取文檔
將文檔提取到 TSDS 與將文檔提取到 Elasticsearch 沒有任何不同。 你可以在 Dev Tools 中使用以下命令添加文檔,然后搜索它并檢查映射。 注意:你必須將@timestamp 字段調(diào)整為接近你當(dāng)前的日期和時間。
# Add a document with `host.name` as the dimension
POST metrics-laptop-default/_doc
{
# This timestamp neesd to be adjusted to be current
"@timestamp": "2023-03-30T12:26:23+00:00",
"host.name": "ruflin.com",
"packages.sent": 1000,
"memory.usage": 0.8
}
# Search for the added doc, _source will show up but is reconstructed
GET metrics-laptop-default/_search
# Check out the mappings
GET metrics-laptop-default
如果你想為自己的文檔添加一個當(dāng)前機器運行的日期,你可以參考文章 “Elasticsearch:如何在寫入文檔時加上 now 時間標(biāo)戳”。
如果你進行搜索,它仍會顯示 _source 但這是根據(jù) doc values 重建的。 上面添加的附加字段是 @timestamp。 這很重要,因為它是任何數(shù)據(jù)流的必填字段。
為什么這對可觀察性很重要?
Elastic 可觀察性解決方案的優(yōu)勢之一是在單個存儲引擎中,所有信號都集中在一個地方。 用戶可以一起查詢?nèi)罩?、指?biāo)和跟蹤,而無需從一個系統(tǒng)跳轉(zhuǎn)到另一個系統(tǒng)。 正因為如此,擁有一個強大的存儲和查詢引擎不僅適用于日志而且適用于指標(biāo)對我們來說很關(guān)鍵。
TSDS 在集成中的使用
通過集成(integrations),我們?yōu)橛脩籼峁┝伺c他們的基礎(chǔ)設(shè)施和服務(wù)集成的開箱即用體驗。 如果你正在使用我們的集成,假設(shè)你使用的是 8.7 或更高版本,最終你將自動獲得 TSDS 的所有指標(biāo)優(yōu)勢。
目前我們正在處理我們的集成包列表,添加維度、指標(biāo)類型字段,然后為指標(biāo)數(shù)據(jù)流打開 TSDS。 這意味著一旦包啟用了所有屬性,你唯一要做的就是升級集成,其他一切都會在后臺自動發(fā)生。
了解更多
如果你想詳細了解 TSDS 的幕后工作原理和所有可用的配置選項,請查看 TSDS 文檔。 Elasticsearch 在 8.7 中支持的只是 Elasticsearch 中指標(biāo)時間序列的第一次迭代。 如果你切換到使用 TSDS,你將自動受益于 Elasticsearch 對指標(biāo)時間序列所做的所有未來改進,無論是更高效的存儲、查詢性能還是新的聚合功能。文章來源:http://www.zghlxwxcb.cn/news/detail-441012.html
TSDS 從 8.7 開始就可以使用,并且會在集成升級時自動出現(xiàn)在我們越來越多的集成中。 你會注意到的是更低的存儲使用量和更快的查詢。 開心!文章來源地址http://www.zghlxwxcb.cn/news/detail-441012.html
到了這里,關(guān)于如何將 Elasticsearch 和時間序列數(shù)據(jù)流用于可觀察性指標(biāo) - 8.7的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!