centos7+docker+elk详细部署

本文为纯容器化部署elk,同步破解x-pack

1、操作系统相关设置:
关闭防火墙:

setenforce 0
systemctl stop firewalld
systemctl disable firewalld

设置操作系统参数:

sysctl -w vm.max_map_count=6553600

永久生效将配置写入/etc/sysctl.conf
然后sysctl -p

vm.max_map_count是限制一个进程可以拥有的VMA(虚拟内存区域)的数量

2、获取elasticsearch /kibana /logstash的docker镜像

docker pull docker.elastic.co/logstash/logstash:6.8.0
docker pull docker.elastic.co/kibana/kibana:6.8.0
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.8.0

注意点:本地配置文件和docker内部映射的配置文件路径对应

创建elasticsearch配置文件
vi /opt/elasticsearch/config/elasticsearch.yml

path.data: /usr/share/elasticsearch/data
network.host: 0.0.0.0
xpack:
  security.enabled: false
#  security.transport.ssl.enabled: true
#  ssl.key: es-cert.key
#  ssl.certificate: es-cert.crt
#  ssl.certificate_authorities: ca.crt

创建相关目录及授权,用于将ES数据存放至本地(非必需)

mkdir -p /data/es/
chmod 777 /data/es/

运行ES

docker run --rm --name es -it  -d -p 9200:9200 -p 9300:9300 -v /opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/es:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:6.8.0

参数解释:
-v 本地目录或文件 映射到docker内部
-d 后台运行
–rm 停止删除
-p 指定端口

具体的目录挂载情况可以进入容器内部查看:

docker exec -it es bash

创建kibana配置文件
vi /opt/kibana/config/kibana.yml

server.name: "kibana"
server.host: "0"
elasticsearch.hosts: ["http://<esip>:9200/"]
i18n.locale: "zh-CN"
elasticsearch.username: "xxx"
elasticsearch.password: "xxx"

运行kibana

docker run --rm -it -p 5601:5601 -v -d  /opt/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml  docker.elastic.co/kibana/kibana:6.8.0

创建logstash配置文件
vi /opt/logstash/config/logstash.yml

config:
  reload:
    automatic: true
    interval: 3s
xpack:
  management.enabled: false
  monitoring.enabled: false

vi /opt/logstash/config/pipelines.yml

- pipeline.id: syslog
  path.config: "/opt/logstash/config/logstash-test.conf"

vi /opt/logstash/config/logstash-test.conf"

input {
   xxxx
}

filter {
   xxxx
}

output {
    elasticsearch { 
          hosts => ["<es_ip>:9200"] 
          index => "logstash-%{+YYYY-MM-dd}"
          }
    stdout {}
}

运行logstash

docker run --rm --name test   -it -d -v /opt/logstash/config:/opt/logstash/config docker.elastic.co/logstash/logstash:6.8.0

汉化kibana

7.x版本官方自带汉化资源文件(位于kibana目录下的node_modules/x-pack/plugins/translations/translations/目录,所以我们6.8.0是自带汉化目录的,接下来我们要做的是:

cd /usr/share/kibana/node_modules/x-pack/plugins/translations
cp -r translations /usr/share/kibana/src/legacy/core_plugins/kibana

vi /opt/kibana/config/kibana.yml #修改配置文件
i18n.locale: “zh-CN” #默认是en

强烈说明:本教程只供交流学习使用,切勿运用到商业用途。如有需要请购买官方正版授权
破解的x-pack和license的包下载地址:xxxxxxx
由于在elasticsearch在6.3版本之后x-pack是默认安装好的,所以不再需要用户自己去安装

1、替换x-pack包,并重启elasticsearch服务

#进入容器备份
 cd /usr/share/elasticsearch/modules/x-pack-core
 cp x-pack-core-6.8.0.jar x-pack-core-6.8.0.jar.20191206.bak
将下载至本地的x-pack包,放入容器对应的位置
docker cp  x-pack-core-6.8.0.jar  es:/usr/share/elasticsearch/modules/x-pack-core

2、替换完毕之后需要新增elasticsearch.yml配置
vim /opt/elasticsearch/config/elasticsearch.yml
xpack.security.enabled: false #新增关闭x-pack的配置文件

重启elasticsearch服务,并把license.json上传到服务器(三台es集群机器都执行如下操作,不然无法破解)

curl -XPUT -u elastic 'http://<es_ip>:9200/_xpack/license' -H "Content-Type: application/json" -d @license.json


Enter host password for user 'elastic':    #密码为:change
{"acknowledged":true,"license_status":"valid"}

在kibana上查看license

docker compose搭建elk docker elk7_docker

Platinum表示白金版 过期时间为2099 年12月31日,但是我们暂时还不能使用x-pack,因为白金版的x-pack需要SSL进行数据传输,所以我们需要先配置SSL

配置SSL之后,只要在master的es机器上配置用户名密码之后,其他的两台es机器也具有相同的用户名密码,配置步骤如下

1、创建证书

[elastic@es-node1 elasticsearch]$ cd /usr/share/elasticsearch/bin

[elastic@es-node1 bin]$ ./elasticsearch-certgen

docker compose搭建elk docker elk7_elasticsearch_02

解压证书

mkdir /tmp/cert
mv cert.zip /tmp/cert/
cd /tmp/cert/
unzip cert.zip
Archive:  cert.zip
   creating: ca/
  inflating: ca/ca.crt              
  inflating: ca/ca.key              
   creating: elasticsearch/
  inflating: elasticsearch/elasticsearch.crt 
  inflating: elasticsearch/elasticsearch.key 
将证书放入es的config目录下:
mv ca/* /usr/share/elasticsearch/config/
mv elasticsearch/*  /usr/share/elasticsearch/config/

集群部署,需将证书同步放入别的节点的config下
vim /opt/elasticsearch/config/elasticsearch.yml

#action.destructive_requires_name: true
xpack.security.enabled: true              #之前配置为false注意删除或者修改
xpack.security.transport.ssl.enabled: true
xpack.ssl.key: elasticsearch.key
xpack.ssl.certificate: elasticsearch.crt
xpack.ssl.certificate_authorities: ca.crt

重启elasticsearch服务,这个时候发现登录用户还是不行,不要着急,这边还需要配置kibana使用用户名密码登录

创建elk的集群的相关用户

注意的是:这边只需要在master的es主机上去创建,因为是master的es主机创建的ssl证书。

cd /usr/share/elasticsearch/bin
 ./elasticsearch-setup-passwords -h  #查看命令帮助
手动设置账号密码
./elasticsearch-setup-passwords interactive
系统自动设置
./elasticsearch-setup-passwords auto

可以先将以上用户和密码保存下来,具体的用户介绍见最后,这边最好保存在有道云笔记中,方便记录。

es设置密码之后,kibana和logstash的配置文件都需要配合用户进行认证

配置kibana添加elasticsearch用户认证:

vim /opt/kibana/config/kibana.yml
elasticsearch.username: "xxxx"
elasticsearch.password: "xxxx"

最后重启kibana

PS:每次修改配置文件 .yml后,可以docker restart 使之生效
永久生效,可以将运行态的docker,打包制作成镜像
docker commit <容器id> <image名:tag>