Storm实时日志分析实战

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Storm实时日志分析实战相关的知识,希望对你有一定的参考价值。

项目背景

最近公司做一个项目,用户需要对网站访问者的广告点击/浏览记录进行实时统计分析,分析结果存入数据库,输出报表。我们采用了Kafka+Storm+Zookeeper的解决方案。之前没有接触过,经过一段时间的研究,最终完成了项目。接下来的内容我将介绍我们的解决方案。供大家参考。我们的系统结构如下:

技术分享

总体结构介绍

业务系统把点击/浏览广告业务日志统一按规定的格式发送到Kafka集群中,不同的业务日志可以分别发送给Kafka不同的主题。Storm集群中运行了我们的实时统计拓扑,该统计拓扑分别从Kafka的不同主题中获取广告业务日志并进行实时统计汇总,最后把汇总的报表结果写入报表数据库,供报表系统进行报表展示。在Kafka集群与Storm集群运行过程中,需要通过Zookeeper集群进行协调与集群状态维护。例如Kafka集群中的每个分片的状态,Storm集群中存在哪些有效节点。日志统计分析的状态等。Kafka集群、Storm集群、Zookeeper集群分别采用3台服务器。

 

环境准备

为了保证集群的稳定,要求Zookeeper集群、Kafka集群、Storm集群分别部署在不同的主机上,集群之间不要公用主机。每个集群采用单数个机器。推荐Zookeeper集群、Kafka集群、Storm集群分别采用3台独立的机器。本文档的配置环境如下,操作系统为redhat 5.5:

环境表:

 

ip 主机名 软件
192.168.1.101 Zookeeper101 zookeeper-3.4.6.tar.gz,supervisord
192.168.1.102 Zookeeper102 zookeeper-3.4.6.tar.gz,supervisord
192.168.1.103 Zookeeper103 zookeeper-3.4.6.tar.gz,supervisord
192.168.1.104 Kafka104 kafka_2.9.2-0.8.1.tgz,supervisord
192.168.1.105 Kafka105 kafka_2.9.2-0.8.1.tgz,supervisord
192.168.1.106 Kafka106 kafka_2.9.2-0.8.1.tgz,supervisord
192.168.1.107 Storm107 apache-storm-0.9.1-incubating.tar.gz,supervisord
192.168.1.108 Storm108 apache-storm-0.9.1-incubating.tar.gz,supervisord
192.168.1.109 Storm109 apache-storm-0.9.1-incubating.tar.gz,supervisord

 

 

Java环境

请在每个机器上部署好Java环境,推荐1.6的JDK。

修改主机名

为了保证部署的顺利,请务必修改每一台主机的主机名(参考上面的"环境表"),这样会避免很多莫名其妙的问题,修改方式如下:

 

[html] view plain copy
 
  1. [[email protected] ~]# vi /etc/sysconfig/network  
  2. NETWORKING=yes  
  3. NETWORKING_IPV6=no  
  4. HOSTNAME=Zookeeper101  

修改之后请保存,并重新启动机器。使用如下命令查看是否修改成功:

 

 

[html] view plain copy
 
  1. [[email protected] ~]# hostname  
  2. Zookeeper101  

 

 

修改hosts

为了保证各个主机之间可以通过主机名进行访问,需要修改每一台主机的hosts文件,修改方式如下:

 

[html] view plain copy
 
  1. [[email protected] ~]# vi /etc/hosts  
  2.   
  3. # Do not remove the following line, or various programs  
  4. # that require network functionality will fail.  
  5.   
  6. 127.0.0.1       localhost.localdomain localhost  
  7. 192.168.1.101   Zookeeper101  
  8. 192.168.1.102   Zookeeper101  
  9. 192.168.1.103   Zookeeper101  
  10. 192.168.1.104   kafka104  
  11. 192.168.1.105   kafka105  
  12. 192.168.1.106   kafka106  
  13. 192.168.1.107   Storm107  
  14. 192.168.1.108   Storm108  
  15. 192.168.1.109   Storm109  



 

部署Zookeeper

 

部署

解压Zookeeper-3.4.6.tar.gz软件包到主机Zookeeper101,Zookeeper102,Zookeeper103的某个目录下,如:/root/v300r003b01,解压后得到文件夹"Zookeeper-3.4.6"。修改"/root/v300r003b01/Zookeeper-3.4.6/conf/zoo.cfg"配置文件。如下:

 

[html] view plain copy
 
  1. # The number of milliseconds of each tick  
  2.   
  3. tickTime=2000  
  4.   
  5. # The number of ticks that the initial  
  6.   
  7. # synchronization phase can take  
  8.   
  9. initLimit=20  
  10.   
  11. # The number of ticks that can pass between  
  12.   
  13. # sending a request and getting an acknowledgement  
  14.   
  15. syncLimit=10  
  16.   
  17. # the directory where the snapshot is stored.  
  18.   
  19. # do not use /tmp for storage, /tmp here is just  
  20.   
  21. # example sakes.  
  22.   
  23. dataDir=/root/v300r003b01/zookeeper-3.4.6/data  
  24.   
  25. # the port at which the clients will connect  
  26.   
  27. clientPort=2181  
  28.   
  29. # the maximum number of client connections.  
  30.   
  31. # increase this if you need to handle more clients  
  32.   
  33. #maxClientCnxns=60  
  34.   
  35. #  
  36.   
  37. # Be sure to read the maintenance section of the  
  38.   
  39. # administrator guide before turning on autopurge.  
  40.   
  41. #  
  42.   
  43. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance  
  44.   
  45. #  
  46.   
  47. # The number of snapshots to retain in dataDir  
  48.   
  49. #autopurge.snapRetainCount=3  
  50.   
  51. # Purge task interval in hours  
  52.   
  53. # Set to "0" to disable auto purge feature  
  54.   
  55. #autopurge.purgeInterval=1  
  56.   
  57. server.1=Zookeeper101:2888:3888  
  58.   
  59. server.2=Zookeeper102:2888:3888  
  60.   
  61. server.3=Zookeeper103:2888:3888  

参数说明:

 

dataDir:指定Zookeeper在哪里保存集群状态。

server.*=xxxx:配置为Zookeeper集群中的每个主机。1、2、3等为Zookeeper主机的唯一ID。我们需要在每台Zookeeper主机的dataDir目录中新建一个名为myid(如:/root/v300r003b01/zookeeper-3.4.6/data/myid)的文件,里面写上该Zookeeper主机的ID,如Zookeeper101的myid文件中为1,Zookeeper102的myid文件中为2,Zookeeper103的myid文件中为3.

注意:

请把该配置文件(/root/v300r003b01/zookeeper-3.4.6/conf/zoo.cfg)复制到每台Zookeeper主机的相同目录下。dataDir不要配置到/tmp目录中,因为这个目录在重启后可能会发生错误。如果各个Zookeeper主机的dataDir不存在,请创建一个。

 

基本操作

启动Zookeeper

 

[html] view plain copy
 
  1. [[email protected] bin]# /root/v300r003b01/zookeeper-3.4.6/bin/zkServer.sh start  
  2.   
  3. JMX enabled by default  
  4.   
  5. Using config: /root/v300r003b01/zookeeper-3.4.6/bin/../conf/zoo.cfg  
  6.   
  7. Starting zookeeper … STARTED  


查看Zookeeper状态

 

 

[html] view plain copy
 
  1. [[email protected] bin]# /root/v300r003b01/zookeeper-3.4.6/bin/zkServer.sh status  

注:按照这种配置,正常输出应该有两个Zookeeper主机为“fowller”,一个Zookeeper主机为"leader"


 

停止Zookeeper

请直接使用kill -9命令杀掉进程。

 

部署Kafka

 

部署

解压"Kafka_2.9.2-0.8.1.tgz"到kafka集群中的每台主机的某个目录下(如:/root/v300r003b01),解压后得到文件夹"Kafka_2.9.2-0.8.1"

分别修改集群中每台Kafka主机的Kafka配置文件(/root/v300r003b01/kafka_2.9.2-0.8.1/config/server.properties),配置项修改如下:

 

配置项名 参考值 说明
broker.id 104 每台kafka主机的唯一ID,如:104、105、106
host.name Kafka104 如:Kafka104、Kafka105、Kafka106
log.dirs /root/v300r003b01/kafka_2.9.2-0.8.1/kafka-logs Kafka保存数据的目录,不要配置到/tmp目录下
num.partitions 2 每个主题的分片个数,配置为2即可
zookeeper.connect zookeeper101:2181,zookeeper102:2181,zookeeper103:2181 Zookeeper连接串,多个zookeeper主机之间以逗号分隔,kafka需要通过zookeeper进行状态协调

 

 

基本操作

启动Kafka集群

分别在每个Kafka主机上运行如下命令:

 

[html] view plain copy
 
  1. [[email protected] bin]# /root/v300r003b01/kafka_2.9.2-0.8.1/bin/kafka-server-start.sh /root/v300r003b01/kafka_2.9.2-0.8.1/config/server.properties  


创建Kafka主题

 

在Kafka集群中国的任何一台主机运行如下命令:

 

[html] view plain copy
 
  1. [[email protected] bin]# /root/v300r003b01/kafka_2.9.2-0.8.1/bin/kafka-topics.sh –zookeeper Zookeeper101:2181,Zookeeper102:2181,Zookeeper103:2181 –replication-factor 2 –partitions 3  –create –topic vas  

参数说明如下:

 

 

参数名 参考值 说明
–zookeeper Zookeeper101:2181,Zookeeper102:2181,Zookeeper103:2181 Zookeeper连接串,多个zookeeper主机之间以逗号分隔
–replication-factor 2 数据的副本个数,2个即可
–partitions 3 主题分片个数,3即可
–create –topic  test_topic 主题名字,如vas、vod

 

 

查看Kafka集群状态

在Kafka集群中的任何一台主机运行如下命令:

 

[html] view plain copy
 
  1. [[email protected] bin]# /root/v300r003b01/kafka_2.9.2-0.8.1/bin/kafka-topics.sh –zookeeper Zookeeper101:2181,Zookeeper102:2181,Zookeeper103:2181 –describe  

 

输出如下:

技术分享

该输出为test_topic主题的细节信息。解释如下:

红圈从左到右分别编号:1,2,3,4。

1号红圈说明了test_topic有3个分片,分片id为0,1,2

2号红圈说明了每个分片的leader(领导)broker id,这里都为1号broker,我们配置Kafka的时候配置了broker.id,这个配置项制定了每个Kafka broker的id。

3号红圈说明了每个分片的副本个数及其说在的broker的broker id。可以看出每个分片都有3个副本,需要分别存放到broker id为1、2、3的主机上。

4号红圈说明了该分片当前处于可用状态的broker的broker id。正常应该与3号红圈中的一致。

 

Kafka测试工具

Kafka集群部署好之后,在Kafka的安装目录下有工具可以对Kafka进行测试。

启动Kafka消息生产者发送消息

 

[html] view plain copy
 
  1. [[email protected] bin]# /root/v300r003b01/kafka_2.9.2-0.8.1/bin/kafka-console-producer.sh –broker-list Kafka104:9092,Kafka105:9092,Kafka106:9092 –topic test_topic  

输入任何字符回车即可向Kafka发送消息。

 

 

启动Kafka消息消费者接收消息

 

[html] view plain copy
 
  1. [[email protected] bin]# /root/v300r003b01/kafka_2.9.2-0.8.1/bin/kafka-console-consumer.sh –zookeeper Zookeeper101:2181,Zookeeper102:2181,Zookeeper103:2181 –from-beginning –topic test_topic  



停止Kafka

 

请直接使用kill命令杀掉进程。

 

部署Storm

部署

解压“apache-storm-0.9.1-incubating.tar.gz”到Storm集群中的每台主的某个目录下(如:/root/v300r003b01),解压后得到文件夹”apache-storm-0.9.1-incubating”。
分别修改集群中每台Storm主机的配置文件(/root/v300r003b01/apache-storm-0.9.1-incubating/conf/storm.yaml),配置项修改如下:

 

[html] view plain copy
 
  1. # Licensed to the Apache Software Foundation (ASF) under one  
  2.   
  3. # or more contributor license agreements.  See the NOTICE file  
  4.   
  5. # distributed with this work for additional information  
  6.   
  7. # regarding copyright ownership.  The ASF licenses this file  
  8.   
  9. # to you under the Apache License, Version 2.0 (the  
  10.   
  11. # "License"); you may not use this file except in compliance  
  12.   
  13. # with the License.  You may obtain a copy of the License at  
  14.   
  15. #  
  16.   
  17. # http://www.apache.org/licenses/LICENSE-2.0  
  18.   
  19. #  
  20.   
  21. # Unless required by applicable law or agreed to in writing, software  
  22.   
  23. # distributed under the License is distributed on an "AS IS" BASIS,  
  24.   
  25. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  26.   
  27. # See the License for the specific language governing permissions and  
  28.   
  29. # limitations under the License.  
  30.   
  31.   
  32. ########### These MUST be filled in for a storm configuration  
  33.   
  34. storm.zookeeper.servers:  
  35.   
  36. - "Zookeeper101"  
  37.   
  38. - "Zookeeper102"  
  39.   
  40. - "Zookeeper103"  
  41.   
  42.   
  43.   
  44. storm.local.dir: "/root/v300r003b01/apache-storm-0.9.1-incubating/local"  
  45.   
  46.   
  47.   
  48. #  
  49.   
  50. nimbus.host: "Storm107"  
  51.   
  52. #  
  53.   
  54. #  
  55.   
  56. # ##### These may optionally be filled in:  
  57.   
  58. #  
  59.   
  60. ## List of custom serializations  
  61.   
  62. # topology.kryo.register:  
  63.   
  64. #     - org.mycompany.MyType  
  65.   
  66. #     - org.mycompany.MyType2: org.mycompany.MyType2Serializer  
  67.   
  68. #  
  69.   
  70. ## List of custom kryo decorators  
  71.   
  72. # topology.kryo.decorators:  
  73.   
  74. #     - org.mycompany.MyDecorator  
  75.   
  76. #  
  77.   
  78. ## Locations of the drpc servers  
  79.   
  80. # drpc.servers:  
  81.   
  82. #     - "server1"  
  83.   
  84. #     - "server2"  
  85.   
  86.   
  87.   
  88. ## Metrics Consumers  
  89.   
  90. # topology.metrics.consumer.register:  
  91.   
  92. #   - class: "backtype.storm.metrics.LoggingMetricsConsumer"  
  93.   
  94. #     parallelism.hint: 1  
  95.   
  96. #   - class: "org.mycompany.MyMetricsConsumer"  
  97.   
  98. #     parallelism.hint: 1  
  99.   
  100. #     argument:  
  101.   
  102. #       - endpoint: "metrics-collector.mycompany.org"  
  103.   
  104.   
  105.   
  106. storm.messaging.transport: "backtype.storm.messaging.netty.Context"  
  107.   
  108. storm.messaging.netty.server_worker_threads: 1  
  109.   
  110. storm.messaging.netty.client_worker_threads: 1  
  111.   
  112. storm.messaging.netty.max_retries: 1000  
  113.   
  114. storm.messaging.netty.max_wait_ms: 1000  
  115.   
  116. storm.messaging.netty.min_wait_ms: 100  
  117.   
  118.   
  119. supervisor.slots.ports:  
  120.   
  121. - 6700  
  122.   
  123. - 6701  
  124.   
  125. - 6702  
  126.   
  127. - 6703  

storm.zookeeper.servers:配置zookeeper连接串,storm需要zookeeper协调集群状态。
storm.local.dir: 配置storm的数据保存目录,没有就创建一个,注意不要配置为/tmp目录。
nimbus.host:配置storm集群的主机,该主机负责提交实时统计代码及实时计算任务的分配。
supervisor.slots.ports:配置该主机可以启动多少个worker。Worker越多,实时运算集群给该主机分配的任务越多,一般配置为cpu核的个数即可。数字为worker的端口号。



 

基本操作

 

启动Storm的nimbus进程

在nimbus主机上(Storm107)运行如下命令,启动nimbus:

 

[html] view plain copy
 
  1. [[email protected] bin]#/root/v300r003b01/apache-storm-0.9.1-incubating/bin/storm nimbus  


启动Storm的UI进程

 

 

[html] view plain copy
 
  1. [[email protected] bin]#/root/v300r003b01/apache-storm-0.9.1-incubating/bin/storm ui  

 

 

启动Storm的Supervisor进程

在nimbus主机上(Storm107)运行如下命令,启动nimbus:

 

[html] view plain copy
 
  1. [[email protected] bin]#/root/v300r003b01/apache-storm-0.9.1-incubating/bin/storm supervisor  


提交实时统计代码到Storm集群

 

向配置人员获取adp_topology-1.0-jar-with-dependenciees.jar实时统计软件包,上传到nimbus进程所在主机上,使用如下命令提交实时统计代码:

 

[html] view plain copy
 
  1. [[email protected] bin]#/root/v300r003b01/apache-storm-0.9.1-incubating/bin/storm jar  /root/adp_topology-1.0-jar-with-dependencies.jar statistic.topology.StatisticTopology my_topology Zookeeper101:2181,Zookeeper102:2181,Zookeeper103:2181 172.16.135.210 root coship vas_topic vod_topic remote  

上面空格分开的蓝色部分需要根据情况进行修改,解释如下:

 /root/adp_topology-1.0-jar-with-dependencies.jar:请配置对路径

 


my_topology:本次提交的实时统计包名字,一般保持一致


Zookeeper101:2181,Zookeeper102:2181,Zookeeper103:2181:zookeeper连接串,实时统计代码需要zookeeper维护状态信息。


172.16.135.210:OAS数据库主机IP


 Root:OAS数据库用户名


Coship:OAS数据库密码


vas_topic:vas点击/浏览业务日志存放的主题名称

vod_topic:vod点击/浏览业务日志存放的主题名称

Remote:以分布式运行模式提交,如果是local则以本机运行模式提交。仅供测试时使用


查看Storm集群状态

浏览器打开Storm UI所在的服务器(http://192.168.1.107:8080),显示Storm集群及实时统计代码的运行状态如下:




图中蓝色圈从上到下分别编号为:1、2、3

1号圈解释

 

字段名 说明
version Storm的版本
Nimbus uptime 集群上线运行时间
supervisors 集群中supervisor进程的个数,我们使用…./storm spervisor启动的。
Used slots 集群中被使用的slots个数。
Free slots 集群中空闲的slots个数
Total slots 集群中总的slots个数,我们在storm.yaml文件的supervisor.slots.ports配置项指定了每一台的slots个数。
executors 这个可以说是线程数,可以不管

 

可见1号圈主要描述的是整个Storm集群的状态。

 

2号圈解释

 

字段名 说明
name 实时统计拓扑的名字,我们的实时统计拓扑会有两个,vod和vas的。
id 实时统计拓扑的storm内部Id
status 实时统计拓扑的状态,正常应该是Active
uptime 实时统计拓扑的上线运行时间。
Num works 实时统计拓扑使用的works个数,可以认为works个数与slots个数相等
Num executors

 

可见2号圈主要描述了Storm集群中运行的拓扑的状态,一个集群可以运行多个拓扑,处理vod、vas实时统计拓扑以外,如果需要,也可以运行其他的拓扑。

 

3号圈解释

 

字段名 说明
id 实时统计拓扑的名字,我们的实时统计拓扑会有两个,vod和vas的。
Host 实时统计拓扑的storm内部Id
status 实时统计拓扑的状态,正常应该是Active
uptime 实时统计拓扑的上线运行时间。
Num works 实时统计拓扑使用的works个数,可以认为works个数与slots个数相等
Num executors 实时统计拓扑使用的线程数
 

 

 

停止实时统计代码的执行

如果要停止某个拓扑的执行,可以执行如下命令:

 

[html] view plain copy
 
  1. [[email protected] bin]#/root/v300r003b01/apache-storm-0.9.1-incubating/bin/storm kill my_topology_vas  

my_topology_vas:要停止的拓扑的名字,参考Storm UI页面中看到的拓扑的名称。

 

 

停止Storm进程

直接使用kill命令结束进程即可。

 

守护模式部署

在生产环境下,我们不应该手动启动或停止Zookeeper、Kafka、Storm等进程,这些集群在设置上已经保证了集群中的某台主机出现故障时,不会影响功能。但一个集群中同时多台主机出现故障时,则会有问题。所以我们需要部署守护进程,当某个进程异常退出时,守护进程会自动重新启动该进程。当某台主机重启时,相应的进程也会自动重启。

我们采用Supervisor作为我们的守护进程,下面描述了该如何部署Supervisor并配置其监控我们集群中的服务。

 

安装软件

首先安装软件包:Python-meld3-0.6.3-1.el5.x86_64.rpm,然后再安装软件包:Supervisor-2.1-3.el5.noarch.rpm。注意Zookeeper集群、Kafka集群、Storm集群的每一台机器都需要安装。

 

配置监控Zookeeper

如果Zookeeper进程已经手动启动,请首先把Zookeeper进程kill掉。

我们需要到Zookeeper集群中的每台主机上,运行如下命令:

 

[html] view plain copy
 
  1. [[email protected] jre-1.6.0-openjdk]# which java  
  2. /usr/bin/java  
  3. [[email protected] jre-1.6.0-openjdk]# echo $PATH  
  4. /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin  


确保java程序所在的路径在PATH环境变量中。

 


修改/root/v300r003b01/zookeeper-3.4.6/bin/zkServer.sh文件,如下:

 

[html] view plain copy
 
  1. #!/usr/bin/env bash  
  2.   
  3. export PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin  
  4.   
  5. # Licensed to the Apache Software Foundation (ASF) under one or more  
  6. # contributor license agreements.  See the NOTICE file distributed with  
  7. # this work for additional information regarding copyright ownership.  
  8. # The ASF licenses this file to You under the Apache License, Version 2.0  
  9. # (the "License"); you may not use this file except in compliance with  
  10. # the License.  You may obtain a copy of the License at  
  11. #  
  12. #     http://www.apache.org/licenses/LICENSE-2.0  
  13. #  
  14. # Unless required by applicable law or agreed to in writing, software  
  15. # distributed under the License is distributed on an "AS IS" BASIS,  
  16. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  17. # See the License for the specific language governing permissions and  
  18. # limitations under the License.  
  19.   
  20. #  
  21. # If this scripted is run out of /usr/bin or some other system bin directory  
  22. # it should be linked to and not copied. Things like java jar files are found  
  23. # relative to the canonical path of this script.  
  24. #  
  25.   
  26. # See the following page for extensive details on setting  
  27. # up the JVM to accept JMX remote management:  
  28. # http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html  
  29. # by default we allow local JMX connections  
  30. if [ "x$JMXLOCALONLY" = "x" ]  
  31. then  
  32.     JMXLOCALONLY=false  
  33. fi  
  34.   
  35. if [ "x$JMXDISABLE" = "x" ]  
  36. then  

把其中的PATH值与我们echo $PATH的值保持一致。注意可能不是每一台主机都一样,请对每一台主机单独设置。

 

在Zookeeper集群的主机上,修改Supervisor的配置文件[[email protected] bin]#vim /etc/supervisord.conf,在最后面增加如下,注意根据环境修改:

 

[html] view plain copy
 
  1. [program:zookeeper]  
  2.   
  3. ;command=          ; the program (relative uses PATH, can take args)  
  4.   
  5. command=/root/v300r003b01/zookeeper-3.4.6/bin/zkServer.sh start-foreground  
  6.   
  7. ;priority=                ; the relative start priority (default 999)  
  8.   
  9. ;autostart=true              ; start at supervisord start (default: true)  
  10.   
  11. ;autorestart=true            ; retstart at unexpected quit (default: true)  
  12.   
  13. ;startsecs=10                ; number of secs prog must stay running (def. 10)  
  14.   
  15. ;startretries=3              ; max # of serial start failures (default 3)  
  16.   
  17. ;exitcodes=0,2               ; ‘expected‘ exit codes for process (default 0,2)  
  18.   
  19. ;stopsignal=KILL             ; signal used to kill process (default TERM)  
  20.   
  21. ;stopwaitsecs=10             ; max num secs to wait before SIGKILL (default 10)  
  22.   
  23. ;user=root                 ; setuid to this UNIX account to run the program  
  24.   
  25. ;log_stdout=true             ; if true, log program stdout (default true)  
  26.   
  27. ;log_stderr=true             ; if true, log program stderr (def false)  
  28.   
  29. logfile=/var/log/supervisord-zookeeper.log    ; child log path, use NONE for none; default AUTO  
  30.   
  31. ;logfile_maxbytes=1MB        ; max # logfile bytes b4 rotation (default 50MB)  
  32.   
  33. ;logfile_backups=10          ; # of logfile backups (default 10)  


执行如下命令,启动Supervisord服务:

 

 

[html] view plain copy
 
  1. [[email protected] ~]# service supervisord start  

查看Zookeeper进程是否自动启动,记住Zookeeper进程id

 

 

[html] view plain copy
 
  1. [[email protected] ~]# ps -ef | grep zoo  

重新启动Supervisor服务

 

 

[html] view plain copy
 
  1. [[email protected] ~]# service supervisord restart  

查看Zookeeper进程是否再次启动,本次的进程id应该与上次的不一样

 

 

[html] view plain copy
 
  1. [[email protected] ~]# ps -ef | grep zoo  

最后配置Supervisor开机自动启动

 

 

[html] view plain copy
 
  1. [[email protected] ~]# chkconfig –level  345 supervisord on  

重启服务器测试是否开机自动启动了Zookeeper进程

 

 

配置监控Kafka

如果Kafka进程已经手动启动,请首先把Kafka进程kill掉。

我们需要到Kafka集群中的每台主机上,运行如下命令:

 

[html] view plain copy
 
  1.  [[email protected] jre-1.6.0-openjdk]# which java  
  2. /usr/bin/java  
  3. [[email protected] jre-1.6.0-openjdk]# echo $PATH  
  4. /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin  

确保java程序所在路径在PATH环境变量中。

修改/root/v300r003b01/kafka_2.9.2-0.8.1/bin/kafka-server-start.sh文件,如下:

[html] view plain copy
 
  1. #!/bin/bash  
  2. # Licensed to the Apache Software Foundation (ASF) under one or more  
  3. # contributor license agreements.  See the NOTICE file distributed with  
  4. # this work for additional information regarding copyright ownership.  
  5. # The ASF licenses this file to You under the Apache License, Version 2.0  
  6. # (the "License"); you may not use this file except in compliance with  
  7. # the License.  You may obtain a copy of the License at  
  8. #  
  9. #    http://www.apache.org/licenses/LICENSE-2.0  
  10. #  
  11. # Unless required by applicable law or agreed to in writing, software  
  12. # distributed under the License is distributed on an "AS IS" BASIS,  
  13. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  14. # See the License for the specific language governing permissions and  
  15. # limitations under the License.  
  16. export PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin  
  17.   
  18. if [ $# -lt 1 ];  
  19. then  
  20.         echo "USAGE: $0 [-daemon] server.properties"  
  21.         exit 1  
  22. fi  
  23. base_dir=$(dirname $0)  
  24. export KAFKA_LOG4J_OPTS="-Dlog4j.configuration=file:$base_dir/../config/log4j.properties"  
  25. export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"  
  26.   
  27. EXTRA_ARGS="-name kafkaServer -loggc"  

把其中的PATH值与我们echo $PATH的值保持一致。注意可能不是每一台主机都一样,请对每台主机单独设置。

在kafka集群的主机上,修改supervisor的配置文件[[email protected] bin]# vi /etc/supervisord.conf,最后面增加如下,注意根据环境修改:

[html] view plain copy
 
  1. [program:kafka]  
  2.   
  3. ;command=          ; the program (relative uses PATH, can take args)  
  4.   
  5. command=/root/v300r003b01/kafka_2.9.2-0.8.1/bin/kafka-server-start.sh /root/v300r003b01/kafka_2.9.2-0.8.1/config/server.properties  
  6.   
  7. ;priority=                ; the relative start priority (default 999)  

以上是关于Storm实时日志分析实战的主要内容,如果未能解决你的问题,请参考以下文章

巧妙拆分bolt提升Storm集群吞吐量 增加并行处理速度 Storm & kafka处理实时日志实战topology经验谈

flume + kafka + sparkStreaming + HDFS 构建实时日志分析系统

猎聘网架构中间件负责人:基于Flume+Kafka+ Elasticsearch+Storm的海量日志实时分析平台

实时海量日志分析系统的架构设计实现以及思考

storm项目架构分析

[第8期] 流式计算之 Storm 爱用者初尝 Flink