前言:
架构图:
一、环境准备
三台虚拟机
192.168.50.6
192.168.50.8
192.168.50.9
机器部署说明
192.168.50.6、192.168.50.8安装elasticsearch 192.168.50.6为主节点,192.168.50.8为数据节点
192.168.50.6安装filebeat
192.168.50.8安装logstash
192.168.50.9安装kibana
ELK组件版本
filebeat:6.3.2
logstash:6.3.2
elasticsearch:6.3.2
kibana:6.3.2
jdk1.8
tomcat8
组件下载:
下载官网地址:https://www.elastic.co/cn/downloads/
历史版本下载:https://www.elastic.co/cn/downloads/past-releases
官网下载6.3.2版本的组件压缩包
二、组件部署安装
1、Elasticsearch安装部署
(1)、直接下载或上传安装包
(2)、解压安装包到指定目录(/home/elk)
tar -zxvf elasticsearch-6.3.2.tar.gz -C /home/elk/
cd /home/elk/elasticsearch-6.3.2
(3)、修改config/elasticsearch.yml配置
集群配置修改:
vi config/elasticsearch.yml
主节点配置:
cluster.name: cluster-node # 集群中的名称
node.name: master-node # 该节点名称
node.master: true # 意思是该节点为主节点
node.data: false # 表示这不是数据节点
network.host: 0.0.0.0 # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200 # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.50.6", "192.168.50.8"] # 配置自动发现
#Memory
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
数据节点配置:
cluster.name: cluster-node # 集群中的名称
node.name: data-node-1 # 该节点名称
node.master: false #
node.data: true # 表示该节点为数据节点
network.host: 0.0.0.0 # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200 # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.50.6", "192.168.50.8"] # 配置自动发现
#Memory
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
(4)、把下面"问题解决"的设置提前设置了,不然报错了还要解决
(5)、启动elasticsearch
root用户无法启动elasticsearch,需要使用非root用户,
这里我需要新建用户,非root用户忽略创建用户
#创建用户组
groupadd elkgroup
#创建用户及文件授权
useradd -d /home/elk elkuser -g elkgroup
#切换用户
su elkuser
启动elasticsearch
/home/elk/elasticsearch-6.3.2/bin/elasticsearch -d
(加-d,则表示后端运行)
关闭elasticsearch
jps
kill -9 进程号
(6)、验证
- 在浏览器中输入http://192.168.50.6:9200/ 可看到单节点信息即为启动成功
- 在浏览器中输入主节点的http://192.168.50.6:9200/_cluster/health?pretty,
- 可集群的健康检查及查看集群信息
http://192.168.50.6:9200/_cluster/state?pretty 可查询集群及其节点的详细内容
以上用curl 命令也可以,
curl 'http://192.168.50.6:9200/_cluster/health?pretty'
bash-4.1$ curl 'http://192.168.50.6:9200/_cluster/health?pretty'
{
"cluster_name" : "my-application",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
(7)、问题解决:
-
问题1:java.lang.UnsupportedOperationException: seccomp unavailable:requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
只是警告,主要是因为Linux版本过低造成的,警告不影响使用,可以忽略 -
问题2:node validation exception
[4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
原因:无法创建本地文件问题,用户最大可创建文件数太小,修改配置
解决方案:切换到root用户,编辑limits.conf配置文件, 添加类似如下内容:
vi /etc/security/limits.conf
添加如下内容:
#elasticsearch添加配置
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
- 问题3:
max number of threads [1024] for user [es] likely too low, increase to at least [4096]
原因:无法创建本地线程问题,用户最大可创建线程数太小
解决方案:切换到root用户,进入limits.d目录下,修改90-nproc.conf 配置文件。
vi /etc/security/limits.d/90-nproc.conf
找到如下内容:
* soft nproc 1024
#修改为
* soft nproc 4096
- 问题4:
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
原因:最大虚拟内存太小
解决方案:切换到root用户下,修改配置文件sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
#elasticsearch添加配置
vm.max_map_count=655360
并执行命令:sysctl -p
然后重新启动elasticsearch,即可启动成功。
-
问题5:
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
原因: Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true
解决方案:在elasticsearch.yml中配置bootstrap.system_call_filter为false,
注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false -
问题6:
Exception in thread “main” java.nio.file.AccessDeniedException:
/home/elk/elasticsearch-6.3.2/config/jvm.options
原因:使用非 root用户启动ES,该用户的文件权限不足
解决方案:添加用户对该文件的权限 chown -R elkuser:elkgroup /home/elk -
问题7:Java HotSpot™ 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error=‘Cannot allocate memory’ (errno=12)
原因:由于elasticsearch默认分配jvm空间大小为2g,实际内存不够
解决方案:
1、增加服务器内存(土豪专用)
2、修改elasticsearch默认jvm空间分配(实用)
cd /home/elk/elasticsearch-6.3.2
vi config/jvm.options
-Xms2g
-Xmx2g
改为
-Xms512m
-Xmx512m
2、Kibana安装部署
(1)、直接下载或上传安装包
(2)、解压安装包到指定目录(/home/elk)
tar -zxvf kibana-6.3.2-linux-x86_64.tar.gz -C /home/elk/
cd /home/elk/kibana-6.3.2-linux-x86_64
(3)、修改配置文件:kibana.yml
vi config/kibana.yml
主要改两项
#配置本机ip
server.host: "192.168.50.9"
#配置es集群url
elasticsearch.url: "http://192.168.50.6:9200"
(4)、启动命令
cd /home/elk/kibana-6.3.2-linux-x86_64
./bin/kibana
(5)、验证
ps:注意开启端口5601
访问:192.168.50.9:5601
能打开就是成功了
3、Logstash安装部署
(1)、直接下载或上传安装包
(2)、解压安装包到指定目录(/home/elk)
tar -zxvf logstash-6.3.2.tar.gz -C /home/elk/
cd /home/elk/logstash-6.3.2
(3)、创建自己的配置文件
vi config/first-pipeline.conf
# 日志导入
input {
beats {
#指定监听端口
port => 5044
#要监听的ip地址,默认0.0.0.0;
host => '0.0.0.0'
}
}
# 日志筛选匹配处理
filter {
}
# 日志匹配输出
output {
#可以同时输出到多个终端
#筛选过滤后的内容输出到终端显示
stdout { codec => "rubydebug" }
#导出到elasticsearch
elasticsearch {
# 导出格式为json
codec => "json"
# ES地址+端口
hosts => ["192.168.50.6:9200"]
# 设置索引,可以使用时间变量
index => "logstash-slow-%{+YYYY.MM.dd}"
# ES如果有安全认证就使用账号密码验证,无安全认证就不需要
#user => "admin"
#password => "xxxxxx"
}
}
测试配置
./bin/logstash -f /home/elk/logstash-6.3.2/config/first-pipeline.conf --config.test_and_exit
出现Configuration OK 字样即为可以
(4)、启动命令
cd /home/elk/logstash-6.3.2
./bin/logstash -f /home/elk/logstash-6.3.2/config/first-pipeline.conf --config.reload.automatic
–config.reload.automatic选项启用动态重载配置功能
(5)、问题解决:
- 问题1:Java HotSpot™ 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error=‘Cannot allocate memory’ (errno=12)
原因:由于默认分配jvm空间大小较大,实际内存不够
解决方案:
1、增加服务器内存(土豪专用)
2、修改默认jvm空间分配(实用)
cd /home/elk/logstash-6.3.2
vi config/jvm.options
-Xms1g
-Xmx1g
改为
-Xms512m
-Xmx512m
4、Filebeat安装部署
(1)、直接下载或上传安装包
(2)、解压安装包到指定目录(/home/elk)
tar -zxvf filebeat-6.3.2-linux-x86_64.tar.gz -C /home/elk/
cd /home/elk/filebeat-6.3.2-linux-x86_64
(3)、配置filebeat .yml
主要配置采集那些日志文件(文件路径),输出到哪里(elsticsearch、logstash、kibana)这里我们关闭output.elasticsearch,打开output.logstash,将收集到的信息推送到logstash。
filebeat.yml常用配置:
1)定义日志文件路径
filebeat.inputs:
- type: log
enabled: true
paths:
– /var/log/*.log
2)输出给elsticsearch(不输出给logstash)(建议输出给logstash)
output.elasticsearch:
hosts: ["192.168.1.42:9200"]
3)如果打算用kibana来展示filebeat数据,需要配置为kibana终端
setup.kibana:
host: “localhost:5601″
4)如果elasticsearch和kibana增加了安全配置,你需要在配置文件中指定认证信息,
举例如下:
output.elasticsearch:
hosts: ["myEShost:9200"]
username: “filebeat_internal”
password: “{pwd}”
setup.kibana:
host: “mykibanahost:5601″
username: “my_kibana_user”
password: “{pwd}”
5)配置输出给logstash
output.logstash:
hosts: ["192.168.50.8:5044"]
(4)、启动命令
cd /home/elk/filebeat-6.3.2-linux-x86_64
./filebeat -e -c ./filebeat.yml
三、组件连接
1、各组件说明:
- Elasticsearch是搜索引擎,需要做集群处理,也是需要做优化和性能升级的关键组件;
- Kibana是前台展示,目的是将从Elasticsearch中获取到的检索数据可视化展示和操作;
- Logstash 可做日志收集和过滤,但由于其相对的重量级(安装包大,运行占内存高等),现有大多只用它过滤日志,而非采集;
- Filebeat是日志采集,监控到指定日志文件添加后采集到其配置对应的输出方,轻量级,对被采集的日志和应用无影响,无感知;
2、各组件配置说明:
- Elasticsearch ,配置分配好集群的mater和node节点分配、node节点的主备、数据分片的规则(有需要的话)即可;
- Kibana 配置好自己的ip和端口以及Elasticsearch集群地址就行了;
- Logstash 配置好日志输入(输入方式、监听端口)、日志过滤规则、日志输出(Elasticsearch集群地址)
- Filebeat 配置采集日志文件的地址,采集到日志的输出方(Logstash、中间件、Elasticsearch)
3、启动顺序:
Elasticsearch --> Kibana --> Logstash --> Filebeat