参考文档: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,查看数据。