前面做了關於ELK組件的各個實驗,但是並沒有真正的把各個組件結合起來做一個實驗,現在使用一個腳本簡單的生成日誌,模擬生產不斷產生日誌的效果
一 流程說明
使用腳本產生日誌,模擬用戶的操作
日誌的格式
[INFO] 2019-11-30 18:00:20 [cn.success.dashboard.Main] -DAU|5206|使用優惠卷|2019-11-30 18:20:23
日誌的格式時"DAU" + userID + "|" + visit + "|" +date
通過Filebeat讀取日誌文件的內容,並將內容發送給Logstash,,原因時需要對內容做處理
Logstash接收到內容後,進行處理,如分割操作,然後將內容發送到 Elasticsearch中
Kiana會讀取 Elasticsearch中的數據,並且在 Kiana中進行設計 Dashboard,最後進行展示
後面的日誌格式,圖表,Dashboard都是自定義的
二 編一個日誌的腳本
爲了方便實驗,腳本很簡陋,只是一個輸入工具,沒有什麼實際作用
2.1 日誌內容如下
#!/bin/bash visit_array=("瀏覽頁面" "評論商品" "加入收藏" "加入購物車" "提交訂單" "使用優惠卷" "領取優惠卷" "搜索" "查看訂單") visit_number=`head /dev/urandom | cksum | cut -c 1-1` id_number=`head /dev/urandom | cksum | cut -c 1-4` echo "[INFO] `date +%F` `date|awk '{print $4}'` [cn.success.dashboard.Main] - DAU|$id_number|${visit_array[$visit_number]}|`date +%F` `date|awk '{print $4}'`"
2.2 執行測試
簡單執行一下,看一下效果
[root@node4 ~]# sh /opt/logs.sh [INFO] 2019-11-30 05:35:28 [cn.success.dashboard.Main] - DAU|3149|查看訂單|2019-11-30 05:35:28 [root@node4 ~]# sh /opt/logs.sh [INFO] 2019-11-30 05:35:29 [cn.success.dashboard.Main] - DAU|2686|搜索|2019-11-30 05:35:29 [root@node4 ~]# sh /opt/logs.sh [INFO] 2019-11-30 05:35:30 [cn.success.dashboard.Main] - DAU|2922|加入收藏|2019-11-30 05:35:30 [root@node4 ~]# sh /opt/logs.sh [INFO] 2019-11-30 05:35:30 [cn.success.dashboard.Main] - DAU|1680|加入收藏|2019-11-30 05:35:30 [root@node4 ~]# sh /opt/logs.sh [INFO] 2019-11-30 05:35:31 [cn.success.dashboard.Main] - DAU|1987|加入購物車|2019-11-30 05:35:31
2.3 實際操作
然後寫一個死循環,兩秒執行一次,把這個輸入一個日誌文件裏模擬
[root@node4 ~]# while > : > do > sh /opt/logs.sh >> /var/log/elk-test.log > sleep 2 > done
2.4 查看效果
[root@node4 ~]# tail -f /var/log/elk-test.log
[INFO] 2019-11-30 05:40:52 [cn.success.dashboard.Main] - DAU|2461|評論商品|2019-11-30 05:40:52 [INFO] 2019-11-30 05:40:54 [cn.success.dashboard.Main] - DAU|1463|加入購物車|2019-11-30 05:40:54 [INFO] 2019-11-30 05:40:56 [cn.success.dashboard.Main] - DAU|3408|加入收藏|2019-11-30 05:40:56 [INFO] 2019-11-30 05:40:58 [cn.success.dashboard.Main] - DAU|2821|加入收藏|2019-11-30 05:40:58 [INFO] 2019-11-30 05:41:00 [cn.success.dashboard.Main] - DAU|3630|加入購物車|2019-11-30 05:41:00 [INFO] 2019-11-30 05:41:02 [cn.success.dashboard.Main] - DAU|4136|加入購物車|2019-11-30 05:41:02 [INFO] 2019-11-30 05:41:05 [cn.success.dashboard.Main] - DAU|1673|加入收藏|2019-11-30 05:41:05 [INFO] 2019-11-30 05:41:07 [cn.success.dashboard.Main] - DAU|1073|評論商品|2019-11-30 05:41:07 [INFO] 2019-11-30 05:41:09 [cn.success.dashboard.Main] - DAU|3007|提交訂單|2019-11-30 05:41:09 [INFO] 2019-11-30 05:41:11 [cn.success.dashboard.Main] - DAU|2361|評論商品|2019-11-30 05:41:11 [INFO] 2019-11-30 05:41:13 [cn.success.dashboard.Main] - DAU|2634|加入收藏|2019-11-30 05:41:13 [INFO] 2019-11-30 05:41:15 [cn.success.dashboard.Main] - DAU|1799|加入購物車|2019-11-30 05:41:15 [INFO] 2019-11-30 05:41:17 [cn.success.dashboard.Main] - DAU|3545|評論商品|2019-11-30 05:41:17 [INFO] 2019-11-30 05:41:19 [cn.success.dashboard.Main] - DAU|3488||2019-11-30 05:41:19 [INFO] 2019-11-30 05:41:21 [cn.success.dashboard.Main] - DAU|1711|加入購物車|2019-11-30 05:41:21 [INFO] 2019-11-30 05:41:23 [cn.success.dashboard.Main] - DAU|5896|加入購物車|2019-11-30 05:41:23
基本達到一個日誌的效果
三 配置filebeat
[root@node4 ~]# cd /usr/local/filebeat/
[root@node4 filebeat]# vi elk-test.yml
filebeat.inputs: - type: log enabled: true paths: - /var/log/elk-test.log setup.template.settings: index.number_of_shards: 3 output.logstash: hosts: ["192.168.132.131:5044"]
四 配置logstash
4.1 初步配置
[root@node1 logstash]# vi elk-test.conf
input { beats{ port => "5044" } } filter{ mutate { split => {"message" => "|"} } mutate { add_field =>{ "UserId" => "%{[message][1]}" "visit" => "%{[message][2]}" "date" => "%{[message][3]}" } } } output { stdout {codec => rubydebug} }
先輸出到控制檯
[root@node1 logstash]# bin/logstash -f elk-test.conf
[2019-11-30T05:58:26,028][INFO ][org.logstash.beats.Server][main] Starting server on port: 5044 [2019-11-30T05:58:26,864][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
root@node1 ~]# netstat -antlup|grep 5044
再啓動filebeat
[root@node4 filebeat]# ./filebeat -e -c elk-test.yml
查看控制檯的輸出情況
4.2 把數據進行格式化配置
[root@node1 ~]# vim /usr/local/logstash/elk-test.conf
input { beats{ port => "5044" } } filter{ mutate { split => {"message" => "|"} } mutate { add_field =>{ "UserId" => "%{[message][1]}" "visit" => "%{[message][2]}" "DateTime" => "%{[message][3]}" } } mutate{ convert => { "UserId" => "integer" "visit" => "string" "DateTime" => "string" } } } output { stdout {codec => rubydebug} }
啓動再看
數據處理完成
4.3 數據傳到elasticsearch配置
[root@node1 logstash]# vim elk-test.conf
input { beats{ port => "5044" } } filter{ mutate { split => {"message" => "|"} } mutate { add_field =>{ "UserId" => "%{[message][1]}" "visit" => "%{[message][2]}" "DateTime" => "%{[message][3]}" } } mutate{ convert => { "UserId" => "integer" "visit" => "string" "DateTime" => "string" } } } output { elasticsearch{ hosts => ["192.168.132.131:9200","192.168.132.132:9200","192.168.132.133:9200"] } }
啓動
[root@node1 logstash]# bin/logstash -f elk-test.conf
使用elasticsearch head查看
4.4 ES查看原數據
這樣就把所有數據收集到elasticsearch上
五 kibana配置
5.1 創建index patten
5.2 實時顯示數據
5.3 創建一個以時間間隔的柱狀圖
詳細步驟可參考前面的自定義圖表https://www.cnblogs.com/zyxnhr/p/11954663.html
創建結果
保存
5.4 各個操作的餅圖分佈
添加一個餅圖,依然選擇logstash
左側過濾
添加一個lable
添加前後顯示效果
依次添加所有動作
添加完後效果
設置選項
結果如下
保存
5.5 添加一個數據表格
這樣顯示
在數據探索中進行保存,將各個操作的數據以表格的形式展示出來
5.6 製作dashboard
創建新的dashboard
調正一下界面。就可以得到下面的界面
調整名字
5.7 最終結果
保存
整個的實驗完成