ELK+KAFKA安装部署指南
一、ELK
背景
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:ELK中的logstash,将所有服务器上的日志收集汇总。 集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心,这里我们使用ELK中的elasticsearch和kibana。
一、ELK是什么?
ELK实际上是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。大家熟知的Sina、饿了么、携程、华为、美团、新浪微博、魅族、IBM...... 这些公司都在使用ELK。 Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。 Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ、kafka)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch等。 Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。 二、ELK有何优势?
1. 强大的搜索功能,elasticsearch可以以分布式搜索的方式快速检索,而且支持DSL的语法来进行搜索,简单的说,就是通过类似配置的语言,快速筛选数据。
2. 完美的展示功能,可以展示非常详细的图表信息,而且可以定制展示内容,将数据可视化发挥的淋漓尽致。
3. 分布式功能,能够解决大型集群运维工作很多问题,包括监控、预警、日志收集解析等。
二、KAFKA
kafka详解:https://blog.csdn.net/ychenfeng/article/details/74980531 背景
通过查看网络上一些ELK的性能测试报告、博客和官方文档,发现logstash有性能瓶颈而且不支持缓存,目前业内典型替代方案是将 Redis 或 Kafka 作为中心缓冲池,这里我们选择kafka作为我们的日志收集缓冲池。 一、KAFKA是什么?
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala和java编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。 二、KAFKA何优势?
1. 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒。
2. 可扩展性:kafka集群支持热扩展。
3. 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失。
4. 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)。
5. 高并发:支持数千个客户端同时读写。 二、KAFKA使用场景?
1. 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr、logstash等。
2. 消息系统:解耦和生产者和消费者、缓存消息等。
3. 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。
4. 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。 三、KAFKA相关名词解释 Kafka中发布订阅的对象是topic。我们可以为每类数据创建一个topic,把向topic发布消息的客户端称作producer,从topic订阅消息的客户端称作consumer。Producers和consumers可以同时从多个topic读写数据。一个kafka集群由一个或多个broker服务器组成,它负责持久化和备份具体的kafka消息。 Broker:Kafka节点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群。
Topic:一类消息,消息存放的目录即主题,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发。
Partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的队列
Segment:partition物理上由多个segment组成,每个Segment存着message信息
Producer: 生产message发送到topic
Consumer: 订阅topic消费message, consumer作为一个线程来消费
Consumer Group:一个Consumer Group包含多个consumer, 这个是预先在配置文件中配置好的。各个consumer(consumer 线程)可以组成一个组(Consumer group ),partition中的每个message只能被组(Consumer group ) 中的一个consumer(consumer 线程 )消费,如果一个message可以被多个consumer(consumer 线程 ) 消费的话,那么这些consumer必须在不同的组。Kafka不支持一个partition中的message由两个或两个以上的consumer thread来处理,即便是来自不同的consumer group的也不行。
相关背景介绍
总体部署架构方案
一、准备工作
准备安装包
ELK下载地址:https://www.elastic.co/downloads
zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
kafka下载地址:http://kafka.apache.org/downloads
elasticsearch中文分词器下载地址: https://pan.baidu.com/s/1i4ZAuwNueb_1-tZKBzQJ4g
VMwareWorkstation
CentOS7(192.168.68.110, 192.168.68.111, 192.168.68.112)
二、安装ES
elasticsearch官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
1、创建用户
因为elasticsearch不能使用root用户启动,所以需要先创建一个用户,并对用户进行授权,使用root用户登录,执行以下命令
useradd es #创建用户
passwd es #设置用户密码,输入与用户名一样的密码
2、安装unzip
yum install -y unzip
3、修改系统参数
vi /etc/security/limits.conf
增加以下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 4096 vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
4、上传文件
使用elasticsearch用户登录,将之前下载好的elasticsearch-6.2.4.tar.gz、elasticsearch-analysis-ik-6.2.4.zip上传至根目录
5、创建数据与日志目录
在elasticsearch用户的根目录执行以下命令
mkdir {log,data}
6、解压安装包、修改配置
解压安装包
tar -zxvf elasticsearch-6.2.4.tar.gz
进入elasticsearch-6.2.4/config目录,config目录下有三个文件:
elasticsearch.yml # els的配置文件
jvm.options # JVM相关的配置,内存大小等等
log4j2.properties # 日志系统定义
修改后的配置elasticsearch.yml如下:
cluster.name: es-cluster #集群名称
node.name: node-110 #节点名称,仅仅是描述名称,用于在日志中区分
path.data: /home/es/data #数据的默认存放路径
path.logs: /home/es/log #日志默认存放路径
network.host: 192.168.68.110 #当前节点的IP地址
http.port: 9200 #对外提供服务的端口,9300为集群服务的端口
discovery.zen.ping.unicast.hosts: ["192.168.68.110", "192.168.68.111","192.168.68.112"] #集群个节点IP地址
discovery.zen.minimum_master_nodes: 2 #为了避免脑裂,集群节点数最少为 半数+1
bootstrap.system_call_filter: false #禁止系统调用过滤器
jvm.options中默认内存为1G,开发环境可以不修改,生产时需要根据服务器内存调整大小
-Xms1g # JVM最大、最小使用内存
-Xmx1g
7、加入中文分词器插件
日志中可能出现中文,为了方便中文检查,需要加入中文分词器插件
unzip elasticsearch-analysis-ik-6.2.4.zip -d elasticsearch-6.2.4/plugins/
mv elasticsearch/ik #因为ik解压后的目录名为elasticsearch,为了避免其他插件可能冲突,修改名称为ik
8、启动easticsearch
./elasticsearch -d
9、访问测试
使用curl访问:curl http://192.168.68.110:9200,出现如下信息,说明访问成功
按上述步骤将三台集群安装好后,检查集群状态
curl -XGET 'http://192.168.68.110:9200/_cat/nodes?pretty'
带“*”的为主节点
安装时遇到的问题
问题一: [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536])
解决:切换到root用户,进入/etc/security目录下修改配置文件
vi /etc/security/limits.conf
增加以下内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
注:修改以上配置后需要重启服务器
问题二: max number of threads [2048] for user [es] is too low, increase to at least [4096]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 4096
注:修改以上配置后需要重启服务器
问题三:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
三、kafka集群搭建
1、创建用户
使用root用户登录,执行以下命令
useradd kafka #创建用户
passwd kafka #设置用户密码,输入与用户名一样的密码
2、解压安装包
使用新创建的用户将包上传至用户根目录,并解压
tar -zxvf kafka_2.11-1.1.0.tgz
创建目录
mkdir zookeeper
cd zookeeper
mkdir {logs,data}
3、修改zookeeper配置(kafka自带zookeeper)
进入配置目录:cd kafka_2.11-1.1.0/config/
修改配置文件:vi zookeeper.properties
修改后的配置如下(三台机的zookeeper.properties内容一致):
#zookeeper数据存放目录
dataDir=/home/kafka/zookeeper/data
#zookeeper日志存放目录
dataLogDir=/home/kafka/zookeeper/logs
# the port at which the clients will connect
clientPort=2181
# disable the per-ip limit on the number of connections since this is a non-production config
# 客户端连接的最大数量.
maxClientCnxns=60
# 心跳间隔时间,zookeeper中使用的基本时间单位,毫秒值。每隔2秒发送一个心跳
tickTime=2000
# leader与follower连接超时时间。表示10个心跳间隔
initLimit=10
# Leader与follower之间的超时时间,表示5个心跳间隔
syncLimit=5
server.1=192.168.68.110:2888:3888
server.2=192.168.68.111:2888:3888
server.3=192.168.68.112:2888:3888
创建myid文件,进入cd /home/kafka/zookeeper/data
192.168.68.110 echo 1 > myid
192.168.68.111 echo 2 > myid
192.168.68.112 echo 3 > myid 注:myid是zk集群用来发现彼此的标识,必须创建,且不能相同
4、修改kakfa配置
进入配置目录:cd kafka_2.11-1.1.0/config/
修改配置文件:vi server.properties
broker.id=0 #分别配置为192.168.68.110=0,192.168.68.111=1,192.168.68.112=2
listeners=PLAINTEXT://192.168.68.110:9092 #监听地址,分别配置不同的服务器PLAINTEXT://192.168.68.111:9092,PLAINTEXT://192.168.68.112:9092
log.dirs=/home/kafka/kafka_2.11-1.1.0/logs
zookeeper.connect=192.168.68.110:2181,192.168.68.111:2181,192.168.68.112:2181
5、启动zookeeper
./zookeeper-server-start.sh ../config/zookeeper.properties &
查看日志文件/home/kafka/kafka_2.11-1.1.0/logs/server.log,如无异常信息说明zookeeper集群成功
6、启动kafka
注:启动kafka之前需要将kafka、zookeeper所在服务器的防火墙关闭
./kafka-server-start.sh ../config/server.properties &
出现下图中日志则说明启动成功了
四、安装logstash(192.168.68.111)
logstash官方文档:https://www.elastic.co/guide/en/logstash/current/index.html
1、解压安装包、修改配置
解压安装包:tar -zxvf logstash-6.2.4.tar.gz
进入到解压后的目录:cd logstash-6.2.4
input {
kafka {
bootstrap_servers => "192.168.68.110:9092, 192.168.68.111:9092,192.168.68.112:9092"
topics => ["test"]
auto_offset_reset => "latest"
consumer_threads => 5
decorate_events => true
}
}
output {
elasticsearch {
hosts => ["192.168.68.110:9200"]
index => "kafka-logs-%{+YYYY-MM-dd}"
}
}
2、启动logstash
启动kafka:./bin/logstash -f config/kafkaInput_esOutPut.conf &
五、安装kibana(192.168.68.1112)
kibana官方配置指南:https://www.elastic.co/guide/en/kibana/current/settings.html
1、解压安装包、修改配置
解压安装包:tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz
进入到解压后的目录:cd kibana-6.2.4-linux-x86_64
修改后的配置如下:
server.port: 5601
server.host: "192.168.68.112"
server.name: "kibana"
elasticsearch.url: "http://192.168.68.110:9200"
2、启动kibana
启动:./kibana &
出现下图中日志则说明启动成功
3、访问测试
在浏览器中输入:http://192.168.68.112:5601,出现如下界面,说明部署成功
ELK+KAFKA安装部署指南的更多相关文章
- zookeeper与kafka安装部署及java环境搭建(发布订阅模式)
1. ZooKeeper安装部署 本文在一台机器上模拟3个zk server的集群安装. 1.1. 创建目录.解压 cd /usr/ #创建项目目录 mkdir zookeeper cd zookee ...
- Kafka安装部署
1.从官网下载安装包,并通过Xftp5上传到机器集群上 下载kafka_2.11-1.1.0.tgz版本,并通过Xftp5上传到hadoop机器集群的第一个节点node1上的/opt/uploa ...
- elk的安装部署
Elk日志安装文档 需要用到有三个软件包 和redis 分布式部署:已上图就是分布式部署的架构图 Logstash : 是部署在前台的应用上,收集数据的 和部署在redis和elasticsea ...
- ELK详细安装部署
一.前言 日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题.分析日志可以更清楚的了解服务器的状态和 ...
- SIA-GateWay之API网关安装部署指南
SIA-GATEWAY是基于SpringCloud微服务生态体系下开发的一个分布式微服务网关系统.具备简单易用.可视化.高可扩展.高可用性等特征,提供云原生.完整及成熟的接入服务解决方案.本文介绍AP ...
- 最新版大数据平台安装部署指南,HDP-2.6.5.0,ambari-2.6.2.0
一.服务器环境配置 1 系统要求 名称 地址 操作系统 root密码 Master1 10.1.0.30 Centos 7.7 Root@bidsum1 Master2 10.1.0.105 Cent ...
- 【Apache KafKa系列之一】KafKa安装部署
kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. 高吞吐量:即使是非常普通的 ...
- Solr版本安装部署指南
一.依赖包 1. JDK 1.6以上 2. solr-4.3.0.tgz 3. Tomcat或者jetty(注意,solr包中本身就含有jetty的启动相关内容):apache-tomcat-7 ...
- kafka 安装部署
环境:ubuntu 12.04 64位桌面版 解压kafka -0.10.0.0.tgz -C /root/software/ 进入目录 cd kafka_2.-0.10.0.0/ 创建data 目录 ...
随机推荐
- linux命令find命令详解
find 查找文件 find 哪里 什么类型 什么名字 -maxdepth 最大的深度 查找目录的最大深度 find -maxdepth 1 -type d -type 找什么类型的 f fil ...
- php 安装rabtmq amqp 扩展
php 安装 rabbitmq-c-0.9.0 扩展 安装 ibrabbitmq-c github 仓库地址https://github.com/alanxz/rab... ``` 安装过程如果报错 ...
- unity C# StackOverflowException
有时候图省事,属性这样写public int pageCount{get{return pageCount;}set{pageCount=value;}}可能会报栈溢出的错误, StackOverfl ...
- 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(hash写法)
接上一篇文章; 这里直接把左端点和右端点映射到vector数组上; 映射一个open和close数组; 枚举1..2e5 如果open[i]内有安排; 则用那个安排和dp数组来更新答案; 更新答案完之 ...
- 查看mysql正在执行的SQL语句,使用profile分析SQL执行状态
http://qq85609655.iteye.com/blog/2113960 1)我们先通过status命令查看Mysql运行状态 mysql> status; -------------- ...
- HDFS 断点续传,写文件功能
实际上这是个 HDFS 的工具类部分代码. 首先 public static Configuration configuration = null;public static FileSystem f ...
- netsh http的使用
1.首先通过cmd进入 C:\Windows\System32\inetsrv>netshnetsh>http netsh http> 退出的时候,使用exit命令 2.显示监听的i ...
- quartz 持久化 数据库表
此处只包括配置数据库操作 quartz 持久化数据库表格字段解释建表,SQL语句在dbTables文件夹中可以找到,介绍下我们开发主要使用到的表: (版本不一样,可能数据库表也不一样,这里使用2.2. ...
- beego简单的验证码实现以及验证
/** * 程序 */package controllers import ( "github.com/astaxie/beego" "github.com/ ...
- TwinCAT 3中基于UDP协议通讯的C++实现
因为项目需要,学习了TwinCAT3中使用UDP协议进行通讯的基本知识.这个做个简单的笔记,方便以后查询. 1 概述 倍福为了实现从实时环境中直接访问网卡(network cards)专门提供了一个函 ...