posts - 0,  comments - 0,  trackbacks - 0
LogStash架构专为收集、分析和存储日志所设计,正适合分布式系统,因此我根据官方文档和网上经验搭建了这个平台。
  1. 安装环境
    1. 平台架构
      采用LogStash的官方推荐
      安装logstash+kibana+elasticsearch+redis搭建日志分析平台 - 傲风 - 0与1构筑世界,程序员创造时代
    2. 环境规划
      • 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
    3. 必要组件
      • JDK
  2. 安装步骤
    1. 在10.2.169.64安装并启动Redis
      • 下载解压
        # cd /usr/local
        # wget http://redis.googlecode.com/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
    2. 在10.2.169.234安装并启动ElasticSearch
      • 下载解压,可到官网直接下载,也可使用wget。
        # cd /usr/local
        # wget https://download.elasticsearch.org/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
    3. 在10.2.169.234安装并启动LogStash
      • 下载并解压Logstash。
        # curl -O https://download.elasticsearch.org/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端口为6379,key是 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
    4. 在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 &
  3. 查看和搜索日志
    打开浏览器,输入以下地址:
    http://10.2.169.234:9292/index.html#/dashboard/file/logstash.json
    即可看到如下界面。
    安装logstash+kibana+elasticsearch+redis搭建日志分析平台 - 傲风 - 0与1构筑世界,程序员创造时代
    这个界面可以设置各种检索条件,就不细说了。
到此为止,整个平台就搭建完毕。当然,这三者的功能不仅仅只有这么一点,而是能够提供更有趣的日志分析,大家可以自己研究。
posted on 2014-05-27 15:03 克里斯 阅读(150) 评论(0)  编辑  收藏 所属分类: 开源项目

只有注册用户登录后才能发表评论。


网站导航:
 

<2025年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

留言簿

随笔分类

文章分类

文章档案

搜索

  •  

最新评论