docker安装ELK

docker镜像下载


docker pull docker.elastic.co/logstash/logstash:7.5.1
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1
docker pull docker.elastic.co/kibana/kibana:7.5.1 

创建docker子网络

docker create network my-net

启动

 

docker run -p 5044:5044 --name logstash --network my-net -d docker.elastic.co/logstash/logstash:7.5.1

docker run -d -p 9100:9100  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name elasticsearch --network my-net docker.elastic.co/elasticsearch/elasticsearch:7.5.1

docker run -p 5601:5601 --name kibana --network my-net -d docker.elastic.co/kibana/kibana:7.5.1

说明:

--network my-net  指定刚才创建的子网络

-d 以daemon形式启动,这种情况不会直接在控制台输出日志

-p 将端口映射到docker容器外的宿主机

--name 给容器命名,在子网中该名称可以理解为对应的容器访问域名

修改logstash配置文件,输出到es中

docker exec -it logstash bash

cd  /usr/share/logstash/pipeline/

vi logstash.conf

加入红色部分

input {

  beats {

    port => 5044

  }

}

 

output {

  elasticsearch {

    hosts => ["elasticsearch:9200"]

  }

  stdout {

    codec => rubydebug

  }

}

重启logstash

docker restart logstash

 

在需要收集日志的应用服务器安装filebeat

docker pull docker.elastic.co/beats/filebeat:7.5.1

docker run --name filebeat --network my-net -v /Users/lixiaoran/Documents/filebeat.yml:/usr/share/filebeat/filebeat.yml  -v /Users/lixiaoran/Library/Caches/IntelliJIdea2019.3/tomcat/Unnamed_yzq_2/logs/:/usr/share/filebeat/outlog/  docker.elastic.co/beats/filebeat:7.5.1

说明:

-v 将宿主机目录映射到docker容器中,/usr/share/filebeat/outlog/ 日志目录整个目录映射,filebeat.yml配置文件单个文件映射

修改配置

 

红色部分是本地的logs目录,橙色部分是logstash接收日志的地址,此处由于在同一个自网络my-net,容器名就是子网络的域名。

filebeat.inputs:

 

# Each - is an input. Most options can be set at the input level, so

# you can use different inputs for various configurations.

# Below are the input specific configurations.

 

- type: log

 

  # Change to true to enable this input configuration.

  enabled: true

 

  # Paths that should be crawled and fetched. Glob based paths.

  paths:

    - /usr/share/filebeat/outlog/*

filebeat.config.modules:

  # Glob pattern for configuration loading

  path: ${path.config}/modules.d/*.yml

 

  # Set to true to enable config reloading

  reload.enabled: true

output.logstash:

  # The Logstash hosts

  hosts: ["logstash:5044"]

 

重启filebeat

docker restart filebeat

验证

在本地看kibana,http://localhost:5601/

成功后,刷新会出现例如:logstash-2020.01.06-000001

搜索日志

坑的总结

1.logstash 7.5.1安装过程中,配置文件目录/usr/share/logstash/pipeline/,网上很多文章写的是/usr/share/logstash/config,其实在config目录配置是无效的。

2.docker的默认全局内存上限2GB,在安装了4个容器(es,logstash,kibana,filebeat)后,es的cpu占用极高,其实是内存不足导致的,提高到5GB问题解决。下图可以看到,es占用了1.3GB的内存空间,

es一旦内存不足,就会引发重复的GC过程,导致cpu也快速升高。

3.上图可以看到filebeat的内存占用非常低,这就是为什么用filebeat在应用服务器例如tomcat,nginx等机器上安装,收集日志,再发送到远程的kafka或者logstash上。

posted @ 2020-03-11 11:02  然然1907  阅读(617)  评论(0编辑  收藏  举报