ELK日志系統使用說明


數據探索

Elasticsearch具有強大的數據檢索和分析同能,支持模糊、全文、過濾、管道等數據查詢。對於日志型數據處理很有優勢。

下圖為KIbana的主頁圖,將逐步說明每一部分的功能:

 

依照圖中的編號:

1、Discover點擊后是整個日志總況,這也是經常使用的入口,在這個地方可以定時刷新最新日志,過濾整個日志,添加指定字段顯示,展示不同時段的日志總量等等。

2、顯示8所選定的時間范圍內的日志總量按時間的分布情況,通過該直方圖,可以判斷應用一天的高峰期時段,通常日志量越大,使用的用戶越多。同時,當服務出現故障,會有某類日志暴增,所以環比前一天的數據可以判斷服務運行狀況。

3、具體日志顯示區域,其中Time字段為固定字段,對應日志中的@timestamp字段,該區域從6的區域添加任何你想關注的字段值,在表頭位置,鼠標放置該位置 有排序圖表 以及左右移動的圖標。

4、表示該條件下所查詢到的日志總條數

5、當被添加到3(表格)中的字段會顯示在該區域,鼠標滑到對應字段可以移除

6、可用字段區域,下方的字段鼠標滑上去會有 add 按鈕, 通過該按鈕可以添加到3的表格區域顯示,點擊字段名可以看出該字段的值分布占比。旁邊的齒輪小按鈕,點擊后會展開輸入框,輸入字符后可以自動匹配下方的字段(該功能在字段特別多的情況下非常有用)。另外,該區域顯示的字段總數可以在  Management -> Advanced Settings->Number of terms處設置最大顯示字段數。字段中 前面的 t 表示字段類型為字符串, # 表示number字段,時鍾表示時間類型字段(具體字段類型請查閱elasticsearch文檔),?表示未maping字段,需要在Management ->Index Patterns 處選中對應的索引模式,點擊右上角的刷新按鈕。

7、查詢輸入框,查詢方式以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

8、時間段選擇,通過@timestamp字段過濾時間段

9、查詢條件保存操作,當我們配置好一次查詢之后,希望下次可以直接使用,就可以點擊該按鈕進行保存

10、保存的查詢條件可以通過點擊此處打開

11、定時刷新操作

12、添加日志字段過濾,支持 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中很重要的一部分,而其也很強大。下圖展示一張折線圖的配置(看上去是柱形圖,實際是折現圖,只是在展現形式上做了調整,文中會說明)

 

 按圖中的順序,一步一步說明:

1、可視化的菜單入口

2、查詢輸入框和過濾欄,使用方式和Discover處相同,該處的條件設置好以后,則定義好了圖表的數據總體,表明圖表在該數據總體上去做可視化。是很關鍵和重要的一步。在我們考慮要做一張圖形化的時候,第一步就該考慮數據總體是什么。

3、需要觀察的指標,圖中表示我要觀察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 、 12、15、8、15、13 。那么按每兩分中按該公式計算的結果為, 10+12 = 22、10+12+15+8 = 45、0+12+15+8+15+13 = 73,最終結果為 22、45、73

Derivative  導數,需要添加一個計算公司,該計算方式會自動計算該公式的導數值。

Moving Avg 移動平均數,類似與股票中的移動平均線

Serial Diff 微分

 

4、桶配置,桶時根據字段值的不同,將數據分為不同的部分,每一個部分就叫一個桶,比如說 字段 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 即拆分為不同的圖表,這都是在桶內進行的。

 

5、圖列,在對桶進行中的數據進行 Split Series 時,圖列會顯示拆分后的字段分布值,該值有可能時1、2、3、4 ...這樣的數字表示,比如說1 表示 首頁入口 、2 表示個人中心入口 等,這樣的數字作為圖列時很難看懂的,這個時候如果需要友好的圖列,kibana中沒有直接配置的入口,需要在使用腳本字段,編寫painless語句(該部分內容下面會有介紹),然后使用添加好的腳本字段作為 Split Series的字段,最終才能得到友好的圖列顯示。

6、最終顯示圖表,圖中的圖表類型為線圖,為什么顯示為柱狀圖呢?是在圖表配置的Metrics & Axes 中的 Chart Type 配置為 bar。

7、查看該圖表在elasticsearch的查詢情況,配置圖表過程中非常有用

8、保存圖表,記得保存,保存后可以添加到面板。

 

腳本字段

在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 組件,

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM