Kibana+Logstash+Elasticsearch 日志查询系统

Kibana+Logstash+Elasticsearch 日志查询系统php

2012-11-03 23:02:39html

标签:日志 查询 Logstash Elasticsearch Kibanajava

原创 服务器node

原创做品,容许转载,转载时请务必以超连接形式标明文章 原始出处 、做者信息和本声明。不然将追究法律责任。http://enable.blog.51cto.com/747951/1049411linux

本文相关的软件可至http://down.51cto.com/data/719336下载nginx

搭建该平台的目的就是为了运维、研发很方便的进行日志的查询。Kibana一个免费的web壳;Logstash集成各类收集日志插件,仍是一个比较优秀的正则切割日志工具;Elasticsearch一个开源的搜索引擎框架(支持群集架构方式)。git

1、 安装需求

1. 理论拓扑

clip_p_w_picpath001

本处对整个系统作个简单的说明:github

Logstash:作系统log收集,转载的工具。通常使用shipper.conf 做为log收集、indexer.conf做为log转载。web

Logstash shipper.conf 收集log 并将log转发给redis 存储redis

Logstash indexer.conf 从redis中读取数据并转发给elasticsearch

redis:是一个db,logstash shipper.conf将log转发到redis数据库中存储。Logstash indexer.conf 从redis中读取数据并转发给elasticsearch。

Elasticsearch:可进行多数据集群,提升效率。从redis中读取数据,并转发到kibana中

rashidkpc-Kibana: 提供一个 web界面的log分析功能

 

2. 安装环境

2.1 操做系统

CentOS 6.3 x64

Web-server基础环境Nginx+php(安装过程略过)具体也能够看我另外的blog

《nginx-1.2.4 和 php-5.4.8 安装》 http://jedy82.blog.51cto.com/425872/1060681

 

2.2 服务器信息

主服务器(就是log日志收集分析的服务器)

ip:10.10.1.244

需安装

jdk

redis

elasticsearch

logstash

rashidkpc-Kibana

提供log的服务器(请尽可能选择有较多log的服务器,本处使用的是dns服务器。)

ip:10.10.1.9 powerdns-nsj1

ip:10.10.1.10 powerdns-nsj2

只需安装logstash

 

2.3 软件列表

jdk-7u9-linux-x64.tar.gz

redis-2.4.14.tar.gz

elasticsearch-0.18.7.tar.gz

logstash-1.1.0-monolithic.jar

rashidkpc-Kibana-v0.2.0-0-g41a1298.tar.gz

 

2.4 软件获取方法
2.4.1 Jdk获取路径

http://www.oracle.com/technetwork/java/javase/downloads/index.html

http://download.oracle.com/otn-pub/java/jdk/7u9-b05/jdk-7u9-linux-x64.tar.gz

 

2.4.2 Redis获取路径

http://redis.io/download

http://redis.googlecode.com/files/redis-2.4.14.tar.gz

(注意:redis-2.6.5 版本有问题)

2.4.3 Elasticsearch获取路径

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

http://cloud.github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.11.tar.gz

unzip elasticsearch-0.18.7.zip

 

2.4.4 Logstash获取路径

http://logstash.net/ 官网最新版本

http://semicomplete.com/files/logstash 全部旧版本

https://logstash.objects.dreamhost.com/release/logstash-1.1.5-monolithic.jar

 

2.4.5 PD获取路径

http://nchc.dl.sourceforge.net/project/pure-data/pure-data/

http://nchc.dl.sourceforge.net/project/pure-data/pure-data/0.43.4/pd-0.43-4.src.tar.gz

 

2.4.6 gem获取路径

http://rubyforge.org/frs/?group_id=126

wget http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.8.24.tgz

 

2.4.7 Kibana获取路径

http://kibana.org/intro.html

https://nodeload.github.com/rashidkpc/Kibana/legacy.tar.gz/kibana-ruby

 

2、 安装步骤

1. JDK的下载及安装

wget http://download.oracle.com/otn-pub/java/jdk/7u9-b05/jdk-7u9-linux-x64.tar.gz

tar zxvf jdk-7u9-linux-x64.gz

mv jdk1.7.0_09 /usr/java/

编辑 /etc/profile文件,加入如下行内容

export JAVA_HOME=/usr/java/jdk1.7.0_09

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

source /etc/profile 刷新环境变量

java -version 验证java版本

cd

 

2. Redis下载及安装

wget http://redis.googlecode.com/files/redis-2.4.14.tar.gz

tar zxvf redis-2.4.14.tar.gz

cd redis-2.4.14

make -j24

make install

mkdir -p /data/redis

cd /data/redis/

mkdir {db,log,etc}

cd

测试:

[root@test redis-2.4.14]# redis-server 出现相似如下的信息

[6237] 06 Dec 16:23:15 # Warning: no config file specified, using the default config. In order to specify a config file use 'redis-server /path/to/redis.conf'

[6237] 06 Dec 16:23:15 * Server started, Redis version 2.4.14

[6237] 06 Dec 16:23:15 * DB loaded from disk: 0 seconds

[6237] 06 Dec 16:23:15 * The server is now ready to accept connections on port 6379

[6237] 06 Dec 16:23:16 - 0 clients connected (0 slaves), 717496 bytes in use

在另外一个窗口

[root@test ~]# redis-cli

redis 127.0.0.1:6379> set test tt

OK

redis 127.0.0.1:6379> get test

"tt"

redis 127.0.0.1:6379>

这时服务端出现以下信息

[6237] 06 Dec 16:24:52 - DB 0: 1 keys (0 volatile) in 4 slots HT.

[6237] 06 Dec 16:24:52 - 1 clients connected (0 slaves), 726216 bytes in use

 

3. Elasticsearch下载及安装

wget http://cloud.github.com/downloads/elasticsearch/elasticsearch/ elasticsearch-0.18.7.zip

cd /data/

unzip /software/elasticsearch-0.18.7.zip

ln -sv elasticsearch-0.18.7 elasticsearch

cd

 

4. Logstash下载及安装

mkdir –p /data/logstash/ && cd /data/logstash

wget https://logstash.objects.dreamhost.com/release/logstash-1.1.0-monolithic.jar

cd

 

5. Kibana下载及安装

5.1 先要安装相关工具,负责没法安装kibana:
5.1.1 安装依赖库

yum -y install ruby ruby-rdoc ruby-devel tcl tk freeglut-devel libtoolcd

freeglut-devel 是提供opengl库的,若是不装的话会在./configur时报” configure: error: GL (headers) not found! you need openGL”

若是不安装ruby-devel,会报以下错误:

ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb

can't find header files for ruby

若是不安装 ruby-rdoc,会报以下错误:

gem installed

ERROR: While executing gem ... (Gem::DocumentError)

ERROR: RDoc documentation generator not installed: no such file to load -- rdoc/rdoc

 

5.1.2 安装PD (gem 必需要pd支持)

wget http://nchc.dl.sourceforge.net/project/pure-data/pure-data/0.43.4/pd-0.43-4.src.tar.gz

tar zxvf pd-0.43-4.src.tar.gz

cd pd-0.43-4

./autogen.sh

cd src

./configure

make

make install

pd -version 验证pd

cd

 

5.1.3 安装gem

http://rubyforge.org/frs/?group_id=126

wget http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.8.24.tgz

tar zxvf rubygems-1.8.24.tgz

cd rubygems-1.8.24

ruby setup.rb

gem -v 验证gem安装

cd

 

5.2 最后进行Kibana安装

这个要经过window下载 wget 无法下

[root@test ~]# cd /data/kibana

[root@test data]# tar zxvf rashidkpc-Kibana-v0.2.0-0-g41a1298.tar.gz

[root@test data]#ln -sv rashidkpc-Kibana-41a1298 kibana

[root@test kibana]# vi /data/kibana/KibanaConfig.rb 作以下修改:

Elasticsearch = "0.0.0.0:9200"

KibanaHost = '0.0.0.0'

[root@test kibana]# gem install bundler \\需链接外网

[root@test kibana]# bundle install

[root@test kibana]# ruby kibana.rb 启动kibana

[root@test kibana]# cd /software

浏览器中输入http://IP:5601 出现内容,说明成功

 

3、 相关配置及启动

1. Redis配置及启动

1.1 新建redis.conf

配置文件内容以下(适用于redis-2.4.14版本):

[root@test redis]# more /data/redis-2.4.14/redis.conf /data/redis-2.4.14/redis.conf.bak

[root@test redis]# more /data/redis/etc/redis.conf

#this is the config file for redis

daemonize yes

pidfile /var/run/redis.pid

port 6379

timeout 0

loglevel verbose

logfile /data/redis/log/redis.log

databases 16

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename dump.rdb

dir /data/redis/db

slave-serve-stale-data yes

appendonly no

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

slowlog-log-slower-than 10000

slowlog-max-len 128

vm-enabled no

vm-swap-file /tmp/redis.swap

vm-max-memory 0

vm-page-size 32

vm-pages 134217728

vm-max-threads 4

hash-max-zipmap-entries 512

hash-max-zipmap-value 64

list-max-ziplist-entries 512

list-max-ziplist-value 64

set-max-intset-entries 512

zset-max-ziplist-entries 128

zset-max-ziplist-value 64

activerehashing yes

[root@test data]#

 

1.2 Redis启动

[root@test data]# redis-server /data/redis/etc/redis.conf &

 

1.3 Redis测试

[root@test data]# redis-cli

redis 127.0.0.1:6379> set test kk

OK

redis 127.0.0.1:6379> get test

"kk"

redis 127.0.0.1:6379> exit

[root@test data]#

 

2. Elasticsearch配置及启动

2.1 Elasticsearch启动

[root@test data]# /data/elasticsearch/bin/elasticsearch -p /var/run/elasticsearch.pid &

[root@test data]# more /var/run/esearch.pid

[root@test data]# netstat -tlnpu 端口应该是 tcp 930* 和tcp 920*

 

2.2 Elasticsearch 群集配置(可不作)

curl 127.0.0.1:9200/_cluster/nodes/ip地址

 

3. Logstash配置及启动(收集log的服务器,本处是10.10.1.244)

3.1 新建配置文件(将redis 服务器收到的log转交给elasticsearch服务器)

[root@test logstash]# more /data/logstash/etc/indexer.conf

input {

redis {

host => "127.0.0.1"

type => "redis-input"

# these settings should match the output of the agent

data_type => "list"

key => "logstash:redis"

# We use json_event here since the sender is a logstash agent

message_format => "json_event"

}

}

output {

# stdout { debug => true debug_format => "json"}

elasticsearch {

host => "127.0.0.1"

}

}

[root@test logstash]#

 

3.2 Logstash启动

[root@test logstash]# java –jar /data/logstash/logstash-1.1.0-monolithic.jar agent -f /data/logstash/etc/indexer.conf web & (此处可不加web这个参数,若是不加,就不会启动web界面,端口9292也不会起来)

[root@logstash ~]# ps -aux | grep logstash

root 2292 2.4 15.0 3435784 590436 pts/4 Sl 16:09 0:58 java -jar /data/logstash/logstash-1.1.0-monolithic.jar agent -f /data/logstash/indexer.conf web

[root@logstash ~]#

[root@logstash ~]# netstat -tlnp | grep java 应该有如下几行

tcp 0 0 :::9292 :::* LISTEN 2292/java

tcp 0 0 :::9200 :::* LISTEN 2161/java

tcp 0 0 :::9300 :::* LISTEN 2161/java

tcp 0 0 :::9301 :::* LISTEN 2292/java

tcp 0 0 :::9302 :::* LISTEN 2292/java

[root@logstash ~]# Logstash配置及启动(提供log的服务器,本处是10.10.1.9和10.10.1.10)

 

3.3 开机自动启动

[root@logstash ~]# more /etc/kibana.sh

#!/bin/bash

redis-server /data/redis/etc/redis.conf &

/data/elasticsearch/bin/elasticsearch -p /var/run/elasticsearch.pid &

java -jar /data/logstash/logstash-1.1.0-monolithic.jar agent -f /data/logstash/indexer.conf &

cd /data/kibana/ && ruby kibana.rb &

[root@logstash ~]# echo /etc/kibana.sh >>/etc/rc.local

[root@logstash ~]# more /etc/rc.local

/etc/kibana.sh

[root@logstash ~]#

 

4. 新建Logstash配置文件(此处配置powerdns-nsj1的,powerdns-nsj1对应该的ip是10.10.1.9,powerdns-nsj2对应该的ip是10.10.1.10)

4.1 新建配置文件(将系统log提交给redis 服务器)

[root@test ns1]# more /data/logstash/etc/shipper.conf (这里提取的log文件最好有较多的日志,要否则看不出效果,我这里使用的是powerdns的log,这个的log比较多)

input {

file {

type => "pdns-access"

path => "/var/log/pdns/pdns.log"

}

}

output {

redis {

host => "10.10.1.244"

data_type =>"list"

key => "logstash"

}

}

[root@test logstash]#

[root@test logstash]#

 

4.2 Logstash启动收集数据

[root@test logstash]# java -jar /data/logstash/logstash-1.1.0-monolithic.jar agent -f /data/logstash/etc/shipper.conf &

[root@powerdns-nsj1 ~]# ps -aux | grep logstash

root 15757 2.0 7.8 2399256 309904 pts/0 Sl 16:31 0:22 java -jar /data/logstash/logstash-1.1.0-monolithic.jar agent -f /data/logstash/etc/shipper.conf

[root@test logstash]#

 

4.3 加入开机启动

[root@test logstash]# echo “java -jar /data/logstash/logstash-1.1.0-monolithic.jar agent -f /data/logstash/etc/shipper.conf &” >>/etc/rc.local

 

4、 性能调优

1. Elasticsearch调优

1.1 JVM调优

编辑Elasticsearch.in.sh文件

ES_CLASSPATH=$ES_CLASSPATH:$ES_HOME/lib/*:$ES_HOME/lib/sigar/*

if [ "x$ES_MIN_MEM" = "x" ]; then

ES_MIN_MEM=4g

fi

if [ "x$ES_MAX_MEM" = "x" ]; then

ES_MAX_MEM=4g

fi

 

1.2 Elasticsearch索引压缩

[root@test logstash]#vim index_elastic.sh

#!/bin/bash

#comperssion the data for elasticsearch now

date=` date +%Y.%m.%d `

# compression the new index;

/usr/bin/curl -XPUT http://localhost:9200/logstash-$date/nginx-access/_mapping -d '{"nginx-access" : {"_source" : { "compress" : true }}}'

echo ""

/usr/bin/curl -XPUT http://localhost:9200/logstash-$date/nginx-error/_mapping -d '{"nginx-error" : {"_source" : { "compress" : true }}}'

echo ""

/usr/bin/curl -XPUT http://localhost:9200/logstash-$date/linux-syslog/_mapping -d '{"linux-syslog" : {"_source" : { "compress" : true }}}'

echo ""

保存该脚本并执行

sh index_elastic.sh

 

5、 使用

1. Logstash查询页

使用浏览器访问http://10.10.1.244:9292 若是在启动logstash时没有加上web参数,则9292端口不会起来

clip_p_w_picpath002

查询一个内容:

clip_p_w_picpath003

 

2. kibana查询页

使用浏览器访问http://10.10.1.244:5601 若是使用的log源的log比较少的话 此处看到的信息比较少,甚至没有内容

clip_p_w_picpath005

 

6、 错误排除

1. 新建启动文件

[root@logstash ~]# vi /data/elasticsearch/bin/elasticsearch.in.sh

将JAVA_OPTS="$JAVA_OPTS –Xss128k"

改大一点 如:

JAVA_OPTS="$JAVA_OPTS -Xss256k"

相关文章
相关标签/搜索