前端(HTML,JavaScript,jQuery)
E(elasticsearch,資料庫)
L(logstash,收集web日誌資料)
K(Kibana,用web的形式展示elasticsearch的資料)
一、1. 安裝elasticsearch叢集
配置java環境 下載elasticsearch
2. vim /etc/elasticsearch/elasticsearch.yml 檔案中 修改(前面的數字代表行數,修改配置檔案時 把前面的#刪除之後 後面的文字必須定格)
17 cluster.name: myelk//配置叢集名字
23 node.name: es1//當前主機名稱
54 network.host: 0.0.0.0 // 0.0.0.0(監聽所有地址)
68 discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3"]
//宣告叢集裡的主機成員有誰,不需要全部寫進去 但是在啟動主機的時候先啟動這幾臺,
啟動其他的話其他的會自動組成叢集
叢集配置完成之後,可以直接訪問 http://任意一臺:9200/_cluster/health?pretty 檢視叢集資訊
?pretty 這個是把資料豎著顯示能更好的 看清資訊
3. 外掛使用(裝在那臺上只能在那臺機器上使用 ./plugin install file:///外掛的絕對路徑)
訪問這些外掛 http://ip:9200/_plugin/外掛名
(1)head
展現幾區的拓撲結構,通過這個外掛可以進行 索引 和 節點 級別的操作
提供一組針對叢集的查詢API
(2)kopf
elasticsearch的 管理工具
(3)bigbesk
ES叢集的監控工具
可以通過他跨檢視ES叢集的各種狀態,如:CPU 、記憶體
提供對ES叢集操作API
外掛 head 建立索引
命令列建立索引,插入資料(json 格式)
curl -X PUT "http://192.168.1.55:9200/index" -d '
> {
> "settings":{
> "index":{
> "number_of_shards":5,//分片數
> "number_of_replicas":1//副本數
> }
> }
> }'
curl -X PUT "http://192.168.1.55:9200/tedu/teacher/1" -d '{
"職業":"詩人",
"名字":"李白",
"稱號":"詩仙",
"年代":"唐"}'
tedu是索引名字 teacher為表名 1為id(第一行的意思)
4. 匯入資料(匯入資料的時候如果裡面沒有索引,表名在_bulk 前面加上 索引,表名)
curl -X POST "http://ip:9200/_bulk" --data-binary @logs.jsonl(匯入的資料必須是json格式的)
二、安裝kibana
資料視覺化平臺工具
vim /opt/kibana/config/kibana.yml
指定叢集中的機器任意一臺都可以 其他的需要把註釋去掉就行
訪問地址 http://ip:5601開啟之後
全綠說明安裝成功
discover 檢視資料資訊 visualize中可以做餅圖
例子訪問量排名
三、logstash
安裝logstash
1.安裝Java環境
2. logstash 沒有配置檔案需要自己手寫
3.
4.logstash工作結構
(1)資料來源(web日誌)
(2)input(收集資料)
(3)filter(把資料轉換,過濾)
(4)output(把資料輸出,給elasticsearch)
(5)測試
rubydebug輸出內容的時候 會豎著顯示 比較友好
5.https://github.com/logstash-plugins (logstash的外掛地址)
(1)使用input裡面的file外掛
最後一項是否 必須填寫(NO 可以不填)
我們往下拉找 最後一項是yes的
陣列中可以填寫多個路徑
建立 兩個log檔案 並開啟 logstash 程式
logstash 在每次讀取檔案的時候 都會做一個記錄(記錄讀到日誌檔案的什麼位置)
我們可以自己設定記錄檔案的位置(生產環境中如果有2個以上的使用者維護logstrash,這個記錄檔案在root下 那麼維護起來比較麻煩)
sincedb_path 指定讀取記錄檔案的位置
start_position 有兩個引數 beginning 和 end 預設是end,在重啟logstash的時候 如果有記錄檔案那麼會從記錄檔案的位置開始繼續讀取,如果沒有beginning是從檔案的開頭讀取,end是從檔案的結尾讀取最新的資料(如果是end那麼原來的資料會讀不到)
type 標籤 可以隨便寫
(2)使用 filter grok外掛 我們可以自己編寫正則表示式 或者 用巨集表示式(自己有的)
正則表示式有匿名分組和命名分組
命名正則(?<正則的名字>匹配的內容)固定格式
上面的是手動寫的 ,logstash 中有提前準備好的表示式
這個文件裡寫的是 提前準備好的巨集表示式
該文件分為兩列 第一列為巨集的名字 第二列為正則表示式匹配的方法
呼叫的話%{巨集的名字:自己的命名} (也可以不用自己命名 只寫巨集的名字呼叫)
直接呼叫 上面的巨集和手寫的是一樣的
(3)使用putput中的elasticsearch外掛
下面 fiush_size是 當大小達到2000位元組之後 就像elasticsearch 中寫入 資料
idle_flush_time是 10秒 寫入一次 防止還沒到達2000位元組 不向elasticsearch中寫入資料
指定 elasticsearch的機器 和 指定建立的庫的庫名(其實可以不用寫 hosts,index(庫名) 引數都是預設有引數 hosts 預設的是 127.0.0.1 本機 index預設的是 logshtash-yyy-mmm-ddd 如果elasticsearch和logstash安裝在同一臺機器那麼 hosts 就不用修改)
6. 企業中web伺服器多 每臺都配置logstash 比較麻煩。 可以用filebeat + logstash,filebeat負責把日誌資料傳輸給logstash中
在logstash配置檔案中只需要加上一個埠號,在啟動時,logstash會自動檢測5044埠
(1)在web伺服器安裝filebeat
yum -y install filebeat
(2)修改 filebeat的配置檔案(/etc/filebeat/filebeat.yaml)
預設的是logstash是註釋的 elasticsearch 沒有註釋 我們把elasticsearch的行給註釋了 把logstash的行註釋去掉
需要標籤(分辨是什麼服務的日誌)的話可以再 filebeat配置檔案中
大約在72行 標記型別
配置完filebeat之後可以在logstash配置檔案中 加上 if 判斷