ELK+Kafka集⽇志分析系统
ELK+Kafka集分析系统部署
因为是⾃⼰本地写好的word⽂档复制进来的。格式有些出⼊还望体谅。如有错误请回复。谢谢!
⼀、系统介绍 2
⼆、版本说明 3
三、服务部署 3
1) JDK部署 3
2) Elasticsearch集部署及优化 3
3) Elasticsearch健康插件安装 13
4) Shield之elasticsearch安全插件 15
5)Zookeeper集搭建 15
6)Kafka集搭建 17
7)测试Kafka和Zookeeper集连通性 19
8) Logstash部署 20
9) Kibana部署 20
四、系统使⽤⽰例 22
1) Logstash 作为kafka⽣产者⽰例 22
2) Logstash index 消费kafka⽰例 23
⼀、系统介绍
随着实时分析技术的发展及成本的降低,⽤户已经不仅仅满⾜于离线分析。下⾯来介绍⼀下架构
这是⼀个再常见不过的架构了:
(1)Kafka:接收⽤户⽇志的消息队列
(2)Logstash:做⽇志解析,统⼀成json输出给Elasticsearch
(3)Elasticsearch:实时⽇志分析服务的核⼼技术,⼀个schemaless,实时的数据存储服务,通过index组织数据,兼具强⼤的搜索和统计功能。(4)Kibana:基于Elasticsearch的数据可视化组件,超强的数据可视化能⼒是众多公司选择ELK stack的重要原因。
(5)Zookeeper: 状态管理,监控进程等服务
⼆、版本说明
本次系统为:Centos6.5 64位
Java版本为:1.8.0_74
Elasticsearch为:2.4.0
Logstash :2.4.0
Kibana:4.6.1
Shield:2.0+
Kafka:2.10-0.10.0.1
Zookeeper:3.4.9
相应的版本最好下载对应的插件。
三、服务部署
1) JDK部署
下载JDK包到/data⽬录下解压,并将变量导⼊/etc/profile末尾。
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
2) Elasticsearch集部署及优化
下载并安装es rpm包:
启动⽅式:
/etc/init.d/elasticsearch start|stop
Elasticsearch bin⽂件内存优化:
由于是rpm ⽅式安装将/usr/share/Elasticsearch/bin/Elasticsearch 加⼊如下参数:
ES_HEAP_SIZE=16g    #ES_HEAP_SIZE表⽰JVM参数的-Xms and -Xmx设置
MAX_OPEN_FILES=65535
Elasticsearch 配置⽂件优化以及说明:
我们需要配置如下:
cluster.name: es-ajb-cluster
node.name: es-node-1
node.master: true
node.data: true
index.number_of_shards: 8
index.number_of_replicas: 1
path.data: /data/es
path.logs: /data/eslogs
bootstrap.mlockall: true
network.host: 0.0.0.0
http.port: 9200
以下为更详细yml配置⽂件参数解释:
>>>># Elasticsearch Configuration Example >>>#
# 我只是挑些重要的配置选项进⾏注释,其实⾃带的已经有⾮常细致的英⽂注释了.有理解偏差的地⽅请以英⽂原版解释为准.
>>>>>>> Cluster>>>>>####
# 代表⼀个集,集中有多个节点,其中有⼀个为主节点,这个主节点是可以通过选举产⽣的,主从节点是对于集内部来说的.
# es的⼀个概念就是去中⼼化,字⾯上理解就是⽆中⼼节点,这是对于集外部来说的,因为从外部来看es集,在逻辑上是个整体,你与任何⼀个节点的通信和与整个es集通信是等价的。
# cluster.name可以确定你的集名称,当你的elasticsearch集在同⼀个⽹段中elasticsearch会⾃动的到具有相同cluster.name的elasticsearch服务.
# 所以当同⼀个⽹段具有多个elasticsearch集时cluster.name就成为同⼀个集的标识.
#cluster.name: elasticsearch
>>>>>>># Node >>>>>>
# 节点名称同理,可⾃动⽣成也可⼿动配置.
#node.name: "Franz Kafka"
# 允许⼀个节点是否可以成为⼀个master节点,es是默认集中的第⼀台机器为master,如果这台机器停⽌就会重新选举master.
#node.master: true
# 允许该节点存储数据(默认开启)
#node.data: true
# 配置⽂件中给出了三种配置⾼性能集拓扑结构的模式,如下:
# 1. 如果你想让节点从不选举为主节点,只⽤来存储数据,可作为负载器
# node.master: false
# node.data: true
#
# 2. 如果想让节点成为主节点,且不存储任何数据,并保有空闲资源,可作为协调器
# node.master: true
# node.data: false
#
# 3. 如果想让节点既不称为主节点,⼜不成为数据节点,那么可将他作为搜索器,从节点中获取数据,⽣成搜索结果等
# node.master: false
# node.data: false
# 监控集状态有⼀下插件和API可以使⽤:
# A node can have generic attributes associated with it, which can later be used
# for customized shard allocation filtering, or allocation awareness. An attribute
# is a simple key value pair, similar to node.key: value, here is an example:
#
#node.rack: rack314
# By default, multiple nodes are allowed to start from the same installation location
# to disable it, set the following:
#node.max_local_storage_nodes: 1
>>>>>>># Index >>>>>####
# 设置索引的分⽚数,默认为5
#index.number_of_shards: 5
# 设置索引的副本数,默认为1:
#index.number_of_replicas: 1
# 配置⽂件中提到的最佳实践是,如果服务器够多,可以将分⽚提⾼,尽量将数据平均分布到⼤集中去
# 同时,如果增加副本数量可以有效的提⾼搜索性能
# 需要注意的是,"number_of_shards" 是索引创建后⼀次⽣成的,后续不可更改设置
# "number_of_replicas" 是可以通过API去实时修改设置的
>>>>>>># Paths >>>>>>>#
# 配置⽂件存储位置
#f: /path/to/conf
# 数据存储位置(单个⽬录设置)
#path.data: /path/to/data
# 多个数据存储位置,有利于性能提升
#path.data: /path/to/data1,/path/to/data2
# 临时⽂件的路径
#path.work: /path/to/work
# ⽇志⽂件的路径
#path.logs: /path/to/logs
# 插件安装路径
#path.plugins: /path/to/plugins
>>>>>>># Plugin >>>>>###
# 设置插件作为启动条件,如果⼀下插件没有安装,则该节点服务不会启动
#plugin.mandatory: mapper-attachments,lang-groovy
>>>>>>> Memory >>>>>>
# 当JVM开始写⼊交换空间时(swapping)ElasticSearch性能会低下,你应该保证它不会写⼊交换空间
# 设置这个属性为true来锁定内存,同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过 `ulimit -l unlimited` 命令#bootstrap.mlockall: true
# 确保 ES_MIN_MEM 和 ES_MAX_MEM 环境变量设置为相同的值,以及机器有⾜够的内存分配给Elasticsearch
# 注意:内存也不是越⼤越好,⼀般64位机器,最⼤分配内存别才超过32G
>>>>>> Network And HTTP >>>>###
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0
#network.bind_host: 192.168.0.1
# 设置其它节点和该节点交互的ip地址,如果不设置它会⾃动设置,值必须是个真实的ip地址
#network.publish_host: 192.168.0.1
# 同时设置bind_host和publish_host上⾯两个参数
#network.host: 192.168.0.1
# 设置节点间交互的tcp端⼝,默认是9300
#p.port: 9300
# 设置是否压缩tcp传输时的数据,默认为false,不压缩
#ppress: true
# 设置对外服务的http端⼝,默认为9200
#http.port: 9200
# 设置请求内容的最⼤容量,默认100mb
#http.max_content_length: 100mb
# 使⽤http协议对外提供服务,默认为true,开启
#abled: false
>>>>>>> Gateway >>>>>####
# gateway的类型,默认为local即为本地⽂件系统,可以设置为本地⽂件系统
#pe: local
# 下⾯的配置控制怎样以及何时启动⼀整个集重启的初始化恢复过程
# (当使⽤shard gateway时,是为了尽可能的重⽤local data(本地数据))
# ⼀个集中的N个节点启动后,才允许进⾏恢复处理
#ver_after_nodes: 1
# 设置初始化恢复过程的超时时间,超时时间从上⼀个配置中配置的N个节点启动后算起
#ver_after_time: 5m
# 设置这个集中期望有多少个节点.⼀旦这N个节点启动(并且recover_after_nodes也符合),
# ⽴即开始恢复过程(不等待recover_after_time超时)
#pected_nodes: 2
>>>>>#### Recovery Throttling >>>>###
# 下⾯这些配置允许在初始化恢复,副本分配,再平衡,或者添加和删除节点时控制节点间的分⽚分配
# 设置⼀个节点的并⾏恢复数
# 1.初始化数据恢复时,并发恢复线程的个数,默认为4
#de_initial_primaries_recoveries: 4
#
# 2.添加删除节点或负载均衡时并发恢复线程的个数,默认为2
#de_concurrent_recoveries: 2
# 设置恢复时的吞吐量(例如:100mb,默认为0⽆限制.如果机器还有其他业务在跑的话还是限制⼀下的好)
#very.max_bytes_per_sec: 20mb
# 设置来限制从其它分⽚恢复数据时最⼤同时打开并发流的个数,默认为5
#urrent_streams: 5
# 注意: 合理的设置以上参数能有效的提⾼集节点的数据恢复以及初始化速度
>>>>>>#### Discovery >>>>>#
# 设置这个参数来保证集中的节点可以知道其它N个有master资格的节点.默认为1,对于⼤的集来说,可以设置⼤⼀点的值(2-4)
#inimum_master_nodes: 1
# 探查的超时时间,默认3秒,提⾼⼀点以应对⽹络不好的时候,防⽌脑裂
#ping.timeout: 3s
# For more information, see
# 设置是否打开多播发现节点.默认是true.
# 当多播不可⽤或者集跨⽹段的时候集通信还是⽤单播吧
#abled: false
# 这是⼀个集中的主节点的初始列表,当节点(主节点或者数据节点)启动时使⽤这个列表进⾏探测
#ping.unicast.hosts: ["host1", "host2:port"]
# Slow Log部分与GC log部分略,不过可以通过相关⽇志优化搜索查询速度
>>#### Memory(重点需要调优的部分) >>>#
# Cache部分:
# es有很多种⽅式来缓存其内部与索引有关的数据.其中包括filter cache
# filter cache部分:
# filter cache是⽤来缓存filters的结果的.默认的cache type是de type的机制是所有的索引内部的分⽚共享de type采⽤的⽅式是LRU⽅式.即:当缓存达到了某个临界值之后,es会将最近没有使⽤的数据清除出filter cache.使让新的数据进⼊es.
# 这个临界值的设置⽅法如下:indices.cache.filter.size 值类型:eg.:512mb 20%。默认的值是10%。
# out of memory错误避免过于频繁的查询时集假死
# 1.设置es的缓存类型为Soft Reference,它的主要特点是据有较强的引⽤功能.只有当内存不够的时候,才进⾏回收这类内存,因此在内存⾜够的时候,它们通常不被回收.另外,这些引⽤对象还能保证在Java抛出OutOfMemory异常之前,被设置为null.它可以⽤于实现⼀些常⽤图⽚的缓存,实现Cache的功能,保证最⼤限度的使⽤内存⽽不引起OutOfMemory.在es的配置⽂件加上index.pe: soft即可.
# 2.设置es最⼤缓存数据条数和缓存失效时间,通过设置index.cache.field.max_size: 50000来把缓存field的最⼤值设置为50000,设置index.pire: 10m把过期时间设置成10分钟.
#index.cache.field.max_size: 50000
#index.pire: 10m
#index.pe: soft
# field data部分&&circuit breaker部分:
# ⽤于field data 缓存的内存数量,主要⽤于当使⽤排序,faceting操作时,elasticsearch会将⼀些热点数据加载到内存中来提供给客户端访问,但是这种缓存是⽐较珍贵的,所以对它进⾏合理的设置.
# 可以使⽤值:eg:50mb 或者 30%(节点 node heap内存量),默认是:unbounded
#indices.fielddata.cache.size: unbounded
# field的超时时间.默认是-1,可以设置的值类型: 5m
#indices.pire: -1
# circuit breaker部分:
# 断路器是elasticsearch为了防⽌内存溢出的⼀种操作,每⼀种circuit breaker都可以指定⼀个内存界限触发此操作,这种circuit breaker的设定有⼀个最⾼级别的设
定:al.limit 默认值是JVM heap的70%.当内存达到这个数量的时候会触发内存回收
# 另外还有两组⼦设置:
#indices.breaker.fielddata.limit:当系统发现fielddata的数量达到⼀定数量时会触发内存回收.默认值是JVM heap的70%
#indices.breaker.fielddata.overhead:在系统要加载fielddata时会进⾏预先估计,当系统发现要加载进内存的值超过limit * overhead时会进⾏进⾏内存回收.默认是1.03
#quest.limit:这种断路器是elasticsearch为了防⽌OOM(内存溢出),在每次请求数据时设定了⼀个固定的内存数量.默认值是40%kafka最新版本
#quest.overhead:同上,也是elasticsearch在发送请求时设定的⼀个预估系数,⽤来防⽌内存溢出.默认值是1
# Translog部分:
# 每⼀个分⽚(shard)都有⼀个transaction log或者是与它有关的预写⽇志,(write log),在es进⾏索引(index)或者删除(delete)操作时会将没有提交的数据记录在translog之中,当进⾏flush 操作的时候会将tranlog中的数据发送给Lucene进⾏相关的操作.⼀次flush操作的发⽣基于如下的⼏个配置
#anslog.flush_threshold_ops:当发⽣多少次操作时进⾏⼀次flush.默认是 unlimited
#anslog.flush_threshold_size:当translog的⼤⼩达到此值时会进⾏⼀次flush操作.默认是512mb
#anslog.flush_threshold_period:在指定的时间间隔内如果没有进⾏flush操作,会进⾏⼀次强制flush操作.默认是30m
#anslog.interval:多少时间间隔内会检查⼀次translog,来进⾏⼀次flush操作.es会随机的在这个值到这个值的2倍⼤⼩之间进⾏⼀次操作,默认是5s
#index.gateway.local.sync:多少时间进⾏⼀次的写磁盘操作,默认是5s
# 以上的translog配置都可以通过API进⾏动态的设置
集部署
集名称不修改,节点名称修改、将l 复制到其他节点,并替换其配置⽂件。并关闭⾃动发现,防⽌其他外来节点连⼊。
3) Elasticsearch健康插件安装
elasticsearch-head是⼀个elasticsearch的集管理⼯具,它是完全由html5编写的独⽴⽹页程序,你可以通过插件把它集成到es。
插件安装⽅法1:
1.elasticsearch/bin/plugin -install mobz/elasticsearch-head
2.运⾏es
插件安装⽅法2:
2.建⽴elasticsearch\plugins\head\_site⽂件
3.将解压后的elasticsearch-head-master⽂件夹下的⽂件copy到_site
4.运⾏es
在地址栏输⼊es服务器的ip地址和端⼝点connect就可以连接到集。下⾯是连接后的视图。这是主界⾯,在这⾥可以看到es集的基本信息(如:节点情况,索引情况)。
通过head插件可以对索引执⾏api 操作。
4) Shield之elasticsearch安全插件
官⽅安装步骤以及验证
Shield 2.0+
Compatible with the latest versions of Elasticsearch and Kibana

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

kafka的pb格式
« 上一篇
kafka消费规则
下一篇 »

发表评论