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

一段時間沒關注ELK(elasticsearch —— 搜索引擎,可用於存儲、索引日誌, logstash —— 可用於日誌傳輸、轉換,kibana —— WebUI,將日誌可視化),發現最新版已到7.4了。因此別問程序員爲何這麼忙?由於不是在加班就是在學習新框架中。git

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

1. 部署elk

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

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

 

若是沒有git,那就安裝一下(yum install git),或者直接下載github倉庫的源碼包。docker

 

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

 

調整一下相應的配置。vim

 

修改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的用戶名密碼curl

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 (一個不僅有技術乾貨的公衆號)

相關文章
相關標籤/搜索