如果安装ELK只是为了玩玩,可以单机搭建没问题,但是真实业务运行时,必须考虑实用和效率问题。
ES client节点: 作为ES节点的任务协调节点,所有来自kibana的请求,全部到client节点,它会智能的负载均衡到其他的ES data节点(Mapper阶段),每个Data节点执行请求后,将结果返回给Client节点,Client节点聚合(Reduce阶段)后将结果返回给Kibana。
脑裂: 假设集群包含两个可参与master选举的节点,当着两个节点之间的网络通信断开时,每个节点都认为只有自己是可竞选的节点,当minimum_master_nodes也设置为1时,每个节点都选举自己成为master(认为另外一个节点是死的),这样就会导致出现了两个cluster,也称脑裂。
准备工作
安装ELK之前,需要明确下面几点:
- 组网方式。集群有几个节点,每个节点上搭建哪些服务。
- 数据源。
- 兼容性。
组网方式
- kibana安装在ES client节点(不要安装在master或者Data节点上),因为client节点有reduce阶段,所以该节点尽量内存和CPU充足些。
- 默认情况下,ES节点既是master节点也是data节点。但是集群规模增大时,需考虑将master节点和data节点分离
- minimum_master_nodes需要设置为(master_eligible_nodes / 2)+1 用来防止脑裂情况,兼顾高可用,master_eligible_nodes 最小值为3的奇数,minimum_master_nodes最小值为2。
- logstash一般安装至少两个节点,用来保证高可用。
数据源
数据从哪里获取,这个能决定你选择哪个版本的ELK。比如:若你的kafka集群是0.9.x的版本,你安装了最新6.x的ELK,那么不好意思,该版本的logstash是无法从kafka获取到数据的。
兼容性
Elasticsearch, Logstash, Kibana不同的版本之间,兼容性需考虑清楚。建议ELK选择同一个版本安装。
下面以安装ELK6.2.4版本为例(Linux环境)
软件下载:https://www.elastic.co/cn/products 根据平台版本下载对应的安装包
环境要求: java版本是8或以上
组网方式
image.png
Elasticsearch
- 解压:tar -zxvf elasticsearch-6.2.4.tar.gz
- 修改配置:
--1. jvm.options文件,主要修改下-Xms和-Xmx,建议都设置为内存的50%左右
--2. elasticsearch.yml,主要修改
cluster.name: wm-es
node.name: bi1
path.data: /srv/nbs/0/elasticsearch/data
path.logs: /srv/nbs/0/elasticsearch/logs
network.host: esIp
http.port: 9200
discovery.zen.ping.unicast.hosts: ["es1_ip", "es2_ip", "es3_ip"]
discovery.zen.minimum_master_nodes: 2
bootstrap.system_call_filter: false
- 启动ES ./bin/elasticsearch -d
- 查看集群状态 GET /_cat/health?pretty GET /_cat/nodes?pretty
如果启动ES过程中报错:vm.max_map_count 65530 is too low等问题,请root权限修改vm.max_map_count并重启即可。
搭建ES-client节点,需要在elasticsearch.yml中增加如下配置:
node.master: false
node.data: false
node.ingest: false
search.remote.connect: false
Logstash
- 解压:tar -zxvf logstash-2.4.0.tar.gz
- 修改配置,新建kafka-pipeline.conf
input {
kafka {
bootstrap_servers => "10.194.xxx.yyy:9094,10.194.xxx.yyy:9094,10.194.xxx.yyy:9094"
auto_offset_reset => "latest"
group_id => "fenzhan"
id => "8.0.6"
client_id => "logstash-1"
check_crcs => "false"
topics => ["fenzhan.exception.online"]
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => ["10.172.xxx.yyy:9200","10.172.xxx.yyy:9200","10.172.xxx.yyy:9200"]
index => "logstash-%{+YYYY.MM.dd}"
template_overwrite => true
}
}
- 检查Logstash的配置
./bin/logstash -f kafka-pipeline.conf --config.test_and_exit
- 检查通过后,重载配置并启动:
./bin/logstash -f kafka-pipeline.conf --config.reload.automatic
- 查看进程是否启动 jps/ ps -ef |grep logstash
Kibana
- 解压:tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz
- 修改kibana.yml配置
server.port: 5601
server.host: "10.171.xxx.yyy" //这个是外部浏览器访问的地址
elasticsearch.url: "http://esIp:9200" //这个是集群内部通信的
- 启动Kibana
./bin/kibana
会提示是否启动成功,URL是啥
所有节点安装完成,并启动成功之后,进入Kibana的页面,点击Dev Tools进入Console,就可以通过REST API 来查询ES的数据。
安装过程中,有任何问题,请留言!!!
参考资料: