kibana 安裝和使用
日誌分析任務
1. ElasticSearch
1.1 ElasticSearch安裝
從Elastic官網的Product選擇ElasticSearch下載。
這裡下載2.3.5版本,僅介紹Window下的安裝。將下載好的zip包解壓直接放在D盤,直接點選bin下的elasticsearch.bin啟動。
開啟瀏覽器輸入如下http://localhost:9200,出現如下資訊即成功。這裡的”name”,是漫威中的名字,每次開啟都不一樣。ElasticSearch支援多節點,我們這裡採用了預設配置,配置多個節點時,即會顯示多個漫威人物的名字。
1.2 安裝Head外掛
Elasticsearch可使用官方的Mavel(漫威,哈哈)進行管理,我們使用更好用的Head外掛進行管理。開啟cmd視窗,進入elasticsearch的bin目錄,輸入如下指令,安裝head外掛。(大多數教程為-install,es 2.0版本之後,使用install即可)。
plugin install mobz/elasticsearch-head
輸入地址http://localhost:9200/_plugin/head/。Head為我們提供索引資訊、建立索引、資料瀏覽、基本查詢、複合查詢功能。
2. Kibana
2.1 安裝Kibana
同樣,從elastic官網下載Kibana的zip包,解壓,執行bin下的kibana.bat,即可啟動Kibana。開啟瀏覽器,鍵入
2.2 資料準備
從官方教程下載資料集https://www.elastic.co/guide/en/kibana/current/getting-started.html,
資料集1:莎士比亞全集;資料集2:銀行賬戶資料;資料集3:日誌資料,欄位非常多,但是我們暫時只關注地理位置的部分。
{
"line_id": INT,
"play_name": "String",
"speech_number": INT,
"line_number": "String",
"speaker": "String" ,
"text_entry": "String",
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
{
"account_number": INT,
"balance": INT,
"firstname": "String",
"lastname": "String",
"age": INT,
"gender": "M or F",
"address": "String",
"employer": "String",
"email": "String",
"city": "String",
"state": "String"
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
{
"memory": INT,
"geo.coordinates": "geo_point"
"@timestamp": "date"
}
- 1
- 2
- 3
- 4
- 5
對資料進行Mapping,即定義資料各個Field的格式,是否分詞,什麼型別。可使用curl在命令列中對es進行mapping,也可以使用head的複雜查詢功能。當然,我們在生產環境中,通過介面一個一個建立還是速度太慢了。
{
"mappings" : {
"_default_" : {
"properties" : {
"speaker" : {"type": "string", "index" : "not_analyzed" },// 未分詞
"play_name" : {"type": "string", "index" : "not_analyzed" },
"line_id" : { "type" : "integer" }, // 整形
"speech_number" : { "type" : "integer" }
}
}
}
}
';
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
curl -XPUT http://localhost:9200/logstash-2015.05.18 -d '
{
"mappings": {
"log": {
"properties": {
"geo": {
"properties": {
"coordinates": {
"type": "geo_point"
}
}
}
}
}
}
}
';
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
官方建議使用Bulk API批量寫入我們下載的json資料,我們這裡先採用了Java API來寫入資料。使用Java API有一點小麻煩,Object需要進行解析,所以需要寫POJO,還需要把每一個Field一一對應好。使用Eclipse Mars EE,安裝好Maven和M2E,新建Maven專案。
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.5</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.16</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
建立工程,包結構如下:
FileOperation封裝Commons-io的FileUtils操作;
ShakeSpeare,POJO實體,用來接收JSON parse的物件;
ShakeSpeareIndex,POJO實體,用來接收JSON parse的物件;
BulkInsert用來進行批量的insert操作。
採用官方的Bulk API操作更為簡單:
curl –XPOST "localhost:9200/bank/account/_bulk?pretty" -data-binary @C:\eespace\elk\src\main\resources\data\accounts.json
- 1
Window下是雙引號,後面的json檔案的路徑需加@。
建完索引,我們可以看到如下的介面:
2.2 Kibana繪圖
首先要讓Kibana知道需要進行視覺化和管理的ElasticSearch中的索引,採用正則的方式進行匹配,比如日誌檔案,就可以用logstash-2015.05*。
日誌有時間線,對於account和shakespeare不要勾選index contains time-based events。點選Discover,開始探索應用。
可以看到各個欄位和欄位對應的資料。點選Visualize開始進行視覺化展示。可選的型別很多,條形圖、走勢圖、餅圖、地圖,甚至可以新增Markdown widget建立一個圖形化的介面。
左上角選擇Bank索引,鍵入account_number:<100 AND balance:>47500,進行資料篩選。得到篩選結果,如果只需要看其中一些資料,我們點選相應的Fileds的Add按鈕即可。
我們建立一個餅圖,來看看銀行的賬戶裡面稅錢在各個範圍內的佔比。在視覺化中點選From a new query,即新建一個Query來建立一個餅圖。
選擇Range,即按照範圍劃分,建立餅圖。
我們還可以在另一個維度上繼續拆分,比如,檢視這些人的年齡分佈。
我們在右上角的第二個按鈕點選儲存,儲存該圖為Pie Chart。下面通過條形圖看看莎士比亞的戲劇中哪部劇臺詞最少,這部劇中哪個任務的話最多。
進行如上設定,Y軸選不重複計數,來統計speaker欄位;X軸選話劇名,選詞,升序排列,得到條形圖。在Options中選擇grouped模式,即可在同一副圖中顯示兩項內容。
下面我們分析Log中的訪問的IP地址,都分佈在哪些國家,建立一個視覺化的地圖。首選選擇一個時間段。
選擇我們建座標時的Geo Coordinate,即可得到地理座標圖,點選儲存。
最後,我們輸入一些文字性資訊來展示。視覺化中選擇Markdown,按照Markdown的格式我們寫上合適的內容。
進入DashBoard,將我們儲存好的內容展示在頁面上。
稍加整理,得到最終的展示介面。