Docker ELK+Filebeat安装与配置 并用spring data elasticsearch连接 (遇到的问题服务器内存小太,elasticsearch太新)
Linux版本: Centos 7
Docker安装
yum install docker
启用服务
systemctl start docker systemctl enable docker
关于ELK
ELK实际上是Elasticsearch+Logstash+Kibana的缩写,关于三个组件的详细介绍,请自己查看各大网站文章,这里就不再描述。
最近都在研究Docker,出于快速安装方法,本文使用的是ELK For Docker
sudo docker pull sebp/elk
这里默认是最新版6.4.2
运行ELK镜像需要vm.max_map_count至少需要262144内存
[[email protected] ~]# vi /etc/sysctl.conf
在尾行添加以下内容
vm.max_map_count=262144
sysctl -p
运行ELK镜像
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk
如果需要使用java连接还要映射9300端口
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 9300:9300 -itd --name elk sebp/elk
运行一个容器,容器使用的镜像是sebp/elk, 开放端口5601并且映射到容器内的5601,9200同理,-i表示标准正确输入,-t表示开启一个tty -d后台运行
如无意外打开浏览器即可以访问 http://ip:5601 是不是感受到Docker带来更捷(Kibana)
如无意外打开浏览器即可以访问 http://ip:9200 是不是感受到Docker带来更捷(Elasticsearch)
下载安装Filebeat
官网址址查看最新版本:https://www.elastic.co/downloads/beats/filebeat
配置Filebeat
cd /etc/filebeat vi filebeat.yml
注意:Filebeat 6.0后,enabled默认为关闭,如红圈外,必须要修改成true.
paths:为你想要抓取分析的日志内容
如果你直接将日志发送到Elasticsearc,请编辑此行Elasticsearc output
如果你直接将日志发送到Logstash,请编辑此行Logstash output
只能使用一行输出,其它的注掉即可
进入ELK容器
docker exec -it elk /bin/bash
配置elasticsearch
vim /opt/elasticsearch/config/elasticsearch.yml
其中几个关键的配置
集群名(你所要连接的集群)
cluster.name: my-application
节点名(给你自己定义一个节点名)
node.attr.rack: r1
数据路径
path.data: /path/to/data
日记路径
path.logs: /path/to/logs
这样配置就是所有机器都可以连
network.host: 0.0.0.0
指定http端口
http.port: 9200
客户端通信使用的是9300端口
一台机器也可以跑多个elasticsearch需要不同的path.data和http.port
指定elasticsearch的jvm的堆内存 6.4.2默认的话是1g如果机器差需要修改
正常是在vim /opt/elasticsearch/config/jvm.options中改但是并没有效果
所以就在vim /opt/elasticsearch/bin/elasticsearch中加
ES_JAVA_OPTS="-Xms512m -Xmx512m"
elasticsearch不能用root启动也可以在这加下面这句话
ES_JAVA_OPTS="-Des.insecure.allow.root=true"
配置logstach
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.
input {
beats {
port => 5044
}
}
filter {
json {
source => "message"
remove_field =>["beat","tag","prospector","tags","offset","host","@version","@metadata","message"]
}
}
output {
# stdout {
# codec => rubydebug
# }
elasticsearch {
index => "sdktest-%{+YYYY.MM.dd}"
# document_type => "sdk"
hosts => ['http://47.107.108.245:9200']
timeout => 90
manage_template => true
template_overwrite => true
template_name => "sdktemplate"
template => "/opt/logstash/config/logstash.json"
}
}
修改logstach的堆内存
vim /opt/logstash/config/jvm.options
-Xms512m
-Xmx512m
启动logstach
logstach -f ../config/logstash-sample.conf
测试配置文件
logstach -f ../config/logstash-sample.conf -t
如果logstach服务不加载配置文件
在 /etc/init.d下找到logstash脚本
args="--path.logs ${LS_LOG_DIR} ${LS_OPTS} -f ${LS_HOME}/config/logstash-sample.conf"
修改启动参数
查看镜像的详细信息可以看到镜像的CMD (设置container启动时执行的操作)
在sh文件中看到启动了logstash服务
配置filebeat
,配置文件是/etc/filebeat/filebeat.yml这个文件
1、定义你的日志文件的路径(一个或多个)
对于大多数的基本filebeat配置,你可以定义一个单一探测器针对一个单一的路径,例如:
配置filebeat或elasticsearch使用logstarsh
如果要使用logstash对filebeat收集起来的数据执行其他处理,你需要配置filebeat使用logstash。
你需要编辑filebeat的配置文件,注释elasticsearch的选项,并打开logstash的配置的注释:
spring boot连接不了最新的elastacsearch6.4.2
使用最新的spring boot 2.0.6.RELEASE
使用最新的spring-data-elasticsearch 3.1.1.RELEASE 可以支持6.4.2
导入最新的elasticsearch 6.4.2 elasticsearch-rest-client 6.4.2
org.elasticsearch.client.transport 6.4.2 transport-netty4-client 6.4.2
自己定义一个bean
@Bean(name = "elasticsearchTemplate")
public ElasticsearchTemplate getElasticsearchTemplate(){
Settings settings =Settings.builder().put("cluster.name", "elasticsearch").build();
InetAddress addr = null;
try {
addr = InetAddress.getByName("47.107.108.245");
} catch (UnknownHostException e) {
e.printStackTrace();
}
InetSocketAddress ip=new InetSocketAddress(addr, 9300);
TransportAddress transportAddress = new TransportAddress(ip);
TransportClient client=new PreBuiltTransportClient(settings).addTransportAddress(transportAddress);
return new ElasticsearchTemplate(client);
}