日志分析是运维工程师解决系统故障、发现问题的主要手段。日志包含多种类型,包括程序日志、系统日志以及安全日志等。通过对日志的分析,既可以做到未雨绸缪、预防故障的发生,又可以在故障发生时,寻找蛛丝马迹、快速定位故障点。管理员也可以通过体制了解到服务器的软件信息、硬件信息、服务器负荷以及安全性相关的信息,如服务器是否被攻击、磁盘空间是否即将耗尽、内存是否严重不足等。通过这些分析,管理员可以及时采取措施。通常情况下,每台服务器或者客户端都会产生日志,相对而言,服务器日志更加重要,因为它存放着企业的重要数据,同时作为服务器提供者,一旦出现问题,将影响所有客户端的使用。一些大型的机房或者数据中心一般不会给服务器配置显示设备,而逐台远程登录设备查看日志,需要每次系统认证成功后执行,且效率低下。

普遍的做法就是日志的集中管理,既将所有服务器的日志集中发送到到日志服务器中,如开源的Syslog。好处是可以集中查看所有服务器的日志,减轻了工作量,从安全性的角度来看,这种集中日志管理可以有效查询以及跟踪服务器日志被攻击的行为,因为黑客入侵的一瞬间,一些安全日志已经被发送到日志服务器。比如银行的监控系统,窃贼一旦发现监控设备,及时立即破坏这些设备也于事无补,因为监控画面早已经发送至监控服务器器中。采用集中化管理日志,也存在一些不足,如针对日志的分析以及查找将变得十分困难,对日志的逐条检查虽然可以获取有价值的信息,但是工作量十分庞大,像Apache这样的Web网站每天都有可能产生上万条日志。Linux虽然提供了文字编辑类的工具命令(如grep、awk、wc等),可以快速定位已知关键字的日志内容,却无法快速定位未知错误日志。当面对更高要求的查询、排序、统计以及数据分析时,加之庞大的机器数量。这些工具难免力不从心。开源实时日志分析系统——ELK应运而生。

ELK主要由三个开源工具组成:

  • Elasticsearch:是个开源分布实时分析搜索引擎,建立在全文搜索引擎库Apache Lucens基础上,同时隐藏了Apache Luces的复杂性。Elasticsearch将所有的功能打包成一个独立的服务,并提供了一个简单的RESTful API接口,它具有分布式、零配置、自动发现、索引自动分片、索引副本机制、RESTful风格接口、多数据源、自动搜索负载等特点;
  • Logstash:是一个完全开源的工具,主要用于日志收集,同时可以对数据处理,并输出到Elasticsearch;
  • Kibana:也是一个开源和免费的工具,Kibana可以为Logstash和Elasticsearch提供图形化的日志分析Web界面,可以汇总、分析和搜索重要数据日志;

ELK的工作原理,如图:

大致意思就是:Logstash收集APPServer产生的Log,并存放到Elasticsearch群集中,而Kibana则从群集中查询数据生成图表,在返回给Browser。

简单来说,进行日志处理分析,一般需要经过以下几个步骤:
(1)将日志进行集中化管理;
(2)将日志格式化(Logstash)并输出到Elasticsearch;
(3)对格式化后的数据进行索引和存储(Elasticsearch);
(4)前端数据的展示(Kibana);

下面开始详细介绍构建ELK日志分析系统的三个工具:

1.Elasticsearch概述

Elasticsearch是一个基于Lucene的搜索服务器,它稳定、可靠、快速,而且具有比较好的水平扩展能力、为分布式环境设计、在云计算中被广泛应用。Elasticsearch提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口。通过该接口,用户可以通过浏览器和Elasticsearch通信。Elasticsearch使用Java开发的,并作为Apache许可条款下的开放源码分布。Wikipedia、Stack、Overflow、GitHub等基于Elasticsearch来构建搜索引擎,所以具有实时搜索、稳定、可靠、快速、安装使用方便等特点。

Elasticsearch的基础核心概念:

  • 接近实时(NRT):Elasticsearch是一个搜索速度接近实时的搜索凭条,相应速度非常快,从搜索一个文档直到这个文档能够被搜索到只有一个轻微的延迟(一般情况下是1s);
  • 群集(cluster):群集就是由一个或多个节点组织在一起,在所有的节点上存放用户数据,并一起提供索引和搜索功能,通过选举产生主节点,并提供跨节点的联合索引和搜索的功能。每个群集都有一个标示的名称,默认是Elasticsearch,每个节点是居于群集名字加入到其群集中的,一个群集可以只有一个节点,为了具备更好的容错性,通常配置多个节点,在配置群集时,建议配置为群集模式;
  • 节点(node):是指一台单一的服务器,多个节点组织为一个群集,每个节点都存储数据并参与群集的索引和搜索功能。和群集一样,节点也是通过名字来标识的,默认情况下,在节点启动时会随机分配字符名,也可自定义。通过指定群集名称,节点可以加入到群集中。默认情况下,每个节点都可以加入Elasticsearch群集。如果群集中有多个节点,它们将会自动组建一个名为Elasticsearch的群集;
  • 索引(Index):类似于关系型数据库的中的“库”。当索引一个文档后,就可以使用Elasticsearch搜索到该文档,也可以简单地将索引理解为存储数据的地方,可以方便地进行全文索引。在index下面包含存储数据库的类型(Type),TYPE类似于关系型数据库中的“表”,用来存放具体数据,而Type下面包含文档(Document),文档相当Yui关系型数据库的“记录”,一个文档是一个可被索引的基础信息单元;
  • 分片和副本:Elasticsearch将索引分为若干部分,每个部分称为一个分片,每个分片就是一个全功能的独立的索引。分片的数量一般在索引创建前指定,且创建索引后不能更改;
    分片的两个最主要的原因:
    (1)水平分割扩展,增大存储量;
    (2)分布式并行跨分片操作,提高性能和吞吐量;

一个合格的数据存储方案要求无论何种故障(如节点不可用)下数据都可用,并且具有较高的存储效率。为此,Elasticsearch将索引分片复制一份或多份,称为副本。副本是索引的另一个备份,用于数据冗余以及负载分担。默认情况下Elasticsearch自动对索引请求进行负载分担。

总之,索引可以将分为若干个分片。这些分片也可以被复制0次(没有复制)或多次,当有副本存在是,作为复制源的分片称为主分片,而作为复制目标的分片称为复制分片。分片和副本的数量可以在索引创建时指定。在索引创建后,可以改变副本的数量,但是不能改变分片的数量。默认情况,Elasticsearch中的每个索引被分片为5个主分片和1个副本。在两个节点的场景下,每个索引都将会有5个主分片和另外5个副本分片,每个索引总共就有10个分片。

2.Logstash概述

Logstash有JRuby语言编写,运行在Java虚拟机(JVM)上,是一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出。Logstash具有强大的插件功能,常用于日志处理。Logstash可配置单一的代理端,与其他开源软件结合,实现不同的功能。

Logstash的理念很简单,它只做三件事:数据输入、数据加工(如过滤、改写等)以及数据输出。通过组合输入和输出,可以实现锁种需求。Logstash处理日志时,典型的部署架构图如下:

Logstash的主要组件:

  • Shipper:日志收集者。负责监控本地日志文件的变化,及时收集最新的日志文件内容。通常,远程代理端(agent)只需要运行这个组件即可;
  • Indexer:日志存储者。负责接收日志并写入到本地文件;
  • Broker:日志Hub。负责连接多个Shipper和Indexer;
  • Search and Stronage:允许对事件进行搜索和存储;
  • Web Interface:基于Web的展示界面;

正是由于以上组件在Logstash架构中可独立部署,才提供了更好的群集扩展性。

Logstash使用管道方式进行日志的搜集处理和输出,优点类似Linux系统的管道命令,将前一个流程的处理结构发送到后一个流程继续处理。在Logstash中,包括了三个阶段,分别是输入(input)、处理(Filter,非必需)和输出(output),三者的关系如图:

流程图中,整个流程为Input收集数据,Filter处理数据、Output输出数据。每个阶段也可以指定多种方式,如输出既可以输出到Elasticsearch中,也可以指定到stdout在控制台打印。这种插件式的组织方式,时的Logstash的扩展和定制非常方便。

3.Kibana概述

Kibana是一个针对Elasticsearch的开源分析及可视化平台,主要设计用来和Elasticsearch一起工作,可以搜索、查看存储在Elasticsearch索引中的数据,并通过各种图表进行高级数据分析和展示。Kibana可以让数据看起来一目了然。它的操作十分简单,基于浏览器的用户界面可以让用户在任何位置都可以实时浏览。Kibana可以快速创建仪表板实时显示查询动态。Kibana使用非常简单,只需添加索引就可以检测Elasticsearch环境。

Kibana的主要功能:

  • Elasticsearch无缝之集成:Kibana架构是为了Elasticsearch定制的,可以将任何(结构化和非结构化)数据加入Elasticsearch索引。Kibana还充分李永乐Elasticsearch强大的搜索和分析功能;
  • 整合数据:Kibana可以让海量数量变得更容易理解,根据数据内容可以创建形象的柱形图、折线图、散点图、直方图、饼图和地图等,以便用户查看;
  • 复杂数据分析:Kibana提升了Elasticsearch的分析能力,能够更加智能地分析数据,执行数据转换并且根据要求对数据切割分块;
  • 让更多团队成员受益:强大的数据库可视化接口让各业务岗位都能够从数据集合受益;
  • 接口灵活,分享更容易:使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流;
  • 配置简单:Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带Web服务器,可以快速启动运行;
  • 可视化多数据源:Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats多第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache、Flume、Fluentd等;
  • 简单数据导出:Kibana可以方便地导出感兴趣的数据,与其他数据集合并融合后快速建模分析,发现新结果;

下面通过一个小型的拓补实验图,来了解一下ELK三个工具之间的对应关系,实验拓补图如下:

实验需要实现的功能有:
(1)配置ELK日志分析群集;
(2)使用Logstash收集日志;
(3)使用Kibana查看分析日志;

一、环境准备

建议两台node服务器的内存不能小于4G!
时间必须一致,否则会出现意想不到的错误!

两个ELK节点的配置几乎一致,操作如下:

[root@localhost ~]# vim /etc/hosts
//修改hosts文件,配置域名解析,填写以下内容………………      //省略部分内容
192.168.1.1 node1
192.168.1.2 node2
[root@localhost ~]# vim /etc/hostname
//编写配置主机名的文件,修改其中的内容为:
node1
//节点1叫node1,node2叫node2
[root@localhost ~]# vim /etc/sysconfig/selinux
//编写SELinux配置文件,,修改其中内容为:
SELINUX=disable
[root@localhost ~]# systemctl disable firewalld//设置防火墙开机自行关闭
[root@localhost ~]# java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)//检查Java环境
[root@localhost ~]# reboot//重新启动系统

两台机器基本环境配置完成之后,接下来才开始真正的部署ELK日志分析系统!

关于部署ELK所需的所有软件都在网盘链接:https://pan.baidu.com/s/1PeJk6KhiNiMpZeksUH1fJQ
提取码:14ez
建议先在windows本地进行解压,否则压缩方式Linux系统不便进行解压缩!

二、部署Elasticsearch软件

在node1和node2节点上都要部署Elasticsearch,下面以node1为例,node2配置与node1相同!

(1)安装Elasticsearch软件

Elasticsearch软件可以通过RPM安装、YUM安装或者源码安装,生产环境中用户可以根据实际情况进行安装方式的选择,本章采用RPM方式进行安装。

[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm .
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable elasticsearch.service
//启用超级守护进程,设置服务为开机自启动
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
//编写服务的配置文件,修改以下内容………………………………………………                         //省略部分内容,修改以下内容即可
cluster.name: my-application                                     //定义群集名称
node.name: node1                                                    //定义节点名称
path.data: /data/elk_data                                          //数据存放位置
path.logs: /var/log/elasticsearch                               //日志存放位置
bootstrap.memory_lock: false                                    //在启动时不锁定内存
network.host: 0.0.0.0                                               //提供服务绑定的IP地址,0.0.0.0代表所有地址
http.port: 9200                                                        //服务监听端口为9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]                //群集发现通过单播的方式
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown -R elasticsearch:elasticsearch /data/elk_data/
//创建数据存放路径并授权
[root@node1 ~]# systemctl start elasticsearch.service
//服务较大,耐心等待直到9200端口被监听即可!
[root@node1 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      3192/java

访问测试,测试效果如图:

同样的方式搭建node2,然后测试群集效果,效果图如下:


通过以上方式查看群集的状态对用户并不友好,可以安装Elasticsearch—head插件,可以更方便地管理群集!

(2)安装Elasticsearch—head插件

Elasticsearch在5.0版本后,Elasticsearch—head插件需要作为独立服务进行安装,需要使用npm命令,那么在安装插件之前,需要安装node和phantomjs。其中,前者基于Chrome V8 引擎的JavaScript运行环境,而phantomjs是一个基于webkit的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以!

实验环境,这些插件只在node1上进行安装,实际根据需要而定!

1.编译安装node,时间较长,耐心等待

[root@node1 ~]# tar zxf node-v8.2.1.tar.gz -C /usr/src
//注意:解压后的目录不能有中文路径
[root@node1 ~]# cd /usr/src/node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure && make && make install
//编译安装node

2.安装phantomjs

[root@node1 ~]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src/
[root@node1 ~]# cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin

3.安装Elasticsearch—head

[root@node1 ~]# tar zxf elasticsearch-head.tar.gz -C /usr/src
[root@node1 ~]# cd /usr/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

4.修改Elasticsearch主配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml ………………                      //省略部分内容,填写以下两行内容
http.cors.enabled: true                                //开启跨域访问支持
http.cors.allow-origin: "*"                            //跨域访问允许的域名地址
[root@node1 ~]# systemctl restart elasticsearch
//重启服务

5.启动Elasticsearch—head插件

启动插件时,必须在解压后的Elasticsearch—head目录下启动服务,进程会读取该目录下的Gruntfile.js文件,否则将会启动失败;Elasticsearch—head监听的端口默认是9100,通过该端口来判断服务器是否正常启动。

[root@node1 ~]# cd /usr/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &
//前台启动,一旦关闭中断,服务也将随之关闭
[root@node1 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      90295/java
[root@node1 ~]# netstat -anpt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      90413/grunt
//判断Elasticsearch服务和Elasticsearch-head插件服务启动成功

通过Elasticsearch—head查看Elasticsearch服务信息,如图:

接下来,通过命令插入一个测试索引,命令如下:

[root@node1 ~]# curl  -XPUT  'localhost:9200/index-demo/test/1?pretty&pretty'  \
> -H 'Content-Type: application/json' -d \
> '{"user":"zhangsan","mesg":"hello world"}'

再次刷新浏览器进行查看,如图:

三、安装Kibana

(1)在node1上配置安装Kibana

[root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 ~]# systemctl enable kibana
//安装Kibana,并配置为开机自启动

(2)编辑Kibana配置文件

[root@node1 ~]# vim /etc/kibana/kibana.yml ………………     //省略部分内容,修改以下内容
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.1.1:9200"
kibana.index: ".kibana"

(3)启动服务

[root@node1 ~]# systemctl start kibana
[root@node1 ~]# netstat -anpt | grep 5601
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      90791/node
//kibana服务默认监听端口是5601

(4)访问测试



其实到这里,功能已经可以实现了,当时为了有更好的效果,建议搭建一台Web服务器并安装Logstash!

四、安装Logstash

Logstash是部署在需要监控其日志的应用服务器上!

(1)在Apache服务器上安装Logstash

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl start httpd
//安装httpd服务,并启动
[root@localhost ~]# rpm -ivh logstash-5.5.1.rpm
[root@localhost ~]# systemctl start logstash

(2)编写Logstash服务的配置文件

Logstash配置文件有三部分组成:input、output、filter(根据需要),因此标准的格式为:

input  {...}
filter {...}
output {...}

在每个部分中,也可以指定多个访问方式。例如:若要指定两个日志来源文件,则格式如下:

input {file { path =>"/var/log/messages" type =>"syslog"}
file { path =>"/var/log/apache/access.log" type =>"apache"}
}

编写logstash配置文件apache_log.conf

[root@localhost ~]#  vim  /etc/logstash/conf.d/apache_log.conf
//必须在这个目录下,叫什么文件名无所谓,内容如下:input {file{path => "/etc/httpd/logs/access_log"type => "access"start_position => "beginning"}file{path => "/etc/httpd/logs/error_log"type => "error"start_position => "beginning"}
}
output {if [type] == "access" {elasticsearch {hosts => ["192.168.1.1:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["192.168.1.1:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}}

为了让Apache服务器产生一些日志文件,建议找个PC多访问几次apache!

[root@localhost ~]# systemctl restart logstash
[root@localhost ~]# /usr/share/logstash/bin/logstash  -f /etc/logstash/conf.d/apache_log.conf
//重启服务,并指定配置文件

访问测试,首先访问9100端口,等待索引文件生成后,再访问5601端口!如图:




如果出现这种情况,如图:


但是还是建议时间最好同步,否则不明白日志产生的时间,从而做出错误的决定!!!

同理添加错误日志及系统日志都是一样的方法!
如果是检测Apache的系统日志,Apache服务器上的配置文件就应该这样写!

[root@localhost ~]# chmod o+r /var/log/messages
//首先授权
[root@localhost ~]# vim /etc/logstash/conf.d/system.conf
input {file{path => "/var/log/messages"type => "system"start_position => "beginning"}}
output {elasticsearch {hosts => ["192.168.1.1:9200"]index => "system-%{+YYYY.MM.dd}"}}

node1服务器即可检测到它的日志信息!!!这里就不多说了!

———————— 本文至此结束,感谢阅读 ————————

搭建ELK日志分析系统详解相关推荐

  1. 快速搭建ELK日志分析系统

    官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/i ...

  2. Ubuntu 16.04源码搭建ELK日志分析系统(Elasticsearch+Logstash+Kibana)

    ELK环境 : 操作系统:Ubuntu 16.04 RAM:4GB CPU:2 注意 : 5.0版本之前可以在启动指令后跟:-Des.insecure.allow.root=true或者修改elast ...

  3. 如何快速搭建一个简易的ELK日志分析系统

    一.ELK简介   ELK就是一款非常优秀的.开源的.用于搭建实时日志分析平台的组件.ELK是Elasticsearch.Logstash和Kiabana这3款开源框架首字母的缩写.通过这三个组件,构 ...

  4. ELK日志分析系统搭建以及springboot日志发送到ELK中

    前言 安装之前服务器必须装了Java环境,我们这里安装的是7.7.0版本,而且7.7.0版本还必须要求jdk11以上.,最好跟我安装的路径保持一致/usr/local/elk,千万不要在root 安装 ...

  5. 十分钟搭建和使用ELK日志分析系统

    十分钟搭建和使用ELK日志分析系统 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为" ...

  6. ELK日志分析系统(二)之ELK搭建部署

    文章目录 引言 一.Elasticsearch 集群部署(在Node1上操作) 1.准备环境 2.部署安装Elasticsearch软件 3.配置Elasticsearch主配置文件 4.创建数据存放 ...

  7. ELK日志分析系统之ELK搭建部署

    文章目录 配置ELK日志分析系统 1.配置elasticsearch环境 2.部署elasticsearch软件 2.1 安装Elasticsearch软件 2.2 加载系统服务 2.3 修改elas ...

  8. 运维必备——ELK日志分析系统

    目录 一.ELK日志分析系统概述 (1)传统日志服务器的优点与缺点和为什么要使用ELK日志分析系统 (2)ELK日志分析系统日志的分类 (3)ELK日志分析系统的分类 --Elasticsearch: ...

  9. 搭建AWStats日志分析系统

    文章目录 搭建AWStats日志分析系统 实验步骤: 修改DNS主配置文件 修改http服务主配置文件 安装AWStats 修改http服务配置文件 搭建AWStats日志分析系统 AWStats是一 ...

最新文章

  1. 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)
  2. Nginx之负载均衡(四)
  3. ppt讲解中的过渡_PPT教程:缩放定位功能详解
  4. php重构ifelse,php - 重构条件语句PHP - SO中文参考 - www.soinside.com
  5. 【postgresql初始化失败】initdb: invalid locale settings; check LANG and LC_* environment variables
  6. EonerCMS——做一个仿桌面系统的CMS(二)
  7. 信息学奥赛一本通 1163:阿克曼(Ackmann)函数
  8. 自动驾驶专题研究报告:自动驾驶产业链全梳理
  9. C Tricks(六) —— 数组去重的实现
  10. csrf token invalid什么意思_Spring Cloud Gateway 实现Token校验
  11. 移动应用前端h5框架汇总
  12. 人工智能案例:车厂特斯拉的花式AI应用...
  13. 工业过程建模与先进控制(十)MPC的MATLAB命令
  14. struts标签+jstl标签之国际化实例
  15. 搜狗输入法取消英文空格确认
  16. LVS负载均衡群集——NAT地址转换
  17. Qt 读写xls文件(并将数据转为c风格
  18. dentry与inode
  19. python缺省值_python函数缺省值
  20. 编译报错:error: ro.build.fingerprint cannot exceed 91 bytes

热门文章

  1. 删除卡在C盘和D盘之间的恢复盘
  2. Oracle表空间_PK是什么意思,Oracle表空间详解
  3. 腾讯云网站域名名称建议 网站备案起名建议
  4. Bee框架,一个十分钟即可学会的ORM框架--Bee
  5. python 3d渲染_python渲染_python 渲染_python三维渲染 - 云+社区 - 腾讯云
  6. 2018西安工业大学第二届萌新线上赛web WP
  7. SpringSecurity实现分布式应用的单点登录
  8. MATLAB | kmeans聚类如何绘制更强的聚类边界(决策边界)
  9. Python整理数据的工具包 json、获取鞋子颜色及鞋码数据
  10. 大咖集结 | 开发者进阶直通车