blueice 发表于 2019-1-28 12:36:34

日志分析平台

  目录
  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三个开源工具组成。
  lElasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  lLogstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
  lkibana 也是一个开源和免费的工具,他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 4567elk
  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 root@192.168.0.1
  # groupadd elk
  # useradd elastic –b /wls/ -G elk
  # echo ****** |passwd elastic --stdin
  更改用户 elastic的密码。
  passwd: 所有的身份验证令牌已经成功更新。
  重复以上动作,在所有主机添加用户。
  2.    切换用户。
  # su - elastic
  3.    JDK安装
  下载并上传jdk包至服务器。因为数据包过大,请使用跳板机上传。此处省略过程。
  # 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路径
  $ cd /var/soft
  $ tar –zxvf jdk1.8.0_131.tar.gz
  $ vim ~/.bash_profile                  #修改PATH路径,并设置开机运行
  JAVA_HOME=/wls/elk/jdk1.8.0_131
  PATH=$JAVA_HOME/binhttp://aodi.paic.com.cn/static/image/smiley/default/shy.gifPATH
  $ source ~/.bash_profile
  $ java –version                              #确认Java版本是否可用
  java version"1.8.0_131"
  Java(TM) SERuntime Environment (build 1.8.0_131-b11)
  Java HotSpot(TM)64-Bit Server VM (build 25.131-b11, mixed mode)
  $ which java                                             #确认是否为Java 路径
  /wls/elk/jdk1.8.0_131/bin/java
  $
  2.3. ElasticSearch
  ElasticSearch只依赖JAVA,直接解压,修改配置就好。
  ES有很多可用插件,但是离线真的很难安装,直接放弃,对于我们这种专业的运维,直接使用curl操作。
  1.    上传解压
  $ wget -O /var/soft/elasticsearch-6.0.0.tar.gzhttp://http://mirrors-ph.paic.com.cn//repo/elk/elasticsearch-6.0.0.tar.gz
  $ cd /var/soft
  $ tar -zxvf tools/elasticsearch-6.0.0.tar.gz
  2.    修改配置
  可以参考配置文件:
  http://http://mirrors-ph.paic.com.cn//repo/elk/conf/elasticsearch.yml
  查看系统配置,存储数据地址:
  创建文件位置
  #df -Th
  /dev/mapper/VolGroup1-LVdata1xfs       500G   33M   500G    1% /mnt/data2
  /dev/mapper/VolGroup2-LVdata2xfs       500G   33M   500G    1% /mnt/data1
  #mkdir /mnt/data{1..2}/elasticsearch/data –p
  #mkdir /mnt/data1/elasticsearch/logs –p
  #chown elastic:elk /mnt/data* -R
  修改配置:
  #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 配置根据机器配置修改:
  #cat config/jvm.options
  -Xms28g
  -Xmx28g
  3.    启动验证
  # bin/elasticsearch
   bound or publishing to a non-loopback or non-link-local address, enforcingbootstrap checks
  ERROR: bootstrap checks failed
  : max virtualmemory areas vm.max_map_count is too low, increase to at least
  此报错使用root修改vm.max_map_count
  # sysctl -w vm.max_map_count=20000000
  vm.max_map_count= 20000000
  再次启动
  # bin/elasticsearch –d
   initializing ...
   using data paths, mounts [], net usable_space , nettotal_space , types
   heap size , compressed ordinary object pointers
   node name , node ID
   version, pid, build,OS, JVM
   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]
   loaded module
   loaded module
   loaded module
   loaded module
   loaded module
   loaded module
   loaded module
   loaded module
   loaded module
   loaded module
   loaded module
   loaded module
   loaded plugin
  验证:
  # 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
  # wget http://http://mirrors-ph.paic.com.cn//repo/elk/x-pack-6.0.0.zip
  # bin/elasticsearch-plugin installfile:///var/soft/elasticsearch-6.0.0/x-pack-6.0.0.zip
  -> Downloadingfile:///var/soft/elasticsearch-6.0.0/x-pack-6.0.0.zip
  [=================================================]100%聽聽
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  @   WARNING: plugin requires additionalpermissions   @
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  *java.io.FilePermission \\.\pipe\* read,write
  *java.lang.RuntimePermissionaccessClassInPackage.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
  Seehttp://docs.oracle.com/javase/8/ ... ty/permissions.html
  for descriptionsof what these permissions allow and the associated risks.

  Continue withinstallation? y
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  @      WARNING: plugin forks a nativecontroller      @
  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  This pluginlaunches a native controller that is not subject to the Java
  security managernor to system call filters.

  Continue withinstallation? y
  5.    生成认证秘钥
  $ bin/x-pack/certgen
  Please enter thedesired output file : ph-elk
  Enter instancename: es-node01
  Enter name fordirectories and files :
  Enter IPAddresses for instance (comma-separated if more than one) []: 192.168.0.1
  6.    解压秘钥
  $ mkdir certs
  $ cd 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.    密码初始化
  #cd bin/x-pack
  $ ./setup-passwords interactive
  Initiating thesetup of reserved user elastic,kibana,logstash_system passwords.
  You will beprompted to enter passwords as the process progresses.
  Please confirmthat you would like to continue y
  Enter passwordfor :
  Reenter passwordfor :
  Enter passwordfor :
  Reenter passwordfor :
  Enter passwordfor :
  Reenter passwordfor :
  Changed passwordfor user
  Changed passwordfor user
  Changed passwordfor user
  $
  重启验证。恭喜恭喜
  $ curl -u elastic http://127.0.0.1:9200?pretty
  Enter hostpassword 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, forSearch"
  }
  2.4. Kibana
  Kibana 安装依赖java,下载安装即可。
  # 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-2913: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)
  正在保存至: “/var/soft/kibana-6.0.0-linux-x86_64.tar.gz”

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

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

  #
  解压
  # cd /var/soft/
  # tar zxv kibana-6.0.0-linux-x86_64.tar.gz
  修改配置
  # 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"
  启动验证
  # 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 -mshell -a 'wget -O /var/soft/jdk1.8.0_131.tar.gzhttp://http://mirrors-ph.paic.com.cn//repo/elk/jdk1.8.0_131.tar.gz'
  ansible kafka -mshell -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.gzhttp://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 -mshell -a 'cd /var/soft; tar xf zookeeper-3.4.6.tar.gz'
  ansible kafka -mshell -a 'cd /var/soft; tar zxf kafka_2.11-0.10.2.1.tar.gz'
  修改配置:
  # 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统一分发(方便)。
  # ansible kafka -m copy -a"src=/var/soft/zookeeper-3.4.6/conf/zoo.cfgdest=/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
  }
  修改权限
  # ansible kafka -m shell -a 'chown kafka:elk/var/soft'
  : Consider using file module withowner 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 >>
  # ansible kafka -m shell -a 'chown kafka:elk /mnt/data* -R '
  启动查看
  # ansible kafka -m shell -u kafka -a'/var/soft/zookeeper-3.4.6/bin/zkServer.sh start '
  # ansible kafka -m shell -u kafka -a'/var/soft/zookeeper-3.4.6/bin/zkServer.sh status'
  如下报错:
  $ cat zookeeper.out
  2018-04-0311:19:53,751 - INFO   http://aodi.paic.com.cn/static/image/smiley/default/mad.gifuorumPeerConfig@103] - Reading configuration from:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  2018-04-0311:19:53,760 - INFO   http://aodi.paic.com.cn/static/image/smiley/default/mad.gifuorumPeerConfig@340] - Defaulting to majority quorums
  2018-04-0311:19:53,763 - ERROR http://aodi.paic.com.cn/static/image/smiley/default/mad.gifuorumPeerMain@85] - Invalid config,exiting abnormally
  org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException:Error processing /var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  atorg.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:123)
  atorg.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101)
  atorg.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
  Caused by:java.lang.IllegalArgumentException: /mnt/data1/zookeeper/data/myid file is missing
  atorg.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:350)
  atorg.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即可。
  # ansible kafka -m shell -u kafka -a'/var/soft/zookeeper-3.4.6/bin/zkServer.sh restart '
  # 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 bydefault
  Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  kafka-node4 |SUCCESS | rc=0 >>
  Mode: followerJMX enabled bydefault
  Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  kafka-node3 |SUCCESS | rc=0 >>
  Mode: followerJMX enabled bydefault
  Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  kafka-node2 |SUCCESS | rc=0 >>
  Mode: followerJMX enabled bydefault
  Using config:/var/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  kafka-node1 |SUCCESS | rc=0 >>
  Mode: followerJMX enabled bydefault
  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
  
  解压,修改配置文档:
  以下标记部分配置每台不同
  # 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监控功能。
  # vim bin/kafka-server-start.sh
  if ["x$KAFKA_HEAP_OPTS" = "x" ]; then
  export KAFKA_HEAP_OPTS="-Xmx24G-Xms24G"
  export JMX_PORT="9999"
  
  同步配置到其他机器:记得修改上面×××部分配置。
  # ansible kafka -m copy -a"src=/var/soft/kafka_2.11-0.10.2.1/config/server.propertiesdest=/var/soft/kafka_2.11-0.10.2.1/config/ owner=kafka group=elk"
  # ansible kafka -m copy -a"src=/var/soft/kafka_2.11-0.10.2.1/bin/kafka-server-start.shdest=/var/soft/kafka_2.11-0.10.2.1/bin/ owner=kafka group=elk"
  
启动查看:
  # 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-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-node1var]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-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-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 ConsoleConsumerwith old consumer is deprecated and will be removed in a future majorrelease. Consider using the new consumer by passing instead of .
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 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.shkafka.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:20171212bash

  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]# #cdelasticsearch

  elasticsearch]# filex-pack-6.0.0.jar
  x-pack-6.0.0.jar:Zip archive data, at least v1.0 to extract
  elasticsearch]# mkdirx-pack-6.0.0
  elasticsearch]#cdx-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/
  #vimLicenseVerifier.java    #别人已经反编译成功,拿来用就可以。
  packageorg.elasticsearch.license;
  public class LicenseVerifier
  {
  public static boolean verifyLicense(finalLicense license, final byte[] encryptedPublicKeyData) {
  return true;
  }
  public static boolean verifyLicense(finalLicense 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 -uelastic:******* 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":"MaoshuRan (Pingan)","issuer":"WebForm","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 -uelastic: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即可



页: [1]
查看完整版本: 日志分析平台