日志分析平台-ELK环境搭建

目录

1.     简介... 3

1.1.      Logstash. 5

1.2.      ElasticSearch. 5

1.3.      Kibana. 5

1.4.      Kafka. 6

1.5.      Zookeeper 6

1.6.      Lua. 7

1.7.      Docker 7

2.     本机环境搭建... 8

2.1.      系统初始化... 9

2.2. JDK 安装... 9

2.3. ElasticSearch. 10

2.4. Kibana. 16

2.5. zookeeper 17

2.6. kafka. 20

3.Docker环境搭建... 23

4.案例... 24

4.1. logstash获取应用日志。... 24

4.2. logstash获取Oracle数据... 24

4.3. Nginx+Lua 获取网页访问记录... 24

附录Ⅰ配置列表... 25

附录Ⅱ x-pack破解... 26

1.简介

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。

l  Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

l  Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。

l  kibana 也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web界面,可以帮助您汇总、分析和搜索重要数据日志。

整体数据流程:




图1.1 ELK数据流图

因为子系统和实例远远大于ES数量,所以在ES和收集日志的logstash终端之间添加了Kafka实现缓存。




图1.2 添加kafka实现logstash与ES缓存

日志信息存储量过大,ES只存储1周数据,超过1周的数据存放HIVE。日志大小信息如图1.3



图1.3 ES 普惠日志增长量

普惠信息主要来自三个方面,针对不同的数据采用不同的方法:

Ÿ   安全日志:存储于Oracle数据库。

Oracle---logstash----kafka-----ES----Kibana

Ÿ   应用日志:以txt文档方式存储于应用本地目录。

Txt----logstash(filter)----kafka----ES---Kibana

Ÿ   Nginx访问日志:使用Nginx差价Lua直接推送Kafka

Nginx+lua-----kafka----ES---kibana

1.1. Logstash

logstash是一个数据分析软件,主要目的是分析log日志。数据首先将数据传给logstash,它将数据进行过滤和格式化(转成JSON格式),然后传给Elasticsearch进行存储、建搜索的索引。




图1.4 Logstash数据处理流程

1.2. ElasticSearch

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

1.3. Kibana

Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。可进行搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。

1.4. Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。

1.5. Zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。




图1.5 Zookeeper 工作原理

1.6. Lua

Lua 是一个小巧的脚本语言。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。

1.7. Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口


2.本机环境搭建

ELK 所有组件均只依赖Java 就可以运行,所以在部署方面相对比较简单。

本章先介绍使用本机直接安装ELK,再建此环境移植到Docker环境,待后期使用Mesos或Openshift统一调用管理。

生产环境无法联网,请自行下载到本地目录后上传,科技有封装好的ZK和Kafka,可以考虑使用。

组件多数依赖Java,先安装Java再安装其他组件,各组件列表及其下载地址:

JDK

        http://www.oracle.com/technetwork/java/javase/downloads/index.html

ElasticSearch,Logstash,Kibana,X-pack

https://www.elastic.co/cn/downloads

Kafka:

http://kafka.apache.org/downloads

Zookeeper

        https://www.apache.org/dyn/closer.cgi/zookeeper/

本地资源:
              http://http://mirrors-ph.paic.com.cn//repo/elk/

       本地环境:测试环境。

       直接将各组件搭建在本地机器,测试其可用性。

生产环境:

  

Es-node01

  

192.168.0.1

8核/32.0GB

Centos7.2

elastic

ES-node01,ansible

Es-node02

192.168.0.2

8核/32.0GB

Centos7.2

elastic

ES-node02

Es-node03

192.168.0.3

8核/32.0GB

Centos7.2

elastic

ES-node03

Es-node04

192.168.0.4

8核/32.0GB

Centos7.2

elastic

ES-node04

Es-node05

192.168.0.5

8核/32.0GB

Centos7.2

elastic

ES-node05

2.1. 系统初始化

系统初始化:

添加组:方便统一,添加组id

  

groupadd -g 4567  elk

  

ansible kafka -m shell -a 'groupadd -g 4567 elk '

  

添加用户:

  

useradd -G elk -u 1234 kafka

  

ansible kafka -m shell -a 'useradd -G elk -u 1234 kafka '

  

初始化密码:

  

echo ***** |  passwd kafka --stdin

  

ansible kafka -m shell -a 'echo ****** |  passwd kafka --stdin '

  

ansible es -m shell -a 'echo ******  | passwd elastic --stdin '

  

ansible logstash -m shell -a 'echo ******  | passwd logstash --stdin '

  

创建kafka数据/日志路径:

  

mkdir /mnt/data{1..4}/kafka/data  -p

  

ansible kafka -m shell -a 'mkdir  /mnt/data{1..4}/kafka/data -p '

  

ansible kafka -m shell -a 'mkdir  /mnt/data1/kafka/logs -p '

  

创建zookeeper数据/日志路径:

  

mkdir  /mnt/data1/zookeeper/logs -p

  

ansible kafka -m shell -a 'mkdir  /mnt/data1/zookeeper/logs -p '

  

ansible kafka -m shell -a 'mkdir  /mnt/data{1..4}/zookeeper/data -p '

  

创建软件路径:

  

mkdir /var/soft  -p

  

ansible kafka -m shell -a ' mkdir /var/soft  –p’

  

2.2. JDK 安装

1.    远程登录服务器,创建业务用户:

  

$ ssh [email protected]

  

[root@es-node01  ~]# groupadd elk

  

[root@es-node01  ~]# useradd elastic –b /wls/ -G elk

  

[root@es-node01  ~]# echo ****** |passwd elastic --stdin

  

更改用户 elastic  的密码  。

  

passwd: 所有的身份验证令牌已经成功更新。

  

重复以上动作,在所有主机添加用户。

2.    切换用户。

  

[root@es-node01  ~]# su - elastic

  

3.    JDK安装

下载并上传jdk包至服务器。因为数据包过大,请使用跳板机上传。此处省略过程。

  

[root@es-node01  ~]# wget -O /var/soft/jdk1.8.0_131.tar.gz http://http://mirrors-ph.paic.com.cn//repo/elk/jdk1.8.0_131.tar.gz

  

进入安装目录,解压包,并设置PATH路径

  

[root@es-node01  ~]$ cd /var/soft

  

[root@es-node01  ~]$ tar –zxvf jdk1.8.0_131.tar.gz

  

[root@es-node01  ~]$ vim ~/.bash_profile                    #修改PATH路径,并设置开机运行

  

JAVA_HOME=/wls/elk/jdk1.8.0_131

  

PATH=$JAVA_HOME/binPATH

  

[root@es-node01  ~]$ source ~/.bash_profile

  

[root@es-node01  ~]$ java –version                                #确认Java版本是否可用

  

java version  "1.8.0_131"

  

Java(TM) SE  Runtime Environment (build 1.8.0_131-b11)

  

Java HotSpot(TM)  64-Bit Server VM (build 25.131-b11, mixed mode)

  

[root@es-node01  ~]$ which java                                             #确认是否为Java 路径

  

/wls/elk/jdk1.8.0_131/bin/java

  

[root@es-node01  ~]$

    

2.3. ElasticSearch

       ElasticSearch只依赖JAVA,直接解压,修改配置就好。

       ES有很多可用插件,但是离线真的很难安装,直接放弃,对于我们这种专业的运维,直接使用curl操作。

1.    上传解压

  

[root@es-node01  ~]$ wget -O /var/soft/elasticsearch-6.0.0.tar.gz  http://http://mirrors-ph.paic.com.cn//repo/elk/elasticsearch-6.0.0.tar.gz

  

[root@es-node01  ~]$ cd /var/soft

  

[root@es-node01  ~]$ tar -zxvf tools/elasticsearch-6.0.0.tar.gz

  

2.    修改配置

可以参考配置文件:

http://http://mirrors-ph.paic.com.cn//repo/elk/conf/elasticsearch.yml

查看系统配置,存储数据地址:

创建文件位置

  

[root@es-node01  soft]#df -Th

  

/dev/mapper/VolGroup1-LVdata1  xfs       500G   33M   500G    1% /mnt/data2

  

/dev/mapper/VolGroup2-LVdata2  xfs       500G   33M   500G    1% /mnt/data1

  

[root@es-node01  soft]#mkdir /mnt/data{1..2}/elasticsearch/data –p

  

[root@es-node01  soft]#mkdir /mnt/data1/elasticsearch/logs –p

  

[root@es-node01  soft]#chown elastic:elk /mnt/data* -R

  

修改配置:

  

[root@es-node01  soft]#cat /config/elasticsearch.yml

  

cluster.name:  ph-elk                                                                                      #集群名

  

node.name: es-node01                                                                        #主机名

  

path.data:  /mnt/data1/elasticsearch/data,/mnt/data2/elasticsearch/data       #数据路径,多文件用逗号

  

path.logs:  /mnt/data1/elasticsearch/logs                                                   #log  路径

  

network.host:  0.0.0.0                                                                                      #可访问机器

  

http.port: 9200                                                                                                #端口

  

discovery.zen.ping.unicast.hosts:  ["192.168.0.1","192.168.0.2","192.168.0.3","192.168.0.4","192.168.0.5"]         #其他机器

  

xpack.ssl.key:  certs/${node.name}/${node.name}.key                               #x-pack  认证证书路径

  

xpack.ssl.certificate:  certs/${node.name}/${node.name}.crt                      #机器私钥

  

xpack.ssl.certificate_authorities:  certs/ca/ca.crt                                           #集群CA证书

  

xpack.security.transport.ssl.enabled:  true                                                    #开启xpack功能

    

Jvm 配置根据机器配置修改:

  

[root@es-node01  soft]#cat config/jvm.options

  

-Xms28g

  

-Xmx28g

  

3.    启动验证

  

[root@es-node01  soft]# bin/elasticsearch

  

[2018-03-29T11:02:42,296][INFO  ][o.e.b.BootstrapChecks    ] [es-node01]  bound or publishing to a non-loopback or non-link-local address, enforcing  bootstrap checks

  

ERROR: [1]  bootstrap checks failed

  

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

  

此报错使用root修改vm.max_map_count

  

[root@es-node01  soft]# sysctl -w vm.max_map_count=20000000

  

vm.max_map_count  = 20000000

  

再次启动

  

[root@es-node01  soft]# bin/elasticsearch –d

  

[2018-03-29T11:06:32,320][INFO  ][o.e.n.Node               ] [es-node01]  initializing ...

  

[2018-03-29T11:06:32,390][INFO  ][o.e.e.NodeEnvironment    ] [es-node01]  using [2] data paths, mounts [[/mnt/data1 (/dev/mapper/VolGroup2-LVdata2),  /mnt/data2 (/dev/mapper/VolGroup1-LVdata1)]], net usable_space [999.4gb], net  total_space [999.5gb], types [xfs]

  

[2018-03-29T11:06:32,391][INFO  ][o.e.e.NodeEnvironment    ] [es-node01]  heap size [27.9gb], compressed ordinary object pointers [true]

  

[2018-03-29T11:06:32,392][INFO  ][o.e.n.Node               ] [es-node01]  node name [es-node01], node ID [6o6WyURiRdeargHwqbGWag]

  

[2018-03-29T11:06:32,392][INFO  ][o.e.n.Node               ] [es-node01]  version[6.0.0], pid[48441], build[8f0685b/2017-11-10T18:41:22.859Z],  OS[Linux/3.10.0-693.17.1.el7.x86_64/amd64], JVM[Oracle Corporation/Java  HotSpot(TM) 64-Bit Server VM/1.8.0_131/25.131-b11]

  

[2018-03-29T11:06:32,392][INFO  ][o.e.n.Node               ] [es-node01]  JVM arguments [-Xms28g, -Xmx28g, -XX:+UseConcMarkSweepGC,  -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly,  -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8,  -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true,  -Dio.netty.noKeySetOptimization=true,  -Dio.netty.recycler.maxCapacityPerThread=0,  -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true,  -XX:+HeapDumpOnOutOfMemoryError,  -Des.path.home=/var/soft/elasticsearch-6.0.0, -Des.path.conf=/var/soft/elasticsearch-6.0.0/config]

  

[2018-03-29T11:06:33,353][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [aggs-matrix-stats]

  

[2018-03-29T11:06:33,353][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [analysis-common]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [ingest-common]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [lang-expression]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [lang-mustache]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [lang-painless]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [parent-join]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [percolator]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [reindex]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [repository-url]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [transport-netty4]

  

[2018-03-29T11:06:33,354][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded module [tribe]

  

[2018-03-29T11:06:33,355][INFO  ][o.e.p.PluginsService     ] [es-node01]  loaded plugin [x-pack]

    

验证:

  

[root@kafka-node5  ~]# curl http://192.168.0.1:9200   

  

{

  

  "name" : "es-node01",

  

  "cluster_name" :  "ph-elk",

  

  "cluster_uuid" :  "x2oARQMlQoqMPTYXT4MeGw",

  

  "version" : {

  

    "number" : "6.0.0",

  

    "build_hash" :  "8f0685b",

  

4.    安装x-pack

  

[root@es-node01  soft]# wget http://http://mirrors-ph.paic.com.cn//repo/elk/x-pack-6.0.0.zip

  

[root@es-node01  soft]# bin/elasticsearch-plugin install  file:///var/soft/elasticsearch-6.0.0/x-pack-6.0.0.zip

  

-> Downloading  file:///var/soft/elasticsearch-6.0.0/x-pack-6.0.0.zip

  

[=================================================]  100%聽聽

  

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  

@     WARNING: plugin requires additional  permissions     @

  

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  

*  java.io.FilePermission \\.\pipe\* read,write

  

*  java.lang.RuntimePermission  accessClassInPackage.com.sun.activation.registries

  

*  java.lang.RuntimePermission getClassLoader

  

*  java.lang.RuntimePermission setContextClassLoader

  

*  java.lang.RuntimePermission setFactory

  

* java.net.SocketPermission  * connect,accept,resolve

  

*  java.security.SecurityPermission createPolicy.JavaPolicy

  

*  java.security.SecurityPermission getPolicy

  

*  java.security.SecurityPermission putProviderProperty.BC

  

*  java.security.SecurityPermission setPolicy

  

* java.util.PropertyPermission  * read,write

  

*  java.util.PropertyPermission sun.nio.ch.bugLevel write

  

See  http://docs.oracle.com/javase/8/ ... ty/permissions.html

  

for descriptions  of what these permissions allow and the associated risks.

  
  

Continue with  installation? [y/N]y

  

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  

@        WARNING: plugin forks a native  controller        @

  

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  

This plugin  launches a native controller that is not subject to the Java

  

security manager  nor to system call filters.

  
  

Continue with  installation? [y/N]y

  

5.    生成认证秘钥

  

[elastic@es-node01  x-pack]$ bin/x-pack/certgen

  

Please enter the  desired output file [certificate-bundle.zip]: ph-elk

  

Enter instance  name: es-node01

  

Enter name for  directories and files [es-node01]:

  

Enter IP  Addresses for instance (comma-separated if more than one) []: 192.168.0.1

  

6.    解压秘钥

  

[elastic@es-node01  config]$ mkdir certs

  

[elastic@es-node01  config]$ cd certs/

  

[elastic@es-node01  certs]$ unzip ../ph-elk.zip

  

Archive:  ../ph-elk.zip

  

   creating: ca/

  

  inflating: ca/ca.crt               

  

  inflating: ca/ca.key               

  

   creating: es-node01/

  

  inflating: es-node01/es-node01.crt  

  

  inflating: es-node01/es-node01.key  

  

   creating: es-node02/

  

  inflating: es-node02/es-node02.crt  

  

  inflating: es-node02/es-node02.key  

  

   creating: es-node03/

  

  inflating: es-node03/es-node03.crt  

  

  inflating: es-node03/es-node03.key  

  

   creating: es-node04/

  

  inflating: es-node04/es-node04.crt  

  

  inflating: es-node04/es-node04.key  

  

   creating: es-node05/

  

  inflating: es-node05/es-node05.crt  

  

  inflating: es-node05/es-node05.key

  

7.    密码初始化

  

[root@es-node01  soft]#cd bin/x-pack

  

[elastic@es-node01 x-pack]$ ./setup-passwords interactive

  

Initiating the  setup of reserved user elastic,kibana,logstash_system passwords.

  

You will be  prompted to enter passwords as the process progresses.

  

Please confirm  that you would like to continue [y/N]y

  

Enter password  for [elastic]:

  

Reenter password  for [elastic]:

  

Enter password  for [kibana]:

  

Reenter password  for [kibana]:

  

Enter password  for [logstash_system]:

  

Reenter password  for [logstash_system]:

  

Changed password  for user [kibana]

  

Changed password  for user [logstash_system]

  

Changed password  for user [elastic]

  

[elastic@es-node01  x-pack]$

  

重启验证。恭喜恭喜

  

[elastic@es-node01  x-pack]$ curl -u elastic http://127.0.0.1:9200?pretty

  

Enter host  password for user 'elastic':*******

  

{

  

  "name" : "es-node01",

  

  "cluster_name" :  "ph-elk",

  

  "cluster_uuid" :  "x2oARQMlQoqMPTYXT4MeGw",

  

  "version" : {

  

    "number" : "6.0.0",

  

    "build_hash" :  "8f0685b",

  

    "build_date" :  "2017-11-10T18:41:22.859Z",

  

    "build_snapshot" : false,

  

    "lucene_version" :  "7.0.1",

  

    "minimum_wire_compatibility_version"  : "5.6.0",

  

     "minimum_index_compatibility_version" : "5.0.0"

  

  },

  

  "tagline" : "You Know, for  Search"

  

}

  

2.4. Kibana

Kibana 安装依赖java,下载安装即可。

  

[root@es-node01  soft]# wget -O  /var/soft/kibana-6.0.0-linux-x86_64.tar.gz http://http://mirrors-ph.paic.com.cn//repo/elk/kibana-6.0.0-linux-x86_64.tar.gz

  

--2018-03-29  13:13:42--  http://http://mirrors-ph.paic.com.cn//repo/elk/kibana-6.0.0-linux-x86_64.tar.gz

  

正在连接  http://mirrors-ph.paic.com.cn/:80... 已连接。

  

已发出 HTTP 请求,正在等待回应... 200 OK

  

长度:62681301 (60M) [application/octet-stream]

  

正在保存至: “/var/soft/kibana-6.0.0-linux-x86_64.tar.gz”

  
  

100%[================================================================================================================================>]  62,681,301  36.1MB/s 用时 1.7s   

  
  

2018-03-29  13:13:44 (36.1 MB/s) - 已保存 “/var/soft/kibana-6.0.0-linux-x86_64.tar.gz”  [62681301/62681301])

  
  

[root@es-node01  soft]#

  

解压

  

[root@es-node01  soft]# cd /var/soft/

  

[root@es-node01  soft]# tar zxv kibana-6.0.0-linux-x86_64.tar.gz

  

修改配置

  

[root@es-node01  soft]# cat ../config/kibana.yml|egrep -v  "^#|$?"

  

server.port:  "5601"

  

server.host:  "0.0.0.0"

  

server.name:  "es-node01"

  

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

  

elasticsearch.username:  "kibana"

  

elasticsearch.password:  "kibana"

  

启动验证

  

[root@es-node01  soft]# bin/kibana

  

访问页面,恭喜恭喜:http://kibana_server:5601




2.5. zookeeper

    服务器列表:

  

kafka-node1

  

192.168.0.6

8核/32.0GB

Centos7.2

Kafka-node1

kafka-node2

192.168.0.7

8核/32.0GB

Centos7.2

Kafka-node2

kafka-node3

192.168.0.8

8核/32.0GB

Centos7.2

Kafka-node3

kafka-node4

192.168.0.9

8核/32.0GB

Centos7.2

Kafka-node4

kafka-node5

192.168.0.10

8核/32.0GB

Centos7.2

Kafka-node5

    安装jdk,参考以前步骤。

  

ansible kafka -m  shell -a 'wget -O /var/soft/jdk1.8.0_131.tar.gz  http://http://mirrors-ph.paic.com.cn//repo/elk/jdk1.8.0_131.tar.gz'

  

ansible kafka -m  shell -a 'cd /var/soft ; tar zxf jdk1.8.0_131.tar.gz'

  

    下载zookeeper包:

URL:   http://http://mirrors-ph.paic.com.cn//repo/elk/zookeeper-3.4.6.tar.gz

  

wget -O  /var/soft/zookeeper-3.4.6.tar.gz  http://http://mirrors-ph.paic.com.cn//repo/elk/zookeeper-3.4.6.tar.gz

  

wget -O  /var/soft/kafka_2.11-0.10.2.1.tar.gz    http://http://mirrors-ph.paic.com.cn//repo/elk/kafka_2.11-0.10.2.1.tar.gz

  

    解压:

  

ansible kafka -m  shell -a 'cd /var/soft; tar xf zookeeper-3.4.6.tar.gz'

  

ansible kafka -m  shell -a 'cd /var/soft; tar zxf kafka_2.11-0.10.2.1.tar.gz'

  

    修改配置:

  

[root@es-node01  conf]# cat conf/zoo.cfg |egrep -v "^#|^$"

  

tickTime=2000

  

initLimit=10

  

syncLimit=5

  

dataDir=/mnt/data1/zookeeper/data

  

dataLogDir=/mnt/data1/zookeeper/logs  

  

clientPort=2181

  

maxClientCnxns=300

  

autopurge.snapRetainCount=20

  

autopurge.purgeInterval=48

  

server.1=192.168.0.6:2888:3888

  

server.2=192.168.0.7:2888:3888

  

server.3=192.168.0.8:2888:3888

  

server.4=192.168.0.9:2888:3888

  

server.5=192.168.0.10:2888:3888

  

    同步配置文档:使用ansible统一分发(方便)。

  

[root@es-node01  conf]# ansible kafka -m copy -a  "src=/var/soft/zookeeper-3.4.6/conf/zoo.cfg  dest=/var/soft/zookeeper-3.4.6/conf/"

  

kafka-node3 |  SUCCESS => {

  

    "changed": true,

  

    "checksum":  "3c05364115536c3b645bc7222df883b341d50c83",

  

    "dest":  "/var/soft/zookeeper-3.4.6/conf/zoo.cfg",

  

    "gid": 0,

  

    "group": "root",

  

    "md5sum":  "ded548de08fa7afda587162df935cdcd",

  

    "mode": "0644",

  

    "owner": "root",

  

    "size": 1163,

  

    "src":  "/root/.ansible/tmp/ansible-tmp-1522724739.95-275544206529433/source",  

  

    "state": "file",

  

    "uid": 0

  

}

  

修改权限

  

[root@es-node01  conf]# ansible kafka -m shell -a 'chown kafka:elk  /var/soft'              

  

[WARNING]: Consider using file module with  owner rather than running chown

  

kafka-node3 |  SUCCESS | rc=0 >>

  

kafka-node5 |  SUCCESS | rc=0 >>

  

kafka-node4 | SUCCESS  | rc=0 >>

  

kafka-node2 |  SUCCESS | rc=0 >>

  

kafka-node1 |  SUCCESS | rc=0 >>

  

[root@es-node01  conf]# ansible kafka -m shell -a 'chown kafka:elk /mnt/data* -R '

  

启动查看

  

[root@es-node01  conf]# ansible kafka -m shell -u kafka -a  '/var/soft/zookeeper-3.4.6/bin/zkServer.sh start '

  

[root@es-node01  conf]# ansible kafka -m shell -u kafka -a  '/var/soft/zookeeper-3.4.6/bin/zkServer.sh status'

  

如下报错:

  

[kafka@kafka-node1  ~]$ cat zookeeper.out

  

2018-04-03  11:19:53,751 [myid:] - INFO   [mainuorumPeerConfig@103] - Reading configuration from:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg

  

2018-04-03  11:19:53,760 [myid:] - INFO   [mainuorumPeerConfig@340] - Defaulting to majority quorums

  

2018-04-03  11:19:53,763 [myid:] - ERROR [mainuorumPeerMain@85] - Invalid config,  exiting abnormally

  

org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException:  Error processing /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg

  

        at  org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:123)

  

        at  org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101)

  

        at  org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)

  

Caused by:  java.lang.IllegalArgumentException: /mnt/data1/zookeeper/data/myid file is missing

  

        at  org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:350)

  

        at  org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:119)

  

        ... 2 more

  

    添加对应的ID号到此文件:

  

ServerName

  

IP

MYID

kafka-node1

192.168.0.6

1

kafka-node2

192.168.0.7

2

kafka-node3

192.168.0.8

3

kafka-node4

192.168.0.9

4

kafka-node5

192.168.0.10

5

更新myid

  

ansible kafka-node1  -m shell -u kafka -a 'echo 1 >/mnt/data1/zookeeper/data/myid'

  

ansible kafka-node2  -m shell -u kafka -a 'echo 2 >/mnt/data1/zookeeper/data/myid'

  

ansible kafka-node3  -m shell -u kafka -a 'echo 3 >/mnt/data1/zookeeper/data/myid'

  

ansible kafka-node4  -m shell -u kafka -a 'echo 4 >/mnt/data1/zookeeper/data/myid'

  

ansible kafka-node5  -m shell -u kafka -a 'echo 5 >/mnt/data1/zookeeper/data/myid'

  

重启验证:

一台leader其他均为follower即可。

  

[root@es-node01  ~]# ansible kafka -m shell -u kafka -a  '/var/soft/zookeeper-3.4.6/bin/zkServer.sh restart '

  

[root@es-node01  ~]# ansible kafka -m shell -u kafka -a  '/var/soft/zookeeper-3.4.6/bin/zkServer.sh status '

  

kafka-node5 |  SUCCESS | rc=0 >>

  

Mode: leaderJMX enabled by  default

  

Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg

  

kafka-node4 |  SUCCESS | rc=0 >>

  

Mode: followerJMX enabled by  default

  

Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg

  

kafka-node3 |  SUCCESS | rc=0 >>

  

Mode: followerJMX enabled by  default

  

Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg

  

kafka-node2 |  SUCCESS | rc=0 >>

  

Mode: followerJMX enabled by  default

  

Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg

  

kafka-node1 |  SUCCESS | rc=0 >>

  

Mode: followerJMX enabled by  default

  

Using config:  /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg

  

2.6. kafka

和zk同样的五台机器。

下载解压:

  

wget -O  /var/soft/kafka_2.11-0.10.2.1.tar.gz   http://http://mirrors-ph.paic.com.cn//repo/elk/kafka_2.11-0.10.2.1.tar.gz

  

解压,修改配置文档:

以下标记部分配置每台不同

  

[root@es-node01  config]# cat server.properties |egrep -v "^$|^#"

  

broker.id=1

  

delete.topic.enable=true

  

host.name=kafka-node1

  

listeners=PLAINTEXT:/192.168.0.6/:9092

  

advertised.listeners=PLAINTEXT://192.168.0.6:9092

  

num.network.threads=3

  

num.io.threads=8

  

socket.send.buffer.bytes=102400

  

socket.receive.buffer.bytes=102400

  

socket.request.max.bytes=104857600

  

log.dirs=/mnt/data1/kafka/data,/mnt/data2/kafka/data,/mnt/data3/kafka/data,/mnt/data4/kafka/data

  

num.partitions=3

  

num.recovery.threads.per.data.dir=1

  

log.flush.interval.messages=10000

  

log.flush.interval.ms=1000

  

log.retention.hours=72

  

log.segment.bytes=1073741824

  

log.retention.check.interval.ms=300000

  

min.insync.replicas=2

  

num.replica.fetchers=2

  

zookeeper.connect=192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181

  

zookeeper.connection.timeout.ms=6000

  

调整JVM参数,开启JMX监控功能。

  

[root@es-node01  config]# vim bin/kafka-server-start.sh

  

if [  "x$KAFKA_HEAP_OPTS" = "x" ]; then

  

    export KAFKA_HEAP_OPTS="-Xmx24G  -Xms24G"

  

    export JMX_PORT="9999"

  

同步配置到其他机器:记得修改上面×××部分配置。

  

[root@kafka-node1  bin]# ansible kafka -m copy -a  "src=/var/soft/kafka_2.11-0.10.2.1/config/server.properties  dest=/var/soft/kafka_2.11-0.10.2.1/config/ owner=kafka group=elk"

  

[root@kafka-node1  bin]# ansible kafka -m copy -a  "src=/var/soft/kafka_2.11-0.10.2.1/bin/kafka-server-start.sh  dest=/var/soft/kafka_2.11-0.10.2.1/bin/ owner=kafka group=elk"

  


启动查看:

  

[root@es-node01  config]# ansible kafka -m shell -u kafka -a  "/var/soft/kafka_2.11-0.10.2.1/bin/kafka-server-start.sh -daemon  /var/soft/kafka_2.11-0.10.2.1/config/server.properties"

  

kafka-node3 |  SUCCESS | rc=0 >>

  

kafka-node4 |  SUCCESS | rc=0 >>

  

kafka-node5 |  SUCCESS | rc=0 >>

  

kafka-node2 |  SUCCESS | rc=0 >>

  

kafka-node1 |  SUCCESS | rc=0 >>

  

进入一台kafka服务器,测试kafka是否可用。

Ÿ  创建topic

  

[kafka@kafka-node1  var]$ kafka-topics.sh  -create  –zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181  -topic ELK.TEST -replication-factor 2 -partition 3

  

Ÿ  查看topic列表

  

kafka@kafka-node1  var]kafka-topics.sh  -zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181  -list                     

  

ELK.TEST

  

Ÿ  创建productor

  

[kafka@kafka-node1  var]$ kafka-console-producer.sh --broker-list 192.168.0.6:9092,192.168.0.7:9092,192.168.0.8:9092,192.168.0.9:9092,192.168.0.10:9092  --topic ELK.TEST

  

Ÿ  创建consumer

开另外一台机器开启consumer,并在productor 输入信息,看是否能够同步

  

[kafka@kafka-node5  ~]$ kafka-console-consumer.sh --zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181  --topic ELK.TEST

  

Using the ConsoleConsumer  with old consumer is deprecated and will be removed in a future major  release. Consider using the new consumer by passing [bootstrap-server]  instead of [zookeeper].

  

aaaaaaaaaaaaaaaaaaa  aaaaaaaaaaaaa aaaaaaaaaa

  

Ÿ  删除topic

  

kafka-topics.sh  --delete --zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181  --topic ELK.TEST

  

Ÿ  查看topic内容

  

kafka-console-consumer.sh  --bootstrap-server 192.168.0.6:9092,192.168.0.7:9092,192.168.0.8:9092,192.168.0.9:9092,192.168.0.10:9092  --topic ELK.TEST --from-beginning --max-messages 10000

  

Ÿ  查看消费情况

  

kafka-run-class.sh  kafka.tools.ConsumerOffsetChecker --group PH-SAFE --topic ELK.TEST  --zookeeper 192.168.0.6:2181,192.168.0.7:2181,192.168.0.8:2181,192.168.0.9:2181,192.168.0.10:2181

  

以上操作均无问题,那么kafka、ZK 搭建OK。恭喜恭喜。

2.7logstash

    Kafka-----ES 的logstash 使用docker去运行。已经做好docker images。修改配置,运行就好。

主机列表:

  

SZC-L0093638

  

30.18.32.231

8核/32.0GB

LINUX

Logstash-1

SZC-L0093637

30.18.32.230

8核/32.0GB

LINUX

Logstash-2

运行命令:

   

  

docker run -d -it  \

  

  -h ELK-TEST \

  

  --name   ELK-TEST \

  

  --restart=on-failure:2 \

  

  --net=host \

  

  -v /etc/

  

http://mirrors-ph.paic.com.cn/:5 ... pack_6.0.0:20171212  bash

  
  

Bash 可以更换为启动命令。

  

logstash -w 1 -f  /usr/local/logstash-6.0.0/config/ph-safe.conf

  

配置参考http://http://mirrors-ph.paic.com.cn//repo/elk/conf/

3.Docker环境搭建

  

云主机名称

  

内网IP

配置

操作系统

用户

安装组件

SZC-L0080585

30.18.32.54

8核/32.0GB

LINUX7.2

root

es-elk-1,zk-elk-1,kafka-elk-1,kabana-elk-1

SZC-L0080587

30.18.32.55

8核/32.0GB

LINUX7.2

root

es-elk-2,zk-elk-2,kafka-elk-2,kabana-elk-2

SZC-L0080583

30.18.32.56

8核/32.0GB

LINUX7.2

root

es-elk-3,zk-elk-3,kafka-elk-3

SZC-L0080586

30.18.32.58

8核/32.0GB

LINUX7.2

root

es-elk-4,zk-elk-4,kafka-elk-4

SZC-L0080584

30.18.32.59

8核/32.0GB

LINUX7.2

root

es-elk-5,zk-elk-5,kafka-elk-5


4.案例4.1. logstash获取应用日志。

后续更新

4.2. logstash获取Oracle数据:员工行为分析

4.3. Nginx+Lua 获取网页访问记录


附录Ⅰ配置列表


附录Ⅱ x-pack破解

x-pack 破解方法,亲测有效,按照步骤来就可以。

1.下载x-pack-6.0.0.zip 包

2.创建一个文件夹,解压压缩包。

  

elasticsearch]# #mkdir  /x-pack

  

elasticsearch]# #cd  /x-pack

  

elasticsearch]# #unzip  ../x-pack-6.0.0.zip

  

elasticsearch]# #cd  elasticsearch

  
  

elasticsearch]# file  x-pack-6.0.0.jar  

  

x-pack-6.0.0.jar:  Zip archive data, at least v1.0 to extract

  

elasticsearch]# mkdir  x-pack-6.0.0

  

elasticsearch]#cd  x-pack-6.0.0

  

x-pack-6.0.0]#unzip  ../x-pack-6.0.0.jar

  

4.    寻找license判定代码:LicenseVerifier.class。

  

x-pack-6.0.0]# find  -name LicenseVerifier.class

  

./org/elasticsearch/license/LicenseVerifier.class

  

5.      找一个目录创建LicenseVerifier.java

  

#mkdir /tmp/test

  

#cd /tmp/test/

  

#vim  LicenseVerifier.java    #别人已经反编译成功,拿来用就可以。

  
  

package  org.elasticsearch.license;

  

public class LicenseVerifier

  

{

  

    public static boolean verifyLicense(final  License license, final byte[] encryptedPublicKeyData) {

  

        return true;

  

    }

  

    public static boolean verifyLicense(final  License license) {

  

        return true;

  

    }

  

}

  

6.      编译。我的安装路径为/usr/local/elasticsearch-6.0.0

  

javac -cp  "/usr/local/elasticsearch-6.0.0/lib/elasticsearch-6.0.0.jar:/usr/local/elasticsearch-6.0.0/lib/lucene-core-7.0.1.jar:/usr/local/elasticsearch-6.0.0/plugins/x-pack/x-pack-6.0.0.jar"  LicenseVerifier.java

  

7.      更新代码包并替换。

  

#rm /usr/local/elasticsearch-6.0.0/plugins/x-pack/x-pack-6.0.0.jar

  

#rm /x-pack/elasticsearch/x-pack-6.0.0.jar

  

#rm /x-pack/elasticsearch/x-pack-6.0.0/org  /elasticsearch/license/LicenseVerifier.class

  

#cp /tmp/test/LicenseVerifier.class  /x-pack-6.0.0/x-pack-6.0.0/org/elasticsearch/license/

  

8.      重新打包压缩

  

#cd /x-pack/x-pack-6.0.0/

  

#jar -cvf x-pack-6.6.0.jar  ./*

  

9.      覆盖确认:查看修改时间是否OK。

  

#cp x-pack-6.6.0.jar  /usr/local/elasticserver-6.0.0/plugins/x-pack/x-pack-6.6.0.jar

  

#ls –al  /usr/local/elasticserver-6.0.0/plugins/x-pack/x-pack-6.6.0.jar

  

10.  查看_license

  

$ curl -u  elastic:******* http://127.0.0.1:9200/_xpack/license

  

{

  

  "license" : {

  

    "status" : "active",

  

    "uid" :  "b7d9fe72-926a-453d-bba4-1932b7c2d6a8",

  

    "type" : "trial",

  

    "issue_date" :  "2018-03-29T03:06:40.711Z",

  

    "issue_date_in_millis" :  1522292800711,

  

    "expiry_date" : "2018-04-28T03:06:40.711Z",

  

    "expiry_date_in_millis" : 1524884800711,

  

    "max_nodes" : 1000,

  

    "issued_to" :  "ph-elk",

  

    "issuer" :  "elasticsearch",

  

    "start_date_in_millis" : -1

  

  }

  

}

  

10.重启elastic和kibana。

11.官网申请license

访问网站:https://license.elastic.co/registration

  

{"license":{"uid":"c127f207-c8f6-4d71-8b89-21f350f7d284","type":"platinum","issue_date_in_millis":1514160000000,"expiry_date_in_millis":2524579200999,"max_nodes":100,"issued_to":"Maoshu  Ran (Pingan)","issuer":"Web  Form","signature":"AAAAAwAAAA3nC1a1H/RvS9soHXxIAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQAtob2KBeFwY2nMY7RkxDKEoskFqTtTvvVCPCJAFDsRsz+OdlLfbnAQF2hj32nGTZ/HTDbCa6GXIEkKce6rxMC92JtZ37Fh96uenccS+OdbnHeoDnnLcRmCR7k031hVgcGyKHHv5W1+VhSw54IY8vPpuaz2e7Ggul/9V6RwzxNXeWEdIAKabTUp2Gg48UZ+WKUKM2FuoWHRdszMFxu0W+oU2aJCnHkX87AjL3ed94sqZBW0GdiU1dMJI3HmMoWdYy3gaPkq/xI73GVM0A/kE0p+Q+cmB9PSANIV/YS47ygD2VjmXOptjkaWmvbAopNCqxE4yB4TdlcaH7G/doPHc+zi","start_date_in_millis":1514160000000}}

  

11.  修改license字段:

  

"type":"platinum"

  

"expiry_date_in_millis":2524579200999

  

12.  更新license

  

#curl -XPUT -u  elastic:changeme 'http://127.0.0.1:9200/_xpack/license?acknowledge=true' -H  "Content-Type: application/json" -d @license.json

  

{"acknowledged":true,"license_status":"invalid"}

  

13.  确认是否OK

  

#curl -XPUT -u elastic:******  http://127.0.0.1:9200/_xpack/license?v

  

{

  

  "license": {

  

    "status": "active",

  

    "uid":  "c127f207-c8f6-4d71-8b89-21f350f7d284",

  

    "type": "platinum",

  

     "issue_date": "2017-12-25T00:00:00.000Z",

  

    "issue_date_in_millis":  1514160000000,

  

    "expiry_date": "2049-12-31T16:00:00.999Z",

  

    "expiry_date_in_millis": 2524579200999,

  

    "max_nodes": 100,

  

    "issued_to": "Maoshu Ran  (Pingan)",

  

    "issuer": "Web Form",

  

    "start_date_in_millis":  1514160000000

  

  }

  

}

  

备注: 破解步骤前期1----9 已经完成,生产的jar包位置:

http://http://mirrors-ph.paic.com.cn//repo/elk/conf/x-pack-6.0.0.jar


copy到elasticsearch,重启服务,更新license即可

猜你喜欢

转载自blog.51cto.com/12768454/2104935