Timelion使你能夠輕鬆得到如下問題的答案:linux
1)隨着時間的推移,每一個惟一的用戶會查看多少個頁面?
2)這個星期五和上週五之間的交通量有什麼不一樣?
3)今天有多少日本人口來到個人網站?
4)標準普爾500指數的10日均線是多少?
5)過去兩年收到的全部搜索請求的累計總和是多少?redis
Timelion
是Kibana時間序列的可視化工具。時間序列可視化是可視化的,以時間順序分析數據。Timelion
可用於繪製二維圖形,時間繪製在x軸上。express
與使用簡單的條形圖或線條可視化相比有什麼優點?Timelion
採起不一樣的方法。使用Timelion
特定語法,您經過將功能連接在一塊兒來定義圖形,而不是使用可視化編輯器建立圖表。該語法啓用了經典點系列圖不提供的一些功能,如將不一樣索引或數據源的數據繪製到一個圖形中。vim
可是在使用Timelion
以前,咱們須要下載並安裝Metricbeat
瀏覽器
Metricbeat介紹 |
Metricbeat
能夠按期收集操做系統和服務器的運行指標(CPU,內存,硬盤,IO,讀寫速度,進程等等),Metricbeat
能夠將收集到的指標和數據發送到你指定的輸出,好比:elasticsearch,logstash,redis等等,最終達成監視服務器的目標。ruby
Metricbeat部署及配置 |
由於咱們使用的ES和Kibana是5版本的,因此咱們須要下載5版本的Metricbeat
服務器
#RPM包下載 [root@elkstack04 ~]# wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-5.3.3-x86_64.rpm #源碼包下載 [root@elkstack04 ~]# wget https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-5.3.3-linux-x86_64.tar.gz #安裝Metricbeat [root@elkstack04 ~]# yum localinstall -y metricbeat-5.3.3-x86_64.rpm #修改配置文件 [root@elkstack04 ~]# vim /etc/metricbeat/metricbeat.yml #========================== Modules configuration ============================ metricbeat.modules: #------------------------------- System Module ------------------------------- - module: system metricsets: # CPU stats - cpu # System Load stats - load # Per CPU core stats #- core # IO stats #- diskio # Per filesystem stats - filesystem # File system summary stats - fsstat # Memory stats - memory # Network stats - network # Per process stats - process # Sockets (linux only) #- socket enabled: true period: 1m processes: ['.*'] #================================ Outputs ===================================== # Configure what outputs to use when sending the data collected by the beat. # Multiple outputs may be used. #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["10.0.0.51:9200"] # Optional protocol and basic auth credentials. #protocol: "https" #username: "elastic" #password: "changeme" #要加載儀表板,能夠在metricbeat設置中啓用儀表板加載。當儀表板加載被啓用時,Metricbeat使用Kibana API來加載樣本儀表板。只有當Metricbeat啓動時,纔會嘗試儀表板加載。 # 設置kibana服務地址 setup.kibana.host: "10.0.0.54:5601" # 加載默認的儀表盤樣式 setup.dashboards.enabled: true # 設置若是存在模板,則不覆蓋原有模板 setup.template.overwrite: false #啓動Metricbeat(CentOS6) [root@elkstack04 ~]# /etc/init.d/metricbeat start #啓動Metricbeat(CentOS7) [root@elkstack04 ~]# systemctl start metricbeat #檢查metricbeat是否正常運行(返回索引對應內容) [root@elkstack04 ~]# curl -XGET 'http://10.0.0.51:9200/metricbeat-*/_search?pretty'
結果以下:
網絡
打開瀏覽器,訪問:http://10.0.0.51:9100/curl
查看Metricbeat索引socket

打開瀏覽器,訪問:http://10.0.0.54:5601/
添加metricbeat-*
索引



建立後,便可在Discover
中看到Metricbeat
信息

建立時間序列可視化 |
使用Metricbeat的時間序列數據帶你瀏覽Timelion提供的一些函數。
建立第一個可視化將比較在用戶空間中花費的CPU時間與一小時的結果偏移量的實時百分比,爲了建立這個可視化,咱們須要建立兩個Timelion表達式,一個是system.cpu.user.pct的實時平均數,另外一個是1小時的平均偏移量。
首先,須要在第一個表達式中定義index
、timefield
和metric
,並在Timelion
查詢欄中輸入如下表達式。
.es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct')


如今須要添加另外一個具備前一小時數據的系列,以便進行比較,爲此,你必須向.es()函數添加一個offset
參數,offset
將用日期表達式偏移序列檢索。對於本例,你但願將數據偏移一小時,並使用日期表達式-1h,使用逗號分隔這兩個系列,在Timelion查詢欄中輸入如下表達式:
.es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct'), .es(offset=-1h,index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct')

很難區分這兩個系列,自定義標籤以便於區分它們,你老是能夠將.label()函數附加到任何表達式以添加自定義標籤,在Timelion查詢欄中輸入如下表達式來定製標籤:
.es(offset=-1h,index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('last hour'), .es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('current hour')

保存完整的Timelion工做表做爲Metricbeat示例,做爲一種最佳實踐,你應該在完成本教程的過程當中保存對本工做表所作的任何重要更改。


定製和格式化可視化 |
Timelion有不少定製選項,你幾乎可使用可用的函數對圖表的每一個方面進行個性化設置,執行如下修改。
1)添加一個標題
2)更改系列類型
3)改變一個系列的顏色和不透明度
4)修改圖例
以前用兩個系列建立了一個時間軸圖表,讓咱們繼續定製這個可視化。
在進行任何其餘修改以前,將title()
函數附加到表達式的末尾,以添加具備有意義名稱的標題,這將使不熟悉的用戶更容易理解可視化目的。對於這個示例,將title('CPU usage')
添加到原始系列中,在Timelion 查詢欄中使用如下表達式:
.es(offset=-1h,index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('last hour'), .es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('current hour').title('CPU usage')

爲了進一步區分過去一小時系列,你將把圖表類型更改成區域圖表,爲了作到這一點,你須要使用.lines()
函數來定製折線圖,你將設置fill和width參數,分別設置折線圖的填充和折線寬度。在本例中,你將經過添加.lines(fill=1,width=0.5)
將填充級別設置爲1,邊框寬度設置爲0.5,在Timelion查詢欄中使用如下表達式:
.es(offset=-1h,index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('last hour').lines(fill=1,width=0.5), .es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('current hour').title('CPU usage')

讓咱們給這些系列塗上顏色,使當前的小時系列比過去一個小時系列流行一點,color()
函數可用於更改任何系列的顏色,並接受標準顏色名稱、十六進制值或分組系列的顏色模式。對於這個示例,你將在過去一個小時使用.color(gray)
,而在當前小時使用.color(#1E90FF)
,在Timelion查詢欄中輸入如下表達式進行調整:
.es(offset=-1h,index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('last hour').lines(fill=1,width=0.5).color(gray), .es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('current hour').title('CPU usage').color(#1E90FF)

最後但並不是最不重要,調整圖例,使其佔用儘量小的空間,你可使用.legend()
函數來設置圖例的位置和樣式。在本例中,經過將.legend(columns=2, position=nw)
兩列追加到原始系列,將圖例放置在可視化的西北位置,使用如下表達式進行調整:
.es(offset=-1h,index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('last hour').lines(fill=1,width=0.5).color(gray), .es(index=metricbeat-*, timefield='@timestamp', metric='avg:system.cpu.user.pct').label('current hour').title('CPU usage').color(#1E90FF).legend(columns=2, position=nw)

保存下來,再建立一個新的。

使用數學函數 |
在前兩部分中,已經學習瞭如何建立和樣式化Timelion可視化,本節將探索Timelion提供的數學函數。你將繼續使用Metricbeat數據爲入站和出站網絡流量建立新的Timelion可視化,首先,須要在工做表中添加一個新的Timelion可視化。
在頂部菜單中,單擊Add
添加第二個可視化,當添加到工做表中時,你會注意到查詢欄已經被替換爲默認的.es(*)
表達式,這是由於查詢與你選擇的Timelion工做表上的可視化相關聯。
開始跟蹤入站/出站網絡流量,你的第一個表達式將計算system.network.in.bytes
的最大值,將下面的表達式輸入到你的Timelion查詢欄:
.es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.in.bytes)

在繪製變化率時,監視網絡流量更有價值,derivative()
函數就是這樣作的 - 繪製值隨時間的變化,經過在表達式末尾添加.derivative()
能夠很容易地作到這一點,使用如下表達式來更新你的可視化:

如今是出站流量,你須要爲system.network.out.bytes
添加相似的計算,因爲出站流量將離開你的機器,所以將此指標表示爲負數是有意義的,.multiply()
函數將系列乘以一個數字,這個數字是系列或系列列表的結果。對於本例,你將使用.multiply(-1)
將出站網絡流量轉換爲負值,使用如下表達式來更新你的可視化:
.es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.in.bytes).derivative(), .es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.out.bytes).derivative().multiply(-1)

爲了使這個可視化更容易使用,將這個系列從字節轉換爲兆字節,Timelion有一個.divide()
函數可使用,.divide()
接受與.multiply()
相同的輸入,並將這個系列除以所定義的除數,使用如下表達式來更新你的可視化:

使用上一節中學習的格式化函數.title()
、.label()
、.color()
、.lines()
和.legend()
,讓咱們稍微整理一下這個可視化,使用如下表達式來更新你的可視化:
.es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.in.bytes).derivative().divide(1048576).lines(fill=2, width=1).color(green).label("Inbound traffic").title("Network traffic (MB/s)"), .es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.out.bytes).derivative().multiply(-1).divide(1048576).lines(fill=2, width=1).color(blue).label("Outbound traffic").legend(columns=2, position=nw)

保存,開啓新的,畫圖

使用條件邏輯和跟蹤趨勢 |
在本節中,你將學習如何使用條件邏輯修改時間序列數據,並使用移動平均值建立趨勢,這有助於隨着時間的推移很容易地發現異常值和模式。
對於本教程,你將繼續使用Metricbeat數據添加另外一個監控內存消耗的可視化,首先,使用如下表達式繪製system.memory.actual.used.bytes
的最大值。
.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes')

讓咱們建立兩個閾值來監視使用的內存數量,在本教程中,警告閾值爲234MB,嚴重閾值爲235MB,當使用內存的最大數量超過這些閾值中的任何一個時,將相應地對該系列進行着色。
若是你的計算機的閾值太高或太低,請相應地進行調整。
要配置這兩個閾值,可使用Timelion的條件邏輯,在本教程中,你將使用if()
將每一個點與一個數字進行比較,若是條件的值爲true,則調整樣式,若是條件的值爲false,則使用默認樣式,Timelion提供瞭如下六個操做符值進行比較。
操做符 | 含義 |
---|---|
eq | 相等 |
ne | 不相等 |
lt | 小於 |
gt | 大於 |
lte | 小於等於 |
gte | 大於等於 |
因爲有兩個閾值,所以對它們進行不一樣的樣式是有意義的,使用gt操做符將警告閾值用.color('#FFCC11')
塗成黃色,將嚴重閾值用.color('red')
塗成紅色,在Timelion查詢欄中輸入如下表達式,以應用條件邏輯和閾值樣式:
.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,234000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('warning').color('#FFCC11'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,235000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('serious').color('red')

如今你已經定義了閾值來輕鬆地識別異常值,讓咱們建立一個新的系列來肯定真正的趨勢是什麼,Timelion的mvavg()
函數容許計算給定窗口上的移動平均值,這對嘈雜的時間序列特別有用,對於本教程,你將使用.mvavg(10)
來建立具備10個數據點窗口的移動平均線,使用如下表達式建立最大內存使用量的移動平均值:
.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,234000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('warning').color('#FFCC11'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,235000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('serious').color('red'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').mvavg(10)

如今你已經有了閾值和移動平均值,讓咱們格式化可視化,以便更容易使用,和最後一部分同樣,使用.color()
、.line()
、.title()
和.legend()
函數相應地更新可視化:
.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').label('max memory').title('Memory consumption over time'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,234000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('warning').color('#FFCC11').lines(width=5), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,235000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('serious').color('red').lines(width=5), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').mvavg(10).label('mvavg').lines(width=2).color(#5E5E5E).legend(columns=4, position=nw)

保存

展現至Dashboard |
整合,其實最終咱們須要的是,網絡,cpu,內存優化後的圖


你已經正式利用了Timelion的功能來建立時間序列可視化,本教程的最後一步是向儀表盤添加你新的可視化,下面,本節將向你展現如何從Timelion工做表中保存可視化,並將其添加到現有的儀表盤中。
要將Timelion可視化保存爲儀表盤面板,請執行如下步驟。
1)選擇要添加到一個(或多個)儀表盤上的可視化視圖。
2)點擊頂部菜單中的Save
選項。
3)選擇Save current expression as Kibana dashboard panel
。
4)命名你的面板並點擊Save
以做爲儀表盤可視化。




如今你能夠將這個儀表盤面板添加到任何你想要的儀表盤上,這個可視化如今將在可視化列表中列出,繼續並按照你建立的其餘可視化效果的相同過程進行操做。
建立一個新的儀表盤或打開一個現有的儀表盤,以添加Timelion可視化,就像其餘任何可視化同樣。





最終展現