文档章节

ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

摆渡者
 摆渡者
发布于 2015/12/18 13:10
字数 2349
阅读 155493
收藏 202
点赞 29
评论 31

ELK平台介绍

在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段:

以下内容来自:http://baidu.blog.51cto.com/71938/1676798

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

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

----------------------------摘抄内容结束-------------------------------

画了一个ELK工作的原理图:

如图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。

 

ELK平台搭建

系统环境

System: Centos release 6.7 (Final)

ElasticSearch: 2.1.0

Logstash: 2.1.1

Kibana: 4.3.0

Java: openjdk version  "1.8.0_65"

注:由于Logstash的运行依赖于Java环境, 而Logstash 1.5以上版本不低于java 1.7,因此推荐使用最新版本的Java。因为我们只需要Java的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装。

ELK下载:https://www.elastic.co/downloads/

 

ElasticSearch

配置ElasticSearch:

tar -zxvf elasticsearch-2.1.0.tar.gz
cd elasticsearch-2.1.0

安装Head插件(Optional):

./bin/plugin install mobz/elasticsearch-head

然后编辑ES的配置文件:

vi config/elasticsearch.yml

修改以下配置项:

cluster.name=es_cluster
node.name=node0
path.data=/tmp/elasticsearch/data
path.logs=/tmp/elasticsearch/logs
#当前hostname或IP,我这里是centos2
network.host=centos2
network.port=9200

其他的选项保持默认,然后启动ES:

./bin/elasticsearch

可以看到,它跟其他的节点的传输端口为9300,接受HTTP请求的端口为9200。

使用ctrl+C停止。当然,也可以使用后台进程的方式启动ES:

./bin/elasticsearch &

然后可以打开页面localhost:9200,将会看到以下内容:

返回展示了配置的cluster_name和name,以及安装的ES的版本等信息。

刚刚安装的head插件,它是一个用浏览器跟ES集群交互的插件,可以查看集群状态、集群的doc内容、执行搜索和普通的Rest请求等。现在也可以使用它打开localhost:9200/_plugin/head页面来查看ES集群状态:

可以看到,现在,ES集群中没有index,也没有type,因此这两条是空的。

 

Logstash

Logstash的功能如下:

其实它就是一个收集器而已,我们需要为它指定Input和Output(当然Input和Output可以为多个)。由于我们需要把Java代码中Log4j的日志输出到ElasticSearch中,因此这里的Input就是Log4j,而Output就是ElasticSearch。

配置Logstash:

tar -zxvf logstash-2.1.1.tar.gz
cd logstash-2.1.1

编写配置文件(名字和位置可以随意,这里我放在config目录下,取名为log4j_to_es.conf):

mkdir config
vi config/log4j_to_es.conf

输入以下内容:

# For detail structure of this file
# Set: https://www.elastic.co/guide/en/logstash/current/configuration-file-structure.html
input {
  # For detail config for log4j as input, 
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
  log4j {
    mode => "server"
    host => "centos2"
    port => 4567
  }
}
filter {
  #Only matched data are send to output.
}
output {
  # For detail config for elasticsearch as output, 
  # See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
  elasticsearch {
    action => "index"          #The operation on ES
    hosts  => "centos2:9200"   #ElasticSearch host, can be array.
    index  => "applog"         #The index to write data to.
  }
}

logstash命令只有2个参数:

因此使用agent来启动它(使用-f指定配置文件):

./bin/logstash agent -f config/log4j_to_es.conf

到这里,我们已经可以使用Logstash来收集日志并保存到ES中了,下面来看看项目代码。

 

Java项目

照例先看项目结构图:

pom.xml,很简单,只用到了Log4j库:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

log4j.properties,将Log4j的日志输出到SocketAppender,因为官网是这么说的:

log4j.rootLogger=INFO,console

# for package com.demo.elk, log would be sent to socket appender.
log4j.logger.com.demo.elk=DEBUG, socket

# appender socket
log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Port=4567
log4j.appender.socket.RemoteHost=centos2
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000

# appender console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%-5p] [%l] %m%n

注意:这里的端口号需要跟Logstash监听的端口号一致,这里是4567。

Application.java,使用Log4j的LOGGER打印日志即可:

package com.demo.elk;

import org.apache.log4j.Logger;

public class Application {
    private static final Logger LOGGER = Logger.getLogger(Application.class);
    public static void main(String[] args) throws Exception {
        for (int i = 0; i < 10; i++) {
            LOGGER.error("Info log [" + i + "].");
            Thread.sleep(500);
        }
    }
}

用Head插件查看ES状态和内容

运行Application.java,先看看console的输出(当然,这个输出只是为了做验证,不输出到console也可以的):

再来看看ES的head页面:

切换到Browser标签:

单击某一个文档(doc),则会展示该文档的所有信息:

可以看到,除了基础的message字段是我们的日志内容,Logstash还为我们增加了许多字段。而在https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html中也明确说明了这一点:

上面使用了ES的Head插件观察了ES集群的状态和数据,但这只是个简单的用于跟ES交互的页面而已,并不能生成报表或者图表什么的,接下来使用Kibana来执行搜索并生成图表。

 

Kibana

配置Kibana:

tar -zxvf kibana-4.3.0-linux-x86.tar.gz
cd kibana-4.3.0-linux-x86
vi config/kibana.yml

修改以下几项(由于是单机版的,因此host的值也可以使用localhost来代替,这里仅仅作为演示):

server.port: 5601
server.host: “centos2”
elasticsearch.url: http://centos2:9200
kibana.index: “.kibana”

启动kibana:

./bin/kibana

用浏览器打开该地址:

为了后续使用Kibana,需要配置至少一个Index名字或者Pattern,它用于在分析时确定ES中的Index。这里我输入之前配置的Index名字applog,Kibana会自动加载该Index下doc的field,并自动选择合适的field用于图标中的时间字段:

点击Create后,可以看到左侧增加了配置的Index名字:

接下来切换到Discover标签上,注意右上角是查询的时间范围,如果没有查找到数据,那么你就可能需要调整这个时间范围了,这里我选择Today:

接下来就能看到ES中的数据了:

执行搜索看看呢:

点击右边的保存按钮,保存该查询为search_all_logs。接下来去Visualize页面,点击新建一个柱状图(Vertical Bar Chart),然后选择刚刚保存的查询search_all_logs,之后,Kibana将生成类似于下图的柱状图(只有10条日志,而且是在同一时间段的,比较丑,但足可以说明问题了:)  ):

你可以在左边设置图形的各项参数,点击Apply Changes按钮,右边的图形将被更新。同理,其他类型的图形都可以实时更新。

点击右边的保存,保存此图,命名为search_all_logs_visual。接下来切换到Dashboard页面:

单击新建按钮,选择刚刚保存的search_all_logs_visual图形,面板上将展示该图:

如果有较多数据,我们可以根据业务需求和关注点在Dashboard页面添加多个图表:柱形图,折线图,地图,饼图等等。当然,我们可以设置更新频率,让图表自动更新:

如果设置的时间间隔够短,就很趋近于实时分析了。

到这里,ELK平台部署和基本的测试已完成。

 

参考:

http://baidu.blog.51cto.com/71938/1676798

http://blog.csdn.net/cnweike/article/details/33736429

 

 

 

© 著作权归作者所有

共有 人打赏支持
摆渡者
粉丝 314
博文 169
码字总数 205794
作品 0
浦东
程序员
加载中

评论(31)

摆渡者
摆渡者

引用来自“佟哥哥”的评论

你好,楼主大人,按照你的步骤,我启动报错 Logstash - java.lang.IllegalStateException: org.jruby.exceptions.RaiseException: (SystemExit) exit,这是什么原因呢?
额,我很久没弄这个啦,只是抛砖引玉的弄了个环境,跑了个demo,你们遇到的问题我可能都没遇到过,所以暂时无法回答你。不过,非常欢迎分享遇到的问题及解决的办法:grin:
佟哥哥
佟哥哥
你好,楼主大人,按照你的步骤,我启动报错 Logstash - java.lang.IllegalStateException: org.jruby.exceptions.RaiseException: (SystemExit) exit,这是什么原因呢?
c
cuiwei2016
日志并发量比较大的话,还是要引入kafka比较好,毕竟Logstash吞吐量不怎么样
oswl
oswl
可以使用slf4j吗?
学道ing
博主,你好,我按照你的步骤一步一步来,启动logstash时报无法找到jruby错误
郑龙飞
郑龙飞
很强,很稳
Kevin_Zhan
Kevin_Zhan
no such file to load -- bundler/dep_proxy
w
wishma
kibana查询不出来任何doc
jared
jared

引用来自“bill-xu”的评论

楼主大人,我搭建好了之后,打开http://192.168.18.230:5601/,一直显示Configure an index pattern,写上applog也是没有create图标出现,显示:Unable to fetch manpping.Do you have indices matching the passem? 是哪里的问题呢?求帮助
先弄点数据进去再来点可以了
bill-xu
bill-xu
楼主大人,我搭建好了之后,打开http://192.168.18.230:5601/,一直显示Configure an index pattern,写上applog也是没有create图标出现,显示:Unable to fetch manpping.Do you have indices matching the passem? 是哪里的问题呢?求帮助
CTO详细讲解海量日志处理ELK

ELK实时日志分析平台之Elasticsearch简介 Elasticsearch是一个高度灵活的开源全文检索和分析引擎。它能够迅速(几乎是实时地)地存储、查找和分析大规模数据。通常被用在有复杂的搜索要求的系...

Java架构分享 ⋅ 05/23 ⋅ 0

基于Docker部署ELK (Elasticsearch, Logstash, Kibana)集中日志处理平台,及在Spring Boot应用

当我们还是单体部署我们的Spring Boot项目的时候,日志通常都是放在我们的Linux服务器目录,使用简单的Spring Boot已经包含的Logback框架即可实现。当我们基于Docker部署我们的分布式或者集群...

ImWiki ⋅ 05/27 ⋅ 0

简单安装ELK分析日志及使用心得

ELK是由Elasticsearch、Logstash、Kibana三个组件组成的。 Elasticsearch:是ELK的核心插件,是一个基于Lucene的搜索服务器,它提供一个分布式多用户能力的全文搜索引擎,能够达到实时搜索,...

狼叔LSF ⋅ 06/10 ⋅ 0

基于ELK实时日志分析的最佳实践

在2018云栖大会深圳峰会大数据分析与可视化专场上,由阿里巴巴搜索引擎事业部开放搜索团队的吴迪带来了“基于ELK实时日志分析的最佳实践”的主题分享。介绍了传统的日志分析、ELK的概念和ELK...

smile小太阳 ⋅ 05/06 ⋅ 0

Centos6搭建elk系统,监控IIS日志

**所需程序: 服务器端:java、elasticsearch、kikbana 客 户 端:IIS、logstash** 一、服务器端(192.168.10.46)操作: 先建立一个ELK专门的目录: [root@Cent65 ~]mkdir /elk/ 上传到elk...

D杀手D ⋅ 04/24 ⋅ 0

ELK实时日志分析平台部署搭建详细实现过程

原文地址:http://www.linuxidc.com/Linux/2016-09/135137.htm 1、ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 日志主要包括系统日志、应用程序日志和安全日志。...

tanga842428 ⋅ 2017/07/27 ⋅ 0

logstash、elasticsearch、kibana搭建日志平台

1、下载logstash a、官方下载地址:https://www.elastic.co/downloads/logstash b、解压:tar -xzvf logstash-5.1.1.tar.gz c、设置用户测试的配置文件:vim logstatsh_test.conf,编辑内容如...

binhu ⋅ 05/23 ⋅ 0

Docker 部署ELK 日志分析

Docker 部署ELK 日志分析 elk集成镜像包 名字是 sebp/elk 安装 docke、启动 yum install docke service docker start Docker至少得分配3GB的内存;不然得加参数 -e ESMINMEM=128m -e ESMAXM...

yikayi ⋅ 06/08 ⋅ 0

Docker下ELK三部曲之三:K8S上的ELK和应用日志上报

本章是《Docker下ELK三部曲》系列的终篇,前面章节已经详述了ELK环境的搭建以及如何制作自动上报日志的应用镜像,今天我们把ELK和web应用发布到K8S环境下,模拟多个后台server同时上报日志的...

boling_cavalry ⋅ 04/30 ⋅ 0

Docker 部署ELK 日志分析

Docker 部署ELK 日志分析 elk集成镜像包 名字是 sebp/elk 安装 docke、启动 yum install docke service docker start Docker至少得分配3GB的内存;不然得加参数 -e ESMINMEM=128m -e ESMAXM...

yikayi ⋅ 06/08 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 36分钟前 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

聊聊spring cloud netflix的HystrixCommands

序 本文主要研究一下spring cloud netflix的HystrixCommands。 maven <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-clo......

go4it ⋅ 昨天 ⋅ 0

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如...

honeymose ⋅ 昨天 ⋅ 0

myeclipse10 快速搭建spring boot开发环境(入门)

1.创建一个maven的web项目 注意上面标红的部分记得选上 2.创建的maven目录结构,有缺失的目录可以自己建立目录补充 补充后 这时候一个maven的web项目创建完成 3.配置pom.xml配置文件 <proje...

小海bug ⋅ 昨天 ⋅ 0

nginx.conf

=========================================================================== nginx.conf =========================================================================== user nobody; #......

A__17 ⋅ 昨天 ⋅ 0

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 昨天 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部