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.2

logstash-7.3.1

kibana-7.5.2

注:Elasticsearch版本须与kibana版本相同,否则连接报错!!!

别问我为什么知道的,实力踩坑。

一、下载JDK

ORACLE官网下载JDK很慢,并且不支持迅雷、wget等下载方式

https://repo.huaweicloud.com/java/jdk/

以上是华为的一个JDK下载地址,非常迅速。

下载完毕之后,加入PATH

vim /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.2
https://blog.csdn.net/weixin_37281289/article/details/101483434 # 下载完毕后上传至服务器
# 解压
tar zxvf elasticsearch-7.5.2-linux-x86_64.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/elasticsearch
path.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.conf
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096 vim /etc/security/limits.d/20-nproc.conf
* soft nproc 4096
root soft nproc unlimited ### 将*号改为用户名 elasticsearch soft nproc 4096
root soft nproc unlimited vim /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 -tnl
Active 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-x64.tar.gz
tar zxvf node-v10.14.1-linux-x64.tar.gz -C /usr/local
#然后将此目录加入PATH git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install phantomjs-prebuilt@2.1.16 --ignore-scripts
npm 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,则可以试着修改默认的连接地址

启动成功后,访问http://ip:9100访问

三、搭建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;
}

四、搭建Logstash

1、官方安装指南:

https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

不管是按照哪种方法安装都巨慢,找到了一个大佬提供的网盘:

#直接在此下载,美滋滋https://blog.csdn.net/weixin_37281289/article/details/101483434

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中:

五、搭建kibana

1、下载

#同样是这个链接,下载对应版本的kibana https://blog.csdn.net/weixin_37281289/article/details/101483434

2、解压,修改配置文件

tar zxvf kibana-7.5.2-linux-x86_64.tar.gz -C /usr/local/

vim /usr/local/kibana-7.5.2-linux-x86_64/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_64]# bin/kibana --allow-root

警告1:Generating a random key for xpack.security.encryptionKey. To prevent sessions from being invalidated on restart, please set xpack.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

启动成功后,访问http://ip:5601

至此ELK搭建完毕  继续学习如何使用它把~

ELK快速部署(踩坑记录、常见报错解决)及常用架构讲解的更多相关文章

  1. 03:git常见报错解决方法

    1.1 git常见报错解决方法 1.warning: LF will be replaced by CRLF in .idea/workspace.xml. 参考博客:https://www.cnbl ...

  2. Django 连接 MySQL 数据库及常见报错解决

    目录 Django 连接 MySQL数据库及常见报错解决 终端或者数据库管理工具连接 MySQL ,并新建项目所需数据库 安装访问 MySQL 的 Python 模块 Django 相关配置 可能会遇 ...

  3. Mac系统STF自动化环境搭建及部署踩坑记录

    因为公司需要寻找一个免root的自动化测试方案,所以以前做的老方案需要被替代.一阵搜寻找到了这个框架,但是部署起来很是折腾,搞了一下午终于搞定,顺便记录一下过程,有需要的自取. 转载请注明出处:htt ...

  4. Exceptionless 本地部署踩坑记录

    仅已此文记录 Exceptionless 本地部署所遇到的问题 1.安装ElasticSearch文本 执行elasticsearch目录中的elasticsearch.bat 没有执行成功. 使用命 ...

  5. .NET Exceptionless 本地部署踩坑记录

    仅已此文记录 Exceptionless 本地部署所遇到的问题 1.安装ElasticSearch文本 执行elasticsearch目录中的elasticsearch.bat 没有执行成功. 使用命 ...

  6. virtualvenv+django+uWSGI+nginx 部署 踩坑记录

    原创博文 转载请注明出处! uwsgi: unrecognized option '--http:8089' uwsgi: unrecognized option '--http' uwsgi trk ...

  7. Vue路由history模式踩坑记录:nginx配置解决404问题

    问题背景: vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载.但是如果我们不想hash这种以#号结尾的路径时候的话,我们可以使 ...

  8. Docker常见报错解决方法记录

    [问题一]OCI runtime exec failed......executable file not found in $PATH": unknown [root@localhost ...

  9. lunix部署其前端项目常见报错

    1.npm install 报权限错误,如: 解决办法: 添加--unsafe-perm 参数,如 #npm install --registry=https://registry.npm.taoba ...

  10. js常见报错解决方法

    1.获得类名document.getElementsClassName(常出现一个问题): getClassName("gn","pt")[0].appendC ...

随机推荐

  1. 复习 - es6语法

    这几天电脑有点问题,一直在弄,而且论文也逼近了也在时间弄那个 ,前面node有一个大项目,已经做完了,我现在是准备把上次复习断下的继续复习一直到这个项目,然后就开始vue了. 1. 首先是函数的一个进 ...

  2. JVM(Java虚拟机) 整理(一):基础理论

    JVM整体结构 本文主要说的是HotSpot虚拟机, JVM 全称是 Java Virtual Machine,中文译名:Java虚拟机 简化一下: Java字节码文件 Class文件本质上是一个以8 ...

  3. yb课堂 注册-登陆-个人模块 《三十九》

    Cube-UI的form表单 https://didi.github.io/cube-ui/#/zh-CN/docs/form 注册 Register.vue <template> < ...

  4. Git 奇幻之旅⌛️续集

    第十二天:暂存未完成的修改 小明和小红在开发一个新功能时,他们需要切换到另一个分支去修复一个紧急的 bug .但是他们的当前分支上还有一些未完成的修改,他们不想提交这些修改,也不想丢弃这些修改.有一天 ...

  5. Django __init__ 方法用于初始化

    使用面向对象的方法来创建一个栈板信息的模型,比如使用 Python 的类来表示栈板信息.以下是一个简单的示例: class Pallet: def __init__(self, number, nam ...

  6. OpenGL 三角形颜色插值

    1.最懒的方法--Nearest Neighbor对于三角形内的点,离三个顶点谁最近,就赋值为那个顶点对应的颜色. 2.最天真的方法--Distance三角形内一点的值应该来自于三个顶点. 计算距离: ...

  7. 很呆的一个问题:我的新项目又找不到mapper这个bean了

    1.选springboot版本 <properties> <java.version>8</java.version> <project.build.sour ...

  8. SSL/TLS 深入浅出

    SSL,https(HTTP over SSL), X.509, SSL 证书 ,证书申请 /导入/签发, 等名词,想必有一定工作经验的小伙伴,一定都会略有耳闻,或者至少也听神边大神念叨过.虽然司空见 ...

  9. vue3源码学习api-vue-sfc文件编译

    vue 最有代表性质的就是.VUE 的文件,每一个vue文件都是一个组件,那么vue 组件的编译过程是什么样的呢 Vue 单文件组件 (SFC)和指令 ast 语法树 一个 Vue 单文件组件 (SF ...

  10. 【Tutorial C】01 概述

    历史 History 欢迎来到C语言的世界!C语言是一种强大的专业化编程语言,深受业余和专业编程人员的欢迎. 在学习之前先让我们了解和认识它! C语言的原型是A语言(ALGOL 60语言). 1963 ...