ELK日誌系統使用說明

數據探索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 組件,

相關文章
相關標籤/搜索