您好,欢迎来到化拓教育网。
搜索
您的当前位置:首页ELK快速部署(踩坑记录、常见报错解决)及常用架构讲解

ELK快速部署(踩坑记录、常见报错解决)及常用架构讲解

来源:化拓教育网
ELK快速部署(踩坑记录、常见报错解决)及常⽤架构讲解

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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务