docker pull elasticsearch:7.5.0
docker pull logstash:7.5.0
docker pull kibana:7.5.0
docker pull elastic/filebeat:7.5.0filebeat作为客户端工具,在linux每个节点利用rpm安装部署。
普通run:docker run -d --name elasticsearch -p 9200:9200 -e “discovery.type=single-node” elasticsearch:7.5.0
可能出现的错误:
- max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
- 解决方法(临时方案):在宿主机执行:sysctl -w vm.max_map_count=262144
- 解决方法(永久方案):在宿主机 /etc/sysctl.conf文件最后添加一行 vm.max_map_count=262144 然后执行 sysctl -p
查看日志看是否成功:docker logs -f elasticsearch 可以通过访问ip:9200来查看是否成功。然后ctrl+c退出日志窗口。
复制配置文件夹:docker cp elasticsearch:/usr/share/elasticsearch/config /home/elasticsearch/es/config
停止并删除容器:docker stop elasticsearch -> docker rm elasticsearch 或者直接 docker rm -f elasticsearch
创建数据卷(挂载容器的data):docker volume create elasticsearch
修改配置文件(这里我选择不修改)后通过-v挂载重新启动容器:docker run -d --name elasticsearch -v /home/elasticsearch/es/config:/usr/share/elasticsearch/config -v elasticsearch:/usr/share/elasticsearch/data -p 9200:9200 -e “discovery.type=single-node” -d elasticsearch:7.5.0
- 普通run:docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 -d kibana:7.5.0
- 查看日志看是否成功:docker logs -f kibana 可以通过访问ip:5601来查看是否成功。然后ctrl+c退出日志窗口。
- 复制配置文件夹:docker cp kibana:/usr/share/kibana/config /home/kibana/config
- 停止并删除容器:docker stop kibana-> docker rm kibana 或者直接 docker rm -f kibana
- 创建数据卷:docker volume create kibana
- 修改配置文件(这里我选择不修改)后通过-v挂载重新启动容器:docker run -d --name kibana --link elasticsearch:elasticsearch -v /home/kibana/config:/usr/share/kibana/config -v kibana:/usr/share/kibana/data -p 5601:5601 -d kibana:7.5.0
普通run:docker run -d --name logstash --link elasticsearch:elasticsearch -p 5044:5044 -d logstash:7.5.0
查看日志看是否成功:docker logs -f logstash 。然后ctrl+c退出日志窗口。
复制配置文件夹:docker cp logstash:/usr/share/logstash/config /home/logstash/config
停止并删除容器:docker stop logstash-> docker rm logstash或者直接 docker rm -f logstash
修改配置文件(详细看下面第二章配置文件):
logstash-sample.conf
input{ beats{ port=>5044 } } filter{ if "java-logs" in [tags] { grok { match => { "message" => "(?
>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\s%{DATA:thread}\s%{DATA:level}\s%{DATA:class}\-(? >.*)" } remove_field => ["message"] } if [level] !~ "(DEBUG|ERROR|WARN|INFO)" { drop {} } } } output{ elasticsearch{ hosts => ["http://elasticsearch:9200"] } #控制台输出 stdout{ } } pipeline.yml
# This file is where you define your pipelines. You can define multiple. # For more information on multiple pipelines, see the documentation: # https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html - pipeline.id: main path.config: "/usr/share/logstash/config/*.conf" pipeline.workers: 1 # path.config: "/usr/share/logstash/pipeline"
创建数据卷:docker volume create logstash
通过-v挂载数据卷重新启动容器:docker run -d --name logstash --link elasticsearch:elasticsearch -v /home/logstash/config:/usr/share/logstash/config -v logstash:/usr/share/logstash/data -p 5044:5044 -p 9600:9600 -d logstash:7.5.0
普通run:docker run -d --name filebeat --link logstash:logstash -d elastic/filebeat:7.5.0
查看日志看是否成功:docker logs -f filebeat 。然后ctrl+c退出日志窗口。
复制配置文件:docker cp filebeat:/usr/share/filebeat/filebeat.yml /home/filebeat/filebeat.yml
停止并删除容器:docker stop filebeat-> docker rm filebeat或者直接 docker rm -f filebeat
修改配置文件 filebeat.yml,这是docker安装的
filebeat.inputs: - type: log #开启监视,不开不采集 enable: true # 采集日志的路径这里是容器内的path paths: - /var/log/demo/*.log # 为每个项目标识,或者分组,可区分不同格式的日志 tags: ["java-logs"] # 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志 registry_file: /usr/share/filebeat/data/registry output.logstash: enable: true # 输出到logstash中,logstash更换为自己的ip,这里是使用容器名称 hosts: "logstash:5044" max_retries: 3 worker: 1 #output.console: # 输出到console # enabled: true #Configure JSON encoding # codec.json: #Pretty-print JSON event # pretty: false
创建数据卷:docker volume create filebeat
通过-v挂载数据卷重新启动容器:docker run -d --name filebeat --link logstash:logstash -v /home/filebeat/log/demo:/var/log/demo -v /home/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v filebeat:/usr/share/filebeat/data -d elastic/filebeat:7.5.0
可能报错:
- 如果没有赋予权限,下面启动会报错:Exiting: error loading config file: open filebeat.yml: permission denied
- 如果赋予777权限,也会报错:Exiting: error loading config file: config file (“filebeat.yml”) can only be writable by the owner but the permissions are “-rwxrwxrwx” (to fix the permissions use: ‘chmod go-w /usr/share/filebeat/filebeat.yml’)
解决方法:chmod 755 /home/filebeat/filebeat.yml
修改后直接启动 docker start filebeat
下载filebeat-7.5.0-x86_64.rpm。
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.0-x86_64.rpm sudo rpm -vi filebeat-7.5.0-x86_64.rpm
由于某些网络原因可能无法通过curl下载,可以先本地下载好再copy到linux。官网下载地址:https://elasticsearch.cn/download/
这里选择filebeat的7.5.0版本:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.0-x86_64.rpm ,我已经分享到网盘,可以自助下载:链接:https://pan.baidu.com/s/16237ynfY2k-gq2ZxmCzt-Q 提取码:xbm8 。copy到linux后执行以下命令:
sudo rpm -vi filebeat-7.5.0-x86_64.rpm
查看安装的目录
cd /etc/filebeat #配置文件的目录 cd /usr/share/filebeat #安装的目录,bin等 cd /var/lib/filebeat #数据缓存的目录,registry等
修改配置文件 filebeat.yml,这是rpm安装的
filebeat.inputs: - type: log #开启监视,不开不采集 enable: true # 采集日志的路径这里是主机内的path paths: - /home/filebeat/log/demo/*.log # 为每个项目标识,或者分组,可区分不同格式的日志 tags: ["java-logs"] # 这个文件记录日志读取的位置,如果重启,可以从记录的位置开始取日志 registry_file: /var/lib/filebeat/registry output.logstash: enable: true # 输出到logstash中,logstash更换为自己的ip hosts: "192.168.88.80:5044" max_retries: 3 worker: 1 #output.console: # 输出到console # enabled: true #Configure JSON encoding # codec.json: #Pretty-print JSON event # pretty: false
启动 filebeat 。
启动filebeat systemctl start filebeat.service 查看filebeat状态 systemctl status filebeat.service
docker exec -it elasticsearch bash
docker exec -it kibana bash
docker exec -it logstash bash
docker exec -it filebeat bash
network.host: 0.0.0.0
http.port: 9200
discovery.type: "single-node"
#集群名称
cluster.name: "es-cluster"
network.host: 0.0.0.0
#节点名称
node.name: elasticsearch01
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最⼤集群节点数
node.max_local_storage_nodes: 2
# 设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
# 如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 192.168.88.80
#端⼝
http.port: 9200
#内部节点之间沟通端⼝
transport.tcp.port: 9300
#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.88.80:9300","192.168.88.81:9300"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["elasticsearch01", "elasticsearch02"]
# 解决跨域问题
# http.cors.enabled: true
# http.cors.allow-origin: "*"
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
#elasticsearch.hosts: [ "http://elasticsearch:9200","http://192.168.88.80:9200","http://192.168.88.81:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
#xpack.monitoring.elasticsearch.hosts: [ "http://192.168.88.80:9200","http://192.168.88.81:9200"]
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/usr/share/logstash/config/*.conf"
pipeline.workers: 1
# path.config: "/usr/share/logstash/pipeline"
input{
beats{
port=>5044
}
}
filter{
if "java-logs" in [tags] {
grok {
match => {
"message" => "(?>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\s%{DATA:thread}\s%{DATA:level}\s%{DATA:class}\-(?>.*)"
}
remove_field => ["message"]
}
if [level] !~ "(DEBUG|ERROR|WARN|INFO)" {
drop {}
}
}
}
output{
elasticsearch{
hosts => ["http://elasticsearch:9200"]
}
#控制台输出
stdout{ }
}
PS: 建议在调试器上逐步匹配测试编写,如果不匹配会导致logstash没有反应,网络上的调试器如下:
- http://grokdebug.herokuapp.com
- http://grokconstructor.appspot.com
ES官方grok调试器:
#filebeat.config:
# modules:
# path: ${path.config}/modules.d/*.yml
# reload.enabled: false
#
#processors:
#- add_cloud_metadata: ~
#- add_docker_metadata: ~
#
#output.elasticsearch:
# hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
# username: '${ELASTICSEARCH_USERNAME:}'
# password: '${ELASTICSEARCH_PASSWORD:}'
filebeat.inputs:
- type: log
#开启监视,不开不采集
enable: true
# 采集日志的路径这里是容器内的path
paths:
- /var/log/demo/*.log
# 日志多行合并采集
#multiline.pattern: '^\['
#multiline.negate: true
#multiline.match: after
# 为每个项目标识,或者分组,可区分不同格式的日志
tags: ["java-logs"]
# 这个文件记录日志读取的位置,如果容器重启,可以从记录的位置开始取日志
registry_file: /usr/share/filebeat/data/registry
output.logstash:
enable: true
# 输出到logstash中,logstash更换为自己的ip
hosts: "logstash:5044"
max_retries: 3
worker: 1
#output.console:
#Boolean flag to enable or disable the output module.
# enabled: true
#Configure JSON encoding
# codec.json:
#Pretty-print JSON event
# pretty: false
filebeat.inputs:
- type: log
#开启监视,不开不采集
enable: true
# 采集日志的路径这里是主机内的path
paths:
- /home/filebeat/log/demo/*.log
# 为每个项目标识,或者分组,可区分不同格式的日志
tags: ["java-logs"]
# 这个文件记录日志读取的位置,如果重启,可以从记录的位置开始取日志
registry_file: /var/lib/filebeat/registry
output.logstash:
enable: true
# 输出到logstash中,logstash更换为自己的ip
hosts: "192.168.88.80:5044"
max_retries: 3
worker: 1
#output.console:
# 输出到console
# enabled: true
#Configure JSON encoding
# codec.json:
#Pretty-print JSON event
# pretty: false
2019-11-18 10:01:23.899 [restartedMain] INFO com.mics.datahub.MicsDatahubSystemApplication - Started MicsDatahubSystemApplication in 14.663 seconds (JVM running for 21.768)
[1] 因为grok的语法问题不匹配,导致filebeat连接了logstash并且传输数据,可是通过查看logstash的日志(docker logs -f logstash)发现没有反应,也没有报错。
PS:这是单节点,前提是已经copy容器里面的配置文件到宿主机,同时某些目录文件需要权限。如果不使用docker安装filebeat,需要删除对应的部分内容,包括filebeat的volume。
#网盘下载docker-compose:链接: https://pan.baidu.com/s/1xEsqOjn03LuYdxvzxBGtfA 提取码: s7ju
sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose -v
version: '3'
services:
elasticsearch: # 服务名称
image: elasticsearch:7.5.0 # 使用的镜像
container_name: elasticsearch # 容器名称
restart: always # 失败自动重启策略
environment:
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- http.port=9200 #端⼝
- "discovery.type=single-node" #单节点启动
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- /home/elasticsearch/es/config:/usr/share/elasticsearch/config # 将容器中es的配置文件映射到本地
- es:/usr/share/elasticsearch/data # 存放数据的文件
- /etc/localtime:/etc/localtime #时间同步
ports:
- 9200:9200 # http端口,可以直接浏览器访问
kibana: # 服务名称
depends_on:
- elasticsearch
image: kibana:7.5.0 # 使用的镜像
container_name: kibana # 容器名称
restart: always # 失败自动重启策略
links:
- elasticsearch
environment:
- server.name= kibana
- server.host= "0"
- elasticsearch.hosts= "http://elasticsearch:9200"
- xpack.monitoring.ui.container.elasticsearch.enabled= true
volumes:
- /home/kibana/config:/usr/share/kibana/config
- kibana:/usr/share/kibana/data
- /etc/localtime:/etc/localtime #时间同步
ports:
- 5601:5601 # http端口,可以直接浏览器访问
logstash: # 服务名称
depends_on:
- elasticsearch
links:
- elasticsearch
image: logstash:7.5.0 # 使用的镜像
container_name: logstash # 容器名称
restart: always # 失败自动重启策略
environment:
- http.host= "0.0.0.0"
- xpack.monitoring.elasticsearch.hosts= "http://elasticsearch:9200"
volumes:
- /home/logstash/config:/usr/share/logstash/config
- logstash:/usr/share/logstash/data
- /etc/localtime:/etc/localtime #时间同步
ports:
- 5044:5044
- 9600:9600
filebeat: # 服务名称
depends_on:
- logstash
image: elastic/filebeat:7.5.0 # 使用的镜像
container_name: filebeat # 容器名称
restart: always # 失败自动重启策略
links:
- logstash
volumes:
- /home/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
- /home/filebeat/log/demo:/var/log/demo
- filebeat:/usr/share/filebeat/data
- /etc/localtime:/etc/localtime #时间同步
volumes:
es:
driver: local # 会生成一个对应的目录和文件
kibana:
driver: local # 会生成一个对应的目录和文件
logstash:
driver: local # 会生成一个对应的目录和文件
filebeat:
driver: local # 会生成一个对应的目录和文件
docker-compose up -d
在一个主机用docker部署一个包含两个elasticsearch容器节点(elasticsearch01、elasticsearch02)的集群,kibana和logstash还是一个容器即可。filebeat可以docker安装,也可以rpm安装,参考上面内容。
/home/elasticsearch/es01/config
/home/elasticsearch/es02/config
/home/kibana/kibana01/config
/home/logstash/logstash01/config
cluster.name: "es-cluster"
network.host: 0.0.0.0
#节点名称
node.name: elasticsearch01
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最⼤集群节点数
node.max_local_storage_nodes: 2
# 设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
# 如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 192.168.88.80
#端⼝
http.port: 9201
#内部节点之间沟通端⼝
transport.tcp.port: 9301
#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.88.80:9301","192.168.88.80:9302"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["elasticsearch01", "elasticsearch02"]
# 解决跨域问题
# http.cors.enabled: true
# http.cors.allow-origin: "*"
cluster.name: "es-cluster"
network.host: 0.0.0.0
#节点名称
node.name: elasticsearch02
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最⼤集群节点数
node.max_local_storage_nodes: 2
# 设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
# 如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 192.168.88.80
#端⼝
http.port: 9202
#内部节点之间沟通端⼝
transport.tcp.port: 9302
#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.88.80:9301","192.168.88.80:9302"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["elasticsearch01", "elasticsearch02"]
# 解决跨域问题
# http.cors.enabled: true
# http.cors.allow-origin: "*"
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana01
server.host: "0"
# elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.hosts: [ "http://elasticsearch01:9201","http://elasticsearch02:9202" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
http.host: "0.0.0.0"
# xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch01:9201","http://elasticsearch02:9202" ]
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/usr/share/logstash/config/*.conf"
pipeline.workers: 1
# path.config: "/usr/share/logstash/pipeline"
input{
beats{
port=>5044
}
}
filter{
if "java-logs" in [tags] {
grok {
match => {
"message" => "(?>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\s%{DATA:thread}\s%{DATA:level}\s%{DATA:class}\-(?>.*)"
}
remove_field => ["message"]
}
if [level] !~ "(DEBUG|ERROR|WARN|INFO)" {
drop {}
}
}
}
output{
elasticsearch{
hosts => ["http://elasticsearch01:9201","http://elasticsearch02:9202"]
}
stdout{ }
}
filebeat.inputs:
- type: log
#开启监视,不开不采集
enable: true
# 采集日志的路径这里是主机内的path
paths:
- /home/filebeat/log/demo/*.log
# 为每个项目标识,或者分组,可区分不同格式的日志
tags: ["java-logs"]
# 这个文件记录日志读取的位置,如果重启,可以从记录的位置开始取日志
registry_file: /var/lib/filebeat/registry
output.logstash:
enable: true
# 输出到logstash中,logstash更换为自己的ip
hosts: "192.168.88.80:5044"
max_retries: 3
worker: 1
#output.console:
# 输出到console
# enabled: true
#Configure JSON encoding
# codec.json:
#Pretty-print JSON event
# pretty: false
version: '3'
services:
elasticsearch01: # 服务名称
image: elasticsearch:7.5.0 # 使用的镜像
container_name: elasticsearch01 # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=elasticsearch01 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=192.168.88.80 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- discovery.seed_hosts= 192.168.88.80:9301,192.168.88.80:9302 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=elasticsearch01,elasticsearch02 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群, 三个es节点须一致
- http.port=9201 #端⼝
- transport.tcp.port=9301 #内部节点之间沟通端⼝
# - http.cors.enabled=true # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- /home/elasticsearch/es01/config:/usr/share/elasticsearch/config # 将容器中es的配置文件映射到本地
- es01:/usr/share/elasticsearch/data # 存放数据的文件
- /etc/localtime:/etc/localtime #时间同步
ports:
- 9201:9201 # http端口,可以直接浏览器访问
- 9301:9301 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
elasticsearch02: # 服务名称
image: elasticsearch:7.5.0 # 使用的镜像
container_name: elasticsearch02 # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=elasticsearch02 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=192.168.88.80 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- discovery.seed_hosts=192.168.88.80:9301,192.168.88.80:9302 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=elasticsearch01,elasticsearch02 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群, 三个es节点须一致
- http.port=9202 #端⼝
- transport.tcp.port=9302 #内部节点之间沟通端⼝
# - http.cors.enabled=true # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- /home/elasticsearch/es02/config:/usr/share/elasticsearch/config # 将容器中es的配置文件映射到本地
- es02:/usr/share/elasticsearch/data # 存放数据的文件
- /etc/localtime:/etc/localtime #时间同步
ports:
- 9202:9202 # http端口,可以直接浏览器访问
- 9302:9302 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
kibana01: # 服务名称
depends_on:
- elasticsearch01
- elasticsearch02
image: kibana:7.5.0 # 使用的镜像
container_name: kibana01 # 容器名称
restart: always # 失败自动重启策略
links:
- elasticsearch01
- elasticsearch02
environment:
- server.name= kibana01
- server.host= "0"
- elasticsearch.hosts= "http://elasticsearch01:9201","http://elasticsearch02:9202"
- xpack.monitoring.ui.container.elasticsearch.enabled= true
volumes:
- /home/kibana/kibana01/config:/usr/share/kibana/config
- kibana01:/usr/share/kibana/data
- /etc/localtime:/etc/localtime #时间同步
ports:
- 5601:5601 # http端口,可以直接浏览器访问
logstash01: # 服务名称
depends_on:
- elasticsearch01
- elasticsearch02
links:
- elasticsearch01
- elasticsearch02
image: logstash:7.5.0 # 使用的镜像
container_name: logstash01 # 容器名称
restart: always # 失败自动重启策略
environment:
- http.host= "0.0.0.0"
- xpack.monitoring.elasticsearch.hosts= "http://elasticsearch01:9201","http://elasticsearch02:9202"
volumes:
- /home/logstash/logstash01/config:/usr/share/logstash/config
- logstash01:/usr/share/logstash/data
- /etc/localtime:/etc/localtime #时间同步
ports:
- 5044:5044
- 9600:9600
volumes:
es01:
driver: local # 会生成一个对应的目录和文件
es02:
driver: local # 会生成一个对应的目录和文件
kibana01:
driver: local # 会生成一个对应的目录和文件
logstash01:
driver: local # 会生成一个对应的目录和文件
在两个主机(192.168.88.80、192.168.88.81)用docker部署ELK。其中一个主机包含一个elasticsearch、kibana和logstash。filebeat只需要在一台主机安装,可以docker安装,也可以rpm安装,参考上面内容。
两台
宿主机创建好(主要用于容器挂载),并且copy好配置文件(注意:配置文件夹(config)里面的文件一定要齐全),参考第一Part。/home/elasticsearch/elasticsearch/config
/home/kibana/kibana/config
/home/logstash/logstash/config
filebeat收集的数据会通过logstash过滤、转换到elasticsearch集群。
cluster.name: "es-cluster"
network.host: 0.0.0.0
#节点名称
node.name: elasticsearch01
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最⼤集群节点数
node.max_local_storage_nodes: 2
# 设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
# 如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 192.168.88.80
#端⼝
http.port: 9200
#内部节点之间沟通端⼝
transport.tcp.port: 9300
#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.88.80:9300","192.168.88.81:9300"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["elasticsearch01", "elasticsearch02"]
# 解决跨域问题
# http.cors.enabled: true
# http.cors.allow-origin: "*"
cluster.name: "es-cluster"
network.host: 0.0.0.0
#节点名称
node.name: elasticsearch02
#是不是有资格主节点
node.master: true
#是否存储数据
node.data: true
#最⼤集群节点数
node.max_local_storage_nodes: 2
# 设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
# 如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 192.168.88.81
#端⼝
http.port: 9200
#内部节点之间沟通端⼝
transport.tcp.port: 9300
#es7.x 之后新增的配置,写⼊候选主节点的设备地址,在开启服务后可以被选为主节点
discovery.seed_hosts: ["192.168.88.80:9300","192.168.88.81:9300"]
#es7.x 之后新增的配置,初始化⼀个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["elasticsearch01", "elasticsearch02"]
# 解决跨域问题
# http.cors.enabled: true
# http.cors.allow-origin: "*"
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
# elasticsearch.hosts: [ "http://elasticsearch:9200" ]
elasticsearch.hosts: [ "http://192.168.88.80:9200","http://192.168.88.81:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
http.host: "0.0.0.0"
# xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.88.80:9200","http://192.168.88.81:9200" ]
# This file is where you define your pipelines. You can define multiple.
# For more information on multiple pipelines, see the documentation:
# https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
- pipeline.id: main
path.config: "/usr/share/logstash/config/*.conf"
pipeline.workers: 1
# path.config: "/usr/share/logstash/pipeline"
input{
beats{
port=>5044
}
}
filter{
if "java-logs" in [tags] {
grok {
match => {
"message" => "(?>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3})\s%{DATA:thread}\s%{DATA:level}\s%{DATA:class}\-(?>.*)"
}
remove_field => ["message"]
}
if [level] !~ "(DEBUG|ERROR|WARN|INFO)" {
drop {}
}
}
}
output{
elasticsearch{
hosts => ["http://192.168.88.80:9200","http://192.168.88.81:9200"]
}
stdout{ }
}
filebeat.inputs:
- type: log
#开启监视,不开不采集
enable: true
# 采集日志的路径这里是主机内的path
paths:
- /home/filebeat/log/demo/*.log
# 为每个项目标识,或者分组,可区分不同格式的日志
tags: ["java-logs"]
# 这个文件记录日志读取的位置,如果重启,可以从记录的位置开始取日志
registry_file: /var/lib/filebeat/registry
output.logstash:
enable: true
# 输出到logstash中,logstash更换为自己的ip
hosts: ["192.168.88.80:5044","192.168.88.81:5044"]
max_retries: 3
worker: 1
#output.console:
# 输出到console
# enabled: true
#Configure JSON encoding
# codec.json:
#Pretty-print JSON event
# pretty: false
两台主机基本上一样,只是修改小细节,类似ip地址以及node名称
version: '3'
services:
elasticsearch: # 服务名称
image: elasticsearch:7.5.0 # 使用的镜像
container_name: elasticsearch # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=elasticsearch01 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=192.168.88.80 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- discovery.seed_hosts= 192.168.88.80:9300,192.168.88.81:9300 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=elasticsearch01,elasticsearch02 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群, 三个es节点须一致
- http.port=9200 #端⼝
- transport.tcp.port=9300 #内部节点之间沟通端⼝
# - http.cors.enabled=true # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- /home/elasticsearch/elasticsearch/config:/usr/share/elasticsearch/config # 将容器中es的配置文件映射到本地
- elasticsearch:/usr/share/elasticsearch/data # 存放数据的文件
- /etc/localtime:/etc/localtime #时间同步
ports:
- 9200:9200 # http端口,可以直接浏览器访问
- 9300:9300 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
kibana: # 服务名称
depends_on:
- elasticsearch
image: kibana:7.5.0 # 使用的镜像
container_name: kibana # 容器名称
restart: always # 失败自动重启策略
links:
- elasticsearch
environment:
- server.name= kibana
- server.host= "0"
- elasticsearch.hosts= "http://192.168.88.80:9200","http://192.168.88.81:9200"
- xpack.monitoring.ui.container.elasticsearch.enabled= true
volumes:
- /home/kibana/kibana/config:/usr/share/kibana/config
- kibana:/usr/share/kibana/data
- /etc/localtime:/etc/localtime #时间同步
ports:
- 5601:5601 # http端口,可以直接浏览器访问
logstash: # 服务名称
depends_on:
- elasticsearch
links:
- elasticsearch
image: logstash:7.5.0 # 使用的镜像
container_name: logstash # 容器名称
restart: always # 失败自动重启策略
environment:
- http.host= "0.0.0.0"
- xpack.monitoring.elasticsearch.hosts= "http://192.168.88.80:9200","http://192.168.88.81:9200"
volumes:
- /home/logstash/logstash/config:/usr/share/logstash/config
- logstash:/usr/share/logstash/data
- /etc/localtime:/etc/localtime #时间同步
ports:
- 5044:5044
- 9600:9600
volumes:
elasticsearch:
driver: local # 会生成一个对应的目录和文件
kibana:
driver: local # 会生成一个对应的目录和文件
logstash:
driver: local # 会生成一个对应的目录和文件
version: '3'
services:
elasticsearch: # 服务名称
image: elasticsearch:7.5.0 # 使用的镜像
container_name: elasticsearch # 容器名称
restart: always # 失败自动重启策略
environment:
- node.name=elasticsearch02 # 节点名称,集群模式下每个节点名称唯一
- network.publish_host=192.168.88.81 # 用于集群内各机器间通信,对外使用,其他机器访问本机器的es服务,一般为本机宿主机IP
- network.host=0.0.0.0 # 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,即本机
- discovery.seed_hosts= 192.168.88.80:9300,192.168.88.81:9300 # es7.0之后新增的写法,写入候选主节点的设备地址,在开启服务后,如果master挂了,哪些可以被投票选为主节点
- cluster.initial_master_nodes=elasticsearch01,elasticsearch02 # es7.0之后新增的配置,初始化一个新的集群时需要此配置来选举master
- cluster.name=es-cluster # 集群名称,相同名称为一个集群, 三个es节点须一致
- http.port=9200 #端⼝
- transport.tcp.port=9300 #内部节点之间沟通端⼝
# - http.cors.enabled=true # 是否支持跨域,是:true // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 这里设置不起作用,但是可以将此文件映射到宿主机进行修改,然后重启,解决跨域
- bootstrap.memory_lock=true # 内存交换的选项,官网建议为true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 设置内存,如内存不足,可以尝试调低点
ulimits: # 栈内存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- /home/elasticsearch/elasticsearch/config:/usr/share/elasticsearch/config # 将容器中es的配置文件映射到本地
- elasticsearch:/usr/share/elasticsearch/data # 存放数据的文件
- /etc/localtime:/etc/localtime #时间同步
ports:
- 9200:9200 # http端口,可以直接浏览器访问
- 9300:9300 # es集群之间相互访问的端口,jar之间就是通过此端口进行tcp协议通信,遵循tcp协议。
kibana: # 服务名称
depends_on:
- elasticsearch
image: kibana:7.5.0 # 使用的镜像
container_name: kibana # 容器名称
restart: always # 失败自动重启策略
links:
- elasticsearch
environment:
- server.name= kibana
- server.host= "0"
- elasticsearch.hosts= "http://192.168.88.80:9200","http://192.168.88.81:9200"
- xpack.monitoring.ui.container.elasticsearch.enabled= true
volumes:
- /home/kibana/kibana/config:/usr/share/kibana/config
- kibana:/usr/share/kibana/data
- /etc/localtime:/etc/localtime #时间同步
ports:
- 5601:5601 # http端口,可以直接浏览器访问
logstash: # 服务名称
depends_on:
- elasticsearch
links:
- elasticsearch
image: logstash:7.5.0 # 使用的镜像
container_name: logstash # 容器名称
restart: always # 失败自动重启策略
environment:
- http.host= "0.0.0.0"
- xpack.monitoring.elasticsearch.hosts= "http://192.168.88.80:9200","http://192.168.88.81:9200"
volumes:
- /home/logstash/logstash/config:/usr/share/logstash/config
- logstash:/usr/share/logstash/data
- /etc/localtime:/etc/localtime #时间同步
ports:
- 5044:5044
- 9600:9600
volumes:
elasticsearch:
driver: local # 会生成一个对应的目录和文件
kibana:
driver: local # 会生成一个对应的目录和文件
logstash:
driver: local # 会生成一个对应的目录和文件