深度剖析 ELK:实战经验分享与实用策略之初识ELK

深度剖析 ELK:实战经验分享与实用策略之初识ELK

ELK简介

Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案,分析网站的访问情况时我们一般会借助Google/百度等方式嵌入JS做数据统计,但是当网站访问异常或者被攻击时我们需要在后台分析如Nginx的具体日志,而Nginx日志分割/GoAccess/Awstats都是相对简单的单节点解决方案,针对分布式集群或者数据量级较大时会显得心有余而力不足,而ELK的出现可以使我们从容面对新的挑战。 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。 通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。 集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量再去使用这些方法就比较的麻烦了。 开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。

1.2、ELK优点

ELK Stack 在最近两年迅速崛起,成为机器数据分析,或者说实时日志处理领域,开源界的第一选择。和传统的日志处理方案相比,ELK Stack 具有如下几个优点: 处理方式灵活。Elasticsearch 是实时全文索引,不需要像 storm 那样预先编程才能使用; 配置简易上手。Elasticsearch 全部采用 JSON 接口,Logstash 是 Ruby DSL 设计,都是目前业界最通用的配置语法设计; 检索性能高效。虽然每次查询都是实时计算,但是优秀的设计和实现基本可以达到全天数据查询的秒级响应; 集群线性扩展。不管是 Elasticsearch 集群还是 Logstash 集群都是可以线性扩展的; 前端操作炫丽。Kibana 界面上,只需要点击鼠标,就可以完成搜索、聚合功能,

1.3、Elasticsearch简介

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene™基础上的分布式的,高可用的,基于json格式的数据构建索引,准实时查询的搜索引擎。Lucene 是当今最先进最高效的全功能开源搜索引擎框架,但是Lucene使用非常复杂。 Elasticsearch使用 Lucene 作为内部引擎,但是在你使用它做全文搜索时,只需要使用统一开发好的API即可,而并不需要了解其背后复杂的 Lucene 的运行原理。 Elasticsearch为去中心化的分布式架构,由若干节点组成集群。节点中没有固定的主控角色,可以灵活伸缩规模。集群中每台服务器通常只需部署一个Elasticsearch节点,每个节点可以将本机的所有数据盘用于存储索引数据。

1.4、API、XML、JSON

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

有了API就可以更好的调用和使用。XML为什么会被丢弃,因为XML文件格式比较庞大,而且不容易解析,不同浏览器之间解析XML又不一样,而且现在微博,等web端的应用,XML越来越跟不上时代的发展。所以现在开始用轻量级的JSON

1.5、RESTFUL的解释

Elasticsearch是可伸缩的。一个采用RESTFUL api 标准的高扩展性和高可用性的实时数据分析的全文搜索工具。 REST全称是Representational State Transfer,中文意思是表现层状态转化。它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 1.表现层:代表资源,比如说一段文本,一部电影,每个资源都有一个ID来表示,这个ID成为我们的URL。每个资源仅代表一个信息,一个信息又可以用很多种形式来表示,比如文字,有txt ,word格式 2.状态转化:客户端想要访问服务器,必须要通过某些手段与服务器进行交互,交互的过程又是基于表现层的。这里的某些手段指的是,GET用来获取资源,post 用来新建资源,PUT 用来更新资源,delete删除资源。 高扩展性体现在拓展非常简单,Elasticsearch新的节点,基本无需做复杂配置,自动发现节点。 高可用性,因为这个服务是分布式的,而且是一个实时搜索平台,支持PB级的大数据搜索能力。从一个文档到这个文档被搜索到,只有略微的延迟,所以说他的实时性非常高。 RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制

1.6 、Elasticsearch的一些基本概念

节点(Node) – 一个Elasticsearch运行的实例。 集群(Cluster) – 具有同一集群名称的节点组成的分布式集群。 索引(Index) – 一个日志记录的集合,类似数据库。须要注意的是索引的名称不能有大写字母。 切片(Shard) – 每个索引的数据可以划分成若干切片,不同切片会被存储到不同的节点上以实现客户端读写条带化。 副本(replica) – 切片的数据冗余,和切片主体的内容相同,保证数据安全和高可用。 你可以把elasticearch当做一个数据库,来对比下与其他数据库的不同,elasticseach是非关系型数据库。

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

1.7、Elasticseach架构

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

gateway:elasticsearch支持的索引数据的存储格式,当这个elasticsearch关闭再启动的时候,他就会从gateway里面读取索引数据。本地的,分布式,亚马逊的S3 第二行是lucene的框架 第三行:对数据的加工处理方式,创建index模块,search Module(搜索模块), Mapping(映射)是定义文档及其包含的字段是如何存储和索引的过程 例如,我们用映射来定义: 哪些字符串字段应该被当做全文字段 哪些字段包含数字、日期或地理位置 是否应该将文档中所有字段的值索引到catch-all字段中 river代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中。 第四行: 左边第一块是elasticsearch自动发现节点的机制。 zen 用来实现节点自动发现的,加入master发生故障,其他的节点就会自动选举,来确定一个master。 中间,方便对查询出来的数据进行数据处理。 最右边:插件识别,中文分词插件,断点监控插件 倒数第二层,是交互方式,默认是用httpd协议来传输的。 最顶层右边是说可以使用java语言,本身就是用java开发的。

1.8、logstash

logstash是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来统一对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。其实logstash是可以被别的替换,比如常见的fluented. Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储到elasticsearch供以后使用(如,搜索)。

1.9、kibana

Kibana是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。也是一个开源和免费的工具,可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

2.0、ELK架构

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper托运人)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer(索引器),logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。

2.1、ELK常见的几种架构

2.2、Elasticsearch + Logstash + Kibana

这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。

2.3、Elasticsearch + Logstash + filebeat + Kibana

与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash),所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障,会造成日志的丢失。 轻量级日志采集框架Beats,其中包含以下6种:

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

2.4、 Elasticsearch + Logstash + filebeat + redis(kafka)

这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。传统web项目中,经常使用log4j以及logback(性能更高)等成熟日志插件进行日志的记录,日志采集新增Logback直接发送日志到Logstash的形式。如果采用此方式,web服务可减少部分生成log文件配置,提高实时性和日志推送效率。架构图:

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

说明: logstash节点和elasticsearch节点可以根据日志量伸缩节点数量, filebeat部署在每台需要收集日志的服务器上。

2.5、ELK部署

2.6安装JDK

由于ELK 3个软件都需要JDK只支持,所以只要安装Elasticsearch + Logstash + Kibana的服务器都要装JDK,jdk版本至少1.8

tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
[root@cong11 ~]# vim /etc/profile  #在文件最后加入一下行
JAVA_HOME=/usr/local/jdk1.8.0_171 
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
export PATH JAVA_HOME CLASSPATH
[root@cong11 ~]# source /etc/profile   #使环境变量生效

root@slave3:/data/logstash-7.3.0/config# java -version  #查看java环境
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
root@slave3:/data/logstash-7.3.0/config#

2.7、安装Elasticsearch

我们这里开始安装Elasticsearch,这里做实验配置用的是Elasticsearch单节点部署,生产环境中应该部署Elasticsearch集群,保证高可用

 [root@cong11 ~]# tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz -C /usr/local/
 #创建用户
 #源码包安装Elasticsearch不能用root启动,这里创建普通用户elk
 [root@cong11 ~]# useradd elk
 #给文件授权
 chown -R elk:elk /usr/local/elasticsearch-7.3.0/
 #2.3.5.7、 修改linux系统打开文件最大数
 [root@cong11 ~]# vim /etc/sysctl.conf
 vm.max_map_count=655360
 [root@cong11 ~]# sysctl -p /etc/sysctl.conf
 vm.max_map_count = 655360
 [root@cong11 ~]# vim /etc/security/limits.conf   #在文件最后添加以下行
#修改最大打开文件数
* soft nofile 65536
* hard nofile 65536
# 修改最大进程数
* soft nproc 65536
* hard nproc 65536

切换到ELK用户 使用普通用户去启动elasticsearch,这是软件强制规定的。

 [root@cong11 ~]# su - elk
 [elk@cong11 ~]$ cd /usr/local/elasticsearch-7.3.0/
 [elk@cong11 elasticsearch-7.3.0]$ ls
bin  config  jdk  lib  LICENSE.txt  logs  modules  NOTICE.txt  plugins  README.textile

2.8、Elasticsearch主配置文件

 [elk@cong11 elasticsearch-7.3.0]$ vim config/elasticsearch.yml
cluster.name: my-application #集群名称
node.name: node-1 #节点名称,如果有多个节点名称不允许相同
bootstrap.memory_lock: false  #锁定内存,关闭,如果jvm占用2G 内存,改为true则直接占用物理机内存2G,可以更改systemctl文件让其允许锁定内存。
network.host: 0.0.0.0 #修改IP
http.port: 9200
cluster.initial_master_nodes: ["node-1"#开启这一项
 [elk@cong11 elasticsearch-7.3.0]$ vim config/jvm.options  
 #这里可以修改jvm虚拟机内存大小,默认1G,官方建议设置为最大物理内存的一半
-Xms1g
-Xmx1g

2.9、启动Elasticsearch

 [elk@cong11 elasticsearch-7.3.0]$ ./bin/elasticsearch
 后台启动
 [elk@cong11 elasticsearch-7.3.0]$  ./bin/elasticsearch &
 或者:
 [elk@cong11 elasticsearch-7.3.0]$ ./bin/elasticsearch -d
 查看端口
 [elk@cong11 elasticsearch-7.3.0]$ netstat -antup | grep 9200
 查看进程
 [elk@cong11 elasticsearch-7.3.0]$ jps -m
 elasticsearch测试
 http://192.168.1.11:9200/
加入开机自启动
[root@cong11 ~]# vim /etc/init.d/elasticsearch
#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch
#author: taft

export JAVA_BIN=/usr/local/jdk1.8.0_171/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

case "$1" in
start)
    su elk<<!
    cd /usr/local/elasticsearch-7.3.0/
    ./bin/elasticsearch -d
!
    echo "elasticsearch startup"
    ;;   
stop)
    es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
    kill -9 $es_pid
    echo "elasticsearch stopped"
    ;;
restart)
    es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
    kill -9 $es_pid
    echo "elasticsearch stopped"
    su elk<<!
    cd /usr/local/elasticsearch-7.3.0/
    ./bin/elasticsearch -d
!
    echo "elasticsearch startup"
    ;;
*)
    echo "start|stop|restart"
    ;;
esac

exit $?
 su elk<<! 切换为elk用户执行下面的命令,<<! 相当于<<EOF
 注意:
 以上脚本的用户为elk,如果你的用户不是,则需要替换
 以上脚本的JAVA_HOME以及elasticsearch_home如果不同请替换
 [root@cong11 ~]# chmod +x /etc/init.d/elasticsearch   #给脚本添加权限
 [root@cong11 ~]# chkconfig --add /etc/init.d/elasticsearch #添加开机自启动

测试脚本 [root@cong11 ~]# systemctl restart elasticsearch [root@cong11 ~]# ps -aux | grep elasticsearch

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

监控集群状态 curl — sXGET http://192.168.1.10:9200/_cluster/health?pretty

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

可以通过提取status字段检测集群状态,正常为绿色,表示自己群可用,但是由于该实验为单节点,因此忽略

3.1、安装Logstash

Logstash管道有两个必需的元素,input和output,以及一个可选的元素,filter。input输入插件使用来自源的数据,filter过滤器插件在你指定时修改数据,output输出插件将数据写入目标

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

解压安装包 [root@cong11 ~]# tar -zxvf logstash-7.3.0.tar.gz -C /usr/local/

3.2、生成配置文件

 [root@cong11 ~]# vim /usr/local/logstash-7.3.0/config/logstash.conf
input {
  file {
        path => "/var/log/messages"         # 收集来源,这里收集系统日志
        start_position => "beginning" #从哪里开始监控,beginning表示从logstash进程开始时监控(常用beginning)
  }
}
filter {                              #数据处理,过滤,为空不过滤
}
output {
     elasticsearch {
      hosts => "192.168.1.11:9200"
      index => "var-massages-%{+yyyy.MM.dd}"
      }
     stdout { codec => rubydebug }      # stdout标准输出,输出到当前终端显示屏
}
 注:上述文件复制时必须去除多余空格,保持yml文件规范。这个配置文件只是简单测试logstash收集日志功能。

做软连接 [root@cong11 ~]# ln -s /usr/local/logstash-7.3.0/bin/* /usr/local/bin/

3.3、启动Logstash

 [root@cong11 ~]# logstash -f /usr/local/logstash-7.3.0/config/logstash.conf
-f, --path.config CONFIG_PATH
从特定文件或目录加载Logstash配置。如果给出了目录,则该目录中的所有文件将按字典顺序连接,然后解析为单个配置文件。不支持多次指定此标志。如果多次指定此标志,则Logstash将使用最后一次出现(例如,与之-f foo -f bar相当于-f bar)。
-t 检测
你可以指定通配符任何匹配的文件将按上述顺序加载。例如,您可以使用通配符功能按名称加载特定文件:
bin / logstash - debug - f '/ tmp / {one,two,three}'
使用此命令,Logstash串接三个配置文件/tmp/one,/tmp/two以及  /tmp/three和他们解析到一个单一的配置。
深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

后台运行 nohup logstash -f /usr/local/logstash-7.3.0/config/logstash.conf & [1] 14650 开机自启动  echo “source /etc/profile” >> /etc/rc.local 

让开机加载java环境 echo “nohup logstash -f /usr/local/logstash-7.3.0/config/logstash.conf &” >> /etc/rc.local [root@cong11 ~]# chmod +x /etc/rc.local

3.4、安装Kibana

解压软件包 [root@cong11 ~]# tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz -C /usr/local/ 修改配置文件

 [root@cong11 ~]# vim /usr/local/kibana-7.3.0-linux-x86_64/config/kibana.yml
 #开启以下选项并修改
server.port: 5601
server.host: "192.168.1.11"
elasticsearch.hosts: ["http://192.168.1.11:9200"]  #修改elasticsearch地址,多个服务器请用逗号隔开

3.5、启动服务

 [root@cong11 ~]# /usr/local/kibana-7.3.0-linux-x86_64/bin/kibana &
 Kibana should not be run as root.  Use --allow-root to continue.
 [root@cong11 ~]# /usr/local/kibana-7.3.0-linux-x86_64/bin/kibana --allow-root &
[214762
深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

3.6、添加开机自启动

[root@cong11 ~]# echo ” nohup /usr/local/kibana-7.3.0-linux-x86_64/bin/kibana –allow-root &” >> /etc/rc.local

3.7、Kibana测试

3.7.1、创建一个索引

打开发现,可以在仪表盘上看到我们在建logstash上创建的索引,添加索引,创建就可以。

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png
深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

3.7.2、选择时间过滤器

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

3.7.3、索引参数配置

使用默认就可以

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

3.7.4、查看收集山来的日志

深度剖析 ELK:实战经验分享与实用策略之初识ELK
image.png

到这里,ELK部署完成。

深度剖析 ELK:实战经验分享与实用策略之初识ELK


原文始发于微信公众号(背带裤的云原生):深度剖析 ELK:实战经验分享与实用策略之初识ELK

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/218884.html

(0)
青莲明月的头像青莲明月

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!