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"

相關文章
相關標籤/搜索