ELK+Kafka安装手册
目录
一:说明
ELK由Elasticsearch、Logstash和Kibana三部分组件组成。Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
Kafka是做高并发量的消息队列中间件。
二:所需软件
1:zookeeper
需要版本:apache-zookeeper-3.5.9-bin.tar.gz
下载地址:https://downloads.apache.org/zookeeper/zookeeper-3.5.9/
2:Kafka
需要版本:kafka_2.12-2.7.0.tgz
下载地址:Apache Kafka
以上是kafka环境必备的两个软件。
3:elasticsearch
版本:elasticsearch-7.8.0-linux-x86_64.tar.gz
下载地址:https://elasticsearch.cn/download/
4:logstash
版本:logstash-7.8.0.zip
下载地址: https://www.elastic.co/cn/downloads/logstash
5:kibana
版本:kibana-7.8.0-linux-x86_64.tar.gz
下载地址: https://www.elastic.co/cn/start
6:其他软件
Jdk版本 1.8
Offsetexplorer
版本:offsetexplorer_64bit.exe
下载地址: https://www.kafkatool.com/download.html
三:安装步骤
安装Kafka+zookeeper
安装zookeeper
先把zookeeper包放到指定目录下(如:/mnt/hmzhao/soft/elk)。
解压包:tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz
修改包名:mv apache-zookeeper-3.5.9-bin zookeeper
修改配置文件:
先进入配置文件下:cd /zookeeper/config
复制一个文件:cp zoo-sample.cfg zoo.cfg
修改相应参数:vim zoo.cfg
修改:dataDir=/tmp/zookeeper 改成你需要放置的位置/mnt/hmzhao/soft/elk/zookeeper/data。(需要创建下data文件:makir data)。
在最后一行后面添加:admin.serverPort=8818
在data目录下执行:touch myid
然后执行:im myid 里面输入一个数字:1保存。
启动服务:进入bin目录下执行:./zkServer.sh start.
如果这个时候看到如下结果。
不要急,到logs目录下看下,如果启动成功。执行如下语句:ps –ef | grep zookeeper。如果服务存在,则启动正常了。
安装kafka
kafka包放到指定目录下(如:/mnt/hmzhao/soft/elk)。
解压包:tar -zxvf kafka_2.12-2.7.0.tgz
修改包名:mv kafka_2.12-2.7.0 kafka
修改配置文件:
修改server.properties 执行:vim server.properties
将:log.dirs=/tmp/kafka-logs 修改程我们存放的目录(/mnt/hmzhao/soft/elk/kafka/data)
将:listeners=PLAINTEXT://:9092 改成listeners=PLAINTEXT://你的服务ip:9092
将:zookeeper.connect=localhost:2181 改成zookeeper.connect=你的服务ip:2181
启动服务
执行脚本:./kafka-server-start.sh -daemon ../config/server.properties
说明:这里的-daemon代表守护进程,不因客户端关闭而关闭
到目前位置kafka相关的就完成了。
安装offexplorer 连接kafka。如果连接成功,则完成部署。接下来部署:elasticsearch
Kafka+zookeeper集群
在上面的基础上我们需要配置集群,才能保证高可用。所以需要使用集群。
Zookeeper集群
假如你由四台机器
分别为A,B,C,D当然也可以在一台机器上部署伪集群(下面就是部署伪集群)。
(1):创建目录
上传资源包至/mnt/csb/public/elk目录下
#创建集群目录 cd /mnt/csb/public/elk
mkdir zookeeper_2187/
mkdir zookeeper_2188/
mkdir zookeeper_2189/
(2):拷贝资源包
#复制资源包到集群目录
cd /mnt/csb/public/elk
cp zookeeper-3.4.12.tar.gz ./zookeeper_2187/
cp zookeeper-3.4.12.tar.gz ./zookeeper_2188/
cp zookeeper-3.4.12.tar.gz ./zookeeper_2189/
(3): 解压资源包
#解压资源包
cd /mnt/csb/public/elk
tar -xzvf ./zookeeper_2187/zookeeper-3.4.12.tar.gz
tar -xzvf ./zookeeper_2188/zookeeper-3.4.12.tar.gz
tar -xzvf ./zookeeper_2189/zookeeper-3.4.12.tar.g
(4): 修改配置文件zoo.cfg
修改zookeeper_2187配置文件
#拷贝配置文件
cd /mnt/csb/public/elk/zookeeper_2187/conf
cp ./zoo_sample.cfg zoo.cfg
#编辑zoo.cfg配置文件
vim zoo.cfg
#集群配置项
dataDir= /mnt/csb/public/elk/zookeeper_2187/datas
clientPort=2187
server.0=172.31.131.21:20880:30880
server.1=172.31.131.21:20881:30881
server.2=172.31.131.21:20882:30882
admin.serverPort=8818
修改zookeeper_2188配置文件
#拷贝配置文件
cd /mnt/csb/public/elk/zookeeper_2188/conf
cp ./zoo_sample.cfg zoo.cfg
#编辑zoo.cfg配置文件
vim zoo.cfg
#集群配置项
dataDir=/mnt/csb/zookeeper_2188/datas
clientPort=2188
server.0=172.31.131.21:20880:30880
server.1=172.31.131.21:20881:30881
server.2=172.31.131.21:20882:30882
admin.serverPort=8819
修改zookeeper_2189配置文件
#拷贝配置文件
cd /mnt/csb/public/elk/zookeeper_2189/conf
cp ./zoo_sample.cfg zoo.cfg
#编辑zoo.cfg配置文件
vim zoo.cfg
#集群配置项
dataDir=/mnt/csb/public/elk/zookeeper_2189/datas
clientPort=2189
server.0=172.31.131.21:20880:30880
server.1=172.31.131.21:20881:30881
server.2=172.31.131.21:20882:30882
admin.serverPort=8820
说明
1、这里是在一台服务器上面部署的伪集群
2、配置项server.0=172.31.131.21:20880:30880、server.1=172.31.131.21:20881:30881、 server.2=172.31.131.21:20882:30882中server.0、server.1、server.2 是指整个zookeeper集群 内的节点列表。
3、server的配置规则为:server.N=YYY:A:B
4、N表示服务器编号 5、YYY表示服务器的IP地址 6、A为LF通信端口,表示该服务器与集群中的leader交换的信息的端口
7、B为选举端口,表示选举新leader时服务器间相互通信的端口(当leader挂掉时,其余服 务器会相互通信,选择出新的leader) 8、一般来说,集群中每个服务器的A端口都是一样,每个服务器的B端口也是一样。但是当所 采用的为伪集群时,IP地址都一样,只能是A端口和B端口不一样。
(5): 创建集群data目录和myid文件
各节点配置文件zookeeper.properties中有一项dataDir需要手动创建并且目录需要创建文件 myid,文件内容只有一个数字,代表zookeeper节点的唯一id,即要确保此id在集群内唯一,且要跟配 置文件中的server.0、server.1、server.2 对应上。
zookeeper_2187节点
#创建myid文件,内容为节点序号0、1或者2
cd /mnt/csb/public/elk/zookeeper_2187
mkdir datas
touch myid
vim myid 0
zookeeper_2188节点
#创建myid文件,内容为节点序号0、1或者2
cd /mnt/csb/public/elk/zookeeper_2188
mkdir datas
touch myid
vim myid 1
zookeeper_2189节点
#创建myid文件,内容为节点序号0、1或者2
cd /mnt/csb/public/elk/zookeeper_2189
mkdir datas
touch myid
vim myid 2
最后一个一个启动就行了。
Kafka集群
Kafka的集群和zookeeper类似。只是配置文件有些不同
(1):创建集群目录
上传资源包至/iflytek/pcliu/kafka2.0目录下
#创建集群目录
cd /mnt/csb/public/elk
mkdir kafka2.0_9095/
mkdir kafka2.0_9096/
mkdir kafka2.0_9097/
(2):拷贝资源包
#复制资源包到集群目录
cd /mnt/csb/public/elk
cp ./kafka_2.12-2.0.1.gz ./kafka2.0_9095/
cp ./kafka_2.12-2.0.1.gz ./kafka2.0_9096/
cp ./kafka_2.12-2.0.1.gz ./kafka2.0_9097/
(3):解压资源包
cd /mnt/csb/public/elk
tar -xzvf ./kafka2.0_9095/kafka_2.12-2.0.1.gz
tar -xzvf ./kafka2.0_9096/kafka_2.12-2.0.1.gz
tar -xzvf ./kafka2.0_9097/kafka_2.12-2.0.1.gz
(4):修改配置文件
修改kafka2.0_9095/config/server.properties的信息
#整个集群内唯一id号,整数,一般从0开始 当前为0
broker.id=0
#监听地址协议+ip+端口,这里配置SASL_PLAINTEXT协议 #listeners=PLAINTEXT://172.31.131.21:9095
listeners=SASL_PLAINTEXT://172.31.131.21:9095
port=9095
host.name=172.31.131.21
#存储日志文件位置,需要手动创建,后面会提到
log.dirs=/mnt/csb/public/elk/kafka_9095/data
#分区数,一般配置为节点数
num.partitions=3
#ZK集群(根据上面配置的zookeepeer集群地址)
zookeeper.connect=172.31.131.21:2187,172.31.131.21:2188,172.31.131.21:2189
修改kafka2.0_9096/config/server.properties的信息
#整个集群内唯一id号,整数,一般从0开始 当前为1
broker.id=1
#监听地址协议+ip+端口,这里配置SASL_PLAINTEXT协议 #listeners=PLAINTEXT://172.31.131.21:9096
listeners=SASL_PLAINTEXT://172.31.131.21:9096
port=9096
host.name=172.31.131.21
#存储日志文件位置,需要手动创建,后面会提到
log.dirs=/mnt/csb/public/elk/kafka_9096/data
#分区数,一般配置为节点数
num.partitions=3
#ZK集群(根据上面配置的zookeepeer集群地址)
zookeeper.connect=172.31.131.21:2187,172.31.131.21:2188,172.31.131.21:2189
修改kafka2.0_9097/config/server.properties的信息
#整个集群内唯一id号,整数,一般从0开始 当前为2
broker.id=2
#监听地址协议+ip+端口,这里配置SASL_PLAINTEXT协议 #listeners=PLAINTEXT://172.31.131.21:9097
listeners=SASL_PLAINTEXT://172.31.131.21:9097
port=9097
host.name=172.31.131.21
#存储日志文件位置,需要手动创建,后面会提到
log.dirs=/mnt/csb/public/elk/kafka_9097/data
#分区数,一般配置为节点数
num.partitions=3
#ZK集群(根据上面配置的zookeepeer集群地址)
zookeeper.connect=172.31.131.21:2187,172.31.131.21:2188,172.31.131.21:2189
(5):启动服务
在各个服务的bin下执行
./kafka-server-start.sh -daemon ../config/server.properties
安装elasticsearch
elasticsearch包放到指定目录下(如:/mnt/hmzhao/soft/elk)。
解压包:tar -zxvf elasticsearch-7.8.0-linux-x86_64.tar.gz
修改包名:mv elasticsearch-7.8.0 elasticsearch
修改配置文件:
修改elasticsearch.yml 执行:vim elasticsearch.yml
cluster.name: my-application 改成 cluster.name: ealsticsearch
path.data: /path/to/data 改成: 你存放数据的地址(/mnt/csb/public/elk/elasticsearch/data)
path.logs: /path/to/logs 改成:你存放日志数据的地址(/mnt/csb/public/elk/elasticsearch/data/log)
network.host: 192.168.0.1 改成 你的ip
http.port: 9200 最好不变
discovery.seed_hosts: ["host1", "host2"] 改成 discovery.seed_hosts: ["你的ip"]
cluster.initial_master_nodes: ["node-1", "node-2"] 改成 cluster.initial_master_nodes: ["node-1"]
这样你的配置就弄好了。接下来,准备启动服务。
因为,root不允许直接启动。需要创建新用户和并且给用户授权。
(1)以root用户来创建新的用户 , groupadd 添加一个用户组
[root@localhost /]# groupadd elk
(2)添加一个用户,-g是在用户组下 -p是密码(用户为elk,密码elk)
[root@localhost /]# useradd elk -g elk -p elk
(3)进入es的安装目录/mnt/hmzhao/soft/elk/elasticsearch
(4)给用户elk授权
[root@localhost elasticsearch]# chown -R elk:elk elasticsearch
(5):启动服务:在bin目录下启动./elasticsearch
但是出现错误:
could not find java in JAVA_HOME at /mnt/csb/public/jdk1.8.0_151/bin/java
出现这样的原因是jdk的安装包的权限是csb 。但是我们elasticsearch的权限是新建的elk。所以没发赋权。
解决方法:重新赋权, chown -R csb:csb elasticsearch
然后重新启动。但是还是出错。
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
出现如上的原因是分配不行。
解决方法:查看机器内存信息
cat /proc/meminfo
- 修改linux系统参数
vim /etc/security/limits.conf
#添加以下内容
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
* soft memlock unlimited
* hard memlock unlimited
*:所有用户
soft nproc: 可打开的文件描述符的最大数(软限制)
hard nproc:可打开的文件描述符的最大数(硬限制)
soft nofile:单个用户可用的最大进程数量(软限制)
hard nofile:单个用户可用的最大进程数量(硬限制)
特别说明:如果不生效,可能系统不支持* ,把所有*改成你的用户名 elk
最简单方法,临时生效:ulimit -n 65535
vim /etc/sysctl.conf
#添加以下内容
vm.max_map_count= 262144
vim /etc/security/limits.d/90-nproc.conf
#修改以下内容
* soft nproc 2048
使命令生效
sysctl –p
若出现error: "–p" is an unknown key则执行以下语句
modprobe bridge
lsmod |grep bridge
再执行
sysctl –p
在重新启动。出现:started这样标志。然后在网页输入:
http://你的ip:9200/
出现es的相关数据,恭喜。你配置好了。
注意:由于可能你在服务器上按照的java不对或者不合适,但是你可以使用elk自带的java.
在elasticsearch/bin下的elasticsearch-env.bat中的第40行左右屏蔽掉如下数据。
如果使用elasticsearch-head中出现如下图情况
这是因为elasticsearch.yml中配置文件中添加
http.cors.enabled: true
http.cors.allow-origin: "*"
这样就可以使用了。
参考:ES 启动 warning future versions of Elasticsearch will require Java 11_走码观花-CSDN博客
安装kibana
将包放到/mnt/csb/public/elk下
解压包 tar –zxvf kibana-7.8.0-linux-x86_64.tar.gz
修改包名: mv kibana-7.8.0-linux-x86 kibana
由于kibana不能用root启动。所以用其他账号csb
赋权:chown –R csb:csb kibana
在config文件下修改kibana.config
server.port: 5601
server.host: "你的服务器ip"
elasticsearch.hosts: ["http://es的ip:9200"]
启动:cd /bin
./kibana &
这样就启动成功了。
安装logstash
在ELK+kafka中 logstash是一个承上启下的作用。他是把kafka的数据转移到elasticsearch
(1):将包logstash-7.8.0.zip放到/mnt/csb/public/elk下。
(2):解压:unzip logstash-7.8.0.zip
(3):修改名称: mv logstash-7.8.0 logstash
(4)新增conf文件:
进入logstash/bin目录下。
新建一个logstash.conf 也就是:vim logstash.conf
(5):启动 在logstash/bin下执行
./logstash -f logstash.conf &
如果关闭后还是不行。可以执行
nohupt bin/logstash -f logstash.conf &