使用logstash+elasticsearch+kibana快速搭建日志平台

参考博客:
http://storysky.blog.51cto.com/628458/1158707

http://www.cnblogs.com/buzzlight/p/logstash_elasticsearch_kibana_log.html

http://chenlinux.com/2012/08/26/translate-using-elasticsearch-for-logs/

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有:

  • 根据关键字查询日志详情
  • 监控系统的运行状况
  • 统计分析,比如接口的调用次数、执行时间、成功率等
  • 异常数据自动触发消息通知
  • 基于日志的数据挖掘

对于日志来说,最常见的需求就是收集、查询、显示,正对应logstash、elasticsearch、kibana的功能。

20140103183817359

下面是在logstash master机器上需要的安装包

安装jdk 1.7

oracle java主页
http://www.oracle.com/technetwork/java

省略安装过程,推荐1.7+版本

java -version

设置java的环境变量,比如

sudo vim ~/.bashrc >> export JAVA_HOME=/usr/lib/jvm/java-7-oracle export JRE_HOME=${JAVA_HOME}/jre   export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib   export PATH=${JAVA_HOME}/bin:$PATH   >> source ~/.bashrc

安装redis

redis主页
http://redis.io/

cd ~/src wget http://download.redis.io/releases/redis-2.6.16.tar.gz tar -zxf redis-2.6.16.tar.gz cd redis-2.6.16 make sudo make install

可以通过redis源代码里utils/install_server下的脚本简化配置工作

cd utils
sudo ./install_server.sh 
install_server.sh

在问你几个问题后会把redis安装为开机启动的服务,可以通过下面的命令行来启动/停止服务

sudo /etc/init.d/redis_ start/end

启动redis客户端来验证安装

redis-cli
> keys *

安装Elasticsearch

Elasticsearch主页
http://www.elasticsearch.org/

cd /search sudo mkdir elasticsearch cd elasticsearch sudo wget http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.5.zip sudo unzip elasticsearch-0.90.5.zip

elasticsearch解压即可使用非常方便,接下来我们看一下效果,首先启动ES服务,切换到elasticsearch目录,运行bin下的elasticsearch

cd /search/elasticsearch/elasticsearch-0.90.5/bin ./elasticsearch start

访问默认的9200端口

curl -X GET http://localhost:9200

安装logstash

logstash主页
http://logstash.net/

cd /search sudo mkdir logstash cd logstash sudo wget http://download.elasticsearch.org/logstash/logstash/logstash-1.3.3-flatjar.jar
java -jar logstash-1.3.3-flatjar.jar web

logstash下载即可使用,命令行参数可以参考logstash flags,主要有

#运行Agent模式
agent  
#指定配置文件  
-f CONFIGFILE  
#自动Web服务
web      
#指定端口,默认9292 
-p PORT

安装kibana

logstash的最新版已经内置kibana,你也可以单独部署kibana。kibana3是纯粹JavaScript+html的客户端,所以可以部署到任意http服务器上。

cd /search sudo mkdir kibana sudo wget http://download.elasticsearch.org/kibana/kibana/kibana-latest.zip sudo unzip kibana-latest.zip sudo cp -r  kibana-latest /var/www/html

可以修改config.js来配置elasticsearch的地址和索引。

用浏览器访问试试看 http://127.0.0.1/html/kibana-latest/index.html

集成

监测日志主服务器上redis.conf文件内容(redis.conf文件中的元素含义请见logstash官网)
如下:

input {
  redis {
    host => "127.0.0.1"
    port => "6379" 
    key => "logstash:redis"
    data_type => "list"
    codec  => "json"
    type => "redis-input"
    tags => ["ewalletlogs"]
  }
}
 
output {
  elasticsearch {
    embedded=>true
  }
 
}

修改或者创建redis.conf文件后需要重新启动logstat服务:

java -jar logstash-1.3.3-flatjar.jar agent -f redis.conf &
java -jar logstash-1.3.3-flatjar.jar web&

被监测日志服务区redis.conf文件内容(元素含义请见logstash官网)
如下:

input { 
    file { 
    	type => "ewallet" 
    	path => "/export/logs/ewallet/ewallet.log"
        #将输入的日志以json格式显示,以便存储到NoSQL中
        message_format => "json_event"
  } 
    file {
    	type => "payapi" 
    	path => "/export/logs/ewallet/payapi.log" 
    }
   file {
    	type => "front" 
    	path => "/export/logs/ewallet/front.log" 
    }
}
 
#将多行的错误日志合并到上一行
filter {
   multiline {
    pattern => "^[^20]"
    what => "previous"
  }
}
 
#将收集到的日志放到redis中,以通过kibana显示
output { 
      redis { 
      host => '172.17.253.217' 
      data_type =>'list' 
      key => 'logstash:redis'
    } 
} 
 
#将收集到的日志放到mongodb中,以通过mongodb存储,待日后做日志分析
 output {
  # Use mongodb to store logstash event.
  mongodb {
      uri => "mongodb://172.17.253.217:27017"
      database => "local"
      collection => "ewalletlogs" 
  }
}

修改或者创建redis.conf文件后需要重新启动logstat服务:

java -jar logstash-1.3.3-flatjar.jar agent -f redis.conf &

redis.conf中的multiply是为了支持错误多行显示,正则表达式含义为:如果本行记录开头不是以20开头,那么就和上一行合并显示
设置完毕后logstash自带的kibana访问效果图:
20140103184713500

20140103184732515

错误日志多行显示效果图如下:
20140122193513625

注意事项

1、在监测日志主服务器上,logstash代理运营时可能会提示打开的文件太多,这时需要将服务器的打开文件数增加,如增加到65535

为了提高最大打开文件数到默认值1024以上, 需要在系统上修改2个地方。 在这个案例中, 我们将最大打开文件数增加到为65535(系统部给出的建议)。 所有的步骤需要root用户操作。
1)/etc/pam.d/login 添加

session required     /lib/security/pam_limits.so

2) 按照最大打开文件数量的需求设置系统, 并且通过检查/proc/sys/fs/file-max文件来确认最大打开文件数已经被正确设置。

echo 65535 > /proc/sys/fs/file-max

3)在/etc/security/limits.conf文件中设置最大打开文件数,添加2行内容:

* soft nofile 4096
* hard nofile 4096

解释:下面是一行提示

 #<domain>      <type>  <item>         <value>

添加如下这行。

* – nofile 2048

这行设置了每个用户的默认打开文件数为2048。 注意”nofile”项有两个可能的限制措施。
就是项下的hard和soft。 要使修改过得最大打开文件数生效,必须对这两种限制进行设定。
如果使用”-”字符设定, 则hard和soft设定会同时被设定。
硬限制表明soft限制中所能设定的最大值。 soft限制指的是当前系统生效的设置值。
hard限制值可以被普通用户降低。但是不能增加。 soft限制不能设置的比hard限制更高。 只有root用户才能够增加hard限制值。

2、打开elasticsearch-0.90.5/config/elasticsearch.yml修改集群名、节点名、分片数和备份数

修改集群名(可选):找到: cluster.name,去掉前面的#,修改为 cluster.name:ewallet(名字随意)。

修改结点名(可选):同上,找到node.name,去掉前面的#,修改为node.name:yb1

修改分片数(可选):同上,找到index.number_of_shards,去掉前面的#,修改为index.number_of_shards:10(默认为5)

修改备份数(可选):同上,找到index.number_of_replicas,去掉前面的#,修改为index.number_of_replicas 1(默认也是1,可不理)。

3、打开elasticsearch-0.90.5/bin/elasticsearch.in.sh修改占用内存大小

修改Es占用内存:找到 ES_MIN_MEM和ES_MAX_MEM,修改es最大和最小占用内存值。

(说明:Es的集群非常简单,只要在同一个局域网内,多台服务器能互相通讯,并且cluster.name是一样的,就能自动集在一起。)

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

发表评论

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