數據探索html
Elasticsearch具備強大的數據檢索和分析同能,支持模糊、全文、過濾、管道等數據查詢。對於日誌型數據處理頗有優點。node
下圖爲KIbana的主頁圖,將逐步說明每一部分的功能:mysql
依照圖中的編號:git
一、Discover點擊後是整個日誌總況,這也是常用的入口,在這個地方能夠定時刷新最新日誌,過濾整個日誌,添加指定字段顯示,展現不一樣時段的日誌總量等等。github
二、顯示8所選定的時間範圍內的日誌總量按時間的分佈狀況,經過該直方圖,能夠判斷應用一天的高峯期時段,一般日誌量越大,使用的用戶越多。同時,當服務出現故障,會有某類日誌暴增,因此環比前一天的數據能夠判斷服務運行情況。web
三、具體日誌顯示區域,其中Time字段爲固定字段,對應日誌中的@timestamp字段,該區域從6的區域添加任何你想關注的字段值,在表頭位置,鼠標放置該位置 有排序圖表 以及左右移動的圖標。sql
四、表示該條件下所查詢到的日誌總條數express
五、當被添加到3(表格)中的字段會顯示在該區域,鼠標滑到對應字段能夠移除npm
六、可用字段區域,下方的字段鼠標滑上去會有 add 按鈕, 經過該按鈕能夠添加到3的表格區域顯示,點擊字段名能夠看出該字段的值分佈佔比。旁邊的齒輪小按鈕,點擊後會展開輸入框,輸入字符後能夠自動匹配下方的字段(該功能在字段特別多的狀況下很是有用)。另外,該區域顯示的字段總數能夠在 Management -> Advanced Settings->Number of terms處設置最大顯示字段數。字段中 前面的 t 表示字段類型爲字符串, # 表示number字段,時鐘表示時間類型字段(具體字段類型請查閱elasticsearch文檔),?表示未maping字段,須要在Management ->Index Patterns 處選中對應的索引模式,點擊右上角的刷新按鈕。json
七、查詢輸入框,查詢方式以elasticsearch的query_string查詢,如如下查詢:
NOT(+app_feed_bug_1 +app_feed_bug_2 +app_feed_bug_3 +app_feed_bug_4 +app_feed_bug_5 +app_feed_bug_6 +app_feed_bug_7 +app_feed_bug_8 +app_feed_bug_9 +app_feed_bug_10)
表示app_feed_bug_1 到 app_feed_bug_10都不一樣時存在的結果。具體查詢語法參考 https://www.elastic.co/guide/en/elasticsearch/reference/6.4/query-dsl-query-string-query.html#query-string-syntax
八、時間段選擇,經過@timestamp字段過濾時間段
九、查詢條件保存操做,當咱們配置好一次查詢以後,但願下次能夠直接使用,就能夠點擊該按鈕進行保存
十、保存的查詢條件能夠經過點擊此處打開
十一、定時刷新操做
十二、添加日誌字段過濾,支持 is , is one of 等等條件過濾,是一個常用而其很是強大的功能
告警模塊
sentinl 插件安裝,kibana插件安裝很簡單,只須要注意插件版本和kibana版本保持一致便可。如下是一個安裝sentinal 6.4.0的命令:
在kibana安裝目錄的/bin 目錄下執行:
./kibana-plugin install https://github.com/sirensolutions/sentinl/releases/download/tag-6.4.2-0/sentinl-v6.4.0.zip
kibana-plugin會自動下載並解壓安裝該插件,以及下載安裝插件的依賴。默認安裝目錄在 kibana目錄的plugin目錄下。
插件的依賴聲明在插件包的package.json文件中,其使用方式和nodejs的 npm一致。
插件安裝好以後,重啓kibana。打開kibana,能夠看到左側已經有Sentinl 菜單,單擊該菜單能夠添加告警規則,如下展現一個告警規則的配置(可使用配置嚮導圖形化操做以後再更改):
1 { 2 "actions": { 3 "email_html_alarm_07ba0173-4e8e-4835-afb9-654687859fdd87": { 4 "name": "複習模塊資源錯誤", 5 "throttle_period": "24h", //告警頻率閥,若是知足告警條件,每多少時間告警一次,防止頻繁消息,這兒顯示24小時限制告警一次 6 "email_html": { //以email的形式告警 7 "stateless": false, 8 "subject": "[告警] - {{payload.hits.hits.0._source.app_ppt_module}} - {{payload.hits.hits.0._source.app_ppt_name}} - {{payload.hits.hits.0._source.app_ppt_error_type}} From日誌系統", //email的主題 9 "priority": "high", 10 "html": "<p><p>模塊:{{payload.hits.hits.0._source.app_ppt_module}}</p><p>名稱:{{payload.hits.hits.0._source.app_ppt_name}}</p><p>出錯頁碼:{{payload.hits.hits.0._source.app_ppt_file_name}}</p><p>出錯類型:{{payload.hits.hits.0._source.app_ppt_error_type}}</p><p>userid:{{payload.hits.hits.0._source.user_id}}</p><p>From:日誌系統, <i>修改告警郵件請聯繫 謝正才</i></p></p>", //EMAIL的郵件內容 11 "to": "qqq@qq.com,bbbb@ddd.com,bbb@ddd.com,bb@ddd.com", //郵件的接收這 12 "from": "xxxx@xxxxx.com" //郵件的發送者,該值須要再kibana配置,稍後會有介紹 13 } 14 } 15 }, 16 "input": { 17 "search": { 18 "request": { 19 "index": [ 20 "client_report-*" 21 ], 22 "body": { 23 "query": { //這兒表示的是一個elasticsearch搜索 24 "bool": { 25 "must": [ 26 { 27 "match": { 28 "app_eventid": "app1096" 29 } 30 }, 31 { 32 "match": { 33 "app_ppt_module": "復" 34 } 35 }, 36 { 37 "range": { 38 "@timestamp": { 39 "gte": "now-1440m", 40 "lt": "now" 41 } 42 } 43 } 44 ] 45 } 46 } 47 } 48 } 49 } 50 }, 51 "condition": { 52 "script": { 53 "script": "payload.hits.total > 2" //告警條件,此處表示查詢條數大於2條開始告警 54 } 55 }, 56 "trigger": { 57 "schedule": { 58 "later": "every 5 minutes" //每5分鐘執行一次告警條件 59 } 60 }, 61 "disable": false, 62 "report": false, 63 "title": "複習模塊資源錯誤告警", 64 "save_payload": false, 65 "spy": false, 66 "impersonate": false 67 }
該告警規則中,能夠訪問Elasticsearch查詢結果中的字段,如:payload.hits.hits.0._source.app_ppt_module 獲取app_ppt_module字段的值,(注意:若是數組不是用[0]的方式,而是 .0 的方式)
kibana.yml 中增長配置:
sentinl: settings: email: active: true user: xxxx@xxxx.com password: xxxx host: smtp.exmail.qq.com port: 465 ssl: true report: active: true
該配置設置了發送郵箱的相關參數,包括密碼、smtp服務器等。配置好以後重啓kibana。
整體來講,該告警功能仍是比較強大的。也支持webhook等告警方式,
可視化
可視化是Kibana中很重要的一部分,而其也很強大。下圖展現一張折線圖的配置(看上去是柱形圖,實際是折現圖,只是在展示形式上作了調整,文中會說明)
按圖中的順序,一步一步說明:
一、可視化的菜單入口
二、查詢輸入框和過濾欄,使用方式和Discover處相同,該處的條件設置好之後,則定義好了圖表的數據整體,代表圖表在該數據整體上去作可視化。是很關鍵和重要的一步。在咱們考慮要作一張圖形化的時候,第一步就該考慮數據整體是什麼。
三、須要觀察的指標,圖中表示我要觀察count值,配合第二條,此時說明我想count 該查詢條件下的日誌總數,在這兒特別說明一下,指標的計算類型:
Average : 求總量的平均值,須要指定number型字段
Count: 計算總量的總條數,
Max:計算總量的最大值,須要指定number型字段
Median:計算總量中的中間值,須要指定number型字段
Min:計算總量的最小值,須要指定number型字段
Percentile Ranks
Percentile
Standard Deviation 計算總量的均方差,須要指定number型字段
Sum 計算總量的總和,須要指定number型字段
Top Hit
Unique Count 去重統計總條數,如計算獨立IP數、獨立userid數等很是有用
Average Bucket
Max Bucket
Min Bucket
Sum Bucket
Cumulative Sum 對總量的累計彙總,好比每分鐘日誌條數是 10 、 十二、1五、八、1五、13 。那麼按每兩分中按該公式計算的結果爲, 10+12 = 2二、10+12+15+8 = 4五、0+12+15+8+15+13 = 73,最終結果爲 2二、4五、73
Derivative 導數,須要添加一個計算公司,該計算方式會自動計算該公式的導數值。
Moving Avg 移動平均數,相似與股票中的移動平均線
Serial Diff 微分
四、桶配置,桶時根據字段值的不一樣,將數據分爲不一樣的部分,每個部分就叫一個桶,好比說 字段 a 是 1-100的數字, 能夠將a 分爲 1- 20 , 21- 50, 51-70 ,71-100 四個桶。所以對於不一樣的數據類型,桶能夠分爲如下幾種:
Date Histogram 以時間日期字段 按 天、按 年、 按月 ...分桶。
Date Range 日期範圍,指定日期的間斷來分桶
Filters 指定多個過濾條件,將數據分爲多個桶,該方式作漏斗型數據很是有效
Histogram 指定一個數值字段,而後給定一個間隔長度,以此間隔來分桶
IPv4 Range 根據IPv4的範圍來分桶
Range 指定要給數值字段,而後指定多個數值區間(相似於上面的列子),以該數值區間進行分桶
Significant Terms
當桶配置好以後,數據總量被分配到不一樣的桶中。
熟悉桶的概念以後,對於X-Axis就很容易理解 : X座標即便根據桶的數量生成座標刻度,而桶的生成過程也是聚合的過程。下面介紹在桶中進行 Split Series:
Split Series 即便在桶內根據字段的值的不一樣進行拆分紅不一樣的小塊,拆分的塊數多少在圖表中造成多少條折線。
Split Chart 即拆分爲不一樣的圖表,這都是在桶內進行的。
五、圖列,在對桶進行中的數據進行 Split Series 時,圖列會顯示拆分後的字段分佈值,該值有可能時一、二、三、4 ...這樣的數字表示,好比說1 表示 首頁入口 、2 表示我的中心入口 等,這樣的數字做爲圖列時很難看懂的,這個時候若是須要友好的圖列,kibana中沒有直接配置的入口,須要在使用腳本字段,編寫painless語句(該部份內容下面會有介紹),而後使用添加好的腳本字段做爲 Split Series的字段,最終才能獲得友好的圖列顯示。
六、最終顯示圖表,圖中的圖表類型爲線圖,爲何顯示爲柱狀圖呢?是在圖表配置的Metrics & Axes 中的 Chart Type 配置爲 bar。
七、查看該圖表在elasticsearch的查詢狀況,配置圖表過程當中很是有用
八、保存圖表,記得保存,保存後能夠添加到面板。
腳本字段
在mysql中咱們常常會 用 AS 將一個計算表達式的結果賦值給一個字段,這在elasticsearch中怎麼作呢? 答案是:使用腳本字段。
腳本字段採用painless語言,關於該語言的學習,參靠elasticsearch官方網站:https://www.elastic.co/guide/en/elasticsearch/painless/current/painless-getting-started.html 。
在kibana中配置painless入口:management->Index Patterns->Scripted fields ,點擊 Add scripted field 按鈕能夠獲得下面的配置界面:
Name:腳本字段的名字, 相似mysql AS 後的字段名
Language: 採用的語言,有兩種:painless 和 expression , painless是elasticsearch標準語言,強大、性能好。expression是elasticsearch表達式
Type:字段類型
Format: 字段格式
Popularity: 優先級,一般優先級高於0, 0是普通字段的優先級
Script:腳本類容,經過return來賦值給 Name 處填寫的字段
關於painless的學習,這兒再也不贅述, 下面是一個腳本樣例:
if('app1097'.equals(doc['app_eventid.keyword'].value) || 'app1098'.equals(doc['app_eventid.keyword'].value) ){ if('7'.equals(doc['app_payment_entrance.keyword'] .value)) { return '個人帳戶入口'; } if('8'.equals(doc['app_payment_entrance.keyword'] .value)) { return '充值記錄入口'; } if('1'.equals(doc['app_payment_entrance.keyword'] .value)) { return 'h5獎學金頁入口'; } if('2'.equals(doc['app_payment_entrance.keyword'] .value)) { return 'h5活動頁入口'; } if('3'.equals(doc['app_payment_entrance.keyword'] .value)) { return '課時卡頁入口'; } if('4'.equals(doc['app_payment_entrance.keyword'] .value)) { return '(上課記錄)去付款入口'; } if('5'.equals(doc['app_payment_entrance.keyword'] .value)) { return '(完成付款)再次購買入口'; } if('6'.equals(doc['app_payment_entrance.keyword'] .value)) { return '(已取消的訂單)再次購買'; } }
該腳本返回一個字符串類型的數據,賦值給Name處命名的字段。
漏斗視圖
kibana沒有自帶的 可視化 漏斗視圖,須要在kibana安裝ob-kb-funnel插件,該插件的github地址:https://github.com/outbrain/ob-kb-funnel,該插件目前最新支持到 6.4.0,可是沒有release的包,安裝步驟以下:
a、下載倉庫代碼,
b、修改package.json包中的json至以下所示:
{ "name": "ob-kb-funnel", "version": "6.4.0", "kibana": { "version": "6.4.0" }, "devDependencies": { "numeral": "1.5.3", "d3-funnel": "^1.2.0" } }
主要修改 version 和 kibana.version字段,修改與所支持的版本,注意:該版本也要與kibana的版本一致。
c、拷貝到kibana的plugins下,進入該目錄, 執行 npm install (若是提示沒有安裝npm,網上查找nodejs npm 安裝),會自動下載所依賴的包,安裝在node_module下面。
d、重啓kibana及可。
安裝好以後會在可視化界面選擇視圖類型處看到Funnel View 組件,