用Kibana和logstash快速搭建实时日志查询、收集与分析系统

Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界面,搜索和展示所有日志。
kibana 也是一个开源和免费的工具,他可以帮助您汇总、分析和搜索重要数据日志并提供友好的web界面。他可以为 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面
说到这里,我们看看 kibana 和 logstash到底能为我们做些什么呢?下面是kibana的界面

简单来讲他具体的工作流程就是 logstash agent 监控并过滤日志,将过滤后的日志内容发给redis(这里的redis只处理队列不做存储),logstash index将日志收集在一起交给
全文搜索服务ElasticSearch 可以用ElasticSearch进行自定义搜索 通过Kibana 来结合 自定义搜索进行页面展示,下图是 Kibana官网上的流程图

好了 让我们一步步的把这套环境搭建起来吧,先看看都需要安装什么软件包
ruby 运行Kibana 必须,
rubygems 安装ruby扩展必须
bundler 功能类似于yum
JDK 运行java程序必须 
redis 用来处理日志队列
logstash 收集、过滤日志
ElasticSearch 全文搜索服务(logstash集成了一个)
kibana 页面展示
这里有三台服务器
192.168.233.128 logstash index,ElasticSearch,kibana,JDK
192.168.233.129 logstash agent,JDK
192.168.233.130 redis

首先到 logstash index服务器上面,logstash分为 index和aget ,agent负责监控、过滤日志,index负责收集日志并将日志交给ElasticSearch 做搜索

此外 logstash 的收集方式分为 standalone 和 centralized。
standalone 是所有功能都在一个服务器上面,自发自收,centralized 就是集中收集,一台服务器接收所有shipper(个人理解就是logstash agent)的日志。
其实 logstash本身不分 什么 shipper 和 collector ,只不过就是配置文件不同而已,我们这次按照集中的方式来测试

在 logstash index上安装基础的软件环境

  1. [192.168.233.128 [email protected]:~]
  2. # cd /soft/
  3. [192.168.233.128 [email protected]:/soft]
  4. # wget http://down1.chinaunix.net/distfiles/jdk-6u13-dlj-linux-i586.bin
  5. 从oracle下载实在是太慢了,从CU下载会快一些,如果需要最新版本请访问这里
  6. http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
  7. [192.168.233.128 [email protected]:/soft]
  8. # sh jdk-6u13-dlj-linux-i586.bin
  9. 输入yes 便开始安装了
  10. 安装完成后设置一下 JAVA_HOME
  11. [192.168.233.128 [email protected]:/soft/Kibana-0.2.0]
  12. # vim /etc/profile
  13. export JAVA_HOME=/usr/java
  14. export PATH=$JAVA_HOME/bin:$PATH
  15. export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
  16. 安装ruby 就比较简单了(Kibana需要ruby 1.8.7以上版本)
  17. [192.168.233.128 [email protected]:/soft]
  18. # yum install ruby rubygems
  19. ..... 安装内容省略
  20. 安装完成后用 rubygems 来安装bundler
  21. [192.168.233.128 [email protected]:/soft]
  22. # /usr/bin/gem install bundler
  23. .....
  24. ok 这样基本的环境就已经有了,下面就是安装kibana 和 logstash
  25. 其实logstash 就是一个java脚本,不需要安装... 下载即用
  26. [192.168.233.128 [email protected]:/soft]
  27. # wget http://logstash.objects.dreamhost.com/release/logstash-1.1.0-monolithic.jar
  28. 现在看看 这个脚本应该怎么去执行
  29. [192.168.233.128 [email protected]:/soft]
  30. # java -jar /soft/logstash-1.1.0-monolithic.jar -h
  31. No such command "-h"
  32. Available commands:
  33. -v
  34. -V
  35. --version
  36. agent
  37. web
  38. test
  39. 显然没有 -h 参数,不过列出了能用的参数,但是logstash的参数可不止这些,
  40. java -jar /soft/logstash-1.1.0-monolithic.jar agent --help
  41. 这些是在agent模式下的命令参数
  42. -f, --config CONFIGFILE
  43. Load the logstash config from a specific file, directory, or a wildcard. If given a directory or wildcard, config files will be read in order lexigraphically.
  44. -e CONFIGSTRING
  45. Use the given string as the configuration data. Same syntax as the config file. If not input is specified, ‘stdin { type => stdin }‘ is default. If no output is specified, ‘stdout { debug => true }}‘ is default.
  46. -w, --filterworks COUNT
  47. Run COUNT filter workers (default: 1)
  48. --watchdog-timeout TIMEOUT
  49. Set watchdog timeout value.
  50. -l, --log FILE
  51. Log to a given path. Default is to log to stdout
  52. -v
  53. Increase verbosity. There are multiple levels of verbosity available with ‘-vv‘ currently being the highest
  54. --pluginpath PLUGIN_PATH
  55. A colon-delimted path to find other logstash plugins in
  56. java -jar /soft/logstash-1.1.0-monolithic.jar web --help
  57. 下面的是在web界面的参数
  58. --log FILE
  59. Log to a given path. Default is stdout.
  60. --address ADDRESS
  61. Address on which to start webserver. Default is 0.0.0.0.
  62. --port PORT
  63. Port on which to start webserver. Default is 9292.
  64. -B, --elasticsearch-bind-host ADDRESS
  65. Address on which to bind elastic search node.
  66. -b, --backend URL
  67. The backend URL to use. Default is elasticsearch:/// (assumes multicast discovery). You can specify elasticsearch://[host][:port]/[clustername]
如果上面的这些命令都能执行正常的话就表示 logstash可以使用了,但要让他启动还需要一个配置文件
  1. [192.168.233.128 [email protected]:/soft]
  2. # vim redis.conf
  3. input {
  4. redis {
  5. host => ‘192.168.233.130‘
  6. data_type => ‘list‘
  7. port => "6379"
  8. key => ‘logstash:redis‘
  9. type => ‘redis-input‘
  10. }
  11. }
  12. output {
  13. elasticsearch {
  14. embedded => true
  15. }
  16. }
解释一下 logstash的配置文件由 input filter output 等几个基本的部分组成,顾名思义 input 就是在那收集数据,output就是输出到哪,filter代表一个过滤规则意思是什么内容
会被收集。
上面这段是让 logstash 去192.168.233.130 这个redis服务器上去收集日志 redis端口为6379,key是 logstash:redis 类型为 redis-input ,(注意:这几个值必须跟logstash agent的
output 所对应),收集完成后输出到 elasticsearch ,embedded => true 的意思是使用logstash 内嵌的 elasticsearch。如果有独立的elasticsearch服务器,需要将 这条改为
host => ‘elasticsearch的ip‘ port => 端口
好了,这个简单的配置文件可以让logstash开始启动了
  1. [192.168.233.128 [email protected]:/soft]
  2. # java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf -- web --backend elasticsearch:///?local &
  3. [1] 5205
  4. ...这里要等待约5秒钟... 为什么?去问开发者吧
  5. [192.168.233.128 [email protected]:/soft]
  6. # I, [2013-03-19T03:23:10.749000 #5205]  INFO -- : Using beta plugin ‘redis‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T03:23:10.732000 -0700","message":"Using beta plugin ‘redis‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"}
  7. file:/soft/logstash-1.1.0-monolithic.jar!/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53 warning: already initialized constant WFKV_
  8. Mizuno 0.5.0 (Jetty 8.0.y.z-SNAPSHOT) listening on 0.0.0.0:9292
  9. 解释一下 上面的命令 agent 代理模式 -f 指定配置文件 --web 其实是个分隔符等于又启动了一个命令,后面的参数就是开启一个web页面默认端口是9292,这个命令如果拆成两个就是这个样子
  10. java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf &
  11. java -jar /soft/logstash-1.1.0-monolithic.jar web --backend elasticsearch:///?local & (其实如果用kibana来做web界面的话这一步完全可以省掉了)
好了,看到9292 端口启动就代表 启动成功了,检查一下
  1. [192.168.233.128 [email protected]:/soft]
  2. # lsof -i:9292
  3. COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
  4. java    5205 root  465u  IPv4 130805       TCP *:armtechdaemon (LISTEN)
  5. 其实logstash还启动了一个端口9200,因为启动了内嵌的 elasticsearch,这个9200是 elasticsearch在监听
  6. [192.168.233.128 [email protected]:/soft]
  7. # lsof -i:9200
  8. COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
  9. java    5205 root  160u  IPv4 130682       TCP *:wap-wsp (LISTEN)
现在可以通过浏览器访问一下 http://192.168.233.128:9292 看看logstash是的页面是个什么样子

现在还不能搜索因为现在还没有数据,其实这个时候 http://192.168.233.128:9200 也是可以访问的,
很多开发自己写代码来调用elasticsearch 来实现他们自己的需要,这里就不多说了
192.168.233.128 这台logstash index的操作暂时告一段落,下面开始配置logstash的agent
登录到 服务器 192.168.233.129 安装基本软件包和logstash

  1. [192.168.233.129 [email protected]:~]
  2. # cd /soft/
  3. [192.168.233.129 [email protected]:/soft]
  4. # wget http://down1.chinaunix.net/distfiles/jdk-6u13-dlj-linux-i586.bin
  5. [192.168.233.129 [email protected]:/soft]
  6. # sh jdk-6u13-dlj-linux-i586.bin
  7. 设置 JAVA_HOME
  8. [192.168.233.129 [email protected]:/soft]
  9. # vim /etc/profile
  10. export JAVA_HOME=/usr/java
  11. export PATH=$JAVA_HOME/bin:$PATH
  12. export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
  13. [192.168.233.129 [email protected]:/soft]
  14. # yum install ruby
  15. 192.168.233.129 [email protected]:/soft]
  16. # wget http://logstash.objects.dreamhost.com/release/logstash-1.1.0-monolithic.jar
  17. [192.168.233.129 [email protected]:/soft]
  18. # vim redis.conf
  19. input {
  20. file {
  21. type => "producer"
  22. path => "/soft/apache.log"
  23. }
  24. file {
  25. type => "php-log"
  26. path => "/soft/php.log"
  27. }
  28. }
  29. filter {
  30. grep {
  31. match => [ "@message", "mysql|GET|error" ]
  32. }
  33. }
  34. output {
  35. redis {
  36. host => ‘192.168.233.130‘
  37. data_type => ‘list‘
  38. key => ‘logstash:redis‘
  39. }
  40. }

大概说一下这个配置文件 input 里的file就是要监视的文件了 这里我监视了两个文件,如果这两个文件有追加的内容就会通过下面的output设置发给 redis服务器
filter 里的grep 意思就是 grep...  后面这段就是 日志内容里面只要有匹配 mysql或GET或error的内容就会被过滤出来,发送到 logstash index
以上就是一个比较简单的配置文件了,让我们启动他

  1. [192.168.233.129 [email protected]:/soft]
  2. # java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf &
  3. I, [2013-03-19T19:45:35.762000 #2721]  INFO -- : Using beta plugin ‘file‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T19:45:35.752000 -0700","message":"Using beta plugin ‘file‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"}
  4. I, [2013-03-19T19:45:35.778000 #2721]  INFO -- : Using beta plugin ‘file‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T19:45:35.778000 -0700","message":"Using beta plugin ‘file‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"}
  5. I, [2013-03-19T19:45:35.804000 #2721]  INFO -- : Using beta plugin ‘grep‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T19:45:35.803000 -0700","message":"Using beta plugin ‘grep‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"}
  6. I, [2013-03-19T19:45:35.854000 #2721]  INFO -- : Using beta plugin ‘redis‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T19:45:35.853000 -0700","message":"Using beta plugin ‘redis‘. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"}

只要没有 warning 和 error就算是正常启动了
启动之前请确定 192.168.233.130的 redis服务器已经启动,不然会报错
下面登录到 192.168.233.130 上看看 redis服务的状态

  1. [192.168.233.130 [email protected]:/data/redis/etc]
  2. # lsof -i:6379
  3. COMMAND    PID USER   FD   TYPE DEVICE SIZE NODE NAME
  4. redis-ser 2732 root    4u  IPv4   7946       TCP *:6379 (LISTEN)
  5. redis-ser 2732 root    5u  IPv4   7963       TCP localhost.localdomain:6379->localhost.localdomain:19214 (ESTABLISHED)
  6. java      2733 root    9u  IPv4   7959       TCP localhost.localdomain:19214->localhost.localdomain:6379 (ESTABLISHED)
  7. 状态正常,端口处于监听状态,我用的是最简单的 配置,
  8. [192.168.233.130 [email protected]:/data/redis/etc]
  9. # vim redis.conf
  10. #this is the config file for redis
  11. pidfile /var/run/redis.pid
  12. port 6379
  13. timeout 0
  14. loglevel verbose
  15. logfile /data/redis/log/redis.log
  16. dbfilename dump.rdb
  17. dir /data/redis/db/
  18. vm-swap-file /tmp/redis.swap
  19. activerehashing yes
  20. 启动命令如下
  21. [192.168.233.130 [email protected]:/data/redis/etc]
  22. # redis-server /data/redis/etc/redis.conf &

下载安装就比较简单了

  1. [192.168.233.130 [email protected]:/soft]
  2. # wget http://redis.googlecode.com/files/redis-2.4.14.tar.gz
  3. [192.168.233.130 [email protected]:/data/redis/etc]
  4. # make –j24
  5. [192.168.233.130 [email protected]:/data/redis/etc]
  6. # make install

配置文件里的那几个路径要提前建好

最后我们回到 logstash agent 上面测试一下

  1. [192.168.233.129 [email protected]:/soft]
  2. # echo GET12313 >> apache.log
  3. [192.168.233.129 [email protected]:/soft]
  4. # echo errorabcd >> apache.log

ok 到 http://192.168.233.128:9292 去搜索一下 刚才的两个内容


嗯,就是这样了,我现在找个php的错误日志给他追加到php.log文件里 
[192.168.233.129 [email protected]:/soft]
# cat php-error.log >> php.log
在看看 logstash的页面 搜索一下 error

OK,最后就是 Kibana了 ,我把Kibana装在了 logstash index上面
下载地址为 http://kibana.org/intro.html

  1. [192.168.233.128 [email protected]:/soft]
  2. # tar xf Kibana-0.2.0.tar.gz
  3. [192.168.233.128 [email protected]:/soft]
  4. # cd Kibana-0.2.0
  5. [192.168.233.128 [email protected]:/soft/Kibana-0.2.0]
  6. # bundle install
  7. 直接安装就好了,非常简单,因为之前咱们已经安装好了 bundle
  8. 编辑配置文件,指定 elasticsearch 的位置
  9. [192.168.233.128 [email protected]:/soft/Kibana-0.2.0]
  10. # vim KibanaConfig.rb
  11. .....
  12. Elasticsearch = "localhost:9200"
  13. KibanaPort = 5601
  14. KibanaHost = ‘0.0.0.0‘
  15. .....
  16. 主要是这几个参数
  17. 启动的话需要ruby
  18. [192.168.233.128 [email protected]:/soft/Kibana-0.2.0]
  19. # /usr/bin/ruby kibana.rb &
  20. [192.168.233.128 [email protected]:/soft/Kibana-0.2.0]
  21. # == Sinatra/1.3.5 has taken the stage on 5601 for development with backup from Thin
  22. >> Thin web server (v1.5.0 codename Knife)
  23. >> Maximum connections set to 1024
  24. >> Listening on 0.0.0.0:5601, CTRL+C to stop
  25. 如果ruby的东西都不缺的话,启动会很顺利,ok 现在看看5601端口的状态
  26. [192.168.233.128 [email protected]:/soft/Kibana-0.2.0]
  27. # lsof -i:5601
  28. COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
  29. ruby    3116 root    5u  IPv4  28947       TCP *:esmagent (LISTEN)

访问一下 试试看 http://192.168.233.128:5601 尝试搜索一下php的错误日志,比如mysql

呵呵,要的就是这个效果,日志会实时的汇总到 logstash index 上供我们查询,当然这只是开始使用logstash的第一步而已,更多的高级功能可以看看官方文档
http://logstash.net/docs/1.1.9/
如果有问题大家可以一起探讨,我也是刚开始接触这个东东,收集日志是相当方便啊,据说还能跟nagios结合. 呵呵

本文出自 “story的天空” 博客,请务必保留此出处http://storysky.blog.51cto.com/628458/1158707

时间: 2024-10-10 11:17:51

用Kibana和logstash快速搭建实时日志查询、收集与分析系统的相关文章

用Kibana+Logstash+Elasticsearch快速搭建实时日志查询 收集与分析系统

安装环境 先看看都需要安装什么软件包ruby 运行Kibana 必须, rubygems 安装ruby扩展必须 bundler 功能类似于yum JDK 运行java程序必须 redis 用来处理日志队列 logstash 收集.过滤日志 ElasticSearch 全文搜索服务(logstash集成了一个) kibana 页面展示 192.168.18.240 logstash index,kibana,JDK192.168.18.241 logstash agent,JDK192.168.1

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana负责查询elasticsearch并在web中展示. logstash收集进程收获日志文件内容后,先输出到redis中缓存,还有一logstash处理进程从redis中读出并转存到elasticsearch中,以解决读快写慢速度不一致问题. 官方在线文档:https://www.elastic.co

elasticsearch + logstash + kibana 搭建实时日志收集系统【原创】

实时日志统一收集的好处: 1.快速定位集群中问题机器 2.无需下载整个日志文件(往往比较大,下载耗时多) 3.可以对日志进行统计 a.发现出现次数最多的异常,进行调优处理 b.统计爬虫ip c.统计用户行为,做聚类分析等 基于上面的需求,我采用了 ELK(elasticsearch + logstash + kibana)的方案,安装方法请到他们的官网:https://www.elastic.co/ 上面查询,这里我主要讲讲我遇到的问题. ??????1.LVS 分发UDP请求不成功的问题???

ELK搭建实时日志分析平台之二Logstash和Kibana搭建

本文书接前回<ELK搭建实时日志分析平台之一ElasticSearch> 文:铁乐与猫 四.安装Logstash logstash是一个数据分析软件,主要目的是分析log日志. 1)下载和解压logstash 下载地址: https://www.elastic.co/cn/downloads/logstash 上传到服务器/usr/ELK目录后,解压:sudo tar -zxvf logstash-6.1.3.tar.gz 我下的这个6.1.3版本的logstash tar包大小有110多M了

结合Docker快速搭建ELK日志收集分析平台

结合Docker快速搭建ELK日志收集分析平台 2017-03-27 09:39 阅读 172 评论 0 作者:马哥Linux运维-Eason ELK Stack ELK (Elasticsearch + Logstash + Kibana),是一个开源的日志收集平台,用于收集各种客户端日志文件在同一个平台上面做数据分析. Introduction Elasticsearch, 基于json分析搜索引擎Logstash, 动态数据收集管道Kibana, 可视化视图将elasticsearh所收集

[Big Data - ELK] ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

ELK平台介绍 在搜索ELK资料的时候,发现这篇文章比较好,于是摘抄一小段: 以下内容来自: http://baidu.blog.51cto.com/71938/1676798 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这

快速搭建ELK日志分析系统

一.ELK搭建篇 官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html 安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/5.x/rpm.html ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部. Elas

单机部署ELK日志收集、分析系统

最近做日志分析,发现logstash较符合自己的需求, Logstash:做系统log收集,转载的工具.同时集成各类日志插件,对日志查询和分析的效率有很大的帮助.一般使用shipper作为log收集.indexer作为log转载. Logstash shipper收集log 并将log转发给redis 存储 Logstash indexer从redis中读取数据并转发给elasticsearch redis:是一个db,logstash shipper将log转发到redis数据库中存储.Log

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

日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误. 通常,日志被分散的储存不同的设备上.如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志.这样是不是感觉很繁琐和效率低下.当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总. 集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事