ELK的基本介绍
ELK是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈
左边我们部署了多台服务器,然后我们通过logstash来采集数据,采集完成我们发送到ES集群中存起来,然后通过Kibana去展示到我们的浏览器中,就是这么一个简单的套路 Elasticsearch是个开源分布式搜索引擎,它的特点有:开箱即用,分布式,零配置,自动发现,索引自动分片,索引副本机制,RESTful风格接口,多数据源,自动搜索负载等。 Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(比如供ES来进行搜索)。 Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
感谢: juejin.cn/post/684490… 作者(说出你的愿望吧)提供的参考示例.
该示例只是测试时使用,所需要的安装包本地都已经下载下来,我这里也是直接拿来主义,大家也可以自行在官网下载.
ELK的参考资料
ELK官网:www.elastic.co/
ELK官网文档:www.elastic.co/guide/index…
ELK中文手册:www.elastic.co/guide/cn/el…
ELK中文社区:elasticsearch.cn
我整体需要的安装包目录如下:
① 集成 Elasticsearch
首先我们得注意的是,ES是不能通过root用户来进行启动的,必须通过普通用户来安装启动
在线安装包解压...我本机示例全部都存放在/application 根目录下:
mkdir elasticsearch
将压缩包拷贝到当前目录下,这里直接使用FileZilla Client 进行上传便可
tar -zxvf elasticsearch-6.7.0.tar.gz
mv elasticsearch-6.7.0 node1
scp -r node1/ node2:$PWD
scp -r node1/ node3:$PWD
本机使用三个elasticsearch实例服务,分别为node1,node2,node3
在项目目录下创建两个文件夹,都在ES的目录下创建即可
mkdir logs
mkdir datas
配置elasticsearch配置在config文件夹中 vim elasticsearch.yml
cluster.name: elasticsearch
node.name: node1
path.data: /application/elasticsearch/data
path.logs: /application/elasticsearch/logs
network.host: 192.168.153.129
http.port: 9201
discovery.zen.ping.unicast.hosts: ["node1", "node2","node3"]
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
http.cors.enabled: true
http.cors.allow-origin: "*"
node.max_local_storage_nodes: 4
---------------参数描述------------------------
cluster.name --- 集群的名字,默认ElasticSearch
node.name --- 节点名
path.data --- 数据文件存放路径
path.logs --- 日志文件存放路径
http.port --- 访问端口号
discovery.zen.ping.unicast.hosts: 集群自动发现功能
bootstrap.system_call_filter:
bootstrap.memory_lock:
falsehttp.cors.enabled:
truehttp.cors.allow-origin: "*"
node.max_local_storage_nodes: 本机可以启动的实例总数 ,默认是1 ,也就是一台机器只能启动一个实例
node2 与 node3 分别按以上做配置
这里要注意path.data 和 path.logs记得路径前要/
1. 修改一些系统配置
实例启动的时候
1.1 普通用户打开文件的最大数限制
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
解决方案:解除普通用户打开文件的最大数限制,不然ES启动时可能会报错
sudo vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
这四行粘贴上去即可,注意 * 代表所有用户, 特殊情况下只编辑以上参数可能还是有问题,我这里启动的时候就遇见过 ,还需要对/etc/security/ 目录下的 limits.d 做配置.
也需要在此处做同样配置:
1.2 普通用户启动线程数限制
sudo vi /etc/sysctl.conf
配置如下两行代码:
vm.max_map_count=655360
fs.file-max=655360
执行 sudo sysctl -p,使得配置生效
注意:以上两个问题修改完成之后,一定要重新连接linux生效。关闭secureCRT或者XShell工具,然后重新打开工具连接linux即可
1.3 重新连接工具后的行动
执行下面4个命令,没问题即可
[admin@localhost limits.d]$ ulimit -Hn
65536
[admin@localhost limits.d]$ ulimit -Sn
65536
[admin@localhost limits.d]$ ulimit -Hu
204800
[admin@localhost limits.d]$ ulimit -Su
204800
2. 启动elasticsearch
nohup /application/elasticsearch/node1/bin/elasticsearch 2>&1 &
nohup /application/elasticsearch/node2/bin/elasticsearch 2>&1 &
nohup /application/elasticsearch/node3/bin/elasticsearch 2>&1 &
启动完毕之后,可以进行访问
http://192.168.153.129:9201/
http://192.168.153.129:9202/
http://192.168.153.129:9203/
展示如下,代表实例已经启动成功:
3. elasticsearch-head插件
由于es服务启动之后,访问界面比较丑陋,为了更好的查看索引库当中的信息,我们可以通过安装elasticsearch-head这个插件来实现,这个插件可以更方便快捷的看到es的管理界面 .elasticsearch-head 依赖node环境 .
nodeJS安装
首先安装一下node.js ,将下载好安装包上传到目录中并解压 ,目录结构如下:
tar -xvf node-v8.1.0-linux-x64.tar.gz
建立软连接,变为全局
ln -s /application/node-v8.1.0-linux-x64/bin/node /usr/local/bin/node
ln -s /application/node-v8.1.0-linux-x64/bin/npm /usr/local/bin/npm
执行命令查看node 是否已经安装完成
elasticsearch-head插件的安装
上传压缩包并解压,目录结构如下:
配置 Gruntfile.js
由于Gruntfile.js 文件内容比较大,直接使用vim 编辑比较费时 .大家可以直接下载到本地,编辑之后再上传到服务器.
vim Gruntfile.js
你可以直接先shift+:,转到命令模式,使用/hostname来找到这个参数,hostname: '你自己的节点ip'
主要修改如下图配置:
hostname: 本机的ip地址
port: elasticsearch-head服务启动的端口号
配置 app.js
cd _site/
vim app.js
和上面同样的套路,先找http:// 这个关键字
上图的ip 与端口号是你 elasticsearch 服务的ip与端口号 ,自己配置上就行.
启动elasticsearch-head
cd ./elasticsearch-head/node_modules/grunt/bin/
nohup ./grunt server 2>&1 &
启动完毕之后: 访问 Gruntfile.js 中配置的ip+端口号:如下图
如何关闭elasticsearch-head的插件进程
sudo yum install net-tools
netstat -nltp | grep 9100
kill -9 88297
② 集成 Kibana
导入安装包解压,目录结构如下
配置Kibana
cd /application/kibana-6.7.0-linux-x86_64/config
vi kibana.yml
配置一下参数: 我这里只配置了一个elasticsearch 服务实例
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.153.129:9201"]
启动Kibana
nohup ./bin/kibana 2>&1 &
访问192.168.153.129:5601 ,等待方可
③ 集成 logstash
Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。本次测试我们使用Filebeat将数据推送到logstash中,并由logstash将聚合的日志文件推送到elasticsearch中 .
Filebeat是轻量级,资源占用较低的日志收集工具,从各服务器上收集日志并将这些日志发送到Logstash实例中处理。Filebeat专为可靠性和低延时而设计。Filebeat只占用很少的主机资源,从而Beat输入插件有效的降低了Logstash实例的资源需求。
Logstash默认安装已含有Beat input插件。Beat输入插件使Logstash可以从Elastic Beat框架接收事件,这意味者任何编写为与Beat框架一起工作的Beat(如Packetbeat和Metricbeat)都可以将事件数据发送到Logstash。
1. 安装Logstash
将压缩包导入并解压
创建 first-pipeline.conf 文件 ,我这里直接将配置文件放置到了bin目录下,并做如下配置:
input {
beats {
port => "5044"
}
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
elasticsearch {
# es地址
hosts => ["192.168.153.129:9201"]
# 同步的索引名
index => "logstash"
}
stdout { codec => rubydebug }
}
由于我们配置的ES使用的采集索引是logstash ,所以我们需要在ES建立该索引
可以运行以下命令验证上面的配置:
bin/logstash -f first-pipeline.conf --config.test_and_exit
--config.test_and_exit选项会检查配置文件并报告错误。
运行:
bin/logstash -f first-pipeline.conf --config.reload.automatic
当logstash 启动后
2. 安装Filebeat
将压缩包导入并解压
创建一个Filebeat 读取的文件目录地址
随便上传一个springboot 项目中 logback 生成的日志文件
在Filebeat安装目录中找到并打开filebeat.yml文件,替换如下行中的配置项。确保paths项为先前下载的Apache示例日志文件路径。
filebeat.prospectors:
- type: log
paths:
- /application/logs/credit_hours-9001.info.2021-04-08.0.log
output.logstash:
hosts: ["192.168.153.129:5044"]
hosts: ["192.168.153.129:5044"] 该地址是我们下面要启动的Logstash 的实例地址+端口
启动Filebeat
sudo ./filebeat -e -c filebeat.yml -d "publish"
Filebeat将尝试在端口5044上建立连接。在Logstash启动一个激活状态的Beats插件前,该端口上没有任何响应,所以在输入插件处于未激活状态前你看到的在5044端口上建立连接失败的信息都是正常的。
当所有服务都启动完成之后,在kibana中可以看到我们的ES索引
更新我们logs文件的的日志数据,然后在kibana 建立索引规则
然后,按索引筛选我们的内容.
以上的实例只做一个测试使用,很多功能并没有深入了解 ,望大家谅解 .