docker-compose搭建ELK环境

Docker-compose搭建ELK环境

环境信息

  • CentOS 7.4 系统
  • Docker version 18.06.1-ce
  • docker-compose version 1.22.0
  • 部署单节点 ELK

参数配置

在宿主机执行

1
2
3
4
5
6
# 设置内核参数
sysctl -w vm.max_map_count=262144
# 生效设置
sysctl -p
# 重启 docker,让内核参数对docker服务生效
systemctl restart docker
  • 原因分析:

vm.max_map_count参数,是允许一个进程在VMAs拥有最大数量(VMA:虚拟内存地址, 一个连续的虚拟地址空间),当进程占用内存超过时, 直接OOM。

elasticsearch占用内存较高。官方要求max_map_count需要配置到最小262144。

max_map_count配置文件写在系统的/proc/sys/vm中

通过docker inspect命令, 可查看docker使用宿主机的/proc/sys作为只读路径之一

1
2
3
4
5
6
7
"ReadonlyPaths": [
"/proc/bus",
"/proc/fs",
"/proc/irq",
"/proc/sys",
"/proc/sysrq-trigger"
]

说明镜像使用宿主机的max_map_count参数。因此直接修改宿主机的max_map_count参数即可

docker-compose文件

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
version: "3"
services:
elasticsearch:
image: "elasticsearch:6.7.1"
container_name: "elasticsearch"
restart: "always"
volumes:
- "elasticsearch_data:/usr/share/elasticsearch"
#vim /etc/sysctl.conf
#vm.max_map_count=262144
#sysctl -w vm.max_map_count=262144
#sysctl -p
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
networks:
- "elk"
ports:
- "9200:9200"
- "9300:9300"

kibana:
image: "kibana:6.7.1"
container_name: "kibana"
restart: "always"
volumes:
- "kibana:/usr/share/kibana"
networks:
- "elk"
ports:
- "5601:5601"


# logstash:
# image: "logstash:6.7.1"
# container_name: "logstash"

这里我暂时没有用到logstash,其中的版本可以根据情况自行升级,但是需要注意版本一致或兼容,具体请elastic参考官网

  • 启动:docker-compose up -d
  • 查看日志 dcoker-compose logs -f
  • 修改配置后重新构建 docker-compose up -d --build
  • 停止服务 docker-compose stop kibana
  • 删除所有docker-compose.yml中描述的服务 docker-compose down

修改elasticsearch.yml

1
2
3
4
cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"

其中后两行是允许跨域访问

  • 重新构建 dockr-compose up -d --build

  • 访问 http://{host}:9200/

  • 访问head插件

这里我使用的是chrom中的head插件,也可以自行安装head插件 github

  • 访问kibana

之后就可以在kibana中的devtools中进行es的查询了。

参考