ELK解释:ELK就是ElasticSearch + LogStash + Kibana的缩写统称。应用于互联网 部署集群的日志搜集与管理。
因公司需要,本公司用 flume替换了logstash, 这篇文章也可以叫做 EFK。 原理大同小异。
下面详细说明各个部件的安装部署和集成:
3台物理机上部署 Zookeeper 3个,Flume 3个,Kafka 3个 (假定3台物理机IP地址分别为: IP1, IP2, IP3)
3台物理界上部署 ES 3个, Kibana 1个 (假定3台物理机IP地址分别为: IP4, IP5, IP6)
配置3台 版本:3.4.8
1 下载
zookeeper-3.4.8.tar.gz
2. 解压
3. zookeeper目录的conf目录下创建zoo.cfg
# 心跳基本时间单位,毫秒级
tickTime=2000
# tickTime的个数,表示在leader选举结束后,followers与leader同步需要的时间
initLimit=10
# tickTime的个数,表示与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。
syncLimit=5
# 快照等数据存储目录
dataDir=/home/app/program/zookeeper-3.4.8/data
# zookeeper服务端口
clientPort=2181
# 客户端最大连接数。
maxClientCnxns=1024
# 数据目录快照自动清理时保留快照的数量。默认是保留3个。
autopurge.snapRetainCount=3
# 数据目录快照自动清理间隔。单位小时,默认0,表示不开启清理功能。
autopurge.purgeInterval=1
# 集群配置 集群中机器的IP地址:集群机器之间通信端口:集群leader选举端口
server.1=IP1:2888:3888
server.2=IP2:2888:3888
server.3=IP3:2888:3888
4.修改port,dataDir,和集群节点的ip的配置信息
5.同样安装配置另外两个节点
6.在每台机器的zookeeper所配置的data目录下,建立myid文件。使用myid为当前机器分配一个编号。
echo '1' > myid
echo '2' > myid
echo '3' > myid
6.每个节点分别执行 bin/zkServer.sh start 启动
1. 下载
kafka2.11.zip
2. 解压
3. 修改config/server.properties 注意修改其中的IP地址 粗体字尤其要注意修改
必须修改的项:
broker.id=51 // 集群中每个节点的id,要求唯一
listeners=PLAINTEXT://IP:9092 // 格式: PLAINTEXT://主机名(或地址):端口
log.dirs=/data2/appdata/kafka-logs // 日志(消息)保存地址, 要求配置在剩余容量比较大的磁盘上
zookeeper.connect=IP1:2181,IP2:2181,IP3:2181 // zookeeper集群地址
log.retention.hours=168 // 日志保留时间,请修改为 168小时(7天)
4. 同样安装配置另外两个节点
5. 每个节点启动Kakfa
bin/kafka-server-start.sh -daemon config/server.properties
6. 创建Flume用Kafka Topic
bin/kafka-topics.sh --zookeeper IP1:2181,IP2:2181,IP3:2181 --topic flume_kafka_channel_topic --create --partitions 1 --replication-factor 3
3. Kafka manager(Kafka Web管理工具)
Kafka manager 配置一台即可, IP1, IP2, IP3中 任意一台机器
1. 下载
kafka-manager-1.3.1.6.zip
2. 解压
3. 配置修改 (无) 默认启动在 9000 端口,请注意开放此端口
4. 启动kafka manager
进入解压缩目录,启动
nohup ./bin/kafka-manager &
使用 http://{IP}:9000 进入Kafka manager界面,找到 菜单 Cluster - Add Cluster, 添加 kafka所在的 zookeeper集群。save后,即可查看kafka信息。
1. 下载
apache-flume-1.6.0.zip
2. 解压
3. 修改config/flume-conf.properties
首先修改 flume的 channel 配置为 kafka_channel
agent1.sources = source1
agent1.sinks = elasticsearch
agent1.channels = kafka_channel // 修改flume的channel
agent1.sources.source1.type = avro
agent1.sources.source1.bind = 0.0.0.0
agent1.sources.source1.port = 44444
agent1.sources.source1.channels = kafka_channel // 修改source的channel
agent1.sinks.elasticsearch.channel = kafka_channel // 修改sink使用的channel
然后增加 kafka_channel 的配置项
agent1.channels.kafka_channel.type=org.apache.flume.channel.kafka.KafkaChannel // 增加此配置项
agent1.channels.kafka_channel.capacity=10000 // 增加此配置项
agent1.channels.kafka_channel.transactionCapacity=1000 // 增加此配置项
agent1.channels.kafka_channel.brokerList=IP1:9092,IP2:9092,IP3:9092 // 增加此配置项 修改为3个kafka的 ip地址和端口,逗号分隔
agent1.channels.kafka_channel.topic=flume_kafka_channel_topic // 增加此配置项
agent1.channels.kafka_channel.zookeeperConnect=IP1:2181,IP2:2181,IP3:2181 // 增加此配置项, 修改为zookeeper集群的 ip地址和端口,逗号分隔
以下为elasticsearch这个sink的配置项
agent1.sinks.elasticsearch.type = com.frontier45.flume.sink.elasticsearch2.ElasticSearchSink
agent1.sinks.elasticsearch.hostNames = IP4:9300,IP5:9300,IP6:9300 // ES集群地址
agent1.sinks.elasticsearch.indexName = jumore_dev_log
agent1.sinks.elasticsearch.batchSize = 500
agent1.sinks.elasticsearch.indexType = messages
agent1.sinks.elasticsearch.clusterName = es-local
agent1.sinks.elasticsearch.ttl=7d // 保留7天
agent1.sinks.elasticsearch.serializer = com.frontier45.flume.sink.elasticsearch2.ElasticSearchDynamicSerializer
agent1.sinks.elasticsearch.indexNameBuilder = com.frontier45.flume.sink.elasticsearch2.SimpleIndexNameBuilder
4. 以下jar包放至Flume的lib目录下
elasticsearch-sink2-1.0.jar
20170421注:elasticsearch-sink2-1.0.jar已进行修改,现在svn上的jar包是修改过的新jar包
修改内容:修改为提交到elasticsearch的消息失败时,为性能考虑,舍弃这条消息
zookeeper-3.4.6.jar
5. 同样安装配置另外两个节点
6. 各个节点启动Flume
nohup bin/flume-ng agent --conf ./conf/ -f conf/flume-conf.properties -n agent1 &
请在IP4, IP5, IP6 3台服务器上各配置一个ES
配置文件中:要求 cluster.name : es-local
其他参考其他集群上的ES的要求进行配置,此处略。
Kibana 配置一台即可,IP4, IP5, IP6 中 任意一台机器
1. 下载
kibana-4.5.4-linux-x64.tar.gz
2. 解压
3. 修改config/kibana.yml
必须修改的项:(配置为 提供查询服务的其中一台 ElasticSearch地址即可)
elasticsearch.url: "http://IP4:9200"
4. 启动kibana
bin/kibana