1. 程式人生 > 其它 >docker安裝elk7.6.0版本,配合filebeat收集日誌

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

這裡會多出來一個時間選擇,選擇後會查詢時間範圍之內的日誌資訊

到此配置完成 。