在分佈式系統中,因爲節點服務會部署多臺,一旦出現線上問題須要經過日誌分析定位問題就須要登陸服務器一臺一臺進行日誌檢索,很是不便利,這時候就須要用到EFK日誌收集工具。java
在應用服務端部署Filebeat,將咱們打印到日誌文件中的日誌發送到Logstash中,在通過Logstash的解析格式化後將日誌發送到ElasticSearch中,最後經過Kibana展示出來。EFK基礎版的架構以下:node
本文主要是使用docker和docker-Compose部署ELK的基礎環境,選擇7.5.1做爲EFK組件版本。docker
固然了若是你們對 docker
,docker-compose
不是很熟悉的話能夠翻看我以前爲你們準備的兩篇文章:bootstrap
實在不想使用docker部署的話也能夠下載對應的安裝包而後手動部署,配置方式基本同樣。服務器
安裝配置
elasticsearch
安裝elasticsearch以前先配置以下的系統變量微信
-
修改
/etc/sysctl.conf
,在最後追加以下配置vm.max_map_count = 655360
架構 -
修改
/etc/security/limits.conf
,增長以下配置app
* soft memlock unlimited * hard memlock unlimited * hard nofile 65536 * soft nofile 65536
-
修改
/etc/security/limits.d/20-nproc.conf
,增長以下配置
* soft nproc 4096 root soft nproc unlimited
-
啓動elasticsearch臨時容器
docker run --rm --name es -p9200:9200 -p9300:9300 -e discovery.type=single-node elasticsearch:7.5.1
-
導出elasticsearch配置文件
docker cp fbce586c8a56:/usr/share/elasticsearch/config/elasticsearch.yml /app/elk/elasticsearch/conf/elasticsearch.yml
-
修改es配置文件
cluster.name: "elk-cluster" network.host: 0.0.0.0 bootstrap.memory_lock: true discovery.type: single-node
-
創建es的日誌文件夾和數據文件夾,並對文件夾受權
mkdir -p /app/elk/elasticsearch/logs mkdir -p /app/elk/elasticsearch/data chmod -R 777 /app/elk/elasticsearch/logs chmod -R 777 /app/elk/elasticsearch/data
-
中止臨時容器
docker stop fbce586c8a56
logstash
-
啓動臨時容器
docker run --rm --name logstash -p5044:5044 -p9600:9600 logstash:7.5.1
-
導出docker的配置文件
docker cp 5adb0971bb0f:/usr/share/logstash/config /app/elk/logstash
-
創建logstash數據文件夾,並對其受權
mkdir -p /app/elk/logstash/data chmod -R 777 /app/elk/logstash/data
-
複製logstash啓動文件,並對其修改
cd /app/elk/logstash/config cp logstash-sample.conf logstash.conf
修改logstash.conf,配置output
# Sample Logstash configuration for creating a simple # Beats -> Logstash -> Elasticsearch pipeline. input { beats { port => 5044 } } output { elasticsearch { hosts => ["http://172.31.0.207:9200"] index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" } }
暫時修改一下ES的訪問路徑便可。
-
中止臨時容器
docker stop 5adb0971bb0f
kibana
-
啓動臨時容器
docker run --rm --name kibana -p5601:5601 kibana:7.5.1
-
導出kibana配置文件
docker cp f21f0f9e0259:/usr/share/kibana/config/kibana.yml /app/elk/kibana/conf/kibana.yml
-
修改kibana配置
server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://172.31.0.207:9200" ] xpack.monitoring.ui.container.elasticsearch.enabled: true i18n.locale: zh-CN
設置 i18n.locale: zh-CN
屬性後會對kibana進行漢化,這樣便於操做,主要仍是我英語不太好~
-
中止臨時容器
docker stop f21f0f9e0259
docker-compose
通過上面的準備,咱們能夠編寫 docker-compose
文件,方便咱們對容器進行編排,一鍵啓動。有了以前的基礎,咱們很容易編寫出對應的yml文件,編寫後的內容以下:
version: "3" services: elasticsearch: image: docker.io/elasticsearch:7.5.1 container_name: elasticsearch environment: - "ES_JAVA_OPTS=-Xms4096m -Xmx4096m -Xmn1300m" volumes: - /app/elk/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /app/elk/elasticsearch/data:/usr/share/elasticsearch/data:rw - /app/elk/elasticsearch/logs:/usr/share/elasticsearch/logs:rw ports: - "9200:9200" - "9300:9300" restart: always kibana: image: docker.io/kibana:7.5.1 container_name: kibana volumes: - /app/elk/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml ports: - "5601:5601" depends_on: - elasticsearch restart: always logstash: image: logstash:7.5.1 container_name: logstash command: logstash -f /usr/share/logstash/config/logstash.conf volumes: - /app/elk/logstash/config:/usr/share/logstash/config - /app/elk/logstash/data:/usr/share/logstash/data ports: - "9600:9600" - "5044:5044" depends_on: - elasticsearch restart: always
將docker-compose文件上傳至服務器,啓動docker服務
docker-compose -f elk.yml up -d
啓動完成後訪問kibana地址 http://172.31.0.207:5601/
驗證是否正常訪問
安全認證
咱們剛剛部署的elk環境是不須要密碼就能夠登陸kibana的,這樣誰均可以訪問並且能夠更改數據。因此咱們須要給kibana加個密碼,必需要登陸才能夠進行操做。
主要是利用elasticsearch自帶的xpack做爲權限驗證功能。操做步驟以下:
-
修改es外部配置文件
/app/elk/elasticsearch/conf/elasticsearch.yml
,開啓權限驗證
xpack.security.enabled: true
-
重啓
elasticsearch
服務
docker-compose -f elk.yml restart elasticsearch
-
進入es容器,爲內置帳號設置密碼
docker exec -it elasticsearch /bin/bash cd /usr/share/elasticsearch/bin ./elasticsearch-setup-passwords interactive
-
修改kibana配置文件
/app/elk/kibana/conf/kibana.yml
elasticsearch.username: "elastic" elasticsearch.password: "xxxxxx"
-
重啓kibana
docker-compose -f elk.yml restart kibana
-
從新訪問kibana,並使用上面設置的elastic帳號進行登陸
-
至此咱們順利給ELK加上了安全認證,能夠放心在生產環境部署使用了!
若是本文對你有幫助,
別忘記來個三連:
點贊,轉發,評論
本文分享自微信公衆號 - JAVA日知錄(javadaily)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。