1. 程式人生 > >Docker筆記(十):使用Docker來搭建一套ELK日誌分析系統

Docker筆記(十):使用Docker來搭建一套ELK日誌分析系統

一段時間沒關注ELK(elasticsearch —— 搜尋引擎,可用於儲存、索引日誌, logstash —— 可用於日誌傳輸、轉換,kibana —— WebUI,將日誌視覺化),發現最新版已到7.4了。所以別問程式設計師為什麼這麼忙?因為不是在加班就是在學習新框架中。

本文整理了使用Docker來快速搭建一套ELK日誌分析系統的方法。

1. 部署elk

github上有人整理了一套使用docker compose來部署elk的配置,可直接下載使用。

git clone https://github.com/deviantony/docker-elk.git

 

如果沒有git,那就安裝一下(yum install git

),或者直接下載github倉庫的原始碼包。

 

當前是基於7.2.1版(docker-elk目錄下.env檔案中定義,可修改)。

 

調整一下相應的配置。

 

修改docker-compose,設定es密碼等,

vim docker-compose.yml

# 在elasticsearch部分設定環境變數,將jvm堆記憶體增大到了1g,設定es elastic使用者的密碼
environment:
ES_JAVA_OPTS: "-Xmx1g -Xms1g"
ELASTIC_PASSWORD: Passw0rd

# 將logstash的埠對映從預設的5000改為5044,因為後面會用filebeat,不改也可以,對應就行
ports:
- "5044:5044"
- "9600:9600"

# 將jvm記憶體也增大一點
environment:
LS_JAVA_OPTS: "-Xmx512m -Xms512m"

# 在volumes部分增加es資料目錄的掛載,對es資料持久化,避免容器銷燬資料丟失
volumes:
- /mnt/elk/esdata:/usr/share/elasticsearch/data

注意:因為es容器內部是以elasticsearch使用者啟動程序的,所以在做持久化資料目錄掛載的時候,需要將目錄許可權進行設定,否則會因為沒有訪問許可權而啟動失敗。elasticsearch的uid是1000,可以建一個uid為1000的使用者,然後將目錄所有者賦予該使用者。

 

修改es配置檔案,將xpack從trial改為basic,禁用付費功能

vim elasticsearch/config/elasticsearch.yml

#xpack.license.self_generated.type: trial
xpack.license.self_generated.type: basic

 

修改logstash配置檔案,設定es的使用者名稱密碼

vim logstash/config/logstash.yml

xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: Passw0rd

 

修改logstash的pipeline配置

vim logstash/pipeline/logstash.conf

# 這裡codec根據具體情況配置
input {
beats {
port => 5044
codec => "json"
}
}
## Add your filters / logstash plugins configuration here
output {
elasticsearch {
hosts => "elasticsearch:9200"
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
user => "elastic"
password => "Passw0rd"
}
}

 

修改kibana配置,設定es密碼

vim kibana/config/kibana.yml

## X-Pack security credentials
elasticsearch.username: elastic
elasticsearch.password: Passw0rd

 

配置調整後,使用 docker-compose up -d 即可啟動es,logstash,kibana三個容器。第一次啟動需要下載所有映象,會比較慢,啟動完後,訪問 elk所在伺服器IP:5601即可進入kibana頁面。

這裡預設是起一個es容器,如果想起多個,參考: https://github.com/deviantony/docker-elk/wiki/Elasticsearch-cluster

 

2. 部署filebeat

filebeat部署在產生日誌的伺服器上。先下載映象,

docker pull docker.elastic.co/kibana/kibana:7.3.1

 

下載一個示例配置檔案

curl -L -O https://raw.githubusercontent.com/elastic/beats/7.3/deploy/docker/filebeat.docker.yml

 

修改配置檔案

vim filebeat.docker.yml

filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false

#filebeat.autodiscover:
# providers:
# - type: docker
# hints.enabled: true

#processors:
#- add_cloud_metadata: ~
#- add_host_metadata: ~

filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/elk/*.log

output.logstash:
hosts: ["你的elk伺服器IP:5044"]

 

去掉了一些不必要的配置,基本就是一個input, 一個output。input paths部分配置你日誌所在目錄,注意這裡是容器內的目錄,真正伺服器的日誌目錄需要在啟動容器時掛載到這裡配置的目錄。

啟動容器

docker run -d --name filebeat --user=root -v $(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro \
-v /mnt/logs/elk/:/var/log/elk/ docker.elastic.co/beats/filebeat:7.3.1 filebeat -e -strict.perms=false

 

對配置檔案及實際日誌目錄與容器日誌目錄進行了掛載。

啟動成功後,對應目錄下的日誌就會通過filebeat,logstash傳輸到es,進入kibana對日誌資料建立索引進行查詢了。

 

3. 總結

前面用elk來搭建日誌分析系統還是5.1版,兩年時間已到7.4,配置方式,包括UI風格都做了很大的調整,很有一種人間一年,技術圈十載的感覺。
本文整理了基於Docker來搭建ELK框架的整個過程,供參考。


—————————————————————————————
作者:空山新雨
歡迎關注我的微信公眾號:jboost-ksxy (一個不只有技術乾貨的公眾號)

&n