分享

搭建logstash+kibana+elasticsearch+redis搭建集中式日志分析平台

 dtl乐学馆 2015-01-13
 
 

LogStash架构专为收集、分析和存储日志所设计,正适合分布式系统,因此我根据官方文档和网上经验搭建了这个平台。

  1. 安装环境
    1. 平台架构

采用LogStash的官方推荐

    1. 环境规划
      • 10.2.169.64(CentOS5.5)Broker
      • 10.2.169.234(CentOS5.5)Indexer,Storage&Search,Web Interface
      • 10.2.169.21/10.2.169.22....(CentOS5.5)Shiper
    2. 必要组件
      • JDK
  1. 安装步骤
    1. 10.2.169.64安装并启动Redis
      • 下载解压
        # cd /usr/local

# wget http://redis./files/redis-2.6.14.tar.gz

# tar -xzvf redis-2.6.14.tar.gz

      • 创建软链接(非必须)
        这里是个人习惯,以后版本变迁的时候便于升级,可以跳过,但如果跳过的话下面相应的目录就要变更。
        # ln -s redis-2.6.14 redis
      • 编译
        # cd redis
        # make
      • 建立Redis目录(非必须)
        这步只是习惯将Redis相关的资源统一管理,可以跳过。

# mkdir -p bin

# mkdir -p etc

# mkdir -p var

# cp src/redis-server src/redis-cli src/redis-benchmark src/redis-sentinel src/redis-check-dump src/redis-check-aof bin/

# cp redis.conf etc/

§  配置参数
# vi etc/redis.conf
redis.conf做如下变更


daemonize yes

pidfile /usr/local/redis/var/redis.pid

port 6379

timeout 300

loglevel debug

logfile /usr/local/redis/var/redis.log

databases 16

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename dump.rdb

dir /usr/local/redis/var/

appendonly no

appendfsync always


§  启动
# bin/redis-server etc/redis.conf

    1. 10.2.169.234安装并启动ElasticSearch
      • 下载解压,可到官网直接下载,也可使用wget
        # cd /usr/local

# wget https://download./elasticsearch/elasticsearch/elasticsearch-1.1.1.tar.gz

# tar -zxvf elasticsearch-1.1.1.tar.gz

      • 创建软连接。
        这里是个人习惯,以后版本变迁的时候便于升级,可以跳过,但如果跳过的话下面相应的目录就要变更。
        # ln -s elasticsearch-1.1.1 elasticsearch
      • 这里我们使用默认配置,直接启动。
        # elasticsearch/bin/elasticsearch
    1. 10.2.169.234安装并启动LogStash
      • 下载并解压Logstash

# curl -O https://download./logstash/logstash/logstash-1.4.1.tar.gz
# tar -xzvf logstash-1.4.1

      • 创建软连接。
        这里是个人习惯,以后版本变迁的时候便于升级,可以跳过,但如果跳过的话下面相应的目录就要变更。
        # ln -s logstash-1.4.1 logstash
      • 创建配置文件
        # cd logstash

# mkdir conf
# vi conf/redis.conf

内容如下


input {
  redis { 
    host => '10.2.169.64' 
    data_type => 'list'
    port => "6379" 
    key => 'logstash:redis' 
    type => 'redis-input' 
  }
}
output { 
  elasticsearch { 
    host => "127.0.0.1"
  }


解释一下 logstash的配置文件由 input filter output 等几个基本的部分组成,顾名思义 input 就是在哪收集数据,output就是输出到哪,filter代表一个过滤规则意思是什么内容
会被收集。
上面这段是让 logstash 10.2.169.64 这个redis服务器上去收集日志 redis端口为6379key logstash:redis 类型为 redis-input ,(注意:这几个值必须跟logstash agent
output
所对应),收集完成后输出到 elasticsearch ,如果elasticsearch有更改端口,需要将这条改为
host => 'elasticsearch
ip' port => 端口 

      • 启动logstash index

# bin/logstash -f conf/redis.conf
-l /data/logs/logstash.log &
其中-f是指以指定的配置文件启动,-l是设置logstash本身的日志位置。&是以守护进程方式启动。

      • 启动logstash web
        # bin/logstash-web
    1. 10.2.169.21/10.2.169.22....安装并启动LogStash agent 这里的机器就是我们应用部署的各台机器了。这里的步骤与logstash index的步骤差不多,差异除了不用启动logstash web外,主要有两个。
      • redis.conf的配置内容。

input {
    file {
    type => "dev_integrate"
    path => "/data/logs/integrate/integrate.log"
    }
    file {
    type => "dev_custom"
    path => "/data/logs/custom/custom.log"
    }    
}
filter {
  multiline {
    pattern => "^[^2014]"
    what => "previous"
  }
  }  
output {
      redis {
      host => '10.2.169.64'
      data_type => 'list'
      key => 'logstash:redis'
       }
       }


其中input指定了本机部署的两个应用的log文件。type是我自定义的一个类型,用来在后面的UI中区分各应用,path就是log文件路径了。如果有更多应用,照格式添加即可。
filter
用来处理log中的error信息,因为我的应用java程序,部署在tomcat下,所以错误信息类似如下:

2014-05-27 02:17:16 [emailJMSContainer-1] ERROR com.xxx.xxx.email.EmailSender.errorLog(79)): - exception occurred:
javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
    com.sun.mail.smtp.SMTPAddressFailedException: 553
 5.7.1 <xxx-saas@xxx.com>: Sender address rejected: not owned by user paymonitor@xxx.com

    at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1196)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:584)
    at javax.mail.Transport.send0(Transport.java:169)
    at javax.mail.Transport.send(Transport.java:98)
    at com.xxx.communication.email.EmailSender.sendEmail(EmailSender.java:97)
    at com.xxx.notification.EmailNotificationConsumer.processTxtMsg(EmailNotificationConsumer.java:24)
    at com.xxx.asyncmsg.consumer.AbstractConsumer.onMessage(AbstractConsumer.java:78)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:562)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:500)
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:468)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:326)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:264)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1071)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1063)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:960)
    at java.lang.Thread.run(Thread.java:662)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 553
 5.7.1 <xxx-saas@xxx.com>: Sender address rejected: not owned by user paymonitor@xxx.com

    at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1047)
      15 more


如果不加fitler,那采集来的message就是单独的一条。所以这里我配置了一个fitler,所有不是以2014开头(这里演示我偷了一下懒,应该用正则)的都并到上一条。
output
就是输入到我们的redis服务器。

      • 启动agent

# bin/logstash -f conf/redis.conf
-l /data/logs/logstash.log &

  1. 查看和搜索日志
    打开浏览器,输入以下地址:

http://10.2.169.234:9292/index.html#/dashboard/file/logstash.json
即可看到如下界面。

这个界面可以设置各种检索条件,就不细说了。

到此为止,整个平台就搭建完毕。当然,这三者的功能不仅仅只有这么一点,而是能够提供更有趣的日志分析,大家可以自己研究。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多