查看GOplot內(nèi)示例數(shù)據(jù)的格式,對自己的數(shù)據(jù)做處理
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了永寧免費(fèi)建站歡迎大家使用!
觀察結(jié)論:
觀察自己的兩個(gè)數(shù)據(jù)表:
table.legend 設(shè)置為T時(shí)會(huì)顯示表格
本圖中表格和圖例是出圖后剪切拼合而成,沒有用R中的拼圖包
??GO (Gene Ontology )是一個(gè)基因功能的國際標(biāo)準(zhǔn)分類體系。意在從分子功能 (Molecular Function)、生物過程 (Biological Process)、和細(xì)胞組成 (Cellular Component) 三個(gè)層面對基因和蛋白質(zhì)功能進(jìn)行限定和描述,建立一個(gè)適用于各種物種并能隨著研究不斷深入而更新的語言詞匯標(biāo)準(zhǔn)。
??GO富集分析已經(jīng)算是很常規(guī)的分析內(nèi)容,可以很方便地將分析得到的基因集歸類到不同的GO條目,從而讓研究者可以輕松地得知這些基因都參與哪些生物過程。GO分析的操作這里就不再贅述了,網(wǎng)上有很多相關(guān)的帖子,基本上常規(guī)的物種用clusterProfiler包就可以解決了。今天我想來談?wù)勅绾慰梢暬疓O分析的結(jié)果。對于GO富集結(jié)果的可視化,最常見的就是用條形圖和氣泡圖來展示部分關(guān)注的條目。
??上面兩種展現(xiàn)形式最為常見,可以很好地展示關(guān)注的條目。我們都知道有時(shí)候GO富集的條目會(huì)很多,如果想整體預(yù)覽一下,有沒有什么方法可以展示所有條目都涉及哪些功能呢?答案是肯定的。下面就來介紹一下simplifyEnrichment包是如何展示GO富集結(jié)果的。這里用該包中數(shù)據(jù)做一個(gè)演示。
結(jié)果如下圖:
??結(jié)果看起來還是有點(diǎn)高大上的感覺,從圖中可以看出496個(gè)GO條目根據(jù)條目名稱的語意相似性被分成9個(gè)大類,每個(gè)大類右邊有注釋條,標(biāo)明了每個(gè)類中涉及的條目關(guān)鍵字,有點(diǎn)類似詞云的感覺。
??該包使用起來很簡單,雖然不能準(zhǔn)確的展示每個(gè)GO條目,但可以從整體上概覽GO條目都涉及哪些方面,對于后續(xù)篩選還是很有幫助的。該包還有更為細(xì)節(jié)的用法,這里就不再贅述了,感興趣的可以自己去摸索。按照慣例最后附上官方說明鏈接: Simplify Functional Enrichment Results 和 Word Cloud Annotation 。
第十名、R語言
R語言,一種自由軟件編程語言與操作環(huán)境,主要用于統(tǒng)計(jì)分析、繪圖、數(shù)據(jù)挖掘。R基于S語言的一個(gè)GNU計(jì)劃項(xiàng)目,所以也可以當(dāng)作S語言的一種實(shí)現(xiàn),通常用S語言編寫的代碼都可以不作修改的在R環(huán)境下運(yùn)行。R的語法是來自Scheme。
提名詞
R語言作者,George Ross Ihaka:在奧克蘭大學(xué)統(tǒng)計(jì)系任副教授,是R語言的最初作者。
2
/10
第九名、Python
頒獎(jiǎng)詞
Python是一種廣泛使用的高級編程語言,屬于通用型編程語言。作為一種解釋型語言,Python的設(shè)計(jì)哲學(xué)強(qiáng)調(diào)代碼的可讀性和簡潔的語法。相比于C++或Java,Python讓開發(fā)者能夠用更少的代碼表達(dá)想法。不管是小型還是大型程序,該語言都試圖讓程序的結(jié)構(gòu)清晰明了。
提名詞
Python語言作者,Guido van Rossum:生于荷蘭哈勒姆,計(jì)算機(jī)程序員,為Python程序設(shè)計(jì)語言的最初設(shè)計(jì)者及主要架構(gòu)師。
3
/10
第八名、C語言
頒獎(jiǎng)詞
C是一種通用的編程語言,廣泛用于系統(tǒng)軟件與應(yīng)用軟件的開發(fā)。C語言具有高效、靈活、功能豐富、表達(dá)力強(qiáng)和較高的可移植性等特點(diǎn)。C語言編譯器普遍存在于各種不同的操作系統(tǒng)中,例如Microsoft Windows、macOS、Linux、Unix等。C語言的設(shè)計(jì)影響了眾多后來的編程語言,例如C++、Objective-C、Java、C#等。
提名詞
C語言作者,Dennis MacAlistair Ritchie:美國計(jì)算機(jī)科學(xué)家。黑客圈子通常稱他為“dmr”。他是C語言的創(chuàng)造者、Unix操作系統(tǒng)的關(guān)鍵開發(fā)者,對計(jì)算機(jī)領(lǐng)域產(chǎn)生了深遠(yuǎn)影響,并與肯·湯普遜同為1983年圖靈獎(jiǎng)得主。
4
/10
第七名、Go
頒獎(jiǎng)詞
Go(又稱Golang)是Google開發(fā)的一種靜態(tài)強(qiáng)類型、編譯型、并發(fā)型,并具有垃圾回收功能的編程語言。Go的語法接近C語言,但對于變量的聲明有所不同。Go支持垃圾回收功能。
提名詞
Go語言作者,Robert C. Pike:來自加拿大的程序員,曾經(jīng)加入貝爾實(shí)驗(yàn)室,為 UNIX小組的成員。他與肯·湯普遜共同開發(fā)了UTF-8。目前為 google的工程師,參與編程語言 Go與Sawzall的研發(fā)工作。
5
/10
第六名、JavaScript
頒獎(jiǎng)詞
JavaScript,通常縮寫為JS,是一種高級的,解釋執(zhí)行的編程語言。JavaScript是一門基于原型、函數(shù)先行的語言,是一門多范式的語言,它支持面向?qū)ο缶幊?,命令式編程,以及函?shù)式編程。它已經(jīng)由ECMA(歐洲計(jì)算機(jī)制造商協(xié)會(huì))通過ECMAScript實(shí)現(xiàn)語言的標(biāo)準(zhǔn)化。它被世界上的絕大多數(shù)網(wǎng)站所使用,也被世界主流瀏覽器(Chrome、IE、Firefox、Safari、Opera)支持。
提名詞
JavaScript語言作者,Brendan Eich:美國程序員與企業(yè)家,JavaScript主要?jiǎng)?chuàng)造者與架構(gòu)師,曾任Mozilla公司的首席技術(shù)官,并曾短暫擔(dān)任首席執(zhí)行官。
6
/10
第五名、Objective-C
頒獎(jiǎng)詞
Objective-C是一種通用、高級、面向?qū)ο蟮木幊陶Z言。它擴(kuò)展了標(biāo)準(zhǔn)的ANSI C編程語言,將Smalltalk式的消息傳遞機(jī)制加入到ANSI C中。目前主要支持的編譯器有GCC和Clang(采用LLVM作為后端)。
提名詞
Objective-C作者,Brad Cox:美國計(jì)算機(jī)科學(xué)家。于傅爾曼大學(xué)主修化學(xué)與數(shù)學(xué),于芝加哥大學(xué)取得數(shù)學(xué)生物學(xué)博士學(xué)位。Objective-C主要作者。
7
/10
第四名、PHP
頒獎(jiǎng)詞
PHP(全稱:PHP:Hypertext Preprocessor,即“PHP:超文本預(yù)處理器”)是開源的通用計(jì)算機(jī)腳本語言,尤其適用于網(wǎng)絡(luò)開發(fā)并可嵌入HTML中使用。PHP的語法借鑒吸收C語言、Java和Perl等流行計(jì)算機(jī)語言的特點(diǎn),易于一般程序員學(xué)習(xí)。PHP的主要目標(biāo)是允許網(wǎng)絡(luò)開發(fā)人員快速編寫動(dòng)態(tài)頁面,但PHP也被用于其他很多領(lǐng)域。
提名詞
PHP語言作者,Rasmus Lerdorf:出生于格陵蘭島凱凱塔蘇瓦克,是一個(gè)丹麥程序員,他擁有加拿大國籍。他也是編程語言PHP的創(chuàng)始人,其中PHP的頭兩個(gè)版本是由他編寫的,后來他也參與PHP后續(xù)版本的開發(fā)。
8
/10
第三名、Java
頒獎(jiǎng)詞
Java是一種廣泛使用的計(jì)算機(jī)編程語言,擁有跨平臺(tái)、面向?qū)ο?、泛型編程的特性,廣泛應(yīng)用于企業(yè)級Web應(yīng)用開發(fā)和移動(dòng)應(yīng)用開發(fā)。Java編程語言是個(gè)簡單、面向?qū)ο?、分布式、解釋性、健壯、安全與系統(tǒng)無關(guān)、可移植、高性能、多線程和動(dòng)態(tài)的語言。
提名詞
Java語言作者,James Gosling:出生于加拿大,軟件專家,Java編程語言的共同創(chuàng)始人之一,一般公認(rèn)他為“Java之父”。
9
/10
第二名、C++
頒獎(jiǎng)詞
C++是一種使用廣泛的計(jì)算機(jī)程序設(shè)計(jì)語言。它是一種通用程序設(shè)計(jì)語言,支持多重編程模式,例如過程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)和設(shè)計(jì)模式等。
提名詞
C++語言作者,Bjarne Stroustrup:生于丹麥奧胡斯郡,計(jì)算機(jī)科學(xué)家。他以創(chuàng)造C++編程語言而聞名,被稱為“C++之父”。
10
/10
第一名、Visual Basic .NET
頒獎(jiǎng)詞
Visual Basic .NET(VB.NET)是.NET Framework框架下的一種多重編程范式高級語言。Visual Basic .NET屬Basic系語言,其語法特點(diǎn)是以極具親和力的英文單詞為基礎(chǔ)標(biāo)識,以及與自然語言極其相近的邏輯表達(dá),有時(shí)候你會(huì)覺得寫VB.NET代碼就好像在寫英文句子一樣,從這個(gè)角度來說,VB.NET似乎是最高級的一門編程語言,當(dāng)然在Basic系語言中VB.NET也確實(shí)是迄今為止最強(qiáng)大的一門編程語言。
提名詞
Visual Basic .NET作者,Alan Cooper:交互設(shè)計(jì)的提倡者。庫珀有些時(shí)候被叫做 Visual Basic 之父,雖然大多數(shù)的工作是由微軟的內(nèi)部開發(fā)團(tuán)隊(duì)完成的,但是對于Windows可視化設(shè)計(jì)工具的創(chuàng)意是來源于庫珀的。
可視化是監(jiān)控的目標(biāo)之一,沒有一個(gè)好的展示,再多的數(shù)據(jù)我們也很難分析。這里主要對Grafana進(jìn)行介紹,前面我們雖然也展示過Grafana數(shù)據(jù)可視化的界面,但是并沒有深入介紹。
書本介紹了Prometheus自帶的控制臺(tái)界面,開啟這個(gè)功能只需要在啟動(dòng)命令中添加相關(guān)的參數(shù)。但是,用這個(gè)方法作圖的效率實(shí)在是太低了。實(shí)際使用中,都是通過配合Grafana一起使用的。關(guān)于console template的原文鏈接 點(diǎn)我
下面介紹Grafana。
Console Teamplet雖然能滿足一定的可視化需求,但是也僅僅是對Prometheus的基本能力的補(bǔ)充。同時(shí)使用也會(huì)有許多問題,首先用戶需要學(xué)習(xí)和了解Go Template模板語言,其它其支持的可視化圖表類型也非常有限,最后其管理也有一定的成本。在第1章的“初識Prometheus”中我們已經(jīng)嘗試通過Grafana快速搭建過一個(gè)主機(jī)監(jiān)控的Dashboard,在本章中將會(huì)帶來讀者學(xué)習(xí)如何使用Grafana創(chuàng)建更加精美的可視化報(bào)表。
首先Grafana是一個(gè)通用的可視化工具?!ㄓ谩馕吨鳪rafana不僅僅適用于展示Prometheus下的監(jiān)控?cái)?shù)據(jù),也同樣適用于一些其他的數(shù)據(jù)可視化需求。在開始使用Grafana之前,我們首先需要明確一些Grafana下的基本概念,以幫助用戶能夠快速理解Grafana。
對于Grafana而言,Prometheus這類為其提供數(shù)據(jù)的對象均稱為數(shù)據(jù)源(Data Source)。目前,Grafana官方提供了對:Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch的支持。對于Grafana管理員而言,只需要將這些對象以數(shù)據(jù)源的形式添加到Grafana中,Grafana便可以輕松的實(shí)現(xiàn)對這些數(shù)據(jù)的可視化工作。
通過數(shù)據(jù)源定義好可視化的數(shù)據(jù)來源之后,對于用戶而言最重要的事情就是實(shí)現(xiàn)數(shù)據(jù)的可視化。在Grafana中,我們通過Dashboard來組織和管理我們的數(shù)據(jù)可視化圖表:
如上所示,在一個(gè)Dashboard中一個(gè)最基本的可視化單元為一個(gè) Panel(面板) ,Panel通過如趨勢圖,熱力圖的形式展示可視化數(shù)據(jù)。 并且在Dashboard中每一個(gè)Panel是一個(gè)完全獨(dú)立的部分,通過Panel的 Query Editor(查詢編輯器) 我們可以為每一個(gè)Panel自己查詢的數(shù)據(jù)源以及數(shù)據(jù)查詢方式,例如,如果以Prometheus作為數(shù)據(jù)源,那在Query Editor中,我們實(shí)際上使用的是PromQL,而Panel則會(huì)負(fù)責(zé)從特定的Prometheus中查詢出相應(yīng)的數(shù)據(jù),并且將其可視化。由于每個(gè)Panel是完全獨(dú)立的,因此在一個(gè)Dashboard中,往往可能會(huì)包含來自多個(gè)Data Source的數(shù)據(jù)。
Grafana通過插件的形式提供了多種Panel的實(shí)現(xiàn),常用的如:Graph Panel,Heatmap Panel,SingleStat Panel以及Table Panel等。用戶還可通過插件安裝更多類型的Panel面板。
除了Panel以外,在Dashboard頁面中,我們還可以定義一個(gè) Row(行) ,來組織和管理一組相關(guān)的Panel。
除了Panel, Row這些對象以外,Grafana還允許用戶為Dashboard定義 Templating variables(模板參數(shù)) ,從而實(shí)現(xiàn)可以與用戶動(dòng)態(tài)交互的Dashboard頁面。同時(shí)Grafana通過JSON數(shù)據(jù)結(jié)構(gòu)管理了整個(gè)Dasboard的定義,因此這些Dashboard也是非常方便進(jìn)行共享的。Grafana還專門為Dashboard提供了一個(gè)共享服務(wù): ,通過該服務(wù)用戶可以輕松實(shí)現(xiàn)Dashboard的共享,同時(shí)我們也能快速的從中找到我們希望的Dashboard實(shí)現(xiàn),并導(dǎo)入到自己的Grafana中。
作為一個(gè)通用可視化工具,Grafana除了提供靈活的可視化定制能力以外,還提供了面向企業(yè)的組織級管理能力。在Grafana中Dashboard是屬于一個(gè) Organization(組織) ,通過Organization,可以在更大規(guī)模上使用Grafana,例如對于一個(gè)企業(yè)而言,我們可以創(chuàng)建多個(gè)Organization,其中 User(用戶) 可以屬于一個(gè)或多個(gè)不同的Organization。 并且在不同的Organization下,可以為User賦予不同的權(quán)限。 從而可以有效的根據(jù)企業(yè)的組織架構(gòu)定義整個(gè)管理模型。
對于Grafana而言,Prometheus就是一個(gè)用于存儲(chǔ)監(jiān)控樣本數(shù)據(jù)的數(shù)據(jù)源(Data Source)通過使用PromQL查詢特定Prometheus實(shí)例中的數(shù)據(jù)并且在Panel中實(shí)現(xiàn)可視化。
接下來,我們將帶領(lǐng)讀者了解如何通過Panel創(chuàng)建精美的可視化圖表。
Panel是Grafana中最基本的可視化單元。每一種類型的面板都提供了相應(yīng)的查詢編輯器(Query Editor),讓用戶可以從不同的數(shù)據(jù)源(如Prometheus)中查詢出相應(yīng)的監(jiān)控?cái)?shù)據(jù),并且以可視化的方式展現(xiàn)。
Grafana中所有的面板均以插件的形式進(jìn)行使用,當(dāng)前內(nèi)置了11種類型的面板,常用的包括:Graph,Singlestat,Heatmap, Dashlist,Table以及Text等。
其中像Graph這樣的面板允許用戶可視化任意多個(gè)監(jiān)控指標(biāo)以及多條時(shí)間序列。而Siglestat則必須要求查詢結(jié)果為單個(gè)樣本。Dashlist和Text相對比較特殊,它們與特定的數(shù)據(jù)源無關(guān)。
通過Grafana UI用戶可以在左邊的菜單欄增加一個(gè)Dashboard,然后里面選擇 Choose Visualization 即可看到下面這些的面板:
選擇想要?jiǎng)?chuàng)建的面板類型即可。這里以Graph面板為例,選擇Graph后我們看到有4個(gè)菜單的內(nèi)容需要進(jìn)行設(shè)置的。
最上面的那個(gè)是Queries,在這里要定義數(shù)據(jù)源以及查詢的PromQL語句;第二個(gè)也就是上圖看到的,這里可以定義圖表顯示的內(nèi)容,比如x軸和y軸的設(shè)置;第三個(gè)是General,可以定義面板的名稱以及注釋等;最后一個(gè)是alert,配置告警信息(Grafana也可以做告警的)。
在通用設(shè)置中,除了一些Panel的基本信息以外,最主要的能力就是定義動(dòng)態(tài)Panel的能力,這部分內(nèi)容會(huì)在本章的“模板化Dashboard”小結(jié)中詳細(xì)介紹。
這4個(gè)設(shè)置菜單里面,最重要是第一個(gè)菜單,也就是PromQL查詢語言的編寫,示例為我要顯示CPU的使用率的情況,我這么設(shè)置:
公式為: avg(irate(node_cpu_seconds_total{mode!='idle'}[2m])) without (cpu)
在數(shù)據(jù)源的選擇那里,有好幾個(gè)選項(xiàng)。其中default是我們前面設(shè)定的默認(rèn)數(shù)據(jù)源;Prometheus是我們添加的數(shù)據(jù)源;Grafana則用于需要查詢Grafana自身狀態(tài)時(shí)使用; Mixed用于需要從多個(gè)數(shù)據(jù)源中查詢和渲染數(shù)據(jù)的場景;另外一個(gè)Dashboard不清楚了。這里我們選擇Prometheus作為數(shù)據(jù)源。
選擇好數(shù)據(jù)源之后,我們要配置查詢的語句。Grafana提供了對PromQL的完整支持,在Query Editor中,可以添加任意個(gè)Query,并且使用PromQL表達(dá)式從Prometheus中查詢相應(yīng)的樣本數(shù)據(jù)。
每個(gè)PromQL表達(dá)式都可能返回多條時(shí)間序列。**Legend **用于控制如何格式化每條時(shí)間序列的圖例信息。Grafana支持通過模板的方式,根據(jù)時(shí)間序列的標(biāo)簽動(dòng)態(tài)生成圖例名稱,例如:使用表示使用當(dāng)前時(shí)間序列中的instance標(biāo)簽的值作為圖例名稱:
當(dāng)查詢到的樣本數(shù)據(jù)量非常大時(shí)可以導(dǎo)致Grafana渲染圖標(biāo)時(shí)出現(xiàn)一些性能問題,通過 Min Step 可以控制Prometheus查詢數(shù)據(jù)時(shí)的最小步長(Step),從而減少從Prometheus返回的數(shù)據(jù)量。
Resolution 選項(xiàng),則可以控制Grafana自身渲染的數(shù)據(jù)量。例如,如果 Resolution 的值為 1/10 ,Grafana會(huì)將Prometeus返回的10個(gè)樣本數(shù)據(jù)合并成一個(gè)點(diǎn)。因此 Resolution 越小(1小于10,也就是默認(rèn)已經(jīng)最小了)可視化的精確性越高,反之,可視化的精度越低。
Format 選項(xiàng)定義如何格式化Prometheus返回的樣本數(shù)據(jù)。這里提供了3個(gè)選項(xiàng):Table,Time Series和Heatmap,分別用于Tabel面板,Graph面板和Heatmap面板的數(shù)據(jù)可視化。
除此以外,Query Editor還提供了調(diào)試相關(guān)的功能,點(diǎn)擊 Query Inspector 可以展開相關(guān)的調(diào)試面板:
在這里我們可以配置顯示的樣式,這里我只自定義了左邊Y軸的數(shù)字格式,選擇為百分比。
在這里我定義了面板的名稱已經(jīng)注釋
這里我沒有做定義,最后的圖表如下:
Graph面板是最常用的一種可視化面板,其通過折線圖或者柱狀圖的形式顯示監(jiān)控樣本隨時(shí)間而變化的趨勢。我們繼續(xù)用CPU的例子來做講解:
查詢公式為
上面的箭頭指向, Add series override菜單,可以讓我們自定義某一條折線的樣式
繼續(xù)往下,這里可以定義X、Y軸的情況,比如我把左邊Y軸的單位改為百分?jǐn)?shù)。
繼續(xù)往下,這里可以定義圖例的樣式,也就是我們前面定義的 {{ instance }} 的樣式,這里我選擇用表格來顯示,顯示min、max和current的值。
繼續(xù)往下,這里可以定義一個(gè)閾值,圖表是告警的閾值。比如說我的CPU使用率超過50%,那就會(huì)顯示不同的顏色,有一條閾值線。
這里和之前一樣,只定義這個(gè)面板的名稱和注釋。
最后的圖表是:
熱力圖這里不做介紹,這個(gè)用得稍微少點(diǎn)??梢钥丛? 點(diǎn)我
Singlem Panel側(cè)重于展示系統(tǒng)的當(dāng)前狀態(tài)而非變化趨勢。如下所示,在以下場景中特別適用于使用SingleStat:
如下所示,是使用SingleStat進(jìn)行數(shù)據(jù)可視化的顯示效果:
我們繼續(xù)用CPU來說事,比如我這里定義CPU使用率低于50%就定義主機(jī)狀態(tài)為健康,否則就是不健康。
對于SingleStat Panel而言,其只能處理一條時(shí)間序列,否則頁面中會(huì)提示“Multiple Series Error”錯(cuò)誤信息。這里使用上例一樣的語句去查詢:
首先我們新建一個(gè)singlestat面板,然后輸入公式,這時(shí)候毫無疑問出現(xiàn)了錯(cuò)誤提示:
為了能夠正常顯示,這里我們手動(dòng)指定下單個(gè)實(shí)例,修改語句為:
這時(shí)候就有數(shù)據(jù)了,接下來我們要修改圖表的樣式。
默認(rèn)情況下,當(dāng)前面板顯示的是平均值,我們實(shí)際要看的是當(dāng)前的值.我們還要修改顯示的顏色,這里我定義了兩個(gè)值,小于0.5的時(shí)候顯示綠色,大于0.8顯示紅色,中間顯示橙色;然后設(shè)置顯示折線圖,并設(shè)置為綠色。
為了提高數(shù)字的可讀性,我們把數(shù)字替換為文字。CPU使用率低于50%的時(shí)候顯示為healthy,大于50%的時(shí)候顯示為unhealthy。
配置面板名稱及注釋
最后的成品如下:
前面我們介紹的例子中,Grafana能夠方便的將Prometheus返回的數(shù)據(jù)進(jìn)行可視化展示。例如,在展示主機(jī)CPU使用率時(shí),我們使用了如下表達(dá)式:
該表達(dá)式會(huì)返回當(dāng)前Promthues中存儲(chǔ)的所有時(shí)間序列,每一臺(tái)主機(jī)都會(huì)有一條單獨(dú)的曲線用于體現(xiàn)其CPU使用率的變化情況:
而當(dāng)用戶只想關(guān)注其中某些主機(jī)時(shí),基于當(dāng)前我們已經(jīng)學(xué)習(xí)到的知識只有兩種方式,要么每次手動(dòng)修改Panel中的PromQL表達(dá)式,要么直接為這些主機(jī)創(chuàng)建單獨(dú)的Panel。但是無論如何,這些硬編碼方式都會(huì)直接導(dǎo)致Dashboard配置的頻繁修改。在這一小節(jié)中我們將學(xué)習(xí)使用Dashboard變量的方式解決以上問題。
在Grafana中用戶可以為Dashboard定義一組變量(Variables),變量一般包含一個(gè)到多個(gè)可選值。如下所示,Grafana通過將變量渲染為一個(gè)下拉框選項(xiàng),從而使用戶可以動(dòng)態(tài)的改變變量的值:
例如,這里定義了一個(gè)名為node的變量,用戶可以通過在PromQL表達(dá)式或者Panel的標(biāo)題中通過以下形式使用該變量:
變量的值可以支持單選或者多選,當(dāng)對接Prometheus時(shí),Grafana會(huì)自動(dòng)將$node的值格式化為如“ host1|host2|host3 ”的形式。配合使用PromQL的標(biāo)簽正則匹配“ =~ ”,通過動(dòng)態(tài)改變PromQL從而實(shí)現(xiàn)基于標(biāo)簽快速對時(shí)間序列進(jìn)行過濾。
通過Dashboard頁面的Settings選項(xiàng),可以進(jìn)入Dashboard的配置頁面并且選擇Variables子菜單:
用戶需要指定變量的名稱,后續(xù)用戶就可以通過$variable_name的形式引用該變量。Grafana目前支持7種不同的變量類型,而能和Prometheus一起工作的主要包含以下5種類型:
Label屬性用于指定界面中變量的顯示名稱,Hide屬性則用于指定在渲染界面時(shí)是否隱藏該變量的下拉框。
當(dāng)Prometheus同時(shí)采集了多個(gè)主機(jī)節(jié)點(diǎn)的監(jiān)控樣本數(shù)據(jù)時(shí),用戶希望能夠手動(dòng)選擇并查看其中特定主機(jī)的監(jiān)控?cái)?shù)據(jù)。這時(shí)我們需要使用Query類型的變量。
如上所示,這里我們?yōu)镈ashboard創(chuàng)建了一個(gè)名為node的變量,并且指定其類型為Query。Query類型的變量,允許用戶指定數(shù)據(jù)源以及查詢表達(dá)式,并通過正則匹配(Regex)的方式對查詢結(jié)果進(jìn)行處理,從而動(dòng)態(tài)生成變量的可選值。在這里指定了數(shù)據(jù)源為Prometheus,通過使用node_load1我們得到了兩條時(shí)間序列:
通過指定正則匹配表達(dá)式為 /.*instance="([^"]*).*/ 從而匹配出標(biāo)簽instance的值作為node變量的所有可選項(xiàng),即:
Selection Options 選項(xiàng)中可以指定該變量的下拉框是否支持多選,以及是否包含全選(All)選項(xiàng)。
保存變量后,用戶可以在Panel的Queries中通過$node的方式使用該變量,如下所示:
這里需要注意的是,如果允許用戶多選在PromQL表達(dá)式中應(yīng)該使用標(biāo)簽的正則匹配模式,因?yàn)镚rafana會(huì)自動(dòng)將多個(gè)選項(xiàng)格式化為如“192.168.113.52:9100|192.168.113.70:9100”的形式。
使用Query類型的變量能夠根據(jù)允許用戶能夠根據(jù)時(shí)間序列的特征維度對數(shù)據(jù)進(jìn)行過濾。在定義Query類型變量時(shí),除了使用PromQL查詢時(shí)間序列以過濾標(biāo)簽的方式以外,Grafana還提供了幾個(gè)有用的函數(shù):
例如,當(dāng)需要監(jiān)控Prometheus所有采集任務(wù)的狀態(tài)時(shí),可以使用如下方式,獲取當(dāng)前所有采集任務(wù)的名稱:
label_values(up, job)
例如,有時(shí)候我們想要?jiǎng)討B(tài)修改變量查詢結(jié)果。比如某一個(gè)節(jié)點(diǎn)綁定了多個(gè)ip,一個(gè)用于內(nèi)網(wǎng)訪問,一個(gè)用于外網(wǎng)訪問,此時(shí)prometheus采集到的指標(biāo)是內(nèi)網(wǎng)的ip,但我們需要的是外網(wǎng)ip。這里我們想要能在Grafana中動(dòng)態(tài)改變標(biāo)簽值,進(jìn)行ip段的替換,而避免從prometheus或exporter中修改采集指標(biāo)。
這時(shí)需要使用grafana的query_result函數(shù)
當(dāng)在一個(gè)Panel中展示多條時(shí)間序列數(shù)據(jù)時(shí),通過使用變量可以輕松實(shí)現(xiàn)對時(shí)間序列的過濾,提高用戶交互性。除此以外,我們還可以使用變量自動(dòng)生成Panel或者Row。 如下所示,當(dāng)需要可視化當(dāng)前系統(tǒng)中所有采集任務(wù)的監(jiān)控任務(wù)運(yùn)行狀態(tài)時(shí),由于Prometheus的采集任務(wù)配置可能隨時(shí)發(fā)生變更,通過硬編碼的形式實(shí)現(xiàn),會(huì)導(dǎo)致Dashboard配置的頻繁變更:
如下所示,這里為Dashboard定義了一遍名為job的變量:
通過使用label_values函數(shù),獲取到當(dāng)前Promthues監(jiān)控指標(biāo)up中所有可選的job標(biāo)簽的值:
如果變量啟用了Multi-value或者Include All Option選項(xiàng)的變量,那么在Panel的General選項(xiàng)的Repeat中可以選擇自動(dòng)迭代的變量,這里使用了Singlestat展示所有監(jiān)控采集任務(wù)的狀態(tài):
Repeat選項(xiàng)設(shè)置完成后,Grafana會(huì)根據(jù)當(dāng)前用戶的選擇,自動(dòng)創(chuàng)建一個(gè)到多個(gè)Panel實(shí)例。 為了能夠使Singlestat Panel能夠展示正確的數(shù)據(jù),如下所示,在Prometheus中,我們依然使用了 job 變量,不過此時(shí)的$job反應(yīng)的是當(dāng)前迭代的值:
最后的結(jié)果圖如下,當(dāng)我選擇全部的時(shí)候,自動(dòng)生成了6個(gè)Panel。
有一定的事實(shí)證明,Python語言更適合初學(xué)者,Python語言并不會(huì)讓初學(xué)者感到晦澀,它突破了傳統(tǒng)程序語言入門困難的語法屏障,初學(xué)者在學(xué)習(xí)Python的同時(shí),還能夠鍛煉自己的邏輯思維,同時(shí)Python也是入門人工智能的首選語言。
學(xué)習(xí)編程并非那么容易,有的人可能看完了Python語法覺得特別簡單,但再往后看就懵了,因?yàn)榈胶笃诎l(fā)現(xiàn)并不能學(xué)以致用,理論結(jié)合項(xiàng)目才是學(xué)好一門編程語言的關(guān)鍵。可以選擇報(bào)班入門,一般在2W左右,根據(jù)自己的實(shí)際需要實(shí)地了解,可以先在試聽之后,再選擇適合自己的。