一环境说明

程序部署路径/opt/devops/

centos7 64位操作系统

服务器 192.168.80.20

客户端 192.168.80.10

logstash2.0

elasticsearch-2.0.0

kibana-4.2.0

安装前的准备工作

1 关闭防火墙、selinxu

2 安装redis

#yum install epel-release –y

#yum install redis –y

修改redis配置文件使redis监听所有ip,默认情况下只监听127.0.0.01

vi /etc/redis.conf

bind 0.0.0.0

启动redis

#systemctl restart redis.service

 

logstash(服务端客户端均需安装)

1        logstash安装

参考文档http://udn.yyuap.com/doc/logstash-best-practice-cn/input/file.html

参考文档 https://www.elastic.co/guide/en/logstash/current/introduction.html

grok正则测试工具网址为https://grokdebug.herokuapp.com/

grok正则表达式  https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns

 

第一步:安装java

logstash2.0版本需要java7及以上版本的支持,如果系统没有安装java环境需使用下面的命令进行安装。

#rpm -ivh jdk-8u51-linux-x64.rpm

#vi /etc/profile.d/java.sh

exportJAVA_HOME="/usr/java/jdk1.8.0_51"

exportJRE_HOME="/usr/java/jdk1.8.0_51/jre/"

export PATH=$JAVA_HOME/bin:$PATH

#source /etc/profile

第二步:安装logstash

将下载的logstash拷贝到/opt/devops/目录下

mv logstash-2.0.0 /opt/devops/logstash

第三步:简单测试

#cd/opt/devops/logstash/

#bin/logstash -e 'input { stdin { } } output { stdout {} }'


显示启动完成,手动输入helloworld测试logstash是否正常启动

The -e flagenables you to specify a configuration directly from the command line.Specifying configurations at the command line lets you quickly testconfigurations without having to edit a file between iterations. This pipelinetakes input from the standard input, stdin, andmoves that input to the standard output, stdout, in astructured format. Type hello world at the command prompt to see Logstashrespond:

2logstatsh配置

logstatsh默认情况下并没有区分服务端和客户端,在此我们人为的将其分为服务端和客户端。客户端负责收集日志、按照预定义的正则进行切割日志并将信息输出到redis中,客户端配置文件格式如下,有两个配置文件input.confoutput.conf组成(当然也可以使用一个配置文件)整个配置文件有三部分组成input(输入)、filter(过滤)、output(输出)

2  客户端配置

客户端负责收集日志、切割日志并将切割后的日志保存到redis中,我们假设将logstatsh部署在/opt/devops目录,其配置文件位于/opt/devops/conf目录

第一步配置详解

#mkdir –pv /opt/devops/conf

#mkdir –pv /opt/devops/ patterns

#vi input.conf

input {

file {

    type =>"apachelog"

    tags=>"im/apache"

        path =>"/opt/devops/logstash/logs/logstash-tutorial-dataset"

        start_position => beginning

        sincedb_path => "/opt/devops/logstash/im_nginxlog.sincedb"

    }

}

filter {

    if [type] == "nginxlog" {

grok {

    patterns_dir=> "/opt/devops/logstash/patterns"

        match =>{"message"=>"%{COMBINEDAPACHELOG}"}

    }

    geoip {

        source =>"clientip"

      }

   }

}

解释:

input段主要负责日志的收集工作,其主要包含的字段及含义如下

type => "apachelog"  type主要用来判断日志的类型,例如:此处表示收集的日志为apache产生的日志

tags=> "im/apache"  tags主要为日志打标签的,例如:如果多台apache生成不同的日志,可以通过tagsapache日志打标签,表示是由哪个应用产生的apahe日志,此处表示是由im应用产生的日志

path=> "/opt/devops/logstash/logs/logstash-tutorial-dataset"path用于指定日志的位置

start_position=> beginning  start_position用于指定logstatsh第一次启动时从什么地方开始读取日志,如果不指定为start_position => beginning logstatsh收集日志是从最新的位置开始收集的,类似于tail –f 命令;如果logstatsh并不是第一次启动还想从头收集日志在停止logstatsh后需手动删除sincedb文件,如果配置文件中不指定sincedb文件的位置,logstatsh启动后为在/root/生成一个以.sincedb_开头的隐藏文件,该文件的主要作用是记录logstatsh收集日志的位置logstatsh进程意外关闭,启动后继续从该位置收集日志。

sincedb_path => "/opt/devops/logstash/im_nginxlog.sincedb"sincedb_path指定sincedb文件位置

filter字段主要负责将收集的日志按照预定义的正则进行日志切割

grok子段主要是logstatsh的正则部分,其主要包含的字段及含义如下

if [type] == "nginxlog" if [type]子段主要是用于做判断的,如果满足要求就执行下面的正则进行日志切割

 

grok正则测试工具网址为https://grokdebug.herokuapp.com/  ,使用该工具需×××

 

match => {"message" => "%{COMBINEDAPACHELOG}"} match表示使用某种正则进行日志切割

geoip子段的主要作用是通过ip来获取地理位置,ip必须是日志切割时通过正则定义的字段

source =>"clientip"souce用来提取日志切割后的ip地址

 

#vi output.conf

output {

stdout {}

redis {

host => "172.20.19.113"

port => "6379"

data_type => "list"

key => "logstash"

}

}

 

解释:

客户端logstashoutput段主要负责将收集切割后的日志输出到redis中进行保存,方便服务端logstashredis中获取日志,其主要包含的字段及含义如下

stdout {}子段表示将切割后的日志通过标准输出打印到屏幕上,其主要作用是用来确认logstash是否正常工作,正式上线后可禁用此字段

redis子段表示将切割后的日志存储到redis,其主要包含的字段及含义如下

host => "172.20.19.113"   host表示redis服务所在主机ip

port => "6379"    port表示redis所使用的端口为6379

data_type => "list"   data_type表示将切割后的日志保存成redislist类型

key =>"logstash" 表示此日志在rediskeylogstatsh(服务端的input段中的key需要和这里的保持一致)

 

 

第二步启动 logstatsh

假设logstatsh部署在/opt/devops/logstash/,其两个配置文件input.confoutput.conf均在/opt/devops/logstash/conf

1 测试配置文件是否正确

#/opt/devops/logstash/bin/logstash-f /opt/devops/logstash/conf/ --configtest

2 启动logstatsh

#nohup/opt/devops/logstash/bin/logstash -f /opt/devops/logstash/conf/  > /dev/null &

 

 

2     服务端配置

服务端logstatsh负责从redis获取数据,并将数据传递给elasticsearch,我们假设将logstatsh部署在/opt/devops目录,其配置文件位于/opt/devops/conf目录

第一步配置详解

#vi input.conf

input {

       redis{

               host => "192.168.80.10"

               port => "6379"

               type => "redis-input"

               data_type => "list"

               key => "logstash"

               }

     }

解释:

input段主要负责从redis中提取数据,其主要包含的字段及含义如下

redis子段logstatsh服务端从redis中提取数据的相关配置,其主要包含的字段及含义如下

host => "192.168.80.10"表示redis服务所在服务器ip192.168.80.10

port => "6379"表示redis服务的端口为6379

type => "redis-input" 表示logstatsh是从redis中获取数据的

data_type => "list"表示存储在redis切割后的日志数据类型为list

key => "logstash"需和客户端的key保持一致

 

#output.conf

output {

       stdout {}

       file {

               message_format =>"%{message}"

               path => "/opt/logs/%{tags}/%{+YYYY-MM-dd}/%{type}"

               }

       elasticsearch{

               hosts =>["192.168.80.10:9200","192.168.80.20:9200"]

               }

        }

解释:

output段主要负责将从redis提取的数据交给elasticsearch进行分析,,其主要包含的字段及含义如下

stdout {}子段表示将获取的日志通过标准输出打印到屏幕上,其主要作用是用来确认logstash是否正常工作,正式上线后可禁用此字段

file子段表示将获取的日志保存到文件中,方便以后查看。

elasticsearch子段负责将获取的日志交给elasticsearch进行数据分析,其主要包含的字段及含义如下

hosts =>["192.168.80.10:9200","192.168.80.20:9200"]  host字段以数组的形式定义elasticsearch集群各个节点ipelasticsearch使用的端口

cluster=> "yyuap"  cluset用来定义elasticsearch集群,这里elasticsearch集群名称为elasticsearchlogstatsh2.0已废弃)

 

第二步启动 logstatsh

假设logstatsh部署在/opt/devops/logstash/,其两个配置文件input.confoutput.conf均在/opt/devops/logstash/conf

1 测试配置文件是否正确

#/opt/devops/logstash/bin/logstash-f /opt/devops/logstash/conf/ --configtest

2 启动logstatsh

#nohup /opt/devops/logstash/bin/logstash -f/opt/devops/logstash/conf/ >/var/log/logstash.log &

注意:客户端logstatsh停止后,如果要再次启动需要手动删除/opt/devops/logstash/conf/dump.rdb然后再启动logstatsh

 

elasticsearch

1        elasticsearch安装

elasticsearch插件安装参考文档  

http://www.cnblogs.com/huangfox/p/3541300.html

第一步:安装java(192.168.80.10192.168.80.20均需安装)

elasticsearch2.0版本需要java7及以上版本的支持,如果系统没有安装java环境需使用下面的命令进行安装。

#rpm -ivh jdk-8u51-linux-x64.rpm

#vi /etc/profile.d/java.sh

exportJAVA_HOME="/usr/java/jdk1.8.0_51"

exportJRE_HOME="/usr/java/jdk1.8.0_51/jre/"

export PATH=$JAVA_HOME/bin:$PATH

#source /etc/profile

第二步:安装elasticsearch(192.168.80.10192.168.80.20均需安装)

将下载的elasticsearch拷贝到/opt/devops/目录下

mv elasticsearch-2.0.0 /opt/devops/elasticsearch

第三步 配置elasticsearch

(1)      192.168.80.10服务器配置

第一步创建mv elasticsearch数据目录和日志目录

mkdir –pv /opt/devops/elasticsearch/data

mkdir –pv /opt/devops/elasticsearch/log

第二步创建elasticsearch运行时所需要的系统账号

elasticsearch-2.0.0版本禁止使用root账号直接运行,所以需要创建账号用于运行elasticsearch

useradd elasticsearch –s /sbin/nologin

第三步修改配置文件

配置文件的位置在/opt/devops/elasticsearch/config/elasticsearch.yml,一个基本的elasticsearch需要做如下配置:

cluster.name: ssfy

位于配置文件的第17行,用于定义集群名称

node.name: ssfy-01

位于配置文件的第23行,用于定义集群节点名称

path.data: /opt/devops/elasticsearch/data

位于配置文件的第33行,用于定义elasticsearch存储数据的位置

path.logs: /opt/devops/elasticsearch/log

位于配置文件的第37行,用于定义elasticsearch日志文件的位置

network.host: 192.168.80.10

位于配置文件的第54行,用于定义elasticsearch侦听ip,这里需要配置为elasticsearch所在服务器ip地址

http.port: 9200

位于配置文件的第58行,用于定义elasticsearch对外使用的端口

discovery.zen.ping.unicast.hosts: ["192.168.80.10", "192.168.80.20"]

位于配置文件的第79行,用于定义elasticsearch发送广播的ip,默认情况下向elasticsearch所在网段的所以ip进行广播

node.max_local_storage_nodes: 1

位于配置文件的第92行,用于定义一台主机只允许启动一个elasticsearch节点

action.destructive_requires_name: true

位于配置文件的第96行,用于定义删除索引时必须明确提供索引名

(2)      192.168.80.10服务器配置

第一步创建mv elasticsearch数据目录和日志目录

mkdir –pv /opt/devops/elasticsearch/data

mkdir –pv /opt/devops/elasticsearch/log

第二步创建elasticsearch运行时所需要的系统账号

elasticsearch-2.0.0版本禁止使用root账号直接运行,所以需要创建账号用于运行elasticsearch

useradd elasticsearch –s /sbin/nologin

第三步修改配置文件

配置文件的位置在/opt/devops/elasticsearch/config/elasticsearch.yml,一个基本的elasticsearch需要做如下配置:

cluster.name: ssfy

node.name: ssfy-02

path.data: /opt/devops/elasticsearch/data

path.logs: /opt/devops/elasticsearch/log

network.host: 192.168.80.20

http.port: 9200

discovery.zen.ping.unicast.hosts: ["192.168.80.10", "192.168.80.20"]

node.max_local_storage_nodes: 1

action.destructive_requires_name: true

(3)      启动elasticsearch

#su – elasticsearch

#nohup/opt/devops/elasticsearch/bin/elasticsearch >/dev/null &

 

检验是否正常启动

浏览器中输入http://192.168.80.10:9300或者http://192.168.80.20:9300


注释:elasticsearch集群内部通信端口为9300,对外通信端口为9200

(4)      安装elasticsearch插件

第一个插件head

elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序,你可以通过插件把它集成到es

安装命令:

$/opt/devops/elasticsearch/bin

$./plugin install mobz/elasticsearch-head

安装完成后\plugins目录下会有head的文件夹。

进入http://192.168.80.10:9200/_plugin/head/ 


第二个插件——bigdesk

bigdeskelasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等。

安装命令:

$/opt/devops/elasticsearch/bin

$./plugin install lukas-vlcek/bigdesk

安装完成后\plugins目录下会有bigdesk的文件夹。

注意:elasticsearch2.0.0不能通过上面的方法进行安装,需要手动下载bigdesk放到/opt/devops/elasticsearch/plugins目录,然后修改两处配置文件

首先添加配置文件plugin-descriptor.propertie

#vi elasticsearch-2.0.0/plugins/bigdesk/plugin-descriptor.properties

description=bigdesk

version=master

site=true

name=bigdesk

然后,修改配置文件

elasticsearch-2.0.0/plugins/bigdesk/_site/js/store/BigdeskStore.js142行将major ==1改为major>= 1

进入http://192.168.80.10:9200/_plugin/bigdesk/ 如下图

kibana

1        kibana安装

注意:kibana-4.2.0需要elasticsearch2.0.0及以上版本的支持

第一步拷贝软件包

将下载的elasticsearch拷贝到/opt/devops/目录下

#mv kibana-4.2.0/opt/devops/kibana

第二步修改kibana配置文件

kibana配置文件只需修改一处即可,我们需要告诉Kibana在哪里可以找到elasticsearch。打开配置文件并修改elasticsearch参数:

#vi /opt/devops/kibana/config/

elasticsearch.url: "http://192.168.80.10:9200"

elasticsearch.url: http://192.168.80.20:9200

第三步启动kibana

#nohup /opt/devops/kibana/bin/kibana > /var/log/kibana.log&

第四步测试

kibana端口为5601

在浏览器中输入

http://192.168.80.10:5601http://192.168.80.20:5601