使用Docker搭建ELK(Elasticsearch、Logstash、Kibana)环境的步骤如下¹²:
-
安装Docker:首先,你需要在你的机器上安装Docker。你可以参考Docker官方文档来进行安装。
-
拉取ELK镜像:然后,你需要从Docker Hub上拉取Elasticsearch、Logstash、Kibana和Nginx的Docker镜像。你可以使用以下命令来拉取这些镜像:
docker pull elasticsearch:7.12.1
docker pull logstash:7.12.1
docker pull kibana:7.12.1
- 创建网络:为了使得容器间可以互相通信,你需要创建一个Docker网络。你可以使用以下命令来创建一个名为
elk
的网络:
docker network create elk
- 运行容器:最后,你需要运行Elasticsearch、Logstash、Kibana和Nginx的容器,并将它们连接到刚刚创建的网络。你可以参考以下命令来运行这些容器:
docker run -d --name=elasticsearch --net=elk -p 9200:9200 -p 9300:9300 elasticsearch:7.12.1
docker run -d --name=logstash --net=elk -p 5000:5000 logstash:7.12.1
docker run -d --name=kibana --net=elk -p 5601:5601 kibana:7.12.1
错误处理
bootstrap check failure [1] of [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
bootstrap check failure [2] of [2]: 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
错误一解决办法:
sudo sysctl -w vm.max_map_count=262144
错误而解决办法:
docker run -d --name=elasticsearch --net=elk -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.12.1
附录
为什么需要修改max_map_count参数
在Elasticsearch中,vm.max_map_count
是一个重要的内核参数,它控制着一个进程能够拥有的最大内存映射区域数量³。
Elasticsearch使用了Lucene进行搜索和分析,每个索引都会被映射到内存中的一个或多个Lucene索引段³。如果vm.max_map_count
的值太低,Elasticsearch将无法创建足够的内存映射区域,从而可能导致搜索性能下降、OOM(内存溢出)错误等问题³。
因此,为了确保Elasticsearch可以正常工作,建议将vm.max_map_count
的值设置为至少262144³。这个值可以通过以下命令进行设置¹:
sysctl -w vm.max_map_count=262144
262144。这个值对应的二进制表示是1000000000000000000(2的18次方)
要永久地设置这个值,你可以在/etc/sysctl.conf
文件中更新vm.max_map_count
设置¹。重启后,可以通过运行sysctl vm.max_map_count
来验证¹。
内存映射的具体含义是什么?技术原理是什么?
内存映射是一种将磁盘文件或其他设备映射到进程地址空间的技术。在内存映射中,操作系统会将磁盘文件或设备的数据缓存在内存中,并将这些数据在进程的地址空间中分配一段连续的虚拟地址,使得进程可以像访问内存一样访问这些数据。这种访问方式比传统的文件读写方式更加高效,因为它避免了频繁的磁盘操作和数据拷贝。同时,内存映射还可以使得多个进程共享同一份数据,从而实现更高效的进程间通信。
https://cloud.tencent.com/developer/techpedia/1997