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
本處對整個系統作個簡單的說明: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分析功能
Web-server基礎環境Nginx+php(安裝過程略過)具體也能夠看我另外的blog
《nginx-1.2.4 和 php-5.4.8 安裝》 http://jedy82.blog.51cto.com/425872/1060681
主服務器(就是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
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
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
http://redis.googlecode.com/files/redis-2.4.14.tar.gz
(注意:redis-2.6.5 版本有問題)
http://www.elasticsearch.org/download/
http://cloud.github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.19.11.tar.gz
unzip elasticsearch-0.18.7.zip
http://logstash.net/ 官網最新版本
http://semicomplete.com/files/logstash 全部舊版本
https://logstash.objects.dreamhost.com/release/logstash-1.1.5-monolithic.jar
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
http://rubyforge.org/frs/?group_id=126
wget http://files.rubyforge.vm.bytemark.co.uk/rubygems/rubygems-1.8.24.tgz
https://nodeload.github.com/rashidkpc/Kibana/legacy.tar.gz/kibana-ruby
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
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/
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
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
mkdir –p /data/logstash/ && cd /data/logstash
wget https://logstash.objects.dreamhost.com/release/logstash-1.1.0-monolithic.jar
cd
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
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
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
這個要經過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 出現內容,說明成功
配置文件內容以下(適用於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]#
[root@test data]# redis-server /data/redis/etc/redis.conf &
[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]#
[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*
curl 127.0.0.1:9200/_cluster/nodes/ip地址
[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]#
[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)
[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 ~]#
[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]#
[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]#
[root@test logstash]# echo 「java -jar /data/logstash/logstash-1.1.0-monolithic.jar agent -f /data/logstash/etc/shipper.conf &」 >>/etc/rc.local
編輯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
[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
使用瀏覽器訪問http://10.10.1.244:9292 若是在啓動logstash時沒有加上web參數,則9292端口不會起來
查詢一個內容:
使用瀏覽器訪問http://10.10.1.244:5601 若是使用的log源的log比較少的話 此處看到的信息比較少,甚至沒有內容
[root@logstash ~]# vi /data/elasticsearch/bin/elasticsearch.in.sh
將JAVA_OPTS="$JAVA_OPTS –Xss128k"
改大一點 如:
JAVA_OPTS="$JAVA_OPTS -Xss256k"