ELK = Elasticserach + Logstash + kibana(包含但不仅限于)
简介:
Elasticsearch:分布式搜索和分析引擎,具有⾼可伸缩、⾼可靠和易管理等特点。基于 Apache Lucene 构建,能对⼤容量的数据进⾏接近实时的存储、搜索和分析操作。通常被⽤作某些应⽤的基础搜索引擎,使其具有复杂的搜索功能;
Logstash:数据收集引擎。它⽀持动态的从各种数据源搜集数据,并对数据进⾏过滤、分析、丰富、统⼀格式等操作,然后存储到⽤户指定的位置;
Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使⽤,对其中数据进⾏搜索、分析和以统计图表的⽅式展⽰;
Filebeat:ELK 协议栈的新成员,⼀个轻量级开源⽇志⽂件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集⽇志数据的 server 上安装 Filebeat,并指定⽇志⽬录或⽇志⽂件后,Filebeat 就能读取数据,迅速发送到 Logstash 进⾏解析,亦或直接发送到 Elasticsearch 进⾏集中式存储和分析
ELK常⽤架构及使⽤场景说明
1、最简单架构
在这种架构中,只有⼀个 Logstash、Elasticsearch 和 Kibana 实例。Logstash 通过输⼊插件从多种数据源(⽐如⽇志⽂件、标准输⼊ Stdin等)获取数据,再经过滤插件加⼯数据,然后经 Elasticsearch 输出插件输出到 Elasticsearch,通过 Kibana 展⽰。
2、以Logstash 作为⽇志搜集器
这种结构因为需要在各个服务器上部署 Logstash,⽽它⽐较消耗 CPU 和内存资源,所以⽐较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚⾄可能导致⽆法正常⼯作。
3、以Beats 作为⽇志搜集器
这种架构引⼊ Beats 作为⽇志搜集器。⽬前 Beats 包括四种: Packetbeat(搜集⽹络流量数据);
Topbeat(搜集系统、进程和⽂件系统级别的 CPU 和内存使⽤情况等数据); Filebeat(搜集⽂件数据);
Winlogbeat(搜集 Windows 事件⽇志数据)。
Beats 将搜集到的数据发送到 Logstash,经 Logstash 解析、过滤后,将其发送到 Elasticsearch 存储,并由 Kibana 呈现给⽤户。
这种架构解决了 Logstash 在各服务器节点上占⽤系统资源⾼的问题。相⽐ Logstash,Beats 所占系统的 CPU 和内存⼏乎可以忽略不计。另外,Beats 和 Logstash 之间⽀持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通信安全。因此这种架构适合对数据安全性要求较⾼,同时各服务器性能⽐较敏感的场景
4、引⼊消息队列模式
Beats 还不⽀持输出到(新版本除外:5.0版本及以上),所以在消息队列前后两端只能是 Logstash 实例。logstash从各个数据源搜集数据,不经过任何处理转换仅转发出到消息队列(kafka、redis、rabbitMQ等),后logstash从消息队列取数据进⾏转换分析过滤,输出到elasticsearch,并在kibana进⾏图形化展⽰
模式特点:这种架构适合于⽇志规模⽐较庞⼤的情况。但由于 Logstash ⽇志解析节点和 Elasticsearch 的负荷⽐较重,可将他们配置为集群模式,以分担负荷。引⼊消息队列,均衡了⽹络传输,从⽽降低了⽹络闭塞,尤其是丢失数据的可能性,但依然存在 Logstash 占⽤系统资源过多的问题
⼯作流程:Filebeat采集—> logstash转发到kafka—> logstash处理从kafka缓存的数据进⾏分析—> 输出到es—> 显⽰在kibana
基于第⼀种最简单的架构部署:了解⼯作流程
系统环境:Centos 7.3
IP:192.168.152.253
JDK:java version \"1.8.0_191\"(须>=1.8)Elasticserach-6.3.2 —> Elasticsearch-7.5.2logstash-7.3.1kibana-7.5.2
注:Elasticsearch版本须与kibana版本相同,否则连接报错别问我为什么知道的,实⼒踩坑。
⼀、下载JDK
ORACLE官⽹下载JDK很慢,并且不⽀持迅雷、wget等下载⽅式以上是华为的⼀个JDK下载地址,⾮常迅速。
下载完毕之后,加⼊PATHvim /etc/profile
export JAVA_BIN=/usr/local/jdk1.8.0_191/bin/ PATH=$PATH:$MYSQL_BIN:$PHP_BIN:$JAVA_BIN写到最后
保存后执⾏ source /etc/profile 即刻⽣效java -version 可查看版本
⼆、部署Elasticserach
# 此博客有分享ES各版本安装包,本⽂采⽤elasticsearch-7.5.2https://blog.csdn.net/weixin_372812/article/details/101483434# 下载完毕后上传⾄服务器# 解压
tar zxvf elasticsearch-7.5.2-linux-x86_.tar.gz -C /usr/local/ useradd elasticsearch #创建⽤户
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-7.5.2/su - elasticsearch
1、修改配置⽂件vim elasticsearch.yml
###以下配置均根据⾃⾝习惯配置即可
### network.host若是监听本机则写本机,0.0.0.0代表所有path.data: /var/data/elasticsearchpath.logs: /var/log/elasticsearch
network.host: 192.168.152.253 #监听的⽹络地址http.port: 9200
http.cors.enabled: true #这两条是负责elasticsearch-head连接elasticsearch的http.cors.allow-origin: \"*\"
2、启动服务:
[elasticsearch@TestCentos7 elasticsearch-6.3.2]$ bin/elasticsearch -d #启动[elasticsearch@TestCentos7 elasticsearch-6.3.2]$ netstat -tnl
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN - tcp6 0 0 :::111 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN - tcp6 0 0 ::1:25 :::* LISTEN -
发现并没有启动成功,于是查看⽇志报错:
报错1:Native controller process has stopped - no new native processes can be started解决:
vim /etc/security/limits.confelasticsearch soft nofile 65536elasticsearch hard nofile 65536elasticsearch soft nproc 4096elasticsearch hard nproc 4096vim /etc/security/limits.d/20-nproc.conf* soft nproc 4096
root soft nproc unlimited### 将*号改为⽤户名
elasticsearch soft nproc 4096root soft nproc unlimitedvim /etc/sysctl.conf
vm.max_map_count = 655360:wq
执⾏:sysctl -p
报错2:[ERROR][o.e.b.Bootstrap ] [TestCentos7] node validation exception[1] bootstrap checks failed解决:
vim config/elasticsearch.yml
#将下⾏注释取消,并改为以下内容node.name: node-1
cluster.initial_master_nodes: [\"node-1\"]
再次启动:
[elasticsearch@TestCentos7 elasticsearch-7.5.2]$ bin/elasticsearch -d[elasticsearch@TestCentos7 elasticsearch-7.5.2]$ netstat -tnlActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 192.168.152.253:25 0.0.0.0:* LISTEN tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 192.168.152.253:9200 :::* LISTEN tcp6 0 0 192.168.152.253:9300 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN#启动成功 9200端⼝ 与 9300端⼝9200端⼝ 与 9300端⼝区别:
- 9200作为Http协议,主要⽤于外部通讯
- 9300作为Tcp协议,jar之间就是通过tcp协议通讯- ES集群之间是通过9300进⾏通讯
3、安装 elasticsearch-head 插件(⾮必须安装)
elasticsearch-head是Elasticsearch的图形化界⾯,⽅便⽤户对数据进⾏增删改查,基于REST的进⾏数据交互两种安装⽅式 1、docker安装 2、git安装1、使⽤docker的集成好的elasticsearch-head
docker run -p 9100:9100 mobz/elasticsearch-head:5
2、使⽤git安装elasticsearch-head
yum install -y epel git
yum install -y npm 或
wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x.tar.gztar zxvf node-v10.14.1-linux-x.tar.gz -C /usr/local#然后将此⽬录加⼊PATH
git clone git://github.com/mobz/elasticsearch-head.gitcd elasticsearch-head
npm install phantomjs-prebuilt@2.1.16 --ignore-scriptsnpm install
npm run start #启动
############可选配置#############1、设置默认的连接地址
vim /usr/local/elasticsearch-head/_site/app.js
4374 this.base_uri = this.config.base_uri || this.prefs.get(\"app-base_uri\") || \"http://192.168.152.253:9200\";2、修改默认监听的服务器端⼝
vim /usr/local/elasticsearch-head/Gruntfile.js 97 port: 9100,
-------------------------另外,如果head⼀直⽆法连接上ES,则可以试着修改默认的连接地址
三、搭建Nginx直接 yum 安装yum -y install nginx
vim /etc/nginx/nginx.conf #编辑配置⽂件
http{ #http模块中
log_format json '{\"@timestamp\":\"$time_iso8601\ #配置NGINX的⽇志格式 json '\"host\":\"$server_addr\ '\"clientip\":\"$remote_addr\ '\"size\":$body_bytes_sent,'
'\"responsetime\":$request_time,'
'\"upstreamtime\":\"$upstream_response_time\ '\"upstreamhost\":\"$upstream_addr\ '\"http_host\":\"$host\ '\"url\":\"$uri\
'\"xff\":\"$http_x_forwarded_for\ '\"referer\":\"$http_referer\ '\"agent\":\"$http_user_agent\
'\"status\":\"$status\
access_log /var/log/nginx/access.log_json json; #配置⽇志路径 json格式 error_log /var/log/nginx/error.log;}
四、搭建Logstash1、官⽅安装指南:
不管是按照哪种⽅法安装都巨慢,找到了⼀个⼤佬提供的⽹盘:
2、下载完毕后,上传⾄服务器,解压
tar zxvf logstash-7.3.1.tar.gz -C /usr/local/cd /usr/local/logstash-7.3.1/
测试:
bin/logstash -e 'input { stdin {} } output { stdout {} }'注:
-e 执⾏操作 input 标准输⼊ { stdin } 插件
output 标准输出 { stdout } 插件
输⼊: Hello World输出:
基本功能已经实现
3、配置配置⽂件vim stdin.conf
input{ file {
path => \"/var/log/nginx/access.log_json\" codec => \"json\" type => \"nginx\" }}filter{
mutate {
split => [\"upstreamtime\",\] }
mutate {
convert => [\"upstreamtime\",\"float\"] }}
output{
elasticsearch {
hosts => [\"192.168.152.253\"]
index => \"logstash-%{+YYYY.MM.dd}\" }}
#启动服务
[root@TestCentos7 logstash-7.3.1]# bin/logstash -f config/stdin.conf
启动成功后,访问Nginx服务器,会将access.log传输⾄ES中:
五、搭建kibana1、下载
#同样是这个链接,下载对应版本的kibana https://blog.csdn.net/weixin_372812/article/details/101483434
2、解压,修改配置⽂件
tar zxvf kibana-7.5.2-linux-x86_.tar.gz -C /usr/local/
vim /usr/local/kibana-7.5.2-linux-x86_/config/kibana.yml....
elasticsearch.hosts: [\"http://192.168.152.253:9200\"] #设置ES的主机地址server.host: \"0.0.0.0\" #可访问主机server.port: 5601 #监听端⼝...
3、启动
[root@TestCentos7 kibana-7.5.2-linux-x86_]# bin/kibana --allow-root
警告1:Generating a random key for xpack.security.encryptionKey. To prevent sessions from being invalidated on restart, please setxpack.security.encryptionKey in kibana.yml
在 kibana.yml 中添加此配置:
xpack.security.encryptionKey: \"something_at_least_32_characters\"
官⽅⽂档:https://www.elastic.co/guide/en/kibana/6.x/using-kibana-with-security.html
⾄此ELK搭建完毕 继续学习如何使⽤它把~
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务