用Kibana和logstash快速搭建实时日志查询、收集与分析系统

Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界面,搜索和展示所有日志


kibana 也是一个开源和免费的工具,他可以帮助您汇总、分析和搜索重要数据日志并提供友好的web界


面。他可以为 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面 。


1.Kibana介绍

Kibana是一个基于浏览器页面的Elasticsearch前端展示工具。Kibana全部使用HTML语言和Javascript编写的。


2.安装配置Kibana


wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.2.zip

unzip kibana-3.1.2.zip


mv kibana-3.1.2/* /data/app_platform/kibana/ 


#配置样本

grep -v "#"  /home/haoren/data/kibana-5.0.2-linux-x86_64/config/kibana.yml

server.port: 15601

server.host: "0.0.0.0"

elasticsearch.url: "http://222.192.73.12:19200"




配置Nginx虚拟机主机

/data/app_platform/nginx/conf/conf.d/kibana.conf


server 

        listen      80; 

        server_name kibana.xxxxx.com; 

        access_log  /data/app_data/nginx/logs/kibana.log main; 

        client_max_body_size 5m; 

        index index.html index.htm; 

        autoindex on; 

        root  /data/app_platform/kibana; 

        location / { 

            index index.html index.htm; 

        } 

  }


更改/data/app_platform/kibana/config.js中的Elasticsearch的配置信息


elasticsearch: "http://kibana.xxx.com:9200",


3.导入一些测试数据


在导入测试数据之前,创建一些索引。


$ curl -XPUT http://localhost:9200/shakespeare -d ' 

> { 

>  "mappings" : { 

>  "_default_" : { 

>    "properties" : { 

>    "speaker" : {"type": "string", "index" : "not_analyzed" }, 

>    "play_name" : {"type": "string", "index" : "not_analyzed" }, 

>    "line_id" : { "type" : "integer" }, 

>    "speech_number" : { "type" : "integer" } 

>    } 

>  } 

>  } 

> } 

> ';


 

索引创建完后,导入测试数据


Kibana 是一个为 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它对日志进行高效的搜索、可视化、分析等各种操作


说到这里,我们看看 kibana 和 logstash到底能为我们做些什么呢?下面是kibana的界面

131035239.png


简单来讲他具体的工作流程就是 logstash agent 监控并过滤日志,将过滤后的日志内容发给redis(这里的redis只处理队列不做存储),logstash index将日志收集在一起交给

全文搜索服务ElasticSearch 可以用ElasticSearch进行自定义搜索 通过Kibana 来结合 自定义搜索进行页面展示,下图是 Kibana官网上的流程图

131135111.png


好了 让我们一步步的把这套环境搭建起来吧,先看看都需要安装什么软件包

#安装样本

rpm -qa |grep ruby

libselinux-ruby-2.0.94-5.3.el6.x86_64

ruby-irb-1.8.7.374-4.el6_6.x86_64

ruby-rdoc-1.8.7.374-4.el6_6.x86_64

ruby-libs-1.8.7.374-4.el6_6.x86_64

rubygems-1.3.7-5.el6.noarch

ruby-1.8.7.374-4.el6_6.x86_64


ruby 运行Kibana 必须,

rubygems 安装ruby扩展必须

bundler 功能类似于yum

JDK 运行java程序必须 

redis 用来处理日志队列

logstash 收集、过滤日志


ElasticSearch 全文搜索服务(logstash集成了一个)


kibana 页面展示


这里有三台服务器

192.168.233.128 logstash index,ElasticSearch,kibana,JDK

192.168.233.129 logstash agent,JDK

192.168.233.130 redis


首先到 logstash index服务器上面,logstash分为 index和aget ,agent负责监控、过滤日志,index负责收集日志并将日志交给ElasticSearch 做搜索


此外 logstash 的收集方式分为 standalone 和 centralized


standalone 是所有功能都在一个服务器上面,自发自收,


centralized 就是集中收集,一台服务器接收所有shipper(个人理解就是logstash agent)的日志。


其实 logstash本身不分 什么 shipper 和 collector ,只不过就是配置文件不同而已,我们这次按照集中的方式来测试



在 logstash index上安装基础的软件环境



[192.168.233.128 root@nodec:~] 

# cd /soft/ 

[192.168.233.128 root@nodec:/soft]

 

# wget http://down1.chinaunix.net/distfiles/jdk-6u13-dlj-linux-i586.bin 


从oracle下载实在是太慢了,从CU下载会快一些,如果需要最新版本请访问这里 


http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 


[192.168.233.128 root@nodec:/soft] 


# sh jdk-6u13-dlj-linux-i586.bin 


输入yes 便开始安装了 


安装完成后设置一下 JAVA_HOME 


[192.168.233.128 root@nodec:/soft/Kibana-0.2.0] 


vim /etc/profile 

export JAVA_HOME=/usr/java 

export PATH=$JAVA_HOME/bin:$PATH 

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH 

 

安装ruby 就比较简单了(Kibana需要ruby 1.8.7以上版本


[192.168.233.128 root@nodec:/soft] 

yum install ruby rubygems 

..... 安装内容省略 

安装完成后用 rubygems 来安装bundler 


[192.168.233.128 root@nodec:/soft] 

/usr/bin/gem install bundler 

..... 

 

ok 这样基本的环境就已经有了,下面就是安装kibana 和 logstash 


其实logstash 就是一个java脚本,不需要安装... 下载即用 


[192.168.233.128 root@nodec:/soft] 


# wget http://logstash.objects.dreamhost.com/release/logstash-1.1.0-monolithic.jar 


现在看看 这个脚本应该怎么去执行 


[192.168.233.128 root@nodec:/soft] 

# java -jar /soft/logstash-1.1.0-monolithic.jar -h 

No such command "-h" 

Available commands: 

  -v 

  -V 

  --version 

  agent 

  web 

  test 


显然没有 -h 参数,不过列出了能用的参数,但是logstash的参数可不止这些, 

java -jar /soft/logstash-1.1.0-monolithic.jar agent --help 

这些是在agent模式下的命令参数 

-f, --config CONFIGFILE 

    Load the logstash config from a specific file, directory, or a wildcard. If given a directory or wildcard, config files will be read in order lexigraphically. 

-e CONFIGSTRING 

    Use the given string as the configuration data. Same syntax as the config file. If not input is specified, 'stdin { type => stdin }' is default. If no output is specified, 'stdout { debug => true }}' is default. 

-w, --filterworks COUNT 

    Run COUNT filter workers (default: 1) 

--watchdog-timeout TIMEOUT 

    Set watchdog timeout value. 

-l, --log FILE 

    Log to a given path. Default is to log to stdout 

-v 

    Increase verbosity. There are multiple levels of verbosity available with '-vv' currently being the highest 

--pluginpath PLUGIN_PATH 

    A colon-delimted path to find other logstash plugins in 

java -jar /soft/logstash-1.1.0-monolithic.jar web --help 

下面的是在web界面的参数 

--log FILE 

    Log to a given path. Default is stdout. 

--address ADDRESS 

    Address on which to start webserver. Default is 0.0.0.0. 

--port PORT 

    Port on which to start webserver. Default is 9292. 

-B, --elasticsearch-bind-host ADDRESS 

    Address on which to bind elastic search node. 

-b, --backend URL 

    The backend URL to use. Default is elasticsearch:/// (assumes multicast discovery). You can specify elasticsearch://[host][:port]/[clustername] 


如果上面的这些命令都能执行正常的话就表示 logstash可以使用了,但要让他启动还需要一个配置文件


[192.168.233.128 root@nodec:/soft] 

 

# vim redis.conf 

 

input {

redis { 

  host => '192.168.233.130' 

  data_type => 'list' 

  port => "6379" 

  key => 'logstash:redis' 

  type => 'redis-input' 

       } 

       }

 

output { 

    elasticsearch { 

    embedded => true 

                  } 

       } 



解释一下 logstash的配置文件由 input filter output 等几个基本的部分组成,


顾名思义 input 就是在那收集数据,output就是输出到哪,filter代表一个过滤规则意思是什么内容

会被收集。


上面这段是让 logstash 去192.168.233.130 这个redis服务器上去收集日志 redis端口为6379,key是 logstash:redis 类型为 redis-input ,(注意:这几个值必须跟logstash agent的output 所对应),


收集完成后输出到 elasticsearch ,embedded => true 的意思是使用logstash 内嵌的 


elasticsearch。如果有独立的elasticsearch服务器,需要将 这条改为


host => 'elasticsearch的ip' port => 端口


好了,这个简单的配置文件可以让logstash开始启动了



[192.168.233.128 root@nodec:/soft] 


# java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf -- web --backend elasticsearch:///?local & 

[1] 5205 

...这里要等待约5秒钟... 为什么?去问开发者吧 


[192.168.233.128 root@nodec:/soft] 


# I, [2013-03-19T03:23:10.749000 #5205]  INFO -- : Using beta plugin 'redis'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T03:23:10.732000 -0700","message":"Using beta plugin 'redis'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"} 

file:/soft/logstash-1.1.0-monolithic.jar!/gems/rack-1.3.4/lib/rack/backports/uri/common_192.rb:53 warning: already initialized constant WFKV_ 

Mizuno 0.5.0 (Jetty 8.0.y.z-SNAPSHOT) listening on 0.0.0.0:9292 



解释一下 上面的命令 agent 代理模式 -f 指定配置文件 --web 其实是个分隔符等于又启动了一个命令,后面的参数就是开启一个web页面默认端口是9292,这个命令如果拆成两个就是这个样子


 

java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf & 



java -jar /soft/logstash-1.1.0-monolithic.jar web --backend elasticsearch:///?local & 


(其实如果用kibana来做web界面的话这一步完全可以省掉了)


好了,看到9292 端口启动就代表 启动成功了,检查一下


[192.168.233.128 root@nodec:/soft] 

# lsof -i:9292 

COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME 

java    5205 root  465u  IPv4 130805       TCP *:armtechdaemon (LISTEN) 

其实logstash还启动了一个端口9200,因为启动了内嵌的 elasticsearch,这个9200是 elasticsearch在监听 

[192.168.233.128 root@nodec:/soft] 

# lsof -i:9200 

COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME 

java    5205 root  160u  IPv4 130682       TCP *:wap-wsp (LISTEN) 



现在可以通过浏览器访问一下 http://192.168.233.128:9292 看看logstash是的页面是个什么样子


133957451.jpg

能搜索因为现在还没有数据,其实这个时候 http://192.168.233.128:9200 也是可以访问的,

很多开发自己写代码来调用elasticsearch 来实现他们自己的需要,这里就不多说了


192.168.233.128 这台logstash index的操作暂时告一段落,下面开始配置logstash的agent

登录到 服务器 192.168.233.129 安装基本软件包和logstash


[192.168.233.129 root@noded:~] 

# cd /soft/ 

[192.168.233.129 root@noded:/soft] 

# wget http://down1.chinaunix.net/distfiles/jdk-6u13-dlj-linux-i586.bin 

[192.168.233.129 root@noded:/soft] 

# sh jdk-6u13-dlj-linux-i586.bin 

设置 JAVA_HOME 

[192.168.233.129 root@noded:/soft] 

vim /etc/profile 

export JAVA_HOME=/usr/java 

export PATH=$JAVA_HOME/bin:$PATH 

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

 

[192.168.233.129 root@noded:/soft] 


yum install ruby 

192.168.233.129 root@noded:/soft] 


# wget http://logstash.objects.dreamhost.com/release/logstash-1.1.0-monolithic.jar 


[192.168.233.129 root@noded:/soft] 


# vim redis.conf 

input { 

    file { 

    type => "producer" 

    path => "/soft/apache.log" 

    } 

    file { 

    type => "php-log" 

    path => "/soft/php.log" 

    } 

filter { 

       grep { 

       match => [ "@message", "mysql|GET|error" ] 

            } 

       } 

 

output { 

      redis { 

      host => '192.168.233.130' 

      data_type => 'list' 

      key => 'logstash:redis' 

       } 

       } 



大概说一下这个配置文件 input 里的file就是要监视的文件了 这里我监视了两个文件,如果这两个文件有追加的内容就会通过下面的output设置发给 redis服务器


filter 里的grep 意思就是 grep...  后面这段就是 日志内容里面只要有匹配 mysql或GET或error的内容就会被过滤出来,发送到 logstash index



以上就是一个比较简单的配置文件了,让我们启动他


[192.168.233.129 root@noded:/soft] 

# java -jar /soft/logstash-1.1.0-monolithic.jar agent -f /soft/redis.conf & 

I, [2013-03-19T19:45:35.762000 #2721]  INFO -- : Using beta plugin 'file'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T19:45:35.752000 -0700","message":"Using beta plugin 'file'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"} 

I, [2013-03-19T19:45:35.778000 #2721]  INFO -- : Using beta plugin 'file'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T19:45:35.778000 -0700","message":"Using beta plugin 'file'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"} 

I, [2013-03-19T19:45:35.804000 #2721]  INFO -- : Using beta plugin 'grep'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T19:45:35.803000 -0700","message":"Using beta plugin 'grep'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"} 

I, [2013-03-19T19:45:35.854000 #2721]  INFO -- : Using beta plugin 'redis'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status  {"timestamp":"2013-03-19T19:45:35.853000 -0700","message":"Using beta plugin 'redis'. For more information about plugin statuses, see http://logstash.net/docs/1.1.0/plugin-status ","level":"info"} 


只要没有 warning 和 error就算是正常启动了


启动之前请确定 192.168.233.130的 redis服务器已经启动,不然会报错




下面登录到 192.168.233.130 上看看 redis服务的状态

[192.168.233.130 root@nodea:/data/redis/etc] 

# lsof -i:6379 

COMMAND    PID USER   FD   TYPE DEVICE SIZE NODE NAME 

redis-ser 2732 root    4u  IPv4   7946       TCP *:6379 (LISTEN) 

redis-ser 2732 root    5u  IPv4   7963       TCP localhost.localdomain:6379->localhost.localdomain:19214 (ESTABLISHED) 

java      2733 root    9u  IPv4   7959       TCP localhost.localdomain:19214->localhost.localdomain:6379 (ESTABLISHED) 


状态正常,端口处于监听状态,我用的是最简单的 配置,

 

[192.168.233.130 root@nodea:/data/redis/etc] 

vim redis.conf 

#this is the config file for redis 

pidfile /var/run/redis.pid 

port 6379 

timeout 0 

loglevel verbose 

logfile /data/redis/log/redis.log 

dbfilename dump.rdb 

dir /data/redis/db/ 

vm-swap-file /tmp/redis.swap 

activerehashing yes 


启动命令如下 

[192.168.233.130 root@nodea:/data/redis/etc] 


redis-server /data/redis/etc/redis.conf & 


下载安装就比较简单了


[192.168.233.130 root@nodea:/soft] 


# wget http://redis.googlecode.com/files/redis-2.4.14.tar.gz 


[192.168.233.130 root@nodea:/data/redis/etc] 


make –j 24 


[192.168.233.130 root@nodea:/data/redis/etc] 

make install 


配置文件里的那几个路径要提前建好


最后我们回到 logstash agent 上面测试一下


[192.168.233.129 root@noded:/soft] 

# echo GET12313 >> apache.log 

[192.168.233.129 root@noded:/soft] 

# echo errorabcd >> apache.log 


ok 到 http://192.168.233.128:9292 去搜索一下 刚才的两个内容

132952247.jpg133019112.jpg

嗯,就是这样了,我现在找个php的错误日志给他追加到php.log文件里 

[192.168.233.129 root@noded:/soft]

# cat php-error.log >> php.log

在看看 logstash的页面 搜索一下 error

202133777.jpg

OK,最后就是 Kibana了 ,我把Kibana装在了 logstash index上面


下载地址为 http://kibana.org/intro.html


[192.168.233.128 root@nodec:/soft] 


# tar xf Kibana-0.2.0.tar.gz 


[192.168.233.128 root@nodec:/soft] 


# cd Kibana-0.2.0 

[192.168.233.128 root@nodec:/soft/Kibana-0.2.0] 


bundle install 


直接安装就好了,非常简单,因为之前咱们已经安装好了 bundle 


编辑配置文件,指定 elasticsearch 的位置 


[192.168.233.128 root@nodec:/soft/Kibana-0.2.0] 

# vim KibanaConfig.rb 

..... 

  Elasticsearch = "localhost:9200" 

  KibanaPort = 5601 

  KibanaHost = '0.0.0.0' 

..... 

主要是这几个参数 

启动的话需要ruby 


[192.168.233.128 root@nodec:/soft/Kibana-0.2.0] 

/usr/bin/ruby kibana.rb & 

[192.168.233.128 root@nodec:/soft/Kibana-0.2.0] 

# == Sinatra/1.3.5 has taken the stage on 5601 for development with backup from Thin 

>> Thin web server (v1.5.0 codename Knife) 

>> Maximum connections set to 1024 

>> Listening on 0.0.0.0:5601, CTRL+C to stop 

如果ruby的东西都不缺的话,启动会很顺利,ok 现在看看5601端口的状态

 

[192.168.233.128 root@nodec:/soft/Kibana-0.2.0] 


# lsof -i:5601 

COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME 

ruby    3116 root    5u  IPv4  28947       TCP *:esmagent (LISTEN) 


访问一下 试试看 http://192.168.233.128:5601 尝试搜索一下php的错误日志,比如mysql




133220759.jpg

ELK Stack 是Elasticsearch、Logstash、Kibana三个开源软件的组合,在实时数据检索和分析场合,三者通常是配合共用的。


可参考:https://www.elastic.co/products

二、Elasticstack重要组件


Elasticsearch: 准实时索引


Logtash: 收集数据,配置使用 Ruby DSL


Kibana 展示数据,查询聚合,生成报表


Kafka 消息队列,做为日志接入的缓冲区


三、Elasticstack工作流程

wKiom1ib_yyA1cdFAABV2Chl5zQ053.jpg-wh_50


简要说明:


1)日志机器上部署logstash服务,用于监控并收集日志,然后,将收集到的日志发送到broker上。


2)Indexer会将这些日志收集到一起,统一发送到Elasticsearch上进行存储。



3)最后Kibana会将需要的数据进行展示,可以进行自定义搜索


四、环境准备

系统:centos 7.2

JDK: 1.8.0_111

filebeat: 5.1.2

logstash: 5.1.2

elasticsearch: 5.1.2  (注:ELK stack 5.1以上版本JDK必须是1.8以上)

kibana: 5.1.2

X-Pack:5.1

kafka: 2.11-0.10.1.0


测试服务器准备:

主机名称:node01   IP:192.168.2.14   职责:主机节点以及数据节点、kafka/logstash

主机名称:node02   IP: 192.168.2.15   职责:主机节点以及数据节点、kibana

主机名称:node03   IP: 192.168.2.17   职责:主机节点以及数据节点、Elasticstack-head插件

主机名称:test  IP: 192.168.2.70   职责:客户端

注:分配内存建议大于2G


测试服务器设置:


配置hosts(/etc/hosts)

192.168.2.14  node01

192.168.2.15  node02

192.168.2.17  node03

关闭防火墙&Sellinux


配置yum源:


#yum -y install epel-release

时间同步:


#rpm -qa |grep chrony

配置时间同步源:

# vi /etc/chrony.conf



# Please consider joining the pool (http://www.pool.ntp.org/join.html).

0.rhel.pool.ntp.org iburst

server 1.rhel.pool.ntp.org iburst

server  10.100.2.5              iburst

重启时间同步服务:# systemctl restart chronyd.service


node01和node02安装配置JDK:


#yum install java-1.8.0-openjdk  java-1.8.0-openjdk-devel  


#安装openjdk


1)标准方式配置环境变量:



vim  /etc/profile

将下面的三行粘贴到 /etc/profile中:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin


    2)保存关闭后,执行:source  /etc/profile  #让设置立即生效。


[root@~]# echo $JAVA_HOME

[root@ ~]# echo $CLASSPATH

[root@ ~]# echo $PATH

测试是否安装配置成功



# java  -version<br>openjdk version "1.8.0_121"

OpenJDK Runtime Environment (build 1.8.0_121-b13)<br>OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)


    3)下载相应的组件到/home/soft


<span style="font-size:18px;">    


#wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.2.zip<br>    

#wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.2-linux-x86_64.tar.gz<br>


#wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.2.zip<br> 

   

#wget http://apache.mirrors.lucidnetworks.net/kafka/0.10.1.0/kafka_2.11-0.10.1.0.tgz<br></span>


五、node01节点安装部署elasticsearch

1、创建elk用户、组



[root@node01 soft]groupadd elk

[root@node01 soft]useradd -g elk elk


2、elasticsearch解压至/usr/local/目录下



[root@node01 soft]#unzip elasticsearch-5.1.2.zip -d /usr/local/

3、创建data/db和data/logs分别存储数据文件和日志文件


[root@node01 soft]# mkdir -pv /data/{db,logs}


4、授权data/db和data/logs、/usr/local/elasticsearch-5.1.2文件夹elk用户及用户组读取权限


[root@node01 soft]chown elk:elk /usr/local/elasticsearch-5.1.2 -R


[root@node01 soft]chown elk:elk /data/{db,logs} -R


5、编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:


[root@node01 config]# vim elasticsearch.yml

cluster.name: ELKstack-5

node.name: node01

path.data: /data/db

path.logs: /data/logs

bootstrap.memory_lock: true

network.host: 0.0.0.0

http.port: 9200

discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]

discovery.zen.minimum_master_nodes: 2

xpack.security.enabled: false 


#关闭es认证 与kibana对应,不然后面安装x-pack需要用户名密码验证


注:

cluster.name: ELKstack-5  #集群的名字(可任意取名称)

node.name: node01  #换个节点名字

network.host: 0.0.0.0  #监听地址,0.0.0.0表示任意机器可以访问

http.port: 9200  #可默认

http.cors.enabled: true   #head插件可以访问es

http.cors.allow-origin: "*"

discovery.zen.ping.unicast.hosts: 集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点

discovery.zen.minimum_master_nodes: 选举一个Master需要多少个节点(最少候选节点数),一般设置成 N/2 + 1,N是集群中节点的数量

    xpack.security.enabled: false #关闭es认证 与kibana对应,禁用了认证功能,如果启用了认证,访问时需要指定用户名密码


6、根据elk运行环境,需要修改以下参数(修改参数以后建议重启机器)

1)[root@node01 config]# vim /etc/security/limits.conf  #修改限制参数,允许elk用户访问mlockall



# allow user 'elk mlockall

elk soft memlock unlimited

elk hard memlock unlimited

*  soft nofile 65536

*  hard nofile 131072

*  soft nproc 2048

*  hard nproc 4096


2)[root@node01 config]# vim /etc/security/limits.d/20-nproc.conf  #修改可打开的文件描述符的最大数(软限制)



修改如下内容:

* soft nproc 4096

#修改为

* soft nproc 2048


3)[root@node01 config]# vim /etc/sysctl.conf   #限制一个进程可以拥有的VMA(虚拟内存区域)的数量

添加下面配置:


vm.max_map_count=655360


[root@node01 config]# sysctl -p #刷新修改参数使其生效



4)修改jvm空间分配,因为elasticsearch5.x默认分配jvm空间大小为2g



[root@node01 elasticsearch-5.1.2]# vim config/jvm.options  

-Xms2g  

-Xmx2g


修改为



[root@node01 elasticsearch-5.1.2]# vim config/jvm.options 

 

-Xms512m  

-Xmx512m


不然会报以下错误:



OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x000000008a660000, 1973026816, 0) failed; error='Cannot allocate memory' (errno=12)

#

# There is insufficient memory for the Java Runtime Environment to continue.

# Native memory allocation (mmap) failed to map 1973026816 bytes for committing reserved memory.

# An error report file with more information is saved as:

# /usr/local/elasticsearch-5.1.2/hs_err_pid11986.log



5)启动elasticsearch服务,注:elasticsearch默认不允许root用户启动服务,切换至普通用户启动



[root@node01 elasticsearch-5.1.2]

#su - elk

[elk@node01 elasticsearch-5.1.2]$cd /usr/local/elasticsearch-5.1.2


[elk@node01 elasticsearch-5.1.2]$nohup ./bin/elasticsearch &


[elk@node01 elasticsearch-5.1.2]$./elasticsearch -d  

#ElasticSearch后端启动命令


注:停止服务(ps -ef |grep elasticsearch 、kill PID)


6)启动后查看进程是否监听端口9200/9300,并且浏览器访问http://192.168.2.14:9200/,是否正常输出es集群信息等



[root@node01 ~]# ss -tlnp |grep '9200'

LISTEN   0  128  :::9200        :::*         users:(("java",pid=2288,fd=113)

[root@node01 ~]# curl http://192.168.2.14:9200


{

 "name" : "node01",

 "cluster_name" : "ELKstack-5",

 "cluster_uuid" : "jZ53M8nuRgyAKqgQCDG4Rw",

  "version" : {<br>    "number" : "5.1.2",

   "build_hash" : "c8c4c16",

    "build_date" : "2017-01-11T20:18:39.146Z",

    "build_snapshot" : false,

   "lucene_version" : "6.3.0"<br>  },

 "tagline" : "You Know, for Search"


}

六、类似node01节点安装elasticsearch部署node02、node03节点


1、安装部署node02节点elasticsearch


1)编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:



[root@node02 config]# vim elasticsearch.yml<br>cluster.name: ELKstack-5

node.name: node02

path.data: /data/db

path.logs: /data/logs

bootstrap.memory_lock: true

network.host: 0.0.0.0

http.port: 9200

discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]

discovery.zen.minimum_master_nodes: 2

xpack.security.enabled: false 

#关闭es认证 与kibana对应


注:其他配置部署同node01


2、安装部署node03节点elasticsearch


1)编辑/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml 修改为如下参数:



[root@node02 config]# vim elasticsearch.yml

cluster.name: ELKstack-5

node.name: node03

path.data: /data/db

path.logs: /data/logs

bootstrap.memory_lock: true

network.host: 0.0.0.0

http.port: 9200<br>discovery.zen.ping.unicast.hosts: ["192.168.2.14","192.168.2.15","192.168.2.17"]

discovery.zen.minimum_master_nodes: 2


xpack.security.enabled: false #关闭es认证 与kibana对应


    注:其他配置部署同node01


3、3个节点(node01,node02,node03)启动后,查看集群是否正常,节点是否正常

    常用查询命令如下:

查看集群状态:curl -XGET http://localhost:9200/_cat/health?v

查看集群节点:curl -XGET http://localhost:9200/_cat/nodes?v

查询索引列表:curl -XGET http://localhost:9200/_cat/indices?v

创建索引:curl -XPUT http://localhost:9200/customer?pretty

查询索引:curl -XGET http://localhost:9200/customer/external/1?pretty

删除索引:curl -XDELETE http://localhost:9200/customer?pretty



[root@node01 ~]# curl -XGET http://localhost:9200/_cat/health?v<br>

epoch      timestamp cluster    status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent

1486384674 20:37:54  ELKstack-5 green           3         3      0   0    0    0        0             0                  -                100.0%

[root@node01 ~]# curl -XGET http://localhost:9200/_cat/nodes?v<br>

ip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name

192.168.2.17           22          94   3    0.58    0.55     0.27 mdi       *      node03

192.168.2.15           22          93   0    0.59    0.60     0.29 mdi       -      node02

192.168.2.14           22          93   1    0.85    0.77     0.37 mdi       -      node01



七、node3(192.168.2.17)节点上安装head插件(由于elasticsearch5.0版本变化较大,目前elasticsearch5.0 暂时不支持直接安装)


1、在从github上面下载代码,因此先要安装git,授权文件和目录(777)



[root@node03 local]# yum install git

[root@node03 local]# git clone git://github.com/mobz/elasticsearch-head.git

[root@node03 local]# chmod 777 -R elasticsearch-head/*



2、下载Node.js,并解压,配置进环境变量



[root@node03 soft]# wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.6.1-linux-x64.tar.gz<br>

[root@node03 soft]# tar -xvf node-v4.6.1-linux-x64.tar.gz #解压至当前目录

[root@node03 soft]#vim /etc/profile

添加如下: export PATH=/home/soft/node-v4.6.1-linux-x64/bin:$PATH 

[root@node03 soft]#source  /etc/profile #使配置文件生效。



3、在/usr/local/elasticsearch-head/目录下,进行npm install 使用node.js安装



[root@node03 elasticsearch-head]# npm install -g cnpm --registry=https://registry.npm.taobao.org<br>

[root@node03 elasticsearch-head]# npm install grunt --save-dev



4、修改目录/usr/local/elasticsearch-head/Gruntfile.js



connect: {

  server: {

     options: {

            port: 9100,

            hostname: '0.0.0.0',

           base: '.',

          keepalive: true

        }

   }


增加hostname属性,设置为*或'0.0.0.0'


5、修改/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml配置文件,增加一下配置,重新启动ES服务


# 以下两个为允许跨域,主要是5.1版本的head插件和以往安装的不一样



http.cors.enabled: true<br>http.cors.allow-origin: "*"



6、修改目录/usr/local/elasticsearch/plugins/head/_site/Gruntfile.js



connect: {

    server: {

       options: {

           port: 9100,

            hostname: '0.0.0.0',

           base: '.',

           keepalive: true

        }

   }


增加hostname属性,设置为*或'0.0.0.0'


7、修改/usr/local/elasticsearch-head/_site/app.js连接地址:

修改head的连接地址:



this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";<br></span>


把localhost修改为es的服务器地址,如:



this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.2.17:9200";<br></span>



8、修改/usr/local/elasticsearch-5.1.2/config/elasticsearch.yml配置文件,增加一下配置,重新启动ES服务

# 以下两个为允许跨域,主要是5.1版本的head插件和以往安装的不一样



http.cors.enabled: true<br>http.cors.allow-origin: "*"


9、解决依赖并启动服务

    执行npm install下载依赖的包:



[root@node03 elasticsearch-head]#npm install

[root@node03 elasticsearch-head]#./node_modules/grunt/bin/grunt serverb & 

#后台启动服务


测试访问:http://192.168.2.17:9100/

wKiom1icALLD-FUpAACTUvelHPg600.jpg-wh_50

八、node2(192.168.2.15)节点上安装部署kibana

1、kibana解压至/usr/local/目录下

1


[root@node02 soft]# tar -xvf kibana-5.1.2-linux-x86_64.tar.gz -C /usr/local/


2、修改/usr/local/kibana-5.1.2-linux-x86_64/config/kibana.yml配置文件,如下:并启动kibana服务

1


[root@node02 soft]#vim /usr/local/kibana-5.1.2-linux-x86_64/config/kibana.yml 

server.port: 5601

server.host: "192.168.2.15"

elasticsearch_url: "http://192.168.2.15:9200"<br>

xpack.security.enabled: false  #关闭认证,为后面kibana增加x-pack组件免去用户名密码认证


[root@node02 kibana-5.1.2-linux-x86_64]# bin/kibana > /var/log/kibana


wKiom1icANnwdcWGAAB5Jm1SN4s459.jpg-wh_50

九、配置客户端test节点(192.168.2.70)

1、安装配置JDK(同node01~node03,这里不再阐述)

2、拷贝logstash至客户端,并解压至/usr/local/目录下



[root@node02 config]# scp /home/soft/logstash-5.1.2.zip  root@192.168.2.70:/home/soft/

[root@test soft]#unzip logstash-5.1.2.zip -d /usr/local/



3、编辑logstash服务管理脚本(配置路径可根据实际情况修改)



[root@test logstash-5.1.2]# mkdir logs etc  #创建目录logs,etc


[root@test logstash-5.1.2]# vim /etc/init.d/logstash


[root@test logstash-5.1.2]# chmod +x /etc/init.d/logstash #添加权限


脚本如下:

1


#!/bin/bash<br>#chkconfig: 2345 55 24

#description: logstash service manager

#auto: Maoqiu Guo

FILE='/usr/local/logstash-5.1.2/etc/*.conf'    #logstash配置文件

LOGBIN='/usr/local/logstash-5.1.2/bin/logstash agent --verbose --config'  #指定logstash配置文件的命令

LOCK='/usr/local/logstash-5.1.2/locks'        #用锁文件配合服务启动与关闭

LOGLOG='--log /usr/local/logstash-5.1.2/logs/stdou.log'  #日志

START() {

 if [ -f $LOCK ];then

echo -e "Logstash is already \033[32mrunning\033[0m, do nothing."

 else

 echo -e "Start logstash service.\033[32mdone\033[m"

nohup ${LOGBIN} ${FILE} ${LOGLOG} &

touch $LOCK

fi

}

STOP() {

if [ ! -f $LOCK ];then

echo -e "Logstash is already stop, do nothing."

else<br> echo -e "Stop logstash serivce \033[32mdone\033[m"

rm -rf $LOCK

ps -ef | greplogstash | grep -v "grep" | awk '{print $2}' | xargskill -s 9 >/dev/null

 fi

}

STATUS() {

psaux | greplogstash | grep -v "grep" >/dev/null

 if [ -f $LOCK ] && [ $? -eq 0 ]; then

 echo -e "Logstash is: \033[32mrunning\033[0m..."

else

echo -e "Logstash is: \033[31mstopped\033[0m..."

fi

}

TEST(){

 ${LOGBIN} ${FILE} --configtest

}

case "$1" in

start)

START

;;

stop)

STOP

;;

status)

STATUS

;;

restart)

STOP

       sleep 2

       START

;;

test)

 TEST

 ;;

*)

echo "Usage: /etc/init.d/logstash (test|start|stop|status|restart)"

 ;;

esac




4、Logstash 向es集群写数据,并测试

1)、在/usr/local/logstash-5.1.2/etc/目录下编写一个logstash配置文件logstash.conf



[root@test etc]# cat logstash.conf

input {              #数据的输入从标准输入<br>  stdin {}  

}

​output {            #数据的输出我们指向了es集群

elasticsearch {

    hosts => ["192.168.2.14:9200","192.168.2.15:9200",192.168.2.17:9200"]#es主机的ip及端口

  }

}

[root@test etc]# /usr/local/logstash-5.1.2/bin/logstash -f logstash.conf -t #查看配置是否正常

Sending Logstash's logs to /usr/local/logstash-5.1.2/logs which is now configured via log4j2.properties

Configuration OK



2)测试数据ES,修改logstash.conf配置文件,把messages输出到日志中,启动logstash服务



[root@test etc]# cat logstash.conf

input {#这里的输入使用的文件,即日志文件messsages

file {

    path => "/var/log/messages"#这是日志文件的绝对路径

     start_position => "beginning"#这个表示从messages的第一行读取,即文件开始处

 }

}

output {#输出到es

elasticsearch {

 hosts => ["192.168.2.14:9200","192.168.2.15:9200",192.168.2.17:9200"]

    index => "messages-%{+YYYY-MM}"#这里将按照这个索引格式来创建索引

  }

}

[root@test etc]# /usr/local/logstash-5.1.2/bin/logstash -f logstash.conf 或


[root@test etc]# /etc/init.d/logstash start



3)验证插件head和kibana是否从ES集群接收到数据并展示

head插件看到相关索引http://192.168.2.17:9100/

wKioL1icATLx2gJtAACMVBLI_6U156.jpg-wh_50

wKioL1icAUGj-F9nAAD5qddzoEs008.jpg-wh_50

九、安装部署Kafka消息队列

1、Kafka是一个分布式、可分区、可复制的消息系统, 在Kafka集群中,没有『中心主节点』的概念,集群中所有的服务器都是对等的,因此可以在不做任何配置更改的情况下对服务器进行添加和删除,同样的消息生产者和消费都也能做到随意重启和机器的上下线。


2、Kafka相关概念

kafka核心组件工作流程

wKiom1icAVPj3nGJAAB2Av0XcG8523.jpg-wh_50

Consumer:用于从Broker中取出/消费Message

Producer:用于往Broker中发送/生产Message

Broker:Kafka中使用Broker来接受Producer和Consumer的请求,并把Message持久化到本地磁盘。每个Cluster当中会选举出一个Broker来担任Controller,负责处理Partition的Leader选举,协调Partition迁移等工作

以上组件在分布式环境下均可以是多个,支持故障转移。同时ZooKeeper仅和broker和consumer相关。broker的设计是无状态的,消费的状态信息依靠消费者自己维护,通过一个offset偏移量。client和server之间通信采用TCP协议。


发布消息通常有两种模式:队列模式(queuing)和发布-订阅模式(publish-subscribe)。队列模式中,consumers 可以同时从服务端读取消息,每个消息只被其中一个 consumer 读到;发布-订阅模式中消息被广播到所有的 consumer 中。更常见的是,每个 topic 都有若干数量的 consumer 组,每个组都是一个逻辑上的『订阅者』,为了容错和更好的稳定性,每个组由若干 consumer 组成。这其实就是一个发布-订阅模式,只不过订阅者是个组而不是单个 consumer。


3、kafka的Topic与Partition工作流程

wKioL1icAWfDV1cvAABlaK7UWZk615.jpg-wh_50

消息是按照主题来提交到Partition当中的。Partition当中的消息是有序的,consumer从一个有序的分区消息队列中顺序获取消息。相关名次定义如下:

Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上

Partition:是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition

offset:消息在Partition中的编号,编号顺序不跨Partition

分区目的:Kafka中采用分区的设计有几个目的。一是可以处理更多的消息,不受单台服务器的限制。Topic拥有多个分区意味着它可以不受限的处理更多的数据。第二,分区可以作为并行处理的单元

offset:由消费者控制offset,因此分区本身所在broker是无状态的。消费者可以自由控制offset,很灵活

同个分区内有序消费:每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。分区中的消息都被分配了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的


4、node01节点(192.168.2.14)上安装部署kafka(这里测试zookeeper没有集群,实际生产环境建议使用集群)

注:安装配置JDK环境这里省略,类同node01等节点

1)kafka解压至/usr/local/目录下,并创建链接kafka



[root@node01 soft]# tar -xvf kafka_2.11-0.10.1.0.tgz -C /usr/local/

[root@node01 soft]# cd /usr/local/

[root@node01 local]# ln -sv kafka_2.11-0.10.1.0 kafka


    

    2)创建zookeeper存储目录,修改/usr/local/kafka/config/目录下zookeeper.propertie配置文件



[root@node01 local]# mkdir /data/zookeeper


[root@node01 local]#vim /usr/local/kafka/config/zookeeper.propertie


修改配置如下:


dataDir=/data/zookeeper

# the port at which the clients will connect

tickTime=2000 #维持心跳的时间间隔

initLimit=20

syncLimit=10


    注:如果zookeeper集群的话,必须标识再配置文件server.2,server.*不同名称并且在/data/zookeeper目录下创建myid文件,里面的内容为数字,用于标识主机,如果这个文件没有的话,zookeeper是没法启动的

    如:

[root@kafka1 ~]# echo 2 > /data/zookeeper/myid


3)修改kafka配置/usr/local/kafka/config/目录下server.properties文件



broker.id=0        # 唯一,填数字,如果是集群该值必须不同如:2、3、4

listeners=PLAINTEXT://:9092 #监听端口

advertised.listeners=PLAINTEXT://192.168.2.14:9092 # 唯一,填服务器IP

log.dir=/data/kafka-logs  #  该目录可以不用提前创建,在启动时自己会创建

zookeeper.connect=192.168.2.14:2181 #这个就是zookeeper的ip及端口

num.partitions=16        # 需要配置较大 分片影响读写速度

log.dirs=/data/kafka-logs # 数据目录也要单独配置磁盘较大的地方

log.retention.hours=168  # 时间按需求保留过期时间 避免磁盘满


    



    4)启动kafka和zookeeper服务(先要启动zookeeper再启动kafka,如果是zookeeper集群如是)



[root@kafka1 ~]# /usr/local/kafka/bin/zookeeper-server-start.sh 

/usr/local/kafka/config/zookeeper.properties &   #zookeeper启动命令


    注:/usr/local/kafka/bin/zookeeper-server-stop.sh   #暂停服务



[root@node01 config]# ss -tlnp |grep '2181'  #启动正常

LISTEN     0      50          :::2181           :::*     users:(("java",pid=3118,fd=88))


[root@node01 config]# nohup /usr/local/kafka/bin/kafka-server-start.sh 

/usr/local/kafka/config/server.properties &


#kafka启动的命令

  或

  #/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties  > /dev/null &

注:/usr/local/kafka/bin/kafka-server-stop.sh    #暂停服务



5)kafka创建一个主题



[root@node01 kafka]#bin/kafka-topics.sh --create --zookeeper 192.168.2.14:2181 --replication-factor 1 --partitions 1 --topic linuxtest


#注意:factor大小不能超过broker数



[root@node01 kafka]# bin/kafka-topics.sh --list --zookeeper 192.168.2.14:2181  #查看主题

linuxtest

[root@node01 kafka]#bin/kafka-topics.sh --describe --zookeeper 192.168.2.14:2181 --topic linuxtest<br>Topic:linuxtestPartitionCount:1ReplicationFactor:1Configs:

Topic: linuxtestPartition: 0Leader: 0Replicas: 0Isr: 0



6)发送消息,这里使用的是生产者角色



[root@node01 kafka]#bin/kafka-console-producer.sh --broker-list 192.168.2.14:9092 --topic linuxtest

This is a messages

welcometo kafka



7)接收消息,这里使用的是消费者角色



[root@node01 kafka]#bin/kafka-console-consumer.sh --zookeeper  192.168.2.14:2181 --topic linuxtest --from-beginning

This is a messages

welcometo kafka



5、修改客户端test节点logstash.conf配置文件,输出改到kafka上面,将数据写入到kafka中,重启logstash服务



[root@test etc]# cat logstash.conf<br>input {            #这里的输入还是定义的是从日志文件输入

 file {

  type => "message"

   path => "/var/log/messages"

  start_position => "beginning"

 }

}

output {

   #stdout { codec => rubydebug }   #这是标准输出到终端,可以用于调试看有没有输出,注意输出的方向可以有多个

  kafka {  #输出到kafka

    bootstrap_servers => "192.168.2.14:9092"  #他们就是生产者

    topic_id => "linux-messages"  #这个将作为主题的名称,将会自动创建

      compression_type => "snappy"  #压缩类型

   }

}

[root@test etc]#/usr/local/logstash-5.1.2/bin/logstash -f logstash.conf > /dev/null &



6、从kafka中读取数据后输出到ES机器,node01安装部署Logstash,安装步骤不再赘述;注意这里的日志主题名称“linuxtest”,并启动服务



[root@node01 etc]# more logstash.conf

input {

   kafka {

       zk_connect => "192.168.2.14:2181"  #消费者们

      topic_id => "linuxtest"

        codec => plain

        reset_beginning => false

       consumer_threads => 5

       decorate_events => true

   }

}

output {

    elasticsearch {

     hosts => ["192.168.2.14:9200","192.168.2.15:9200","192.168.2.17:9200"]

      index => "linux-messages-%{+YYYY-MM}"   

}

  }


[root@node01 etc]# /usr/local/logstash/bin/logstash -f logstash.conf > /dev/null & #启动服务


7、验证在test客户端上写入测试内容



[root@webserver1etc]# echo "test-linux-messages到es集群!!!" >> /var/log/messages<br>#启动logstash,让其读取messages中的内容



十、安装部署X-Pack(需付费X-Pack License(可注册1年免费 License))

1、x-pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,虽然x-pack被设计为一个无缝的工作,但是你可以轻松的启用或者关闭一些功能。

    注:以下为license 注册信息


curl -XPUT -u elastic:password 'http://<host>:<port>/_xpack/license' -d @license.json

@license.json 申请得到的json文件,复制文件中的所有内容,粘贴在此。


如果提示需要acknowledge,则设置为true


curl -XPUT -u elastic:password 'http://<host>:<port>/_xpack/license?acknowledge=true' -d @license.json


查看安装结果信息


curl -XGET -u elastic:password 'http://<host>:<port>/_license'


不同版本功能

https://www.elastic.co/subscriptions

X-Pack监控组件使您能够通过Kibana轻松监控Elasticsearch。 您可以实时查看集群运行状况和性能,以及分析过去的集群,索引和节点指标。 此外,您可以监控Kibana本身的性能。在群集上安装X-Pack时,监视代理会在每个节点上运行,以从Elasticsearch收集索引指标。 通过在Kibana中安装X-Pack,您可以通过一组专用仪表板查看监视数据。

x-pack安装之后有一个超级用户elastic ,其默认的密码是changeme,拥有对所有索引和数据的控制权,可以使用该用户创建和修改其他用户,当然这里可以通过kibana的web界面进行用户和用户组的管理。

X-pack的elk之间的数据传递保护,如:安装完x-pack之后,我们就可以用我们所创建的用户来保护elk之间的数据传递.

如下:

1)kibana<——>elasticsearch

在kibana.yml文件中配置:


elasticsearch.username: “elastic”

elasticsearch.password: “changeme”


2)logstash<——>elasticsearch

在自己写的配置文件中定义


input {

 stdin{}

 beats{

    port => 5044

 }

}

output {

   elasticsearch {

      hosts => ["http://localhost:9200"]

      user => elastic     #必须有对应的用户/密码

      password => changeme

}

  stdout{

      codec=>rubydebug

  }

}

注:这里如果不进行相关配置的话,elk之间的数据传递就会出现问题

2、在各个ES集群节点/usr/local/elasticsearch-5.1.2/目录下以及kibana(本示例kibana在node02上)的/usr/local/kibana-5.1.2-linux-x86_64/

目录下安装X-Pack,并重启Kibana

1


[root@node01 elasticsearch-5.1.2]# bin/elasticsearch-plugin install  x-pack

[root@node02 elasticsearch-5.1.2]# bin/elasticsearch-plugin install  x-pack

[root@node03 elasticsearch-5.1.2]# bin/elasticsearch-plugin install  x-pack   

[root@node02 kibana-5.1.2-linux-x86_64]# bin/kibana-plugin install x-pack

[root@node02 kibana-5.1.2-linux-x86_64]# bin/kibana > /var/log/kibana.log 2>&1 &  #kill进程后启动服务


    注:卸载x-pack组件,#bin/elasticsearch-plugin remove x-pack


    页面访问:http://192.168.2.15:5601,可以查看多了Monitoring选项,更多资料请参考官网

    官方文档:https://www.elastic.co/guide/index.html

    elasticsearch 权威指南:http://www.learnes.net/

    ELK stack 权威指南:http://kibana.logstash.es/content/logstash/

    ELK 开发指南:https://endymecy.gitbooks.io/elasticsearch-guide-chinese/content/index.html



****************************************************************************************************

常见问题总结:

#Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)

由于elasticsearch5.x默认分配jvm空间大小为2g,修改jvm空间分配


# vim config/jvm.options  


-Xms2g  

-Xmx2g  

修改为


# vim config/jvm.options  


-Xms512m  

-Xmx512m


#max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

ulimit -SHn 65536

vim /etc/security/limits.conf


* soft nofile 65536

* hard nofile 65536

* soft nproc 65536

* hard nproc 65536

* soft nofile 65536

* hard nofile 65536

* soft nproc 65536

* hard nproc 65536

* soft nofile 65536

* hard nofile 65536


#max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]


修改 /etc/security/limits.d/90-nproc.conf 

*          soft    nproc     1024

*          soft    nproc     2048

#max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]


修改/etc/sysctl.conf配置文件,


cat /etc/sysctl.conf | grep vm.max_map_count


vm.max_map_count=262144


如果不存在则添加


echo "vm.max_map_count=262144" >>/etc/sysctl.conf




#具体实例配置 192.168.10.67


ll -rt /home/haoren/data/filebeat-5.0.2-linux-x86_64/


drwxr-xr-x 2 haoren haoren     4096 11-24 18:02 scripts

-rw-r--r-- 1 haoren haoren     4196 11-24 18:02 filebeat.yml.bak

-rw-r--r-- 1 haoren haoren     1482 11-24 18:02 filebeat.template.json

-rw-r--r-- 1 haoren haoren     1873 11-24 18:02 filebeat.template-es2x.json

-rw-r--r-- 1 haoren haoren    31735 11-24 18:02 filebeat.full.yml

-rwxr-xr-x 1 haoren haoren 14790666 11-24 18:02 filebeat

-rwxr-xr-x 1 haoren haoren     1184 02-08 14:47 run.sh

-rw-r--r-- 1 haoren haoren      723 02-08 20:13 filebeat.yml

drwxr-xr-x 2 haoren haoren     4096 02-08 20:13 logs

drwxr-xr-x 2 haoren haoren     4096 02-08 20:53 data


cat /home/haoren/data/filebeat-5.0.2-linux-x86_64/filebeat.yml


filebeat.prospectors:

- input_type: log

  paths:

    - /log/billserver.log

    #- /home/haoren/data/filebeat-5.0.2-linux-x86_64/test.log

  encoding: gbk

  symlinks: true

  include_lines: ['\[.*?统计\]','\[.*?结算\]']

  document_type: billserver

  fields_under_root: true

  fields:

    host: 192.168.10.67


processors:

- drop_fields:

    #fields: ["beat.hostname", "beat.name", "beat.version", "input_type", "beat"]

    fields: ["input_type", "beat", "offset", "source"]


output.redis:

  enabled: true

  hosts: ["192.168.10.18"]

  password: "A8841c09BAD52E63067C4DA"

  port: 26379

  datatype: list

  key: "filebeat"

  db: 0


output.file:

  enabled: false

  path: "/tmp/filebeat"


output.console:

  enabled: false   



#启动filebeat  


cat  /home/haoren/data/filebeat-5.0.2-linux-x86_64/run.sh

#!/bin/bash



#/home/haoren/data/filebeat-5.0.2-linux-x86_64 

if [ $# -eq 0 ]; then

    echo "error no param, please input param example 'runfilebeat.sh start'"

    exit

fi


function stopserver()

{

    echo "stopserver filebeat"

    pid1=`ps ax | grep "filebeat" | grep "\/filebeat$" | awk '{print $1}'`

    #pid1=`ps ax | grep "filebeat" | awk '{print $1}'`

    for pid in ${pid1};do

        echo "stopping " $pid

        kill $pid

        sleep 10

        kill -9 $pid

        sleep 10

        echo "$pid stop finish"

    done

    echo "stopserver end"

}


function startserver()

{

    echo "startserver filebeat"

    cd /home/haoren/data/filebeat-5.0.2-linux-x86_64

    /home/haoren/data/filebeat-5.0.2-linux-x86_64/filebeat &

    sleep 10

    pid1=`ps ax | grep "filebeat" | grep -v "grep" | wc -l` 

    if [ $pid1 -eq 0 ]; then

        echo "failed start filebeat -d"

    else

        echo "start filebeat -d successs"

    fi

    echo "start server end"

    exit

}



case $1 in

    stop)

    stopserver 0

    ;;

    start)

    startserver 0

    ;;

    reboot)

    stopserver 0

    sleep 1

    startserver 0

    ;;

    *)

    stopserver 0

    sleep 1

    startserver 0

    ;;

esac


ll -rt /home/haoren/data/logstash-5.0.2/



-rw-rw-r-- 1 haoren haoren    149 11-24 18:22 NOTICE.TXT

-rw-rw-r-- 1 haoren haoren    589 11-24 18:22 LICENSE

-rw-rw-r-- 1 haoren haoren  20837 11-24 18:22 Gemfile.jruby-1.9.lock

-rw-rw-r-- 1 haoren haoren   2249 11-24 18:22 CONTRIBUTORS

-rw-rw-r-- 1 haoren haoren 111731 11-24 18:22 CHANGELOG.md

-rw-rw-r-- 1 haoren haoren   3686 11-24 18:26 Gemfile

drwxrwxr-x 3 haoren haoren   4096 12-01 14:15 logstash-core-plugin-api

drwxrwxr-x 3 haoren haoren   4096 12-01 14:15 logstash-core-event-java

drwxrwxr-x 5 haoren haoren   4096 12-01 14:15 logstash-core

drwxrwxr-x 5 haoren haoren   4096 12-01 14:15 lib

drwxrwxr-x 2 haoren haoren   4096 12-01 14:15 bin

drwxrwxr-x 4 haoren haoren   4096 12-01 14:15 vendor

-rw-rw-r-- 1 haoren haoren    342 12-01 15:34 test.txt

drwxrwxr-x 3 haoren haoren   4096 12-01 15:43 data

-rw-r--r-- 1 haoren haoren   2559 12-01 15:52 test.conf

-rw-r--r-- 1 haoren haoren   2570 12-01 17:11 activityserver2.conf

-rw-r--r-- 1 haoren haoren   2618 12-20 12:44 activityserver.conf

-rwxr-xr-x 1 haoren haoren     80 02-09 14:04 logstash.sh

drwxrwxr-x 2 haoren haoren   4096 02-22 16:28 config

drwxrwxr-x 2 haoren haoren   4096 02-22 18:07 logs

-rw-r--r-- 1 haoren haoren   2154 02-22 18:51 billserver.conf


启动/home/haoren/data/logstash-5.0.2/logstash.sh


#!/bin/bash

/home/haoren/data/logstash-5.0.2/bin/logstash -f billserver.conf &


cat /home/haoren/data/logstash-5.0.2/billserver.conf


input {

    file {

        path => "/log/billserver.log"

        codec => plain {

            charset => "GBK"

        }

        #start_position => "beginning"

        #sincedb_path => "/dev/null"

        type => "billserver"

    }

}


filter {

    if ([message] =~ "\[人民币结算\]"){

        mutate {replace => { "type" => "dubijiesuan" }}

        grok {

            #170208-10:00:28 Bill[40268]  INFO: [人民币结算]时间(1486519228),用户ID(30581009),原来人民币(12567),现在人民币(16567),人民币操作(1),增加(4000),操作类型(19),操作详情(2),操作数量(0).描述:通用人民币操作

            #170208-10:00:01 Bill[40268]  INFO: [人民币结算]时间(1486519201),用户ID(22327945),原来人民币(2572),现在人民币(2532),人民币操作(2),扣除(40),操作类型(19),操作详情(15),操作数量(0).描述:通用人民币操作

            match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) Bill\[\d+\]  INFO: \[人民币结算\]时间\(%{NUMBER:time:int}\),用户ID\(%{NUMBER:userid:int}\),原来人民币\(%{NUMBER:oldcoin:int}\),现在人民币\(%{NUMBER:currentcoin:int}\),人民币操作\(%{NUMBER:coinop:int}\),%{DATA:sop}\(%{NUMBER:coinnum:int}\),操作类型\(%{NUMBER:optype:int}\),操作详情\(%{NUMBER:opdetail:int}\),操作数量\(%{NUMBER:opnum:int}\).描述:%{DATA:sinfo}"]

        }

    }

      else{

        drop{}

    }

    date {

        match => ["datetime", "yyMMdd-HH:mm:ss"]

        #timezone => ["Asia/Hong_Kong"]

        #remove_field => ["time"]

    }

    ruby {

        code => "event.timestamp.time.localtime"

    }

    mutate {

        #some pc no host

        replace => { "host" => "192.168.10.67" }

    }

}


output {

    #stdout {

    #    codec => plain {

    #        charset => "UTF-8"

    #        #charset => "GBK"

    #    }

    #}

    #file {

    #    path => "/tmp/logstash.log"

    #    codec => json {

    #        charset => "UTF-8"

    #    }

    #}

    redis {

        host => ["192.168.10.18"]

        port => 26379

        data_type => "list"

        key => "logstash"

        password => "A8841c09BAD52E63067C4DA"

        codec => json {

            charset => "UTF-8"

        }

    }

}



#192.168.10.18上的配置


ll -rt /home/haoren/data/logstash-5.0.2/


-rw-rw-r-- 1 haoren haoren    149 11月 24 10:22 NOTICE.TXT

-rw-rw-r-- 1 haoren haoren    589 11月 24 10:22 LICENSE

-rw-rw-r-- 1 haoren haoren  20837 11月 24 10:22 Gemfile.jruby-1.9.lock

-rw-rw-r-- 1 haoren haoren   2249 11月 24 10:22 CONTRIBUTORS

-rw-rw-r-- 1 haoren haoren 111731 11月 24 10:22 CHANGELOG.md

drwxrwxr-x 2 haoren haoren   4096 11月 24 10:22 data

-rw-rw-r-- 1 haoren haoren   3686 11月 24 10:26 Gemfile

drwxrwxr-x 2 haoren haoren   4096 11月 30 07:34 bin

drwxrwxr-x 5 haoren haoren   4096 11月 30 07:34 lib

drwxrwxr-x 5 haoren haoren   4096 11月 30 07:34 logstash-core

drwxrwxr-x 3 haoren haoren   4096 11月 30 07:34 logstash-core-plugin-api

drwxrwxr-x 3 haoren haoren   4096 11月 30 07:34 logstash-core-event-java

drwxrwxr-x 4 haoren haoren   4096 11月 30 07:34 vendor

-rwxrwxr-x 1 haoren haoren     78 11月 30 09:40 logstash.sh

drwxrwxr-x 2 haoren haoren   4096 12月  1 14:25 config

-rwxrwxr-x 1 haoren haoren     78 12月  6 10:33 filebeat.sh

-rw-r--r-- 1 haoren haoren   2534 12月  9 13:06 filebeat.bak

-rw-rw-r-- 1 haoren haoren    555 12月 20 08:27 logstash.conf

-rw-r--r-- 1 haoren haoren   3457 12月 20 08:28 filebeat.conf.bak

-rw-r--r-- 1 haoren haoren   6163 1月  11 08:20 filebeat.conf.20170112.bak

-rw-r--r-- 1 haoren haoren   5130 1月  11 08:20 filebeat.conf.20170111.bak

-rw-r--r-- 1 haoren haoren    292 1月  11 13:31 filebeat.txt

-rw-rw-r-- 1 haoren haoren   2636 1月  12 03:47 filebeat20170112.txt

-rw-rw-r-- 1 haoren haoren   2636 1月  12 03:47 filebeat.json

-rw-r--r-- 1 haoren haoren   7385 1月  12 03:57 filebeat.20170112

-rw-r--r-- 1 haoren haoren   7390 1月  18 02:31 filebeat.conf.2070118.bak

-rw-r--r-- 1 haoren haoren   7853 2月   8 12:16 filebeat.conf.20170208.bak

-rw-r--r-- 1 haoren haoren   9011 2月   8 12:16 filebeat.conf

-rwxrwxr-x 1 haoren haoren    528 3月   7 10:48 Del-logstash-log.sh

drwxrwxr-x 2 haoren haoren   4096 3月  11 16:08 logs



启动/home/haoren/data/logstash-5.0.2/logstash.sh


#!/bin/bash


/home/haoren/data/logstash-5.0.2/bin/logstash -f logstash.conf & 



cat /home/haoren/data/logstash-5.0.2/logstash.conf

input {

  redis {

    host => ["192.168.10.18"]

    port => 26379

    password => "A8841c09BAD52E63067C4DA"

    data_type => "list"

    key => "logstash"

    codec => json {

      charset => "UTF-8"

    }

  }

}


filter {

    ruby {

        code=>"event.set('daytag',event.timestamp.time.localtime.strftime('%Y.%m.%d'))"

    }

}


output {

  elasticsearch {

    hosts => ["127.0.0.1:19200"]

    index => "%{type}-%{daytag}"

    #index => "%{type}-%{+yyyy.MM.dd}"

    user => "logstashserver"

    password => "A950C0FB2D833E42C1AC59210CD5CDF8"

  }



启动 /home/haoren/data/logstash-5.0.2/filebeat.sh

#!/bin/bash


/home/haoren/data/logstash-5.0.2/bin/logstash -f filebeat.conf &



cat /home/haoren/data/logstash-5.0.2/filebeat.conf 



input {

    redis {

        host => ["192.168.10.18"]

        port => 26379

        password => "A8841c09BAD52E63067C4DA"

        data_type => "list"

        key => "filebeat"

        codec => json {

            charset => "UTF-8"

        }

    }

    #file {

    #    path => "/home/haoren/data/logstash-5.0.2/filebeat.txt"

    #    codec => plain {

    #        charset => "GBK"

    #    }

    #    start_position => "beginning"

    #    sincedb_path => "/dev/null"

    #    type => "pchannelserver"

    #}

    #file {

    #   path => "/home/haoren/data/logstash-5.0.2/filebeat.json"

    #   codec => json {

    #       charset => "UTF-8"

    #   }

    #   start_position => "beginning"

    #   sincedb_path => "/dev/null"

    #   type => "pchannelserver"

    #}

}   


filter {

    if( [type] == "sessionserver" ){

        if( [message] =~ "登陆统计"){

            mutate {replace => { "type" => "userlogin" }}

            grok {

                #161206-16:00:00 SS[4306] TRACE: [登陆统计]收到角色(82559870)登陆(PC)IP(124.239.95.209)MAC(52229449286)机器ID(454070640)渠道(0)gameid(6)端口(3889)登陆类型(1)

                match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) SS\[\d+\].*?TRACE: \[登陆统计\]收到角色\(%{NUMBER:userid:int}\)登陆\(%{DATA:sclient}\)IP\(%{DATA:sip}\)MAC\(%{DATA:smac}\)机器ID\(%{NUMBER:mid:int}\)渠道\(%{NUMBER:apkid:int}\)gameid\(%{NUMBER:gameid:int}\)端口\(%{NUMBER:port:int}\)登陆类型\(%{NUMBER:logintype:int}\)"]

            }

        }

        else if ([message] =~ "注册统计"){

            mutate {replace => { "type" => "userreg" }}

            grok{

                #161205-15:33:22 SS[4306] TRACE: [注册统计]用户(87475178)注册(Android)渠道(8)账号(_wx_omj_avq_nz8obsk6yy5dsmfrlfmk)

                match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) SS\[\d+\].*?TRACE: \[注册统计\]用户\(%{NUMBER:userid:int}\)注册\(%{DATA:sclient}\)渠道\(%{NUMBER:apkid:int}\)账号\(%{DATA:saccount}\)" ]                

            }

        }

        #else{

        #    drop{}

        #}

    }

    else if( [type] == "activityserver" ){

        if( [message] =~ "用户注册渠道奖励统计"){

            mutate {replace => { "type" => "actvityregreward" }}

            grok {

                #161212-10:17:29 ActivityServer[17702]  INFO: [UserRegisterReward.cpp:90] [用户注册渠道奖励统计]用户(87582819)客户端(0)注册渠道(1001)机器码(476931654)奖励包裹(77)个数(100)当日奖励(100)上限(1000000)

                match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) ActivityServer\[\d+\].*?INFO: .*?\[用户注册渠道奖励统计\]用户\(%{NUMBER:userid:int}\)客户端\(%{NUMBER:client:int}\)注册渠道\(%{NUMBER:apkid:int}\)机器码\(%{NUMBER:mid:int}\)奖励包裹\(%{NUMBER:packid:int}\)个数\(%{NUMBER:num:int}\)当日奖励\(%{NUMBER:todaynum:int}\)上限\(%{NUMBER:maxnum:int}\)\)"]

            }

        }

        else if( [message] =~ "充值礼包统计"){            

            mutate {replace => { "type" => "activityrechargebag" }}

            grok {

                #161220-17:02:53 ActivityServer[17700]  INFO: [ActivityRechargeBag.cpp:559] [充值礼包统计]用户(60163778)获得(8800)礼包类型(2)用户获得( 1029:1)商户获得( 1062:688)

                match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) ActivityServer\[\d+\].*?INFO: \[.*?\] \[充值礼包统计\]用户\(%{NUMBER:userid:int}\)获得\(%{NUMBER:pid:int}\)礼包类型\(%{NUMBER:ptype:int}\)用户获得\(%{DATA:userget}\)商户获得\(%{DATA:singerget}\)"]

            }

        }

        else if( [message] =~ "16年购物统计"){

            mutate {replace => { "type" => "activitymodules" }}

            grok {

                #161220-17:05:31 ActivityServer[17702]  INFO: [ActivityModules.cpp:837][2016双12] [16年购物统计]用户(84795176)购物平台(65780103)商户(65780103)个数(20)礼物(92)价值(0)原分数(385399)增加分数(20)现分数(385419)淘汰(0)新旧(0)

                match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) ActivityServer\[\d+\]  INFO: \[.*?\]\[2016双12\] \[16年购物统计\]用户\(%{NUMBER:userid:int}\)购物平台\(%{NUMBER:channelid:int}\)商户\(%{NUMBER:singerid:int}\)个数\(%{NUMBER:num:int}\)礼物\(%{NUMBER:itemid:int}\)价值\(%{NUMBER:coin:int}\)原分数\(%{NUMBER:oldscore:int}\)增加分数\(%{NUMBER:addscore:int}\)现分数\(%{NUMBER:nowscore:int}\)淘汰\(%{NUMBER:out:int}\)新旧\(%{NUMBER:isnew:int}\)"]

            }

        }

        

    }

    else if( [type] == "vchannelserver" ){    

        if( [message] =~ "进出购物平台统计"){ 

            mutate {replace => { "type" => "vchannelin" }}

            grok {

                #170109-12:59:39 VChannelServer[15000]  INFO: [Channel.cpp:414] [进出购物平台统计]用户(22016998)(进入)购物平台(3998186)端(0)渠道(0)IMState(6)机器ID(246418457)商户(87261227)游客(0)

                #170109-12:59:40 VChannelServer[15000]  INFO: [Channel.cpp:414] [进出购物平台统计]用户(83735196)(离开)购物平台(4029779)端(3)渠道(0)IMState(13)机器ID(0)商户(0)游客(0)

                #170118-09:59:58 VChannelServer[15001]  INFO: [Channel.cpp:417] [进出购物平台统计]用户(87455625)(进入)购物平台(3830989)端(3)渠道(2017)IMState(13)机器ID(0)商户(65256549)游客(0)游戏id(0)

                #170118-09:59:59 VChannelServer[15001]  INFO: [Channel.cpp:417] [进出购物平台统计]用户(3015482583)(离开)购物平台(3830989)端(0)渠道(0)IMState(13)机器ID(0)商户(65256549)游客(1)游戏id(0)

                match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) VChannelServer\[\d+\]  INFO: \[.*?\] \[进出购物平台统计\]用户\(%{NUMBER:userid:int}\)\(%{DATA:sop}\)购物平台\(%{NUMBER:channelid:int}\)端\(%{NUMBER:client:int}\)渠道\(%{NUMBER:apkid:int}\)IMState\(%{NUMBER:imstate:int}\)机器ID\(%{NUMBER:mid:int}\)商户\(%{NUMBER:singerid:int}\)游客\(%{NUMBER:istemp:int}\)游戏id\(%{NUMBER:gameid:int}\)"]

            }

         }   

    }

    else if( [type] == "pchannelserver" ){ 

        if( [message] =~ "进出购物平台统计"){ 

            mutate {replace => { "type" => "pchannelin" }}

            grok {

                #170111-00:00:17 PChannelServer[18701]  INFO: [进出购物平台统计]用户(88464974)(进入)购物平台(86972527)端(0)渠道(0)IMState(6)机器ID(0)商户(86972527)游客(0)

                #170111-00:00:43 PChannelServer[18701]  INFO: [进出购物平台统计]用户(88464904)(退出)购物平台(86972527)端(0)渠道(0)IMState(6)机器ID(0)商户(86972527)游客(0)

                match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) PChannelServer\[\d+\]  INFO: \[进出购物平台统计\]用户\(%{NUMBER:userid:int}\)\(%{DATA:sop}\)购物平台\(%{NUMBER:channelid:int}\)端\(%{NUMBER:client:int}\)渠道\(%{NUMBER:apkid:int}\)IMState\(%{NUMBER:imstate:int}\)机器ID\(%{NUMBER:mid:int}\)商户\(%{NUMBER:singerid:int}\)游客\(%{NUMBER:istemp:int}\)"]

            }

         }

     }       

    

    else if( [type] == "billserver" ){ 

        if( [message] =~ "人民币统计"){ 

            mutate {replace => { "type" => "dubijiesuan" }}

            grok {

                #170208-10:00:28 Bill[40268]  INFO: [人民币结算]时间(1486519228),用户ID(30581009),原来人民币(12567),现在人民币(16567),人民币操作(1),增加(4000),操作类型(19),操作详情(2),操作数量(0).描述:通用人民币操作

                #170208-10:00:01 Bill[40268]  INFO: [人民币结算]时间(1486519201),用户ID(22327945),原来人民币(2572),现在人民币(2532),人民币操作(2),扣除(40),操作类型(19),操作详情(15),操作数量(0).描述:通用人民币操作

                match => [ "message", "(?<datetime>(?>\d{6}-\d\d:\d\d:\d\d)) Bill\[\d+\]  INFO: \[人民币结算\]时间\(%{NUMBER:time:int}\),用户ID\(%{NUMBER:userid:int}\),原来人民币\(%{NUMBER:oldcoin:int}\),现在人民币\(%{NUMBER:currentcoin:int}\),人民币操作\(%{NUMBER:coinop:int}\),%{DATA:sop}\(%{NUMBER:coinnum:int}\),操作类型\(%{NUMBER:optype:int}\),操作详情\(%{NUMBER:opdetail:int}\),操作数量\(%{NUMBER:opnum:int}\).描述:%{DATA:sinfo}"]

            }

         }

     }   

    

    else{

        drop{}

    }

    date {

        match => ["datetime", "yyMMdd-HH:mm:ss"]

    }

    ruby {

        code => "event.timestamp.time.localtime"

    }

    ruby {

        code => "event.set('daytag',event.timestamp.time.localtime.strftime('%Y.%m.%d'))"

        remove_field => ["tags"]

    }

}


output {

    #stdout {

    #    codec => plain {

    #        charset => "UTF-8"

    #        #charset => "GBK"

    #    }

    #}

    #file {

    #    path => "/tmp/logstash.log"

    #    codec => json {

    #        charset => "UTF-8"

    #    }

    #}

    elasticsearch {

        hosts => ["127.0.0.1:19200"]

        index => "%{type}-%{daytag}"

        #index => "%{type}-%{+yyyy.MM.dd}"

        user => "logstashserver"

        password => "A950C0FB2D833E42C1AC59210CD5CDF8"

    }

}



ll /home/haoren/data/elasticsearch-5.0.2/


-rw-r--r--  1 haoren haoren       9108 11月 24 10:05 README.textile

-rw-r--r--  1 haoren haoren        150 11月 24 10:05 NOTICE.txt

-rw-r--r--  1 haoren haoren      11358 11月 24 10:05 LICENSE.txt

drwxr-xr-x  2 haoren haoren       4096 11月 24 10:10 plugins

drwxr-xr-x  2 haoren haoren       4096 11月 24 10:10 lib

drwxr-xr-x 12 haoren haoren       4096 11月 24 10:10 modules

drwxrwxr-x  3 haoren haoren       4096 12月  1 03:18 data

-rwxrwxr-x  1 haoren haoren        114 12月  1 03:30 elasticsearch.sh

-rw-------  1 haoren haoren 2197468100 12月 20 13:24 java_pid15072.hprof

drwxr-xr-x  2 haoren haoren       4096 2月   9 03:58 bin

drwxr-xr-x  3 haoren haoren       4096 3月   1 07:58 config

drwxrwxr-x  2 haoren haoren       4096 3月  11 16:00 logs



cat /home/haoren/data/elasticsearch-5.0.2/elasticsearch.sh

#!/bin/bash


cd /home/haoren/data/elasticsearch-5.0.2/

/home/haoren/data/elasticsearch-5.0.2/bin/elasticsearch -d 


grep -v "#"  /home/haoren/data/elasticsearch-5.0.2/config/jvm.options


-Xms4g

-Xmx4g



-XX:+UseConcMarkSweepGC

-XX:CMSInitiatingOccupancyFraction=75

-XX:+UseCMSInitiatingOccupancyOnly



-XX:+DisableExplicitGC


-XX:+AlwaysPreTouch



-server


-Djava.awt.headless=true


-Dfile.encoding=UTF-8


-Djna.nosys=true


-Djdk.io.permissionsUseCanonicalPath=true


-Dio.netty.noUnsafe=true

-Dio.netty.noKeySetOptimization=true


-Dlog4j.shutdownHookEnabled=false

-Dlog4j2.disable.jmx=true

-Dlog4j.skipJansi=true



-XX:+HeapDumpOnOutOfMemoryError



grep -v "#"   /home/haoren/data/elasticsearch-5.0.2/config/elasticsearch.yml

cluster.name: es-5.0-haoren

node.name: node-18

network.host: 0.0.0.0

http.port: 19200

http.cors.enabled: true

http.cors.allow-origin: "*" 



cat /home/haoren/data/elasticsearch-5.0.2/config/log4j2.properties

status = error


# log action execution errors for easier debugging

logger.action.name = org.elasticsearch.action

logger.action.level = debug


appender.console.type = Console

appender.console.name = console

appender.console.layout.type = PatternLayout

appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n


appender.rolling.type = RollingFile

appender.rolling.name = rolling

appender.rolling.fileName = ${sys:es.logs}.log

appender.rolling.layout.type = PatternLayout

appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n

appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log

appender.rolling.policies.type = Policies

appender.rolling.policies.time.type = TimeBasedTriggeringPolicy

appender.rolling.policies.time.interval = 1

appender.rolling.policies.time.modulate = true


rootLogger.level = info

rootLogger.appenderRef.console.ref = console

rootLogger.appenderRef.rolling.ref = rolling


appender.deprecation_rolling.type = RollingFile

appender.deprecation_rolling.name = deprecation_rolling

appender.deprecation_rolling.fileName = ${sys:es.logs}_deprecation.log

appender.deprecation_rolling.layout.type = PatternLayout

appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n

appender.deprecation_rolling.filePattern = ${sys:es.logs}_deprecation-%i.log.gz

appender.deprecation_rolling.policies.type = Policies

appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy

appender.deprecation_rolling.policies.size.size = 1GB

appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy

appender.deprecation_rolling.strategy.max = 4


logger.deprecation.name = org.elasticsearch.deprecation

logger.deprecation.level = warn

logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling

logger.deprecation.additivity = false


appender.index_search_slowlog_rolling.type = RollingFile

appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling

appender.index_search_slowlog_rolling.fileName = ${sys:es.logs}_index_search_slowlog.log

appender.index_search_slowlog_rolling.layout.type = PatternLayout

appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n

appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs}_index_search_slowlog-%d{yyyy-MM-dd}.log

appender.index_search_slowlog_rolling.policies.type = Policies

appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy

appender.index_search_slowlog_rolling.policies.time.interval = 1

appender.index_search_slowlog_rolling.policies.time.modulate = true


logger.index_search_slowlog_rolling.name = index.search.slowlog

logger.index_search_slowlog_rolling.level = trace

logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling

logger.index_search_slowlog_rolling.additivity = false


appender.index_indexing_slowlog_rolling.type = RollingFile

appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling

appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs}_index_indexing_slowlog.log

appender.index_indexing_slowlog_rolling.layout.type = PatternLayout

appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n

appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs}_index_indexing_slowlog-%d{yyyy-MM-dd}.log

appender.index_indexing_slowlog_rolling.policies.type = Policies

appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy

appender.index_indexing_slowlog_rolling.policies.time.interval = 1

appender.index_indexing_slowlog_rolling.policies.time.modulate = true


logger.index_indexing_slowlog.name = index.indexing.slowlog.index

logger.index_indexing_slowlog.level = trace

logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling

logger.index_indexing_slowlog.additivity = false

 



ll -rt /home/haoren/data/kibana-5.0.2-linux-x86_64/


drwxrwxr-x   2 haoren haoren  4096 11月 24 10:16 webpackShims

drwxrwxr-x   9 haoren haoren  4096 11月 24 10:16 src

-rw-rw-r--   1 haoren haoren  4962 11月 24 10:16 README.txt

drwxrwxr-x   2 haoren haoren  4096 11月 24 10:16 plugins

-rw-rw-r--   1 haoren haoren   701 11月 24 10:16 package.json

drwxrwxr-x   3 haoren haoren  4096 11月 24 10:16 optimize

drwxrwxr-x 472 haoren haoren 20480 11月 24 10:16 node_modules

drwxrwxr-x   6 haoren haoren  4096 11月 24 10:16 node

-rw-rw-r--   1 haoren haoren   562 11月 24 10:16 LICENSE.txt

drwxrwxr-x   2 haoren haoren  4096 11月 24 10:16 bin

drwxrwxr-x   2 haoren haoren  4096 12月  1 03:44 data

-rwxrwxr-x   1 haoren haoren   123 12月  1 06:07 kibana.sh

drwxrwxr-x   2 haoren haoren  4096 2月   8 12:25 config




启动 /home/haoren/data/kibana-5.0.2-linux-x86_64/kibana.sh

#!/bin/bash


cd /home/haoren/data/kibana-5.0.2-linux-x86_64

/home/haoren/data/kibana-5.0.2-linux-x86_64/bin/kibana serve & 


cat /home/haoren/data/kibana-5.0.2-linux-x86_64/config/kibana.yml


server.port: 15602


server.host: "0.0.0.0"


elasticsearch.url: "http://222.192.63.12:19200"


192.168.10.21配置


​cd /home/haoren/data/filebeat-5.0.2-linux-x86_64


[haoren@IM-SJ01-Server21 filebeat-5.0.2-linux-x86_64]$ ll -rt


drwxr-xr-x 2 haoren haoren     4096 11-24 18:02 scripts
-rw-r--r-- 1 haoren haoren     4196 11-24 18:02 filebeat.yml.bak
-rw-r--r-- 1 haoren haoren     1482 11-24 18:02 filebeat.template.json
-rw-r--r-- 1 haoren haoren     1873 11-24 18:02 filebeat.template-es2x.json
-rw-r--r-- 1 haoren haoren    31735 11-24 18:02 filebeat.full.yml
-rwxr-xr-x 1 haoren haoren 14790666 11-24 18:02 filebeat
-rwxr-xr-x 1 haoren haoren     1175 12-20 16:22 run.sh
-rw-rw-r-- 1 haoren haoren     6311 12-20 20:08 test1.log
-rw-rw-r-- 1 haoren haoren     6311 12-20 20:17 test2.log
-rw-r--r-- 1 haoren haoren      732 12-20 20:18 filebeat.yml
drwxr-xr-x 2 haoren haoren     4096 03-11 05:01 logs
drwxr-xr-x 2 haoren haoren     4096 03-23 20:37 data 






[haoren@IM-SJ01-Server21 filebeat-5.0.2-linux-x86_64]$ cat filebeat.yml
filebeat.prospectors:
- input_type: log
  paths:
    - /log/activityserver.log
    #- /home/haoren/data/filebeat-5.0.2-linux-x86_64/test2.log
  encoding: gbk
  symlinks: true
  include_lines: ['\[.*?统计\]','\[.*?结算\]']
  document_type: activityserver
  fields_under_root: true
  fields:
    host: 192.168.10.21


processors:
- drop_fields:
    #fields: ["beat.hostname", "beat.name", "beat.version", "input_type", "beat"]
    fields: ["input_type", "beat", "offset", "source"]


output.redis:
  enabled: true
  hosts: ["192.168.10.18"]
  password: "A8841c09BAD52E63067C4DA"
  port: 26379
  datatype: list
  key: "filebeat"
  db: 0


output.file:
  enabled: false
  path: "/tmp/filebeat"


output.console:
  enabled: false 






[haoren@IM-SJ01-Server21 filebeat-5.0.2-linux-x86_64]$ cat run.sh
#!/bin/bash




#/home/haoren/data/filebeat-5.0.2-linux-x86_64 
if [ $# -eq 0 ]; then
    echo "error no param, please input param example 'runfilebeat.sh start'"
    exit
fi


function stopserver()
{
    echo "stopserver filebeat"
    pid1=`ps ax | grep "filebeat" | grep "\/filebeat$" | awk '{print $1}'`
    #pid1=`ps ax | grep "filebeat" | awk '{print $1}'`
    for pid in ${pid1};do
        echo "stopping " $pid
        kill $pid
        sleep 10
        kill -9 $pid
        sleep 10
        echo "$pid stop finish"
    done
    echo "stopserver end"
}


function startserver()
{
    echo "startserver filebeat"
    cd /home/haoren/data/filebeat-5.0.2-linux-x86_64
    /home/haoren/data/filebeat-5.0.2-linux-x86_64/filebeat &
    sleep 10
    pid1=`ps ax | grep "filebeat" | grep -v "grep" | wc -l` 
    if [ $pid1 -eq 0 ]; then
        echo "failed start filebeat -d"
    else
        echo "start filebeat -d successs"
    fi
    echo "start server end"
}




case $1 in
    stop)
    stopserver 0
    ;;
    start)
    startserver 0
    ;;
    reboot)
    stopserver 0
    sleep 1
    startserver 0
    ;;
    *)
    stopserver 0
    sleep 1
    startserver 0
    ;;
esac

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值