|
一、系统和所需软件版本介绍
系统版本:centos 6.5 64位
软件版本:jdk-8u60-linux-x64.tar.gz、elasticsearch-2.4.2.tar.gz、logstash-2.4.1.tar.gz、kibana-4.6.3-linux-x86_64.tar.gz
二、安装java环境
1)解压jdk软件压缩包。
1
| tar -zxvf jdk-8u60-linux-x64.tar.gz
|
2)在/etc/profile文件的最后边,添加下边这几行,设置一下环境变量。
1
2
3
4
5
| export JAVA_HOME=/data/elk/jdk1.8.0_60
export JAVA_BIN=/data/elk/jdk1.8.0_60/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
|
3)然后加载一下环境变量,查看下java环境是否安装成功。
1
2
3
4
5
| [iyunv@elk]# source /etc/profile
[iyunv@elk]# java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
|
三、安装elasticsearch.
1)从官网现在相应版本的elasticsearch软件包,这里下载的是elasticsearch-2.4.2.tar.gz,下载完成后解压。
2)2.4版本启动elasticsearch的时候需要切换到普通用户,这里就使用已经创建好的elasticsearch启动了,需要把elasticsearch目录的属主和属组修改成elasticsearch.
1
| chown -R elasticsearch.elasticsearch elasticsearch
|
3)需要修改一下elasticsearch/config/elasticsearch.yml这个文件的两行配置信息,默认是用#注释的,在elasticsearch.yml的第55和58行。
1
2
3
| grep -v "#" elasticsearch/config/elasticsearch.yml| grep -v "^$"
network.host: 0.0.0.0
http.port: 9200
|
4)安装elasticsearch常用的两个插件,分别是bigdesk和head。
bigdesk: 它是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等.
head: elasticsearch-head是一个界面化的集群操作和管理工具,可以对集群进行傻瓜式操作。你可以通过插件把它集成到es(首选方式),也可以安装成一个独立webapp。安装插件的时候需要进入到elasticsearch的bin目录,要用到一个plugin的命令。
1
2
3
4
5
| cd /date/elk/elasticsearch/bin
ls
elasticsearch elasticsearch.in.bat elasticsearch-service-mgr.exe elasticsearch-service-x86.exe plugin.bat elasticsearch.bat elasticsearch.in.sh elasticsearch-service-x64.exe plugin service.bat
./plugin install mobz/elasticsearch-head #安装elasticsearch-head插件
./bin/plugin install lukas-vlcek/bigdesk/2.4.0 #安装bigdesk插件
|
5)启动elasticsearch.
1
2
3
| [playcrab@iZbp1brwi55d51j9rfs9uyZ ~]$ ps -ef | grep elasticsearch
playcrab 29513 29473 0 11:05 pts/0 00:00:00 grep elasticsearch
playcrab 30161 1 6 Jan09 ? 01:20:03 /data/elk/jdk1.8.0_60/bin/java -Xms256m -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Djna.nosys=true -Des.path.home=/data/elk/elasticsearch -cp /data/elk/elasticsearch/lib/elasticsearch-2.4.2.jar:/data/elk/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch start
|
6)测试是否可以正常访问,如果用浏览器访问,界面出现类似下边的显示,说明elasticsearch启动成功。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| curl 127.0.0.1:9200
{
"name" : "Bast",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "V-dptv6pQo-wBiAUwH80Sw",
"version" : {
"number" : "2.4.2",
"build_hash" : "161c65a337d4b422ac0c805f284565cf2014bb84",
"build_timestamp" : "2016-11-17T11:51:03Z",
"build_snapshot" : false,
"lucene_version" : "5.5.2"
},
"tagline" : "You Know, for Search"
}
|
四、安装logstash.
1).从官网下载logstash-2.4.1.tar.gz,并且解压。
wget https://download.elastic.co/logs ... gstash-2.4.1.tar.gz
tar -zxvf logstash-2.4.1.tar.gz
2).配置logstash文件,nginx类型的日志使用udp514端口,php类型的日志使用udp515端口,向本地的elasticsearch数据库传输。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| cd /data/elk/logstash
touch conf
cd conf
cat test.conf
input {
udp {
port => 514
type => nginx
}
udp {
port => 515
type => php
}
}
output {
if [type] == "nginx" {
elasticsearch {
hosts => "localhost:9200"
index => "%{+YYYY.MM.dd}_nginx_log"
}
}
if [type] == "php" {
elasticsearch {
hosts => "localhost:9200"
index => "%{+YYYY.MM.dd}_php_error_log"
}
}
stdout {codec => rubydebug}
}
}
|
五、安装kibana,实现界面展示。
1).从官网下载kibana-4.6.3-linux-x86_64.tar.gz,并且解压。
wget https://download.elastic.co/kiba ... linux-x86_64.tar.gz
tar -zxvf kibana-4.6.3-linux-x86_64.tar.gz
2).修改kibana的配置文件kibana.yml。
[iyunv@iZbp1brwi55d51j9rfs9uyZ config]# grep -v "#" kibana.yml|grep -v "^$"
server.port: 8000
server.host: "0.0.0.0"
elasticsearch.url: "http://127.0.0.1:9200"
3).因为kibana进程时常无缘无故挂掉,所以这里我就写一个启动,关闭的shell脚本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
| touch /etc/init.d/kibana
chmod +x /etc/init.d/kibana
[iyunv@iZbp1brwi55d51j9rfs9uyZ config]# cat /etc/init.d/kibana
#!/bin/bash
### BEGIN INIT INFO
# Provides: kibana
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Runs kibana daemon
# Description: Runs the kibana daemon as a non-root user
### END INIT INFO
# Process name
NAME=kibana
DESC="Kibana4"
PROG="/etc/init.d/kibana"
# Source function library.
. /etc/rc.d/init.d/functions
# Configure location of Kibana bin
KIBANA_BIN=/data/home/user00/playcrab/elk/kibana/bin
# PID Info
PID_FOLDER=/var/run/kibana/
PID_FILE=/var/run/kibana/$NAME.pid
LOCK_FILE=/var/lock/subsys/$NAME
PATH=/bin:/usr/bin:/sbin:/usr/sbin:$KIBANA_BIN
DAEMON=$KIBANA_BIN/$NAME
# Configure User to run daemon process
DAEMON_USER=root
# Configure logging location
KIBANA_LOG=/var/log/kibana.log
# Begin Script
RETVAL=0
if [ `id -u` -ne 0 ]; then
echo "You need root privileges to run this script"
exit 1
fi
start() {
echo -n "Starting $DESC : "
pid=`pidofproc -p $PID_FILE kibana`
if [ -n "$pid" ] ; then
echo "Already running."
exit 0
else
# Start Daemon
if [ ! -d "$PID_FOLDER" ] ; then
mkdir $PID_FOLDER
fi
daemon --user=$DAEMON_USER --pidfile=$PID_FILE $DAEMON 1>"$KIBANA_LOG" 2>&1 &
sleep 2
pidofproc node > $PID_FILE
RETVAL=$?
[[ $? -eq 0 ]] && success || failure
echo
[ $RETVAL = 0 ] && touch $LOCK_FILE
return $RETVAL
fi
}
reload()
{
echo "Reload command is not implemented for this service."
return $RETVAL
}
stop() {
echo -n "Stopping $DESC : "
killproc -p $PID_FILE $DAEMON
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $PID_FILE $LOCK_FILE
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p $PID_FILE $DAEMON
RETVAL=$?
;;
restart)
stop
start
;;
reload)
reload
;;
*)
# Invalid Arguments, print the following message.
echo "Usage: $0 {start|stop|status|restart}" >&2
exit 2
;;
esac
|
到这里已经安装好了elk server端的环境了,但是还需要在日志服务器上配置rsyslog,因为咱们是使用rsyslog来发送日志服务器的log,然后elk接收到之后,经过logstash过滤之后,存储到elasticsearch,最终通过kibana展示出来。
{ rsyslog } →→ { logstash →→ elasticsearch →→ kibana }
日志服务器的配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [iyunv@iZ23r24v08eZ ~]# cd /etc/rsyslog.d/
[iyunv@iZ23r24v08eZ rsyslog.d]# cat test.com.conf
$ModLoad imfile #im代表输入模块(input Modules)
$InputFileName /data/usr/logs/nginx/test.com.error.log #读取日志文件
$InputFileTag test_nginx_error: #定义的NAME必须唯一,同一台主机上不同的应用应当使用不同的NAME,否则会导致新定义的TAG不生效;
$InputFileStateFile test_nginx_error #定义记录偏移量数据文件名,定义的StateFile必须唯一,它被rsyslog用于记录文件上传进度,否则会导致混乱; $InputRunFileMonitor #
$InputFileName /data/usr/logs/nginx/test.com.access.log
$InputFileTag test_nginx_access:
$InputFileStateFile test_nginx_access
$InputRunFileMonitor
$InputFilePollInterval 10 #等待十秒钟发送一次
if $programname == 'test_nginx_error' then @10.23.0.24:514 把日志传输到制定的elk server上,@表示使用udp传输,@@表示使用tcp传输
if $programname == 'test_nginx_error' then ~
if $programname == 'test_nginx_access' then @10.23.0.24:514
if $programname == 'test_nginx_access' then ~
|
1
2
3
4
5
6
7
8
9
| [iyunv@iZ23r24v08eZ rsyslog.d]# cat php.error.log.conf
$ModLoad imfile
$InputFileName /data/usr/logs/php-fpm/php-fpm.log
$InputFileTag php-fpm_log:
$InputFileStateFile state-php-fpm_log
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'php-fpm_log' then @10.23.0.24:515
if $programname == 'php-fpm_log' then ~
|
配置完后,需要重新启动rsyslog.
/etc/init.d/rsyslog restart
除了重启rsyslog服务之外,还需要看下elk server的防火墙,如果是用的云主机还有安全组,需要把udp的514和515端口放开,允许日志服务器可以访问elk server的udp514和515端口。
|
|