在分佈式系統中,由於節點服務會部署多臺,一旦出現線上問題需要通過日誌分析定位問題就需要登錄服務器一臺一臺進行日誌檢索,非常不便利,這時候就需要用到EFK日誌收集工具。
在應用服務端部署Filebeat,將我們打印到日誌文件中的日誌發送到Logstash中,在經過Logstash的解析格式化後將日誌發送到ElasticSearch中,最後通過Kibana展現出來。EFK基礎版的架構如下:
本文主要是使用docker和docker-Compose部署ELK的基礎環境,選擇7.5.1作爲EFK組件版本。
當然瞭如果大家對docker
,docker-compose
不是很熟悉的話可以翻看我之前爲大家準備的兩篇文章:
實在不想使用docker部署的話也可以下載對應的安裝包然後手動部署,配置方式基本一樣。
安裝配置
elasticsearch
安裝elasticsearch之前先配置如下的系統變量
-
修改
/etc/sysctl.conf
,在最後追加如下配置
vm.max_map_count = 655360
-
修改
/etc/security/limits.conf
,增加如下配置
* 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加上了安全認證,可以放心在生產環境部署使用了!
好了,各位朋友們,本期的內容到此就全部結束啦,下一期我們會將業務系統的日誌接入ELK並對日誌進行解析格式化,歡迎持續關注。
如果覺得這篇文章對你有所幫助的話請掃描下面二維碼加個關注。“轉發” 加 “在看”,養成好習慣!咱們下期再見!