Kibana+Logstash+Elasticsearch+Redis部署

一、 安装部署

#2014-1-7更新 output还是由elasticsearch_http用回elasticsearch

1.系统各部分应用介绍

  • Logstash:做系统log收集,转载的工具。同时集成各类日志插件,对日志查询和分析的效率有很大的帮助.一般使用shipper作为log收集、indexer作为log转载.
  • Logstash shipper收集log 并将log转发给redis 存储
  • Logstash indexer从redis中读取数据并转发给elasticsearch
  • redis:是一个db,logstash shipper将log转发到redis数据库中存储。Logstash indexer从redis中读取数据并转发给elasticsearch。
  • Elasticsearch:开源的搜索引擎框架,前期部署简单,使用也简单,但后面的优化很深度使用需要下真功夫才行,具体请参照年年风雨大大的博客 中logstash部分.可进行多数据集群,提高效率。从redis中读取数据,并转发到kibana中
  • Kibana: 开源web展现,界面很漂亮,使用是否方便仁者见仁智者见智了.

2.系统环境及服务器信息主服务器(就是log日志收集分析的服务器)
目前我这里环境已经变了,ES做了个简单的集群,做了少许优化,并自定义了mapping,这都是后话,回头会有博文介绍一下相关内容

10.64.0.1:

logstash-1.2.2 indexer;
redis-2.6.16
kibana3(10.64.0.1) sss

10.7.3.121:

elasticsearch-0.90.3

二、 安装步骤

安装jdk 1.7

推荐1.7+版本
java -version 查看版本号
由于公司内网已经同步了epel源,可以很简单的通过yum安装,所以此处省略安装过程。需要的同学可以自行google一下安装方法。

安装并运行Elasticsearch

所在服务器: 10.7.3.121
官网http://www.elasticsearch.org

1.下载 ES
解压并放到/usr/local
bin/elasticsearch -f &即可运行ES

2.插件 在这里推荐两个小插件

  • elasticsearch-head web端 方便管理ES集群和节点
  • bigdesk web端 方便查看ES服务器及集群的性能数据

plugin的安装很简单 用bin/plugin即可

bin/plugin -install mobz/elasticsearch-head
bin/plugin -install lukas-vlcek/bigdesk

安装完插件杀掉老ES进程 重启即可激活插件
可用访问一下两个地址访问插件页面

http://10.7.3.121:9200/_plugin/head/
http://10.7.3.121:9200/_plugin/bigdesk/

3.优化

  • 内存和打开的文件数
    • 如果你的elasticsearch运行在专用服务器上,经验值是分配一半内存给elasticsearch。另一半用于系统缓存,这东西也很重要的。
    • 你可以通过修改ES_HEAP_SIZE环境变量来改变这个设定。在启动elasticsearch之前把这个变量改到你的预期值。另一个选择是修改elasticsearch的ES_JAVA_OPTS变量,这个变量时在启动脚本(elasticsearch.in.sh或elasticsearch.bat)里传递的。你必须找到-Xms和-Xmx参数,他们是分配给进程的最小和最大内存。建议设置成相同大小。嗯,ES_HEAP_SIZE其实就是干的这个作用
  • 文件描述符
    • 你必须确认文件描述符限制对你的elasticsearch足够大,建议值是32000到64000之间。关于这个限制的设置,另有教程可以参见。

查看ES能打开的最大文件个数:

ps –ef | grep java #找到ES的进程号
cat /proc/15563/limits
    max open file   32000   #ES能打开的最大个数
 
/etc/security/limits.conf  #编辑该文件,添加如下两行:
* hard nofile 65535
* soft nofile 65535
 
ulimit -SHn 65535
  • 删除旧索引
    • $ curl -XDELETE "http://localhost:9200/logstash-`date --date="-3 months" +%Y.%m.%d`/"
  • 加快搜索速度(Optimizing indices)
    • $ curl -XPOST "http://localhost:9200/logstash-`date --date="-1 day" +%Y.%m.%d`/_optimize"
    • 以上两条可写入脚本通过crontab每日定时执行
  • 修改内存大小
    • 修改ES_HEAP_SIZE环境变量活ES_JAVA_OPTS来改变赋予ES的内存大小,可在bin/elasticsearch中修改.
    • 之前看到的博文称按以往的经验最好是分配一半内存给elasticsearch,另一半给系统缓存。
  • 批量索引
    • 建议使用bulk API来创建索引它比你一次给一条日志创建一次索引快多了。
  • 优化JVM

安装redis

redis主页

wget http://download.redis.io/releases/redis-2.6.16.tar.gz
tar -zxf redis-2.6.16.tar.gz
cd redis-2.6.16
make
make install

可以通过redis源代码里utils/install_server下的脚本简化配置工作

cd utils
./install_server.sh

redis目前比较常用的几个命令

redis-cli info 查看redis的各项信息
redis-cli client list

安装logstash

cd /usr/local
mkdir logstash
cd logstash
wget http://download.elasticsearch.org/logstash/logstash/logstash-1.2.2-flatjar.jar

logstash下载即可使用,命令行参数可以参考logstash flags,主要有

agent   #运行Agent模式
-f CONFIGFILE #指定配置文件
web     #自动Web服务
-p PORT #指定端口,默认9292

logstash作为agent时需要在hosts中设定一下ip 如

10.64.0.1    xd-106401

/etc/init.d/服务启动脚本参考

#
#     /etc/rc.d/init.d/logstash
#
#     Starts Logstash as a daemon
#
# chkconfig: 2345 20 80
# description: Starts Logstash as a daemon
# pidfile: /var/run/logstash-agent.pid
 
 
### BEGIN INIT INFO
# Provides: logstash
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: Logstash
# Description: Starts Logstash as a daemon.
# Modified originally from https://gist.github.com/2228905#file_logstash.sh
 
 
### END INIT INFO
 
 
# Amount of memory for Java
#JAVAMEM=256M
 
 
# Location of logstash files
LOCATION=/usr/local/logstash
 
 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/latest/bin/
DESC="Logstash Daemon"
NAME=java
#DAEMON=`which java`
DAEMON=/usr/java/latest/bin/java
CONFIG_DIR=/usr/local/logstash/etc/indexer.conf
LOGFILE=/usr/local/logstash/logstash.log
JARNAME=logstash-1.2.2-flatjar.jar
#ARGS="-Xmx$JAVAMEM -Xms$JAVAMEM -jar ${JARNAME} agent --config ${CONFIG_DIR} --log ${LOGFILE} --grok-patterns-path ${PATTERNSPATH}"
ARGS="-jar ${JARNAME} agent -f ${CONFIG_DIR} --log ${LOGFILE}"
#ARGS="-jar ${JARNAME} agent -f ${CONFIG_DIR}"
SCRIPTNAME=/etc/init.d/logstash
PIDFILE=/var/run/logstash.pid
base=logstash
 
 
# Exit if the package is not installed
if [ ! -x "$DAEMON" ]; then
{
  echo "Couldn't find $DAEMON"
 exit 99
}
fi
 
 
. /etc/init.d/functions
 
 
#
# Function that starts the daemon/service
#
do_start()
{
  cd $LOCATION && \
  ($DAEMON $ARGS &) \
  && success || failure
}
 
 
set_pidfile()
{
  pgrep -f "$DAEMON[[:space:]]*$ARGS" > $PIDFILE
}
 
 
#
# Function that stops the daemon/service
#
do_stop()
{
  pid=`cat $PIDFILE`
                       if checkpid $pid 2>&1; then
                           # TERM first, then KILL if not dead
                           kill -TERM $pid >/dev/null 2>&1
                           usleep 100000
                           if checkpid $pid && sleep 1 &&
                              checkpid $pid && sleep $delay &&
                              checkpid $pid ; then
                                kill -KILL $pid >/dev/null 2>&1
                                usleep 100000
                           fi
                        fi
                        checkpid $pid
                        RC=$?
                        [ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown"
 
 
}
 
 
case "$1" in
  start)
    echo -n "Starting $DESC: "
    do_start
    touch /var/lock/subsys/$JARNAME
    set_pidfile
    ;;
  stop)
    echo -n "Stopping $DESC: "
    do_stop
    rm /var/lock/subsys/$JARNAME
    rm $PIDFILE
    ;;
  restart|reload)
    echo -n "Restarting $DESC: "
    do_stop
    do_start
    touch /var/lock/subsys/$JARNAME
    set_pidfile
    ;;
  status)
    status -p $PIDFILE
    ;;
*)
    echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
    exit 3
;;
esac
 
 
echo
exit 0

安装kibanalogstash的最新版已经内置kibana,你也可以单独部署kibana。kibana3是纯粹JavaScript+html的客户端,所以可以部署到任意http服务器上。

wget http://download.elasticsearch.org/kibana/kibana/kibana-latest.zip
unzip kibana-latest.zip
cp -r  kibana-latest /var/www/html

可以修改config.js来配置elasticsearch的地址和索引。
用浏览器访问 http://10.64.0.1/html/kibana-latest/index.html

indexer配置参考

input {
redis {
  host => '127.0.0.1'
  data_type => 'list'
  port => "6379"
  key => 'logstash:redis'
  type => 'redis-input'
#message_format => "json_event"
   }
}
 
 
filter {
#grok分割日志的部分拿到logstash服务器上来做了,其实也可以放到shipper上
#具体的安装方法下篇日志会讲到
grok {
type => "nginx-access"
pattern => "%{COMBINEDAPACHELOG}"
patterns_dir => "./patterns"
}
}
 
 
output {
stdout { debug => true debug_format => "json"}
host => "10.7.3.121"
workers => 8
cluster => "elasticsearch-test-cluster"
node_name => "indexer-10.64.0.3"
template => "/usr/local/logstash/logstash.json"
}

shipper.conf参考

input {
file{
type => "nginx-access"
path => "/export/home/webserver/nginxlogs/*access*"
exclude => "*.gz"
sincedb_path => "/usr/local/logstash/"
tags => ["BJ-weilaiTV-access"]
}
file {
type => "nginx-error"
path => "/export/home/webserver/nginxlogs/*error*"
exclude => "*.gz"
sincedb_path => "/usr/local/logstash/"
tags => ["BJ-weilaiTV-error"]
}
}
filter {
#grep{
#type => "nginx-error"
#match => ["@message", "ChinaCache"]
#match => ["@message", "ChinaCache"]
#negate => true
#}
if "ChinaCache" in [message] { drop{} }
 
 
}
output {
redis {
host => "10.64.0.1"
data_type =>"list"
key => "logstash:redis"
}
}

最佳实践 * 首先你的程序要写日志 * 记录的日志要能帮助你分析问题,只记录"参数错误"这样的日志对解决问题毫无帮助 * 不要依赖异常,异常只处理你没考虑到的地方 * 要记录一些关键的参数,比如发生时间、执行时间、日志来源、输入参数、输出参数、错误码、异常堆栈信息等 * 要记录sessionid、transitionid、userid等帮你快速定位以及能把各个系统的日志串联起来的关键参数 * 推荐纯文本+json格式 * 使用队列

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 70 queries in 0.435 seconds