參考文檔:https://www.elastic.co/guide/en/elastic-stack-get-started/current/get-started-docker.html
1. docker安裝elasticsearch
1.1 docker命令下載elasticsearch image
docker pull registry.docker-cn.com/library/elasticsearch:latest
1.2 從命令行,docker命令啟動elasticsearch
docker run -d --name es-zulan -p 9400:9200 -p 9500:9300 -v /yourpath/ELK/elasticsearch/data:/usr/share/elasticsearch/data -e "discovery.type=single-node" registry.docker-cn.com/library/elasticsearch:latest
1.3 訪問 http://10.50.40.226:9400/ ,出現以下內容則證明elasticsearch啟動成功
10.50.180.226是docker所在的Linux server的IP。

2. docker安裝kibana
2.1 下載kibana image
docker pull docker.elastic.co/kibana/kibana:5.6.14
2.2 docker啟動kibana
docker run -d --name kb-zulan -p 9600:5601 --link es-zulan:registry.docker-cn.com/library/elasticsearch -e ELASTICSEARCH_URL=http://10.50.40.226:9400 docker.elastic.co/kibana/kibana:5.6.14
2.3 修改kibana的config
以交互方式進入已啟動的kibana container:
docker exec -it kb-zulan /bin/sh
修改config文件,如圖注釋掉默認的針對elasticsearch的配置:
vi config/kibana.yml

重啟kibana container:
docker restart kb-zulan
2.4 瀏覽器訪問http://10.50.40.226:9600
出現一個登陸頁面,但是無法輸入。
造成這個現象的原因是docker啟動的elasticsearch image沒有x-pack,而用的kibana image中有x-pack。
有兩種解決方法:
(1)將kibana里面的x-pack卸載掉
使用到的docker指令:
docker exec -it kb-zulan /bin/sh
cd bin
./kibana-plugin remove x-pack
Exit
docker restart kb-zulan
(2)在elasticsearch中安裝上x-pack
使用到的docker指令:
docker exec -it es-zulan /bin/bash
cd bin
./elasticsearch-plugin install x-pack
Exit
docker restart es-zulan
x-pack默認有一個30天的試用期,試用到期后,就需要購買license。
Note:重啟kibana或elasticsearch后,需要等待一段時間。
2.5 進入kibana后,首先需要新建一個index pattern。
但是,此時會彈出error提示“Unable to fetch mapping. Do you have indices matching the pattern?”。
這需要安裝logstash,向elasticsearch寫data。
3. docker安裝logstash
3.1 docker下載logstash image
docker pull docker.elastic.co/logstash/logstash:5.6.14
3.2 docker啟動logstash
docker run -d --name ls-zulan -p 9700:5044 -p 9800:9600 -v /yourpath/ELK/logstash/eventslogfiles:/usr/share/logstash/eventslogfiles docker.elastic.co/logstash/logstash:5.6.14
log文件放在/yourpath/ELK/logstash/eventslogfiles下。
3.3 瀏覽器訪問http://10.50.40.226:9800 ,出現以下內容說明logstash啟動成功

3.4 修改logstash的config
以交互方式進入logstash container:
docker exec -it ls-zulan /bin/sh
修改config/logstash.yml和pipeline/logstash.conf:

pipeline/logstash.conf的修改如下:
input {
file{
path => "/usr/share/logstash/eventslogfiles/*/*/*"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{YEAR:ma_year}-%{WORD:ma_month}-%{WORD:ma_day},%{TIME:ma_time},%{WORD:ma_label} ,\[%{WORD:ma_title}\],%{WORD:ma_event}, ip: %{IP:ma_ip},%{WORD:ma_basePcn},%{WORD:ma_baseSN},%{WORD:ma_psdPcn},%{WORD:ma_psdSN},%{WORD:ma_bpn},\"%{DATA:ma_info}\"" }
add_field => { "full_time" => "%{ma_year}%{ma_month}%{ma_day} %{ma_time}" }
}
date{
match => ["full_time","yyyyMMdd HH:mm:ss,SSS"]
}
}
output {
elasticsearch {
hosts => ["10.50.40.226:9400"]
index => "logstash-ls-%{+YYYY-MM-DD}"
user => elastic
password=> changeme
}
stdout { codec => rubydebug }
}
docker restart ls-zulan
Note:logstash中index是不能包含大寫字母的,除了Logstash。
4. 瀏覽器訪問kibana http://10.50.40.226:9600
(1) 在kibana中,創建同logstash的index對應的index pattern。
(2)在Linux server上,將log文件復制到logstash掛在的文件夾/yourpath/ELK/logstash/eventslogfiles。logstash會自動將log data寫入elasticsearch。
(3)在kibana中,在Management中刷新Index Patterns的field list,它會parse在pipeline/logstash.conf中配置的字段。
(4)在kibana中,點擊Discover,查看數據。

