??任何數(shù)據(jù)庫系統(tǒng)的關(guān)鍵功能是使用某種形式的過濾來獲取完整數(shù)據(jù)集的子集。OpenTsdb從版本1.x開始提供了過濾功能,并從2.2開始具有了擴(kuò)展功能。過濾器目前在標(biāo)簽值上運(yùn)行,這意味著在拉取數(shù)據(jù)時(shí),任意指標(biāo)和標(biāo)簽Key都必須按照與數(shù)據(jù)庫中完全相同的出現(xiàn)方式來進(jìn)行指定。
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比鹿泉網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式鹿泉網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鹿泉地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
??由于每個(gè)過濾器都會(huì)在下面進(jìn)行說明,都會(huì)用到下述數(shù)據(jù)集。它由單一指標(biāo)組成,定義在各個(gè)標(biāo)簽上的多個(gè)時(shí)間序列。作為例子,在T1處僅給出一個(gè)數(shù)據(jù)點(diǎn)。
TS# | Metric | Tags | Value@T1 |
---|---|---|---|
1 | sys.cpu.system | dc=dal host=web01 | 3 |
2 | sys.cpu.system | dc=dal host=web02 | 2 |
3 | sys.cpu.system | dc=dal host=web03 | 10 |
4 | sys.cpu.system | host=web01 | 1 |
5 | sys.cpu.system | host=web01 owner=jdoe | 4 |
6 | sys.cpu.system | dc=lax host=web01 | 8 |
7 | sys.cpu.system | dc=lax host=web02 | 4 |
??分組,即group by,是使用所需的聚合函數(shù)和過濾器將多個(gè)時(shí)間序列組合成一個(gè)的過程。默認(rèn)情況下,OpenTSDB按指標(biāo)對(duì)所有內(nèi)容進(jìn)行分組,以便如果查詢返回10個(gè)時(shí)間序列且使用sum聚合器,則所有10個(gè)序列將隨著時(shí)間的推移添加到一個(gè)值中。有關(guān)時(shí)間序列如何聚合合并的詳細(xì)信息,請(qǐng)參閱聚合。
??為了避免在沒有任何聚合的情況下對(duì)每個(gè)底層時(shí)間序列進(jìn)行分組和獲取,請(qǐng)使用版本2.2中包含的聚合器。或者,可以禁用OpenTSDB2.2以及更高版本基于每個(gè)過濾器的分組。請(qǐng)參閱API文檔了解如何操作。
??在最初的OpenTSDB版本中,最多只有兩種類型的過濾器可用,并且它們被隱式配置用于分組。允許的兩個(gè)運(yùn)算符如下:
??多個(gè)過濾器可以提供給一個(gè)查詢,過濾器之間使用AND連接,返回同時(shí)滿足條件的結(jié)果。這些過濾器在2.x以及更高版本中可用。
??下面示例使用v1版本的HTTP URI棧,聚合器組成的參數(shù)m,冒號(hào),緊接著指標(biāo)以及花括弧里面通過等號(hào)分隔開的標(biāo)簽過濾器。
?例1: http://host:4242/q?start=1h-ago&m=sum:sys.cpu.system{host=web01}
包含的時(shí)間序列# | Tags | 聚合標(biāo)簽 | Value@T1 |
---|---|---|---|
1,4,5,6 | host=web01 | 16 |
??在這種情況下,聚合標(biāo)簽集將為空,因?yàn)闀r(shí)間序列4和5具有與整個(gè)集合不相同的標(biāo)簽。
?新版API實(shí)際運(yùn)行情況:(與文檔描述不一致)
?查詢條件:
{
"start":"23h-ago",
"end":"10h-ago",
"queries":[
{
"metric":"sys.cpu.system",
"rate":"false",
"aggregator":"sum",
"tags":{
"host":"web01"
}
}
]
}
??查詢結(jié)果:
[
{
"metric":"sys.cpu.system",
"dps":{
"1521689251":8,
"1521689113":3,
"1521689167":1,
"1521689211":4
},
"aggregateTags":[
"dc"
],
"tags":{
"owner":"jdoe",
"host":"web01"
}
}
]
??例2: http://host:4242/q?start=1h-ago&m=sum:sys.cpu.system{host=web01,dc=dal}
包含的時(shí)間序列# | Tags | 聚合標(biāo)簽 | Value@T1 |
---|---|---|---|
1 | dc=dal host=web01 | 3 |
??新版API實(shí)際運(yùn)行情況:(與文檔描述一致)
?查詢條件:
{
"start":"1h-ago",
"queries":[
{
"metric":"sys.cpu.system",
"aggregator":"sum",
"tags":{
"host":"web01",
"dc":"dal"
}
}
]
}
??查詢結(jié)果:
[
{
"metric":"sys.cpu.system",
"dps":{
"1521773430":3
},
"aggregateTags":[],
"tags":{
"host":"web01",
"dc":"dal"
}
}
]
例3: http://host:4242/q?start=1h-ago&m=sum:sys.cpu.system{host=*,dc=dal}
包含的時(shí)間序列# | Tags | 聚合標(biāo)簽 | Value@T1 |
---|---|---|---|
1 | dc=dal host=web01 | 3 | |
2 | dc=dal host=web02 | 2 | |
3 | dc=dal host=web03 | 10 |
??這次我們?yōu)閔ost標(biāo)簽提供了*通配符以及顯示匹配dc標(biāo)簽。這將對(duì)host標(biāo)簽進(jìn)行分組,并為每個(gè)唯一的host標(biāo)簽值返回一個(gè)時(shí)間序列,在本例中為3個(gè)序列。
??新版API實(shí)際運(yùn)行情況:(與文檔描述一致)
?查詢條件:
{
"start":"1h-ago",
"queries":[
{
"metric":"sys.cpu.system",
"aggregator":"sum",
"tags":{
"host":"*",
"dc":"dal"
}
}
]
}
??查詢結(jié)果:
[
{
"metric":"sys.cpu.system",
"dps":{
"1521773430":3
},
"aggregateTags":[],
"tags":{
"host":"web01",
"dc":"dal"
}
},
{
"metric":"sys.cpu.system",
"dps":{
"1521773431":2
},
"aggregateTags":[],
"tags":{
"host":"web02",
"dc":"dal"
}
},
{
"metric":"sys.cpu.system",
"dps":{
"1521773432":10
},
"aggregateTags":[],
"tags":{
"host":"web03",
"dc":"dal"
}
}
]
??例4: http://host:4242/q?start=1h-ago&m=sum:sys.cpu.system{dc=dal|lax}
包含的時(shí)間序列# | Tags | 聚合標(biāo)簽 | Value@T1 |
---|---|---|---|
1,2,3 | dc=dal | host | 15 |
6,7 | dc=lax | host | 12 |
??在這里,| 運(yùn)算符僅用于匹配dc查詢中提供的標(biāo)簽值。因此,TSD將會(huì)把擁有這些值的任意時(shí)間序列分組聚合在一起。host標(biāo)簽被移動(dòng)到聚合標(biāo)簽列表中,設(shè)定的每個(gè)序列擁有一個(gè)host標(biāo)簽,并且標(biāo)簽擁有多個(gè)值。
?新版API實(shí)際運(yùn)行情況:(與文檔描述一致)
?查詢條件:
{
"start":"1h-ago",
"queries":[
{
"metric":"sys.cpu.system",
"aggregator":"sum",
"tags":{
"host":"*",
"dc":"dal"
}
}
]
}
??查詢結(jié)果:
[
{
"metric":"sys.cpu.system",
"dps":{
"1521773430":3
},
"aggregateTags":[],
"tags":{
"host":"web01",
"dc":"dal"
}
},
{
"metric":"sys.cpu.system",
"dps":{
"1521773431":2
},
"aggregateTags":[],
"tags":{
"host":"web02",
"dc":"dal"
}
},
{
"metric":"sys.cpu.system",
"dps":{
"1521773432":10
},
"aggregateTags":[],
"tags":{
"host":"web03",
"dc":"dal"
}
}
]
警告
?由于這些過濾器有限制,如果用戶像#1, #4和#5一樣編寫時(shí)間序列,則可能會(huì)由于聚合時(shí)間序列而返回異常結(jié)果,這些時(shí)間序列可能有一個(gè)通用的標(biāo)簽但附加標(biāo)簽不同。這個(gè)問題在2.3和顯式標(biāo)簽中有所解決。
??在OpenTSDB 2.2版本中增加了一個(gè)更靈活的過濾框架,允許禁用分組以及增加了過濾器類型,如正則表達(dá)式和通配符。過濾框架是可插拔的,以允許嘗試進(jìn)入外部系統(tǒng)如資產(chǎn)管理或供應(yīng)系統(tǒng)。
??在處理過程中,在同一個(gè)標(biāo)簽Key上可以有多個(gè)過濾器,比如它們之間用AND連接。如果有兩個(gè)過濾器host=literal_or(web01)和host=literal_or(web02),查詢將會(huì)返回空。如果同一個(gè)標(biāo)簽Key包含兩個(gè)或者更多過濾器,并且其中一個(gè)過濾器啟用了組,另一個(gè)未啟用,則對(duì)于該標(biāo)簽Key上的所有過濾器,group by將實(shí)際為真。
警告
?某些類型的過濾器可能會(huì)導(dǎo)致查詢比其他的慢,特別是regexp,wildcard和大小寫不敏感的過濾器。在從存儲(chǔ)拉取數(shù)據(jù)之前,將對(duì)這些過濾器進(jìn)行處理以基于UID創(chuàng)建數(shù)據(jù)庫過濾器,因此使用區(qū)分大小寫的literal_or過濾器總是比regexp快,因?yàn)榭梢詫⒆址馕鰹閁ID,并將它們發(fā)送到存儲(chǔ)系統(tǒng)進(jìn)行過濾。相反,如果要求使用pre, post或infix過濾的正則表達(dá)式或通配符,則TSD必須使用標(biāo)簽鍵UID從存儲(chǔ)中檢索所有行,然后對(duì)每個(gè)唯一行,將UID解析為字符串,然后再在結(jié)果上運(yùn)行過濾器。此外,有大量文字(literals)列表的過濾器將在存儲(chǔ)后處理,以避免為后臺(tái)存儲(chǔ)創(chuàng)建大量過濾器。此限制的默認(rèn)為4096,并且可以通過tsd.query.filter.expansion_limit參數(shù)進(jìn)行配置。
??從2.3及更高版本開始,如果給定指標(biāo)所有的標(biāo)簽值可以通過使用explicitTags功能大大降低查詢延遲。有兩個(gè)好處:
包含的時(shí)間序列# | Tags | 聚合標(biāo)簽 | Value@T1 |
---|---|---|---|
4 | host=web01 | 1 |
??這解決了不一致的標(biāo)簽key的問題,使我們只能篩選出時(shí)間序列#4。
??例2: http://host:4242/q?start=1h-ago&m=sum:explicit_tags:sys.cpu.system{host=*}{dc=*}
包含的時(shí)間序列# | Tags | 聚合標(biāo)簽 | Value@T1 |
---|---|---|---|
1,6 | host=web01 | dc | 11 |
2,7 | host=web02 | dc | 6 |
3 | host=web03,dc=dal | 10 |
??此查詢使用v2版本URI語法,以避免將dc標(biāo)簽key置于第二組花括號(hào)中進(jìn)行分組。此時(shí)只篩選同時(shí)擁有host和dc標(biāo)簽key的時(shí)間序列,然而僅僅根據(jù)host的值進(jìn)行分組。它跳過了時(shí)間序列#4和#5。
注意:
?使用HBase(0.98或更高版本)或者Bigtable時(shí),確保tsd.query.enable_fuzzy_filter已經(jīng)在配置中啟用(默認(rèn)啟用)。它為后端提供了一個(gè)特殊的過濾器,可以跳過我們需要查詢的行,而不是遍歷每一個(gè)rowkey進(jìn)行正則表達(dá)式匹配比較。
注意:
?使用2.4版本,TSDB將會(huì)向后端發(fā)送多個(gè)get請(qǐng)求而不是一個(gè)scan請(qǐng)求。此時(shí)可以通過多種因素減少查詢時(shí)間,特別是對(duì)于高基數(shù)的時(shí)間序列。但是,過濾器只能由literal_or組成。
??下述列表即OpenTSDB內(nèi)置的過濾器。附加的過濾器可以插件的方式加載。每一個(gè)heading都是URI或JSON查詢中使用的type。在編寫URI查詢時(shí),通過將過濾器名稱放在標(biāo)簽key的等號(hào)右側(cè)并將過濾器值放在 括號(hào)中來使用過濾器。例如{host=regexp(web[0-9]+.lax.mysite.com)}。對(duì)于JSON查詢,只需使用過濾器名稱作為type參數(shù),并使用過濾器值作為filter參數(shù)。例如:
??以下示例使用URI語法:
??采用一個(gè)literal_or或|管道符連接值列表,則會(huì)返回區(qū)分大小寫敏的結(jié)果匹配時(shí)間序列。這是一個(gè)十分高效的過濾器,因?yàn)樗梢詫⒆址馕鰹閁ID并將其發(fā)送到存儲(chǔ)層進(jìn)行預(yù)過濾。它與SQL的IN謂詞類似。
例子:
??(注意官方文中為ilteral_or,錯(cuò)誤)
與literal_or類似但它不區(qū)分大小寫。請(qǐng)注意:它不像literal_or一樣高效,或者說它必須后處理存儲(chǔ)中的所有行。(即TSDB會(huì)取出存儲(chǔ)中的所有行進(jìn)行過濾)
與literal_or一樣區(qū)分大小寫,將返回與給定值列表不匹配的時(shí)間序列。因?yàn)樗梢酝ㄟ^存儲(chǔ)進(jìn)行預(yù)處理。
??與not_literal_or過濾效果相同,但不區(qū)分大小寫
??提供區(qū)分大小寫的后綴、前綴、中綴(infix)和多個(gè)中綴(multi-infix)過濾器。通配符是星號(hào)”*”。如果只給出星號(hào),則過濾器有效地返回包含標(biāo)簽key的任意時(shí)間序列(并且是可以預(yù)處理的高效過濾器)。在SQL的字段域中,它與LIKE謂詞相似,但具有更多的靈活性。
?例子:
??與wildcard相同,但不區(qū)分大小寫。
??從存儲(chǔ)中獲取后使用符合POSIX標(biāo)準(zhǔn)正則表達(dá)式的過濾器過濾。該過濾器使用Java內(nèi)置的正則表達(dá)式操作。根據(jù)查詢的使用方法,請(qǐng)注意轉(zhuǎn)義特殊字符。
?例子:
??在OpenTSDB2.2及更高版本中顯示加載的過濾器,請(qǐng)調(diào)用HTTP接口/api/config/filters。它將列出加載的插件以及說明和示例用法。
??隨著開發(fā)人員添加插件,將會(huì)在此處列出。
?如果要開發(fā)一個(gè)插件,只需擴(kuò)展net.opentsdb.query.filter.TagVFilter類,然后根據(jù)插件文檔創(chuàng)建JAR包并將其放入插件目錄。在TSD啟動(dòng)時(shí),將會(huì)搜索插件并加載它。如果執(zhí)行過程中出現(xiàn)錯(cuò)誤,TSD將不會(huì)啟動(dòng)并且記錄異常。
本文標(biāo)題:OpenTsdb官方文檔----查詢過濾器
文章分享:http://muchs.cn/article34/ieghpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、做網(wǎng)站、品牌網(wǎng)站制作、微信公眾號(hào)、ChatGPT、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)