Docker部署ELK5.5.0版本
环境准备
镜像拉取
- docker pull docker.elastic.co/logstash/logstash:5.5.0
- docker pull docker.elastic.co/kibana/kibana:5.5.0
- docker pull docker.elastic.co/elasticsearch/elasticsearch:5.5.0
最好使用以上镜像,之前使用了docker pull logstash:5.5.0的镜像,这玩意一直报错,浪费了大把时间,得不偿失。
DockerCompose文件作成
version: '2'
services:
elastic:
image: docker.elastic.co/elasticsearch/elasticsearch:5.5.0
ports:
- "9200:9200"
- "9300:9300"
container_name: "myelasticsearch"
environment:
- "http.host=0.0.0.0"
- "transport.host=0.0.0.0"
- "cluster.name=elasticsearch"
networks:
- prd-dev-sys
kibana:
image: docker.elastic.co/kibana/kibana:5.5.0
depends_on:
- elastic
ports:
- "5601:5601"
container_name: "kibana"
environment:
- "ELASTICSEARCH_URL=http://elastic:changeme@myelasticsearch:9200"
networks:
- prd-dev-sys
logstash:
image: docker.elastic.co/logstash/logstash:5.5.0
ports:
- "5044:5044"
- "9600:9600"
container_name: "logstash"
restart: always
volumes:
- /data/data/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
- /data/docker/data/logstash/conf.d/:/usr/share/logstash/pipeline/
networks:
- prd-dev-sys
networks:
prd-dev-sys:
driver: bridge
1.elasticsearch
1.1、这里需要注意的是环境中http.host和transport.host的指定,http.host指定后实际对应的是9200端口,transport.host实际对应的是9300端口,这里的对应是指绑定,9200端口使用的是http,9300使用的是tcp,当用spring中访问的时候,使用的是9300端口。
1.2、transport.host指定0.0.0.0之后,spring中才能正确访问,否则会报错,在指定此属性后可能会导致容器启动后立马停掉,需要作如下设置
1.2.1、修改etc/security/limits.conf
* soft nofile 65536 #nofile是单个进程允许打开的最大文件个数
* hard nofile 65536
1.2.2、修改/etc/sysctl.conf
vm.max_map_count=655360
1.2.3、执行命令
sysctl -p
1.3、claster.name如果不指定,默认是docker-cluster,之前用spring的时候,网上搜的结果是要修改这个配置,将其指定为elasticsearch
1.4、因为使用了xpack,在springboot中(使用的版本是2.0.8.RELEASE),通过spring-data不能直接配置,需要使用另外的一个包如下
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>x-pack-transport</artifactId>
<version>5.5.0</version>
</dependency>
1.5、将transport剔除,这里就不再使用yml的配置方法,直接使用spring提供一个TransportClient
<exclusions>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
</exclusion>
</exclusions>
@Bean
public TransportClient transportClient() throws UnknownHostException {
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
.put("cluster.name", "es-cluster")
.put("xpack.security.user", "elastic:changeme")
.build())
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
return client;
}
如果遇到jar包无法下载的问题,因为我是公司内网,有限制,所以找了个能连外网的机器,新建了一个空的maven项目,拉取了一下jar包,而且使用的是阿里的镜像源
2.kibana
这里没什么特殊设置,默认用户名和密码是elastic:changeme
3.logstash
logstash.yml如下,这里elasticsearch的url使用的是docker-compose中指定的名字,因为是在一个network里面
path.config: /usr/share/logstash/pipeline
xpack.monitoring.elasticsearch.url: http://myelasticsearch:9200
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: changeme
配置文件中的指定
input {
kafka {
bootstrap_servers => "{kafka机器的ip}:9092"
topics => ["weblog"]
auto_offset_reset => "latest"
consumer_threads => 5
decorate_events => true
}
}
output {
elasticsearch {
hosts => ["myelasticsearch:9200"]
user => "elastic"
password => "changeme"
index => "mykafkalog"
}
stdout { codec => rubydebug }
}