docker安裝elk7.6.0版本,配合filebeat收集日誌
jdk版本用的是11
測試用了兩臺虛擬機器,一臺搭建elk,另外一臺安裝filebeat
我的測試java程式放到了gitee上面,其中的collector資料夾下有相應的程式
https://gitee.com/guoanhao/Architect-Stage-Kafka.git
第一步 安裝elk7.6.0(第一臺機器)
docker pull sebp/elk
docker images
執行elk
1,執行之前,需要編輯一個檔案
vi /etc/sysctl.conf
# 新增如下程式碼 vm.max_map_count=262144
#重新整理一下,否則不生效
sysctl -p
2,執行,設定一下ES_MIN_MEM和ES_MAX_MEM,因為我的虛擬機器記憶體比較小。
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -e ES_MIN_MEM=128m -e ES_MAX_MEM=128m -it --name elk sebp/elkc
# 檢視elk日誌,會輸出很多資訊,不太容易確定是否啟動成功了。
# 等到日誌資訊不再增加了,說明啟動好了
docker logs -f -t elk
# 通過docker ps命令檢視,也不足以證明沒有問題。
怎麼確定啟動成功呢?訪問一下下面的地址,出現頁面就是啟動成功了。
# elasticsearch地址
http://192.168.186.135:9200/
# kibana地址
http://192.168.186.135:5601/
第二步,搭建filebeat(第二臺機器)
下載與elk相同版本的filebeat7.6.0,我在華為開源映象站上下載的。上傳到第二臺伺服器上(我放到了/home/software下)
1. 解壓到/usr/local目錄下
tar -zxvf filebeat-7.6.0-linux-x86_64.tar.gz -C /usr/local/
2. 配置filebeat(filebeat.yml)
cd /usr/local/filebeat-7.6.0-linux-x86_64
vim filebeat.yml
配置資訊如下
- 配置日誌收集路徑
- 關閉filebeat輸出到elasticsearch
- 開啟filebeat輸出到logstash的配置(在logstash中配置輸出到elasticsearch)
- 配置檔案注意縮排
- 這裡我用的filebeat是7.6版本,不同於6.0之前的,這裡沒有了document_type,我們使用fields:service:來代替,logstash配置檔案也要相應的修改。參考:https://blog.51cto.com/kexiaoke/2092029
filebeat.inputs: # Each - is an input. Most options can be set at the input level, so # you can use different inputs for various configurations. # Below are the input specific configurations. - type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: # - /var/log/*.log - /home/software/logs/app-collector.log #- c:\programdata\elasticsearch\logs\* fields: service: app-log - type: log enabled: true paths: - /home/software/logs/error-collector.log #- c:\programdata\elasticsearch\logs\* fields: service: error-log # output.elasticsearch: # Array of hosts to connect to. # hosts: ["localhost:9200"] output.logstash: # The Logstash hosts hosts: ["192.168.186.135:5044"]
配置檔案中我們配置了兩個- type: log,作用是將不同的log檔案輸出到logstash中,並且可以在logstash中通過fields:service: app-log或者fields:service: error-log確定是哪一個log,以便elasticsearch以不同的index輸出。詳見下面的logstash配置檔案。
3.啟動filebeat
# 進入filebeat目錄 cd /usr/local/filebeat-7.6.0-linux-x86_64 # 執行filebeat nohup ./filebeat -e -c filebeat.yml > filebeat.log & # 檢視執行狀態 ps -ef |grep filebeat # 關閉filebeat kill -9 pid
第三步 配置logstash
我們使用docker啟動的elk,所以得先進入elk容器然後再進行配置
# 進入容器 docker exec -it elk bash #進入logstash配置檔案目錄 /etc/logstash/conf.d #編輯02-beats-input.conf檔案 vim 02-beats-input.conf
1. 修改配置檔案,我的檔案內容如下(注意縮排)
配置檔案中的 index => "app-log-%{[fields][service]}-%{+YYYY.MM.dd}"
可以改為 index => "%{[fields][service]}-%{+YYYY.MM.dd}"或者 index => "app-log-%{+YYYY.MM.dd}"
input { beats { port => 5044 } }
# 輸出到elasticsearch output { if [fields][service] == "app-log" { elasticsearch { hosts => ["192.168.186.135:9200"] index => "app-log-%{[fields][service]}-%{+YYYY.MM.dd}" } }else if [fields][service] == "error-log" { elasticsearch { hosts => ["192.168.186.135:9200"] index => "error-log-%{[fields][service]}-%{+YYYY.MM.dd}" } } }
2.重啟elk
docker restart elk
3. 測試日誌收集,我的測試程式放到了gitee上,需要將jar包放到/home/software檔案加下啟動(因為filebeat配置的收集日誌的目錄是/home/software/logs)
啟動後生成logs資料夾
java -jar collector.jar
資料夾中有兩個日誌檔案,一個是正常的log,一個是異常log
瀏覽器訪問下面的路徑,會在日誌檔案中寫入相應的日誌,filebeat會收集到裡面的日誌資訊。
http://192.168.186.137:8001/index http://192.168.186.137:8001/err
打印出來的日誌資訊
日誌視覺化
瀏覽器訪問kibana,點選management =》index Patterns=》create index pattern
http://192.168.186.135:5601/
建立index pattern,名稱要與logstash中配置檔案的相匹配
輸入名稱後,點選next
這裡我選的是i don't want use the time Filter。也可以選另一個進行測試 。
選擇後點擊 Create Index Pattern。這樣index pattern就建立好了。
檢視index Pattern中的日誌資訊,右側就是日誌資訊
可以進行搜尋
另一個index Pattern,err-log-*在建立的時候我選擇了@timestamp
這裡會多出來一個時間選擇,選擇後會查詢時間範圍之內的日誌資訊
到此配置完成 。