Elastic Stack 5.1 部署(2)

从其他服务器抓取日志存到ELK
业务服务器上配置logstash

[root@tzgsqvapp01 app]# tar zxvf logstash-2.4.0.tar.gz
[root@tzgsqvapp01 app]# rm -rf logstash-2.4.0.tar.gz
[root@tzgsqvapp01 app]# ln -s logstash-2.4.0 logstash
[root@tzgsqvapp01 app]# useradd logstash -M -s /sbin/nologin
[root@tzgsqvapp01 app]# mkdir /opt/logs/logstash/
[root@tzgsqvapp01 app]# chown -R logstash:logstash /opt/logs/logstash/
[root@tzgsqvapp01 app]# chown -R logstash:logstash /opt/app/logstash-2.4.0/
[root@tzgsqvapp01 app]# mkdir /opt/app/logstash/conf.d
[root@tzgsqvapp01 app]# chown -R logstash.logstash opt/app/logstash/conf.d
[root@tzgsqvapp01 app]# vi /etc/init.d/logstash

#!/bin/sh
# Init script for logstash
# Maintained by Elasticsearch
# Generated by pleaserun.
# Implemented based on LSB Core 3.1:
# * Sections: 20.2, 20.3
#
### BEGIN INIT INFO
# Provides: logstash
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description:
# Description: Starts Logstash as a daemon.
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

if [ `id -u` -ne 0 ]; then
echo "You need root privileges to run this script"
exit 1
fi

name=logstash
pidfile="/var/run/$name.pid"

LS_USER=logstash
LS_GROUP=logstash
LS_HOME=/opt/app/logstash
LS_HEAP_SIZE="500m"
LS_LOG_DIR=/opt/logs/logstash
LS_LOG_FILE="${LS_LOG_DIR}/$name.log"
LS_CONF_DIR=/opt/app/logstash/conf.d
LS_OPEN_FILES=16384
LS_NICE=19
LS_OPTS=""


[ -r /etc/default/$name ] && . /etc/default/$name
[ -r /etc/sysconfig/$name ] && . /etc/sysconfig/$name

program=/opt/app/logstash/bin/logstash
args="agent -f ${LS_CONF_DIR} -l ${LS_LOG_FILE} ${LS_OPTS}"

start() {

LS_JAVA_OPTS="${LS_JAVA_OPTS} -Djava.io.tmpdir=${LS_HOME}"
HOME=${LS_HOME}
export PATH HOME LS_HEAP_SIZE LS_JAVA_OPTS LS_USE_GC_LOGGING

# chown doesn't grab the suplimental groups when setting the user:group - so we have to do it for it.
# Boy, I hope we're root here.
SGROUPS=$(id -Gn "$LS_USER" | tr " " "," | sed 's/,$//'; echo '')

if [ ! -z $SGROUPS ]
then
EXTRA_GROUPS="--groups $SGROUPS"
fi

# set ulimit as (root, presumably) first, before we drop privileges
ulimit -n ${LS_OPEN_FILES}

# Run the program!
nice -n ${LS_NICE} chroot --userspec $LS_USER:$LS_GROUP $EXTRA_GROUPS / sh -c "
cd $LS_HOME
ulimit -n ${LS_OPEN_FILES}
exec \"$program\" $args
" > "${LS_LOG_DIR}/$name.stdout" 2> "${LS_LOG_DIR}/$name.err" &

# Generate the pidfile from here. If we instead made the forked process
# generate it there will be a race condition between the pidfile writing
# and a process possibly asking for status.
echo $! > $pidfile

echo "$name started."
return 0
}

stop() {
# Try a few times to kill TERM the program
if status ; then
pid=`cat "$pidfile"`
echo "Killing $name (pid $pid) with SIGTERM"
kill -TERM $pid
# Wait for it to exit.
for i in 1 2 3 4 5 ; do
echo "Waiting $name (pid $pid) to die..."
status || break
sleep 1
done
if status ; then
if [ "$KILL_ON_STOP_TIMEOUT" -eq 1 ] ; then
echo "Timeout reached. Killing $name (pid $pid) with SIGKILL. This may result in data loss."
kill -KILL $pid
echo "$name killed with SIGKILL."
else
echo "$name stop failed; still running."
fi
else
echo "$name stopped."
fi
fi
}

status() {
if [ -f "$pidfile" ] ; then
pid=`cat "$pidfile"`
if kill -0 $pid > /dev/null 2> /dev/null ; then
# process by this pid is running.
# It may not be our pid, but that's what you get with just pidfiles.
# TODO(sissel): Check if this process seems to be the same as the one we
# expect. It'd be nice to use flock here, but flock uses fork, not exec,
# so it makes it quite awkward to use in this case.
return 0
else
return 2 # program is dead but pid file exists
fi
else
return 3 # program is not running
fi
}

force_stop() {
if status ; then
stop
status && kill -KILL `cat "$pidfile"`
fi
}


case "$1" in
start)
status
code=$?
if [ $code -eq 0 ]; then
echo "$name is already running"
else
start
code=$?
fi
exit $code
;;
stop) stop ;;
force-stop) force_stop ;;
status)
status
code=$?
if [ $code -eq 0 ] ; then
echo "$name is running"
else
echo "$name is not running"
fi
exit $code
;;
restart)

stop && start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|force-stop|status|restart}" >&2
exit 3
;;
esac

exit $?


[root@tzgsqvapp01 app]# chmod +x /etc/init.d/logstash
[root@tzgsqvapp01 app]# chkconfig --add logstash
[root@tzgsqvapp01 app]# chkconfig logstash on

[root@tzgsqvapp01 app]# vim /opt/app/logstash/conf.d/logstash.conf
input {
   file {
        path => "/opt/logs/tomcat7-rest/catalina.*.out"
        type => "tomcat-catalina-out"
        #codec => multiline {
        #        pattern => "%{TIMESTAMP_ISO08601} "
        #        negate => true
        #        what => previous
        #}
        add_field => {"module" => "rest" }
    }

}


output {
    if [type] == "tomcat-catalina-out" {
    redis {
        data_type => "channel"
        host => "redisIP"
        port => "6379"
        key => "tomcat-catalina-out"
        db => "0"
         }
    }
}

[root@tzgsqvapp01 app]# ln -sv /opt/app/jdk7/bin/java /usr/bin/java
[root@tzgsqvapp01 app]# systemctl daemon-reload
[root@tzgsqvapp01 app]# systemctl start logstash


[root@tzgsqvapp01 logstash]# cat logstash.log
{:timestamp=>"2017-01-13T22:59:26.174000+0800", :message=>"Pipeline main started"}
{:timestamp=>"2017-01-13T23:00:57.972000+0800", :message=>"SIGTERM received. Shutting down the agent.", :level=>:warn}
{:timestamp=>"2017-01-13T23:00:57.973000+0800", :message=>"stopping pipeline", :id=>"main"}
{:timestamp=>"2017-01-13T23:00:58.379000+0800", :message=>"Pipeline main has been shutdown"}
{:timestamp=>"2017-01-13T23:01:07.800000+0800", :message=>"Pipeline main started"}
[root@tzgsqvapp01 logstash]# ll
total 8
-rw-r--r-- 1 root     root       0 Jan 13 23:00 logstash.err
-rw-r--r-- 1 logstash logstash 470 Jan 13 23:01 logstash.log
-rw-r--r-- 1 root     root     141 Jan 13 23:01 logstash.stdout
[root@tzgsqvapp01 logstash]# cat logstash.stdout
Sending logstash logs to /opt/logs/logstash/logstash.log.
{:timestamp=>"2017-01-13T23:01:07.800000+0800", :message=>"Pipeline main started"}

ELK服务器上

[tzg@tzgsqvelk01 redis]$ bin/redis-cli 
redisIP:6379> SUBSCRIBE tomcat-catalina-out
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "tomcat-catalina-out"
3) (integer) 1
1) "message"
2) "tomcat-catalina-out"
3) "{\"message\":\" 2017-01-13 23:10:01.797 [DubboMonitorSendTimer-thread-1] INFO  com.alibaba.dubbo.monitor.dubbo.DubboMonitor[Slf4jLogger.java:42] [for_log_analysis_id]--[for_log_analysis_ip]  [DUBBO] Send statistics to monitor zookeeper://zk01.tzg.sq:2181/com.alibaba.dubbo.monitor.MonitorService?anyhost=true&application=simple-monitor&check=false&delay=-1&dubbo=2.5.3&interface=com.alibaba.dubbo.monitor.MonitorService&methods=lookup,collect&owner=tzg&pid=1179&revision=2.5.3&side=provider&timestamp=1484029892639, dubbo version: 2.5.3, current host: 172.16.5.13\",\"@version\":\"1\",\"@timestamp\":\"2017-01-13T15:10:02.118Z\",\"path\":\"/opt/logs/tomcat7-rest/catalina.2017-01-13.out\",\"host\":\"tzgsqvapp01\",\"type\":\"tomcat-catalina-out\",\"module\":\"rest\"}"


[root@tzgsqvelk01 app]# cat /etc/logstash/conf.d/logstash.conf
input {
    redis {
        data_type => "channel"
        key => "tomcat-catalina-out"
        host => "redisIP"
        port => 6379
        db => 0
    }
}

output {
    elasticsearch { hosts => "localhost:9200"
                    user => elastic
                    password => 123456 }
    file {
        codec => line { format => "%{message}"}
        path => "/tzgData/logstash/%{+YYYY.MM.dd}/%{module}.%{type}"
        }
}

[root@tzgsqvelk01 app]# systemctl start logstash


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容