Logstash + Elasticsearch + Kibana 搭建分布式日志系统

前言

之前在腾讯工作的时候,曾在内部资料平台中看到过一篇关于ELK的教程。在12月份,项目开发过程中涉及到API对接部分,开发人员经常需要查看日志文件来debug传递的参数和返回的结果,但是多个项目系统日志文件存放在不同路径,而且直接查看文件又较难定位,故用Elasticsearch + Kibana 搭建了一套web日志系统。

搭建步骤

Elasticsearch

  1. 下载并解压Elasticsearch,我下载了Elasticsearch-2.1.1

  2. 进入 Elasticsearch根目录,执行命令bin/elasticsearch,使用windows系统的可以执行命令bin/elasticsearch.bat,这样就可以启动 Elasticsearch服务了。

  3. 接着可以测试一下Elasticsearch是否正常启动,执行命令curl -X GET http://localhost:9200/,如果输出类似如下内容,那就说明成功了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
    "name" : "Conan the Barbarian",
    "cluster_name" : "elasticsearch",
    "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
    }
    ,

    "tagline" : "You Know, for Search"
    }

Logstash

  1. 下载并解压Logstash,我下载了Logstash-2.1.1

  2. 进入 Logstash根目录,新建Logstash配置文件logstash.conf,输入如下配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    input {
    file {
    path => ["/path/to/log/*.log"]
    start_position => beginning
    type => 'your type here'
    }
    }
    output {
    elasticsearch {
    }
    }

    上面使用了比较简单的配置,详细配置可以参考 Logstash Reference

  3. 执行命令bin/logstash agent -f logstash.conf,这样就可以启动 Logstash服务了。

Kibana

  1. 下载并解压Kibana,我下载了Kibana 4.3.1

  2. 进入Kibana目录,编辑配置文件vim config/kibana.yml,设置Elasticsearch的URL,默认为http://localhost:9200,设置Kibana Server Host,默认为"0.0.0.0",最后配置Apache或Nginx等搭建web服务器,这里我使用了Apache。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <VirtualHost *:80>
    ServerName yourserver.com
    ProxyRequests off
    <Proxy *>
    Order deny,allow
    Allow from all
    </Proxy>
    <Location />
    ProxyPass http://0.0.0.0:5601/
    ProxyPassReverse http://0.0.0.0:5601/
    </Location>
    </VirtualHost>
  3. 配置好hosts文件后,打开浏览器输入Kibana服务的地址,首先会让你设置一个index pattern,设置完就可以看到日志内容啦~

定时清理过期日志

过期的日志会占用一定的磁盘空间,可以加一个crontab脚本定时清理。
可设定一个天数(如60天)过期, 因为 Logstash 默认建立的index 是 logstash-2016.01.01的格式, 用crontab 每天凌晨来删除日志

1
vim cleanup.sh

1
2
3
4
5
6
7
8
9
#!/usr/bin/env bash
if [[ "$1" == "" ]]
then
target=$(date -d "-60days" +%Y.%m.%d)
else
target="$1"
fi
curl -XDELETE "http://localhost:9200/logstash-$target/"
```

crontab -e // 添加任务
1 1 * (cd /path/to/cleanup; ./cleanup.sh >/dev/null 2>&1)&
```

文章目录
  1. 1. 前言
  2. 2. 搭建步骤
    1. 2.1. Elasticsearch
    2. 2.2. Logstash
    3. 2.3. Kibana
  3. 3. 定时清理过期日志
,