Docker 搭建 ELK 开发环境(单机版)

前言

本文主要介绍如何在本地使用 Docker 搭建 ELK 开发环境(单机版),其中包括 Elasticsearch、Logstash、Kibana 的安装。

版本说明

软件版本说明
CentOS7.9 宿主机操作系统
Docker24.0.7
Elasticsearch7.17.4
Logstash7.17.4
Kibana7.17.4

Docker 安装

在本节中,将介绍 CentOS 7 如何安装 Docker。若使用的 Linux 系统是其他发行版,建议网上搜索对应的安装教程,这里不再累述。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 卸载旧版本的Docker
# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

# 添加YUM仓库
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker
# yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 开机启动Docker
# systemctl enable docker

# 启动Docker
# systemctl start docker

# 查看运行状态
# systemctl status docker

创建配置文件

配置目录的整体结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/data
├── elasticsearch
│   ├── config
│   │   └── elasticsearch.yml
│   ├── data
│   └── plugins
├── kibana
│   └── config
│   └── kibana.yml
└── logstash
├── config
│   └── logstash.yml
└── pipeline
└── logstash.conf

Kibana 配置文件

在宿主机内创建 Kibana 的配置目录、配置文件。

1
2
3
4
5
6
7
8
9
10
11
# 创建配置目录
mkdir -p /data/kibana/config/

# 创建配置文件
touch /data/kibana/config/kibana.yml

# 文件授权
chmod -R 777 /data/kibana/

# 编辑配置文件,写入以下内容
vim /data/kibana/config/kibana.yml
1
2
3
4
server.host: '0.0.0.0'
server.shutdownTimeout: '5s'
elasticsearch.hosts: ['http://elasticsearch:9200']
monitoring.ui.container.elasticsearch.enabled: true

提示

  • server.host: 设置成 0.0.0.0 表示允许所有机器访问
  • elasticsearch.hosts: 连接 Elasticsearch 容器的地址,一般使用 http://容器名称:port
  • monitoring.ui.container.elasticsearch.enabled: 是否开启 Kibana 对 Elasticsearch 容器的监控

Logstash 配置文件

在宿主机内创建 Logstash 的配置目录、配置文件。

1
2
3
4
5
6
7
8
9
10
# 创建配置目录
mkdir -p /data/logstash/config/
mkdir -p /data/logstash/pipeline/

# 创建配置文件
touch /data/logstash/config/logstash.yml
touch /data/logstash/pipeline/logstash.conf

# 文件授权
chmod -R 777 /data/logstash/

编辑 /data/logstash/config/logstash.yml 配置文件,写入以下内容:

1
2
3
http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]

编辑 /data/logstash/pipeline/logstash.conf 配置文件,写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 5049
codec => json_lines
}
}

output {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "logstash-%{+YYYY.MM.dd}"
}
}

提示

  • xpack.monitoring.enabled:是否开启 Logstash 对 Elasticsearch 容器的监控
  • http://elasticsearch:9200:连接 Elasticsearch 容器的地址,一般使用 http://容器名称:port
  • /data/logstash/config/logstash.yml:Logstash 的基础配置文件
  • /data/logstash/pipeline/logstash.conf:Logstash 的管道配置文件,一般需要根据不同的业务需求进行自定义配置,例如结合 FileBeat 一起使用

Elasticsearch 配置文件

在宿主机内创建 Elasticsearch 的插件目录、数据目录、配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 创建插件目录
mkdir -p /data/elasticsearch/plugins/

# 创建数据目录
mkdir -p /data/elasticsearch/data/

# 创建配置目录
mkdir -p /data/elasticsearch/config/

# 创建配置文件
touch /data/elasticsearch/config/elasticsearch.yml

# 文件授权
chmod -R 777 /data/elasticsearch/

# 编辑配置文件,写入以下内容
vim /data/elasticsearch/config/elasticsearch.yml
1
http.host: 0.0.0.0

Docker Compose 配置文件

在宿主机的任意目录下创建 docker-compose.yml 配置文件,用于 Docker Compose 管理容器,可以根据实际需求适当更改 Elasticsearch、Logstash、Kibana 镜像的版本号。

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
version: '3.9'

services:
elasticsearch:
image: elasticsearch:7.17.4
container_name: elasticsearch
restart: always
ports:
- "9200:9200"
- "9300:9300"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
environment:
- TZ=Asia/Shanghai
- node.name=es-node
- cluster.name=es-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx1024m"
volumes:
- /data/elasticsearch/data:/usr/share/elasticsearch/data
- /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins
- /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
networks:
- docker-elk

logstash:
image: logstash:7.17.4
container_name: logstash
restart: always
ports:
- "5044:5044"
- "5049:5049"
- "9600:9600"
environment:
- TZ=Asia/Shanghai
- "LS_JAVA_OPTS=-Xms512m -Xmx1024m"
volumes:
- /data/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- /data/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
networks:
- docker-elk
depends_on:
- elasticsearch

kibana:
image: kibana:7.17.4
container_name: kibana
restart: always
ports:
- "5601:5601"
environment:
- TZ=Asia/Shanghai
- I18N_LOCALE=zh-CN
- ELASTICSEARCH_URL=http://elasticsearch:9200
volumes:
- /data/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
networks:
- docker-elk
depends_on:
- elasticsearch

networks:
docker-elk:
driver: bridge

提示

  • LS_JAVA_OPTS:设置 Logstash 的堆内存大小
  • ES_JAVA_OPTS:设置 Elasticsearch 的堆内存大小,官方不建议在生产中使用该参数
  • TZ=Asia/Shanghai:设置 Docker 容器的时区为上海
  • I18N_LOCALE=zh-CN:设置 Kibana 默认的语言为中文
  • ELASTICSEARCH_URL:Kibana 连接 Elasticsearch 容器的地址,一般使用 http://容器名称:port
  • discovery.type=single-node:将 Elasticsearch 的集群发现模式配置为单节点模式
  • bootstrap.memory_lock=true:是否锁住内存,避免 Elasticsearch 使用交换分区(Swap)带来的性能损失,默认值是 false

启动 Docker 容器

1
2
3
4
5
# 创建并启动容器
docker compose up -d

# 查看容器的运行状态
docker compose ps -a

测试 Docker 容器

若可以使用以下地址访问对应的应用,则说明对应的 Docker 容器正常运行。值得一提的是,192.168.1.130 是宿主机的 IP 地址,请自行更改为您宿主机的 IP。

应用访问地址说明
Logstash192.168.1.130:5044
Elasticsearch192.168.1.130:9200
Kibanahttp://192.168.1.130:5601浏览器可以直接访问

参考资料

官方安装教程

Docker Compose 配置编写

Docker Compose 安装 ELK