logstash+elasticsearch+kibana3

日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常时进行报警,并且开发人员能够查看相关日志。logstash+elasticsearch+kibana3就是实现这样功能的一套系统,并且功能更强大。

logstash是一个管理日志和事件的工具,你可以收集它们,解析它们,并存储它们以供以后使用(例如日志搜索),logstash有一个内置的web界面,用来搜索你的所有日志。logstash在部署时有两种运行模式:standalone和centralized:

* standalone:standalone的意思是所有的事情都在一台服务器上运行,包括日志收集、日志索引、前端WEB界面都部署在一台机器上。

* centralized:就是多服务器模式,从很多服务器运输(ship)日志到一台总的日志(collector)服务器上用来索引和查找。

需要注意的是logstash本身并没有什么shipper和collector这种说法,因为不论是运输日志的进程还是汇集总的日志的进程运行的都是同一个程序,只是使用的配置文件不同而已。

elasticsearch:

基于lucene的开源搜索引擎,是一个分布式的搜索分析系统,主要特点有:real time data、real time analytics、distributed、high availability、multi-tenancy、full text search、document oriented、conflict management、schema free、restful api等等。

kibana3:

可视化日志和数据系统,作为WEB前端可以很容易的和elasticsearch系统结合。kibana有版本2和版本3的区分,版本2采用ruby编写,部署起来很麻烦,需要安装很多ruby依赖包(目前网上多是这个版本的部署),版本3采用纯html+css编写,因此部署起来很方便,解压即用。

两台机器试验,ubuntu12.04

10.20.112.27:logstash index、kibana

10.20.112.26:logstash agent、elasticsearch、redis

logstash我们必然采用centralized模式了:

134318_n6Bp_123777

先部署10.20.112.26

1 安装redis,也可以使用其他存储介质,参看官方doc的input配置

apt-get install redis-server

修改配置/etc/redis/redis.conf的监听地址

#bind 127.0.0.1
bind 0.0.0.0

重启redis:

/etc/init.d/redis-server restart

2 安装JDK和Ruby logstash需要

apt-get install openjdk-7-jdk
apt-get install ruby rubygems

3 安装elasticsearch

cd /opt
wget 'https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.tar.gz'
tar zxvf elasticsearch-0.90.7.tar.gz
cd elasticsearch-0.90.7/bin
#可以在logstash agent启动后再启动
./elasticsearch -f

会在屏幕上输出如下消息:

[2013-11-28 13:51:11,038][INFO ][node                     ] [Harpy] version[0.90.7], pid[17473], build[36897d0/2013-11-13T12:06:54Z]
[2013-11-28 13:51:11,039][INFO ][node                     ] [Harpy] initializing ...
[2013-11-28 13:51:11,045][INFO ][plugins                  ] [Harpy] loaded [], sites []
[2013-11-28 13:51:14,351][INFO ][node                     ] [Harpy] initialized
[2013-11-28 13:51:14,352][INFO ][node                     ] [Harpy] starting ...
[2013-11-28 13:51:14,462][INFO ][transport                ] [Harpy] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/10.20.112.26:9300]}
[2013-11-28 13:51:17,509][INFO ][cluster.service          ] [Harpy] new_master [Harpy][gvDXLMGyTUiyJ3YT3At_1Q][inet[/10.20.112.26:9300]], reason: zen-disco-join (elected_as_master)
[2013-11-28 13:51:17,586][INFO ][discovery                ] [Harpy] elasticsearch/gvDXLMGyTUiyJ3YT3At_1Q
[2013-11-28 13:51:17,715][INFO ][http                     ] [Harpy] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/10.20.112.26:9200]}
[2013-11-28 13:51:17,731][INFO ][node                     ] [Harpy] started
[2013-11-28 13:51:18,873][INFO ][gateway                  ] [Harpy] recovered [2] indices into cluster_state

4 下载安装logstash

cd /opt
wget 'https://download.elasticsearch.org/logstash/logstash/logstash-1.2.2-flatjar.jar'

logstash是一个jar包,需要自己创建一个配置文件即可:logstash.agent.conf

input {
 
    file  {
           type => "linux-syslog"
            path => [ "/var/log/lastlog", "/var/log/test", "/var/log/syslog","/var/log/lastlog" ]
          }
 
}
 
output {
         redis {
         host => "10.20.112.26"
         data_type =>"list"
         key => "logstash"
        }
}

5 启动logstash shipper

cd /opt
java -jar logstash-1.2.2-flatjar.jar agent -f logstash.agent.conf

间隔几十秒后,会在输出如下信息:

Using milestone 2 input plugin 'file'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.2.2/plugin-milestones {:level=>:warn}
Using milestone 2 output plugin 'redis'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.2.2/plugin-milestones {:level=>:warn}

logstash命令使用:

logstash的命令行标志:
agent
   -f    configfile     加载logstash的配置文件,可以是文件、目录、通配符,如果是目录或者通配符,则读取第一个匹配到的文件
   -e   configset     设置一些配置文件中的配置
   -w   count          设置filter的工作者个数,默认是1
   -l     logfile         设置日志路径,默认是stdout
web
   -a    address      启动一个webserver,默认监听0.0.0.0
   -p    port           webserver监听的地址,默认是9292

再部署10.20.112.27
1 安装ruby和JDK

apt-get install openjdk-7-jdk
apt-get install ruby

2 安装logstash indexer

cd /opt
wget 'https://download.elasticsearch.org/logstash/logstash/logstash-1.2.2-flatjar.jar'

logstash是一个jar包,需要自己创建一个配置文件即可:logstash.index.conf

#/opt/logstash.index.conf
input {
    redis 
    {
    host => "10.20.112.26"
    data_type =>"list"
    port => "6379"
    key => "logstash"
    type => "redis-input"
    }
 
}
 
output 
    {
    elasticsearch {
    host => "10.20.112.26"
    port => "9300"
    }
}

3 启动logstash indexer

cd /opt
java -jar logstash-1.2.2-flatjar.jar  agent -f logstash.index.conf

屏幕上会出现如下信息:

Using milestone 2 input plugin 'redis'. This plugin should be stable, but if you see strange behavior, please let us know! For more information on plugin milestones, see http://logstash.net/docs/1.2.2/plugin-milestones {:level=>:warn}
Using milestone 1 codec plugin 'json'. This plugin should work, but would benefit from use by folks like you. Please let us know if you find bugs or have suggestions on how to improve this plugin.  For more information on plugin milestones, see http://logstash.net/docs/1.2.2/plugin-milestones {:level=>:warn}
PORT SETTINGS 10.20.112.26:9300

4 安装apache2和kibana3

apt-get install apache2
wget 'https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0milestone4.tar.gz'
tar zxvf kibana-3.0.0milestone4.tar.gz -C /var/www/
cd /var/www/kibana-3.0.0milestone4
mv * ../
cd ..
rm -fr kibana-3.0.0milestone4
###vi config.js 修改配置文件
#elasticsearch: "http://"+window.location.hostname+":9200",
elasticsearch: "http://10.20.112.26:9200",

5 访问10.20.112.27
154113_wRLO_123777

并没有如想象中的看到数据图,注意我红框中的内容,这只是kibana3的默认界面,需要我们用logstash.json代替default.json界面,具体目录源码目录下app/dashboards中。

cd /var/www/app/dashboards
rm default.json
mv logstash.json default.json

这时候访问即可看到正常界面
154619_5cal_123777

logstash的配置文件相当简单,主要有三部分:inputs、filters、outputs。事件在配置文件中的出现是有顺序的。在inputs、output、filter中,允许你设置配置插件,配置插件由一个插件名称和紧跟在后面的插件配置代码块构成。插件中的值可以是布尔值、字符串、数字、哈希、数组等,并且支持条件判断(if...else)。

下面分析一下input的file的配置:

input {
  file {
    add_field => ... # hash (optional), default: {}
    codec => ... # codec (optional), default: "plain"
    debug => ... # boolean (optional), default: false
    discover_interval => ... # number (optional), default: 15
    exclude => ... # array (optional)
    path => ... # array (required)
    sincedb_path => ... # string (optional)
    sincedb_write_interval => ... # number (optional), default: 15
    start_position => ... # string, one of ["beginning", "end"] (optional), default: "end"
    stat_interval => ... # number (optional), default: 1
    tags => ... # array (optional)
    type => ... # string (optional)
}
 
}

下面分析一下output的file的配置:

output {
  file {
    codec => ... # codec (optional), default: "plain"
    flush_interval => ... # number (optional), default: 2
    gzip => ... # boolean (optional), default: false
    max_size => ... # string (optional)
    message_format => ... # string (optional)
    path => ... # string (required)
    workers => ... # number (optional), default: 1
}
 
}

基本的搭建就ok了,接着就是使用了

1 logstash的配置文件主要用到的配置项在:http://logstash.net/docs/1.2.2/

2 elasticsearch提供了restful api,我们也可以不借用kibana来自己获取里面的信息,api接口:

http://elasticsearch-py.readthedocs.org/en/latest/

http://www.elasticsearch.org/guide/en/elasticsearch/client/python-api/current/_overview.html

 

参考官方文档:

logstash:http://logstash.net/

elasticsearch:http://www.elasticsearch.org/

kibana:http://www.elasticsearch.org

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 68 queries in 0.755 seconds