文章目录
在 Docker 中安装 Elasticsearch + Kibana + Filebeat
在 CentOS上安装 Docker Engine
先更新一下 yum 软件源的缓存,安装依赖包
sudo yum update
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加国内下载源
sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
安装比较稳定的版本 Docker CE
sudo yum makecache fast
sudo yum install docker-ce
配置开机启动,并启动 Docker CE :
sudo systemctl enable docker
sudo systemctl start docker
测试是否正确安装了 Docker Engine:
docker run hello-world
建立 docker 组,将当前用户加入 docker 组:
sudo groupadd docker
sudo usermod -aG docker $USER
再次执行 docker run hello-world
测试是否可以执行。
安装 Docker-Compose
在线安装,下载一个 Docker-Compose
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
给文件执行权限
sudo chmod +x /usr/local/bin/docker-compose
创建指向 /usr/bin
的链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
查看版本
docker-compose --version
安装 Elasticsearch
在 Docker-hub 中搜索 Elasticsearch 版本
docker search Elasticsearch
安装 Elasticsearch 7.2 的版本
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.2.0
安装完成后,执行 docker images
或者 docker image ls
[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
运行 hello-world
docker container run hello-world
Docker + Elasticsearch + Kibana + Filebeat 实例
我的 test_docker 文件夹,目录层级
[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.yaml
文件
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
关于 filebeat.yml
的配置
# 日志输入配置
filebeat.inputs:
- type: log
enabled: true
paths:
# 需要收集的日志所在的位置,可使用通配符进行配置
- /var/log/*.log
#- /data/fxqalog/*.txt
output.elasticsearch:
hosts: ["es7_01:9200"] #定义的es的url,之前名字取为es7_01,需要保持一致,不能使用localhost
#日志输出配置(采用 logstash 收集日志,5044为logstash端口)
#output.logstash:
#hosts: ["10.103.131.242:5044"]
#hosts: ["es7_01:5044"]
启动容器
[root@bogon test_docker]# docker-compose up
# 一些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 服务
配置 Kibana 索引
浏览器中打开 http://10.103.131.242:5601/
在 索引模式
中输入 filebeat 后,下面会有匹配到索引,然后点击下一步,选择 时间筛选字段名称
,最后点击创建索引模式
。
查看现有的索引:http://10.103.131.242:9200/_cat/indices?v
当前 health 状态是 green,如果一开始是 yellow,则需要查看索引的配置信息,修改分片数:目前我只是一台机器,所以设置成0,然后再刷新后就变绿了。
遇到的问题及解决
-
Another app is currently holding the yum lock; waiting for it to exit…
-
执行yum报错error: rpmdb: BDB0113 Thread/process 23226 failed: BDB1507 Thread died in Berkeley D
-
windows Elasticsearch启动报此处不应有Files\elascsearch-7.8.0\jdk解决办法一
-
浏览器界面提示
Kibana server is not ready yet
执行
docker-compose up
后,在浏览器上查看 Kibana 服务,发现提示Kibana server is not ready yet
。通过
docker ps
查看,只启动了 cerebro 和 kibana,elasticsearch 没启动成功
在/etc/sysctl.conf
中增加配置vm.max_map_count=262144
,保存后执行sysctl -p
,重新再启动服务就ok了 -
windows 下启动 logstash 报错
Unrecognized VM option 'UseConcMarkSweepGC'
根据类似的错误,将 logstash 的 config 目录下的
jvm.options
文件中的以下3行注释掉:## -XX:+UseConcMarkSweepGC ## -XX:CMSInitiatingOccupancyFraction=75 ## -XX:+UseCMSInitiatingOccupancyOnly
-
ERROR:filebeat 连接不了 elasticsearch
报错:Failed to connect to backoff(elasticsearch(http://localhost:9200)):Get http://localhost:9200:dail tcp 127.0.0.1:9200:connect:connection refused
,后面一行又尝试 reconnect 了7次都失败了原因:在
filebeat.yml
中配置的问题,将hosts: ["localhost:9200"]
改为hosts: ["es7_01:9200"]
,其中es7_01
是我在docker-compose.yml
中elasticsearch
的配置container_name: es7_01
,地址需要保持一致。这个问题找了很久,在网上一直没有找到 docker 下部署的出现这个问题的资料,最后在相关群里问人才解决。连接成功的结果:
学习记录
-
其中最便捷的一种:
[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
配置项详解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 启动的时候,会有该目录,用来存储文档数据。该目录可以设置