Docker 中安装 Elasticsearch + Kibana + Filebeat

在 Docker 中安装 Elasticsearch + Kibana + Filebeat

在 CentOS上安装 Docker Engine

先更新一下 yum 软件源的缓存,安装依赖包

1
2
sudo yum update
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加国内下载源

1
sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

安装比较稳定的版本 Docker CE

1
2
sudo yum makecache fast
sudo yum install docker-ce

配置开机启动,并启动 Docker CE :

1
2
sudo systemctl enable docker
sudo systemctl start docker

测试是否正确安装了 Docker Engine:

1
docker run hello-world

建立 docker 组,将当前用户加入 docker 组:

1
2
sudo groupadd docker
sudo usermod -aG docker $USER

再次执行 docker run hello-world 测试是否可以执行。

安装 Docker-Compose

在线安装,下载一个 Docker-Compose

1
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

给文件执行权限

1
sudo chmod +x /usr/local/bin/docker-compose

创建指向 /usr/bin 的链接

1
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

查看版本

1
docker-compose --version

安装 Elasticsearch

在 Docker-hub 中搜索 Elasticsearch 版本

1
docker search Elasticsearch

安装 Elasticsearch 7.2 的版本

1
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.2.0

安装完成后,执行 docker images 或者 docker image ls

1
2
3
4
[root@bogon /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 9 months ago 13.3kB
docker.elastic.co/elasticsearch/elasticsearch 7.2.0 0efa6a3de177 15 months ago 861MB

Docker + Elasticsearch + Kibana + Filebeat 实例

我的 test_docker 文件夹,目录层级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@bogon test_docker]# tree
.
├── docker-compose.yaml
└── filebeat
├── conf
│   └── filebeat.yml
├── data
│   ├── meta.json
│   └── registry
│   └── filebeat
│   ├── data.json
│   └── meta.json
└── logs

6 directories, 5 files

新建一个 docker-compose.yml 文件

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
71
72
73
74
75
version: '2.2'
services:
cerebro:
image: lmenezes/cerebro:0.8.3
container_name: cerebro
ports:
- "9000:9000"
command:
- -Dhosts.0.host=http://elasticsearch:9200
kibana:
image: docker.elastic.co/kibana/kibana:7.1.0
container_name: kibana7
environment:
- I18N_LOCALE=zh-CN
- XPACK_GRAPH_ENABLED=true
- TIMELION_ENABLED=true
- XPACK_MONITORING_COLLECTION_ENABLED="true"
ports:
- "5601:5601"
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
container_name: es7_01
environment:
- cluster.name=zhuyuping
- node.name=es7_01
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- discovery.seed_hosts=es7_01
- cluster.initial_master_nodes=es7_01 #,es7_02
- path.data:/data/elasticsearch
- path.logs:/data/log/elasticsearch
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- es7data1:/usr/share/elasticsearch/data
ports:
- 9200:9200
filebeat:
container_name: filebeat
hostname: filebeat
image: docker.elastic.co/beats/filebeat:7.1.1
restart: always
user: root
links: # 需要链接es,不然存在报错
- es7_01
volumes:
- ./filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml
# 映射到容器中[作为数据源]
- ./filebeat/logs:/usr/share/filebeat/logs
- ./filebeat/data:/usr/share/filebeat/data

volumes:
es7data1:
driver: local
es7data2:
driver: local

#elasticsearch2:
#image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
#container_name: es7_02
#environment:
#- cluster.name=zhuyuping
#- node.name=es7_02
#- bootstrap.memory_lock=true
#- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
#- discovery.seed_hosts=es7_01
#- cluster.initial_master_nodes=es7_01,es7_02
#ulimits:
#memlock:
#soft: -1
#hard: -1
#volumes:
#- es7data2:/usr/share/elasticsearch/data

关于 filebeat.yml 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 日志输入配置
filebeat.inputs:
- type: log
enabled: true
paths:
# 需要收集的日志所在的位置,可使用通配符进行配置
- /var/log/*.log
#- /data/fxqalog/*.txt

output.elasticsearch:
#hosts: ['10.103.131.242:9200']
hosts: ["es7_01:9200"] #定义的es的url,之前名字取为es7_01,需要保持一致,不能使用localhost

#日志输出配置(采用 logstash 收集日志,5044为logstash端口)
#output.logstash:
#hosts: ["10.103.131.242:5044"]
#hosts: ["es7_01:5044"]

启动容器

1
[root@bogon test_docker]# docker-compose up
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
# 一些docker 命令
# 启动、停止容器
docker-compose up
docker-compose down

# 停止容器并且移除数据
docker-compose down -v

docker ps -a # 正在运行的容器
docker container ls # 存在的容器

# 停止、启动、杀死、重启一个容器
$docker stop Name/ID
$docker start Name/ID
$docker kill Name/ID
$docker restart name/ID

# 删除 image (例如删除REPOSITORY为prima/filebeat的image)
$docker images
$docker rmi prima/filebeat

# 删除单个容器
$docker rm Name/ID
# 删除所有容器
$docker rm `docker ps -a -q`

接着通过浏览器查看 Elasticsearch、Kibana 服务
image-20201015170144312

img

配置 Kibana 索引

浏览器中打开 http://10.103.131.242:5601/image-20201015135515263

索引模式 中输入 filebeat 后,下面会有匹配到索引,然后点击下一步,选择 时间筛选字段名称,最后点击创建索引模式
查看现有的索引:http://10.103.131.242:9200/_cat/indices?v

image-20201015135817530

当前 health 状态是 green,如果一开始是 yellow,则需要查看索引的配置信息,修改分片数:目前我只是一台机器,所以设置成0,然后再刷新后就变绿了。

image-20201015141015327


遇到的问题及解决


学习记录

  • Docker容器进入的4种方式

    其中最便捷的一种:

    1
    2
    3
    4
    5
    6
    7
    8
    [root@bogon test_docker]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    a313438333f4 docker.elastic.co/elasticsearch/elasticsearch:7.1.0 "/usr/local/bin/dock…" 4 hours ago Up 41 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp es7_01
    ece44e259317 lmenezes/cerebro:0.8.3 "/opt/cerebro/bin/ce…" 4 hours ago Up 41 minutes 0.0.0.0:9000->9000/tcp cerebro
    d85ff4c04999 docker.elastic.co/beats/filebeat:7.1.1 "/usr/local/bin/dock…" 4 hours ago Up 41 minutes filebeat
    6b9f47643a7a docker.elastic.co/kibana/kibana:7.1.0 "/usr/local/bin/kiba…" 4 hours ago Up 41 minutes 0.0.0.0:5601->5601/tcp kibana7

    [root@bogon test_docker]# docker exec -it a313438333f4 /bin/bash
  • elasticsearch.yml 配置项详解

    1
    2
    3
    4
    5
    6
    7
    8
    bin :脚本文件,包括 ES 启动 & 安装插件等等
    config : elasticsearch.yml(ES 配置文件)、jvm.options(JVM 配置文件)、日志配置文件等等
    JDK : 内置的 JDK,JAVA_VERSION=“12.0.1“
    lib : 类库
    logs : 日志文件
    modules : ES 所有模块,包括 X-pack 等
    plugins : ES 已经安装的插件。默认没有插件
    data : ES 启动的时候,会有该目录,用来存储文档数据。该目录可以设置

参考资料