以下安装都是以 ~/ 目录作为安装根目录。
ElasticSearch
下载镜像:
1
|
$ sudo docker pull elasticsearch:5.5.0 |
运行ElasticSearch容器:
1
2
3
|
$ sudo docker run -it -d -p 9200:9200 -p 9300:9300 \ - v ~ /elasticsearch/data : /usr/share/elasticsearch/data \ --name myes elasticsearch:5.5.0 |
特别注意的是如果使用v6以上版本会出现jdk的错误,我们查看日志
1
|
$ docker logs -f myes |
查看日志:
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
网上找到大概的意思是:
jdk9对elasticSearch不太友好(版本太新),必须使用JDK8,本人使用的是JDK8u152(jdk-8u152-windows-x64.exe)。如果使用JDK9,使用elasticSearch-rtf(v5.1.1),会出现下面的错误,请特别注意,elasticSearch6.0的版本则必须使用JDK9,否则官网下载的msi不能安装成功,原因还没有去仔细检查。
所以也是一个很坑爹的问题,所以我干脆直接就安装v5.5.0稳定版本吧。
Logstash
下载镜像:
1
|
$ sudo docker pull logstash:5.5.0 |
新建配置文件:
1
2
|
$ mkdir ~ /logstash/conf .d && cd logstash /conf .d $ vim logstash.conf |
logstash.conf:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
input { beats { port => 5044 # 此端口需要与 filebeat.yml 中的端口相同 } file { path => "/data/logs" # start_position => "beginning" } } filter { #grok { # match => { "message" => "%{COMBINEDAPACHELOG}" } #} #date { # match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] #} grok { patterns_dir => "/etc/logstash/conf.d/patterns" match => { "message" => "%{TIMESTAMP_ISO8601:time}\S%{MYSELF:msgid}%{MYSELF:method}%{MYDATA:data}%{MYSELF:UserInfo}\S%{LOGLEVEL:level}\S%{MYSELF:thread}%{MYSELF:application}%{MYSELF:ip}" } } date { #match => [ "time", "YYYY-MM-dd HH:mm:ss,SSS" ] match => [ "time" , "ISO8601" ] target => "@timestamp" timezone => "Asia/Phnom_Penh" } } output { stdout { codec => rubydebug } elasticsearch { action => "index" hosts => [ "172.17.10.114:9200" ] index => "%{[fields][indexname]}-%{+YYYY.MM.dd}" } } |
运行Logstash容器:
1
2
3
4
5
|
$ sudo docker run -it -d -p 5044:5044 \ - v ~ /logstash/conf .d: /etc/logstash/conf .d \ - v ~ /logstash/data/logs : /data/logs \ --name logstash logstash:5.5.0 \ -f /etc/logstash/conf .d /logstash .conf |
Kibana
下载镜像:
1
|
$ sudo docker pull kibana:5.5.0 |
新建配置文件:
1
2
|
$ mkdir ~ /kibana && cd ~ /kibana $ vim kibana.yml |
kibana.yml:
1
2
3
|
server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://172.17.10.114:9200" |
运行Kibana容器:
1
2
3
|
$ sudo docker run -it -d -p 5601:5601 \ - v ~ /kibana : /etc/kibana \ --name kibana kibana:5.5.0 |
Filebeat
Filebeat需要部署在需要收集日志的服务器上。
下载镜像:
1
|
$ sudo docker pull docker.elastic.co /beats/filebeat :5.5.0 |
新建配置文件:
1
2
3
4
5
6
7
8
|
filebeat.prospectors: - type : log paths: - ~ /filebeat/logs # 指定需要收集的日志文件的路径 fields: indexname: xxx # 这里填写项目名称,对应index => "%{[fields][indexname]}-%{+YYYY.MM.dd}" output.logstash: hosts: [ "172.17.10.114:5044" ] |
运行Filebeat容器:
1
2
3
|
$ sudo docker run -it -d \ - v ~ /filebeat/filebeat .yml: /usr/share/filebeat/filebeat .yml \ --name filebeat docker.elastic.co /beats/filebeat :5.5.0 |
附上一张ELK结构流程图:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://objcoding.com/2019/01/23/elk/