一、系统和所需软件版本介绍

系统版本: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软件压缩包。

tar -zxvf jdk-8u60-linux-x64.tar.gz

2)在/etc/profile文件的最后边,添加下边这几行,设置一下环境变量。

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环境是否安装成功。

[root@elk]# source /etc/profile
[root@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,下载完成后解压。

wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.4.2/elasticsearch-2.4.2.tar.gz
tar -zxvf elasticsearch-2.4.2.tar.gz

2)2.4版本启动elasticsearch的时候需要切换到普通用户,这里就使用已经创建好的elasticsearch启动了,需要把elasticsearch目录的属主和属组修改成elasticsearch.

chown -R elasticsearch.elasticsearch elasticsearch

3)需要修改一下elasticsearch/config/elasticsearch.yml这个文件的两行配置信息,默认是用#注释的,在elasticsearch.yml的第55和58行。

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的命令。

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.

[hello@iZbp1brwi55d51j9rfs9uyZ ~]$ ps -ef | grep elasticsearch 
	hello 29513 29473  0 11:05 pts/0    00:00:00 grep elasticsearch
	hello 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启动成功。

		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/logstash/logstash/logstash-2.4.1.tar.gz

tar -zxvf logstash-2.4.1.tar.gz 

2).配置logstash文件,nginx类型的日志使用udp514端口,php类型的日志使用udp515端口,向本地的elasticsearch数据库传输。   

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/kibana/kibana/kibana-4.6.3-linux-x86_64.tar.gz

tar -zxvf kibana-4.6.3-linux-x86_64.tar.gz

   2).修改kibana的配置文件kibana.yml。

[root@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脚本。

touch /etc/init.d/kibana	
chmod +x /etc/init.d/kibana
[root@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 } 

 

 日志服务器的配置:

 [root@iZ23r24v08eZ ~]# cd /etc/rsyslog.d/
	[root@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 ~		
[root@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端口。