准备环境
系统版本:CentOS 7.6
服务器配置:2H 4G
软件版本(docker镜像):
elasticsearch 6.6.0 kibana 6.6.0 filebeat 6.6.0
|
安装 Docker-CE
添加 stable
版本的 docker 仓库
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
|
安装 docker-ce
安装最新版的 docker
$ yum install docker-ce docker-ce-cli containerd.io
|
安装指定版本 docker
$ yum list docker-ce --showduplicates | sort -r * updates: mirrors.tuna.tsinghua.edu.cn Loading mirror speeds from cached hostfile Loaded plugins: fastestmirror, langpacks * extras: mirrors.huaweicloud.com docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable ...... docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable ...... docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
|
- 比如这里我们来安装 docker-ce-18.09.9 版本:
$ yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y
|
安装完成,但是还没有启动,由于我这里的磁盘空间不大,所以需要更改下 Docker 的根目录,将默认的 /var/lib/docker
更改为 /data/docker
目录,添加如下配置文件:
$ mkdir -p /etc/docker $ vi /etc/docker/daemon.json { "registry-mirrors" : [ "https://ot2k4d59.mirror.aliyuncs.com/" ], "graph": "/data/docker" }
|
镜像加速器:
使用加速器可以提升获取 Docker 官方镜像的速度,建议注册阿里云帐号,使用阿里云提供的镜像加速服务,地址:https://cr.console.aliyun.com/cn-beijing/instances/mirrors。
启动docker
$ systemctl enable docker $ systemctl daemon-reload
$ systemctl start docker
|
部署 EFK
编写docker-compose启动文件
$ mkdir -p /data/project/efk
|
version: '2' services: es660: image: elasticsearch:6.6.0 container_name: elasticsearch ulimits: memlock: soft: -1 hard: -1 ports: - 9200:9200 - 9300:9300 volumes: - /data/dockerdata/es660/etc/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml - /data/dockerdata/es660/plugins/x-pack-core:/usr/share/elasticsearch/modules/x-pack-core - /data/dockerdata/es660/data/:/usr/share/elasticsearch/data - /data/dockerdata/es660/backup:/data/backup - /data/dockerdata/es660/logs:/usr/share/elasticsearch/logs hostname: es restart: always network_mode: "bridge" environment: - TZ=Asia/Shanghai
kibana660: image: kibana:6.6.0 container_name: kibana ports: - 5601:5601 volumes: - /data/dockerdata/kibana660/etc/kibana.yml:/usr/share/kibana/config/kibana.yml - /data/dockerdata/kibana660/plugins:/usr/share/kibana/plugins - /data/dockerdata/kibana660/logs:/usr/share/kibana/logs hostname: kibana restart: always network_mode: "bridge" environment: - TZ=Asia/Shanghai
filebeat660: image: elastic/filebeat:6.6.0 container_name: filebeat ports: - 5044:5044 volumes: - /data/dockerdata/filebeat660/etc/filebeat.yml:/usr/share/filebeat/filebeat.yml - /data/dockerdata/filebeat660/data:/usr/share/filebeat/data - /data/dockerdata/filebeat660/logs:/usr/share/filebeat/logs - /data/dockerdata/filebeat660/tmp:/usr/share/filebeat/tmp - /data/logs/nginx:/data/logs/nginx hostname: filebeat restart: always network_mode: "bridge" environment: - TZ=Asia/Shanghai
|
创建EFK相关目录
mkdir -p /data/dockerdata/es660/{etc,plugins,data,logs,backup}
|
mkdir -p /data/dockerdata/kibana660/{etc,plugins,logs}
|
mkdir -p /data/dockerdata/filebeat660/{etc,data,logs,tmp}
|
注意:
由于目录时挂载进去的,容器内部需要一些读写权限,要进行一些权限配置,否则容器不能正常启动。
> >chmod 777 /data/dockerdata/es660/{data,logs,backup} >chmod 644 -R /data/dockerdata/es660/{etc,plugins}/*
> >chmod 777 /data/dockerdata/kibana660/{plugins,logs} >chmod 644 -R /data/dockerdata/es660/etc/*
> >chmod 777 /data/dockerdata/filebeat660/{data,logs,tmp} >chmod 644 -R /data/dockerdata/filebeat660/etc/*
|
配置EFK所需配置文件
配置文件elasticsearch.yml
$ cat>>/data/dockerdata/es660/etc/elasticsearch.yml<<EOF cluster.name: es node.name: es-01 bootstrap.memory_lock: true network.host: 0.0.0.0 http.port: 9200 discovery.type: single-node # 启动单节点类型 xpack.security.enabled: false # 关闭x-pack认证 EOF
|
在本文,我针对ES开启了x-pack插件,所以需要替换原ES的x-pack-core目录文件
$ wget http://download.wanhebin.com/package/elk/plugins/x-pack-6.6.0/x-pack-core.tar.gz $ tar xf x-pack-core.tar.gz -C /data/dockerdata/es660/plugins/
|
配置文件kibana.yml
cat>>/data/dockerdata/kibana660/etc/kibana.yml<<EOF server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://es660:9200"] # 如果无法正常连接ES,请更换成宿主机docker0网卡的IP kibana.index: ".kibana" logging.dest: /usr/share/kibana/logs/kibana.log
# 连接ES认证配置 # elasticsearch.username: "kibana" # elasticsearch.password: "123456"
EOF
|
配置文件filebeat.yml
$ cat>>/data/dockerdata/filebeat660/etc/filebeat.yml<<EOF filebeat.inputs: - type: log enabled: true paths: - /data/logs/nginx/nginx_access_json-1.log # json格式的nginx日志文件路径 json.keys_under_root: true json.overwrite_keys: true json.message_key: log tags: ["nginx-log1"]
- type: log enabled: true paths: - /data/logs/nginx/nginx_access_json-2.log # json格式的nginx日志文件路径 json.keys_under_root: true json.overwrite_keys: true json.message_key: log tags: ["nginx-log2"]
filebeat.config: modules: path: ${path.config}/modules.d/*.yml reload.enabled: false
setup.ilm.enabled: false setup.template: name: "nginx" pattern: "nginx-*" setup.template.overwrite: true setup.template.enabled: false
output.elasticsearch: hosts: ["es660:9200"] # 如果无法正常连接ES,请更换成宿主机docker0网卡的IP indices: - index: "nginx-access-%{+yyyy.MM.dd}" when.contains: tags: "nginx-log1" - index: "nginx-error-%{+yyyy.MM.dd}" when.contains: tags: "nginx-log2" # ES连接认证 # username: 'elastic' # password: 'changeme'
setup.template.overwrite: false setup.template.json.enabled: true setup.template.enabled: false setup.ilm.enabled: false EOF
|
破解 Elasticsearch 的x-pack插件
在上面已经把x-pacK-core插件目录替换成了破解包,接下来只需要进行激活步鄹。
详细步鄹参考 Elasticsearch 6.6.0 x-pack 破解 进行x-pack激活。
$ cd /data/project/efk $ docker-compose start es660
|
$ wget http://download.wanhebin.com/package/elk/plugins/x-pack-6.6.0/license.json $ curl -XPUT -H "Content-Type: application/json" 'http://127.0.0.1:9200/_xpack/license' -d @license.json
|
EFK 开启 X-PACK 认证
ES开启x-pack认证
- 修改配置文件
/data/dockerdata/es660/etc/elasticsearch.yml
$ sed -ir 's@xpack.security.enabled: false@xpack.security.enabled: true@g' /data/dockerdata/es660/etc/elasticsearch.yml
|
$ cd /data/project/efk $ docker-compose restart es660
|
$ docker exec -it elasticsearch bash
$ cd /usr/share/elasticsearch $ ./bin/elasticsearch-setup-passwords auto
|
Kibana 开启认证
开启用户认证,让kibana可以正常访问es。
在之前写kibana配置文件时,就已经把认证配置加上了,现在取消注释。
$ sed -ir 's@# elasticsearch.username: "kibana"@elasticsearch.username: "kibana"@g' /data/dockerdata/kibana660/etc/kibana.yml
$ sed -ir 's@# elasticsearch.password: "123456"@elasticsearch.password: "123456"@g' /data/dockerdata/kibana660/etc/kibana.yml
|
注意:这里的用户密码,填写刚才es里生成的密码
$ cd /data/project/efk $ docker-compose restart kibana660
|
Filebeat 开启认证
开启用户认证,让filebeat可以正常访问es,使其可以向es传输数据。
$ sed -ir 's@# username: 'elastic'@username: 'elastic'@g' /data/dockerdata/filebeat660/etc/filebeat.yml
$ sed -ir 's@# password: 'changeme'@password: 'changeme'@g' /data/dockerdata/filebeat660/etc/filebeat.yml
|
注意:这里的用户密码,填写刚才es里生成的密码
$ cd /data/project/efk $ docker-compose restart filebeat660
|
查看EFK容器状态
所有容器的 STATUS 都为 UP 说明容器正常启动运行。
如果有容器不处于 UP 状态,请检查相关容器日志
登录 Kibana 界面
使用elastic
账户进行登录,地址:http://IP:5601