搭建ELK Stack
使用logstash收集docker容器産生的日志,并對日志過濾、處理等,最後上傳到elasticsearch”存儲庫“中,kibana進行可視化管理,讓使用者在Elasticsearch中使用圖形和圖表對資料進行可視化。
在安裝ELK之前,首先確定主機安裝java 1.8.0以上版本(java -version),如果沒有的話,通過apt install進行安裝。如果隻想在docker中運作Elk,跳過本地安裝elk的方法,請直接下拉至Run ElkStack on Docker。
Logstash
# download and install the public signing key
wget -qO - https://artifacts.elastic.co/GPE-KEY-elasticsearch | sudo apt-key add -
# install the apt-transport-https package on debian
sudo apt-get install apt-transport-https
# save the repository definition to /etc/apt/sources.list.d/elastic-7.x.list
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install logstash
##### 配置logstash.conf
在/etc/logstash/conf.d/目錄下,添加配置檔案
此處超連結為官方文檔用以參考
Configuring Logstash
本文檔中的配置檔案僅供參考,請使用ctrl+F尋找logstash-simple.conf
注:在filter中使用正則,注意需要雙引号時,将雙引号用單引号包起來( ‘ ” ’ )。
Elasticsearch
# download and install the public signing key:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch
Kibana
sudo apt-get update && sudo apt-get install kibana
Run ElkStack on Docker
首先假設電腦上已經有docker,且已經安裝了docker-compose,如果沒有安裝docker-compose,參考一下指令。
# Linux 64直接下載下傳編譯好的二進制檔案
sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 給二進制檔案可執行權限
sudo chmod +x /usr/local/bin/docker-compose
# 補全指令
curl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
我們使用docker-compose來代替指令行啟動鏡像的方式(docker run --…)。在這裡我們使用docker-compose分别啟動logstash、elasticsearch、kibana三個鏡像,并對其運作條件進行配置。
拉取鏡像
docker pull docker.elastic.co/logstash/logstash:7.4.2
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.4.2
docker pull docker.elastic.co/kibana/kibana:7.4.2
這是一個漫長的過程,由于elastic鏡像源總是連接配接不穩定。我找到了網上推薦的鏡像庫,供參考(能供官方的還是使用官方提供的鏡像)
# vi /etc/docker/daemon.json 添加以下資訊
{
...
"registry-mirrors": [
"https://dockerhub.azk8s.cn", # Azure中國鏡像
"https://reg-mirror.qiniu.com", # 七牛雲加速器
"https://regisrty.docker-cn.com", # docker國内官方源
"http://hub-mirror.c.162.com", # 網易鏡像
"https://docker.mirrors.ustc.edu.cn", # 中科大
"https://cr.console.aliyun.com/" # 阿裡鏡像
]
...
}
配置docker-compose
直接上文檔:
version: '3.5'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
container_name: es01
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- data01:/usr/share/elasticsearch/data
#- certs: $CERTS_DIR
ports:
- 9200:9200
networks:
- elastic
kib01:
image: docker.elastic.co/kibana/kibana:7.4.2
container_name: kib01
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://elasticsearch:9200
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
depends_on:
- elasticsearch
networks:
- elastic
logstash:
image: docker.elastic.co/logstash/logstash:7.4.2
container_name: logt
ports:
- 127.0.0.1:12201:12201/udp
environment:
ES_URL_LOGSTASH: http://elasticsearch:9200
# 映射logstash的配置檔案
volumes:
- ./elk_stack/logstash/conf/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./elk_stack/logstash/conf/logstash-simple.conf:/usr/share/logstash/pipeline/logstash.conf
depends_on:
- elasticsearch
networks:
- elastic
volumes:
data01:
driver: local
networks:
elastic:
name: elastic
driver: bridge
注:由于docker-compose高版本将不支援links,故使用networks将ELK設定為統一網段,但并不能代替links所有功能,有需要請參考官方文檔
logstash.yml
# 0.0.0.0為官網配置
# http.host: 0.0.0.0
http.host: 127.0.0.1
xpack.monitoring.elasticsearch.hosts:
- http://elasticsearch:9200
xpack.monitoring.enabled: true
logstash-simple.conf
input {
gelf{
use_udp => true
port_udp => 12201
id => "my_plugin_id"
}
}
filter { } # 因事而異
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => "${ES_URL_LOGSTASH}" # 若logstash做單獨使用,而非docker-compose方式,請按該參數所對應的hosts修改
index => "logstash-%{+yyyy.MM.dd}"
}
}
注:将logstash-simple.conf的input,docker networks,日志發送方發送時的hosts保持一緻。
使用
curl http://localhost:9200
檢測elasticsearch是否運作成功
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-msoiFDpx-1576634623194)(C:\Users\liuhq\AppData\Roaming\Typora\typora-user-images\image-20191203181503394.png)]
運作docker應用發送日志
此時進入正在運作的容器logt可以看到stdout的輸出
docker attach logt
使用Kibana檢視
–log-driver gelf --log-opt gelf-address=udp://localhost:12201 --network=elastic --name=test001
此時進入正在運作的容器logt可以看到stdout的輸出
```bash
docker attach logt
使用Kibana檢視
打開Elk所在主機的浏覽器,輸入
localhost:5601
點選右下角Management按鈕,在Kibana下點選Index Patterns,Creat index pattern,如果Kibana檢測到已經存在Index會自動列出,此時輸入與之對應的Index-name-建立Index(在本文檔中使用為[email protected])。具體參考官方文檔 (建立索引) 和 另一個 官方文檔 (檢索)。