记录一次docker安装ElasticSeach+Logstash+kibana的过程以及可能会遇到的问题

对于使用docker搭建elk还是比较简单的,这里记录了一次我自己搭建的过程以及途中踩过的一些坑,为了避免一些不必要的问题,需要特别注意版本的选择一定要一致,我这里选择的是7.10.1

一、安装elasticsearch

1、拉取es官方镜像:

docker pull elasticsearch:7.10.1

2、创建用户自定义网络:

docker network create esnetwork

3、运行es容器

docker run --name elasticsearch --net esnetwork -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -e "discovery.type=single-node" -d elasticsearch:7.10.1

参数详解:
-p:表示端口映射,冒号左边是宿主机端口,右边是容器端口,端口映射后访问宿主机这个端口就相当于访问容器的这个端口。
-v:表示文件/目录共享,也叫数据卷。冒号左边是主机的目录,右边是容器目录,通过这种共享在容器启动后容器内的目录下的内容都会共享到宿主机的目录下,这样我们后续修改配置文件直接在主机目录下修改就行了,修改完成会同步到容器中,就不需要再进入容器了。
–name:表示为容器起个名字,在容器比较多的时候方便区分

--net 设置es的自定义网络

-e 设置启动参数

启动后通过docker ps 查看容器是否启动成功

启动成功后浏览器使用ip+9200即可访问

记录一次docker安装ElasticSeach+Logstash+kibana的过程以及可能会遇到的问题_第1张图片

如果启动失败的需要使用doker logs -f elasticsearch 查看es启动失败的日志,以下是可能启动失败的原因:

1、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决方法:

vi /etc/sysctl.conf

sysctl -p

修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144

[1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; 
at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] 
must be configured

以上错误是由于es不支持默认的配置,解决方法

在启动容器名中添加启动参数 -e "discovery.type=single-node"(上面的启动命令中已添加了,直接使用即可)

二、安装kibana

1、拉取官方镜像:

docker pull docker.elastic.co/kibana/kibana:7.10.1

2、运行es容器

docker run --name kibana --net esnetwork -e ELASTICSEARCH_URL=http://172.18.0.2:9200 -p 5601:5601 -d kibana:7.10.1

注意ELASTICSEARCH_URL一定要使用docker内部的容器IP

启动成功后浏览器访问 ip+5601即可访问

记录一次docker安装ElasticSeach+Logstash+kibana的过程以及可能会遇到的问题_第2张图片

三、安装Logstash

1、拉取官方镜像:

docker pull logstash:7.10.1

2、在本机目录下创建挂载文件,映射的是docker容器内部logstash的文件

/usr/logstash/pipeline/logstash.conf

在logstash.conf中加入如下配置

input {

tcp {

mode => "server" host => "0.0.0.0"

port => 5044 codec => json_lines

}

}

output {

elasticsearch {

hosts => "127.0.0.1:9200"

index => "%{[spring.application.name]}-%{+YYYY.MM.dd}"

}

}

/usr/logstash/config/logstash.yml

在logstash.yml中加入如下配置

http.host: "0.0.0.0"

xpack.monitoring.elasticsearch.hosts: [ "http://127.0.0.1:9200" ]

ip地址根据自己的es来实际修改,端口9200不变

3、创建容器并启动

docker run -d --name logstash -m 1000M --net esnetwork --restart=always -p 5044:5044 -p 9600:9600 --privileged=true -v /usr/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /usr/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:7.10.1

启动前需要先启动es,否则logstash会连不上

启动可能会出现docker内存不足的问题,需要重写docker的运行内存,错误信息如下

OracleWebCenterSites: library initialization failed - unable to allocate file descriptor table - out of memory/bin/sh: line 1: 41 Aborted #2486
修改以下文件并重启即可解决

/usr/lib/systemd/system/docker.service

添加或修改以下内容:

ExecStart=/usr/bin/dockerd --default-ulimit nofile=65536:65536 -H fd:// --containerd=/run/containerd/containerd.sock

刷新修改后的配置

sudo systemctl daemon-reload

重新启动docker

sudo systemctl restart docker

以上就是本次docker安装elk的全过程,基本上使用上面的命令安装完后都能成功运行,如有不足的地方欢迎各位大佬补充~~

你可能感兴趣的:(docker,运维,java,elasticsearch,elk,1024程序员节)