elk+kafka+zookeeper超详细
2019年08月11日 15:53:42 拿破仑快递 阅读数 148 标签: elk elk部署超详细
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yangpei1/article/details/98897548
elk部署超详细
一、简介:
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana
1、Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。
它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
2、Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。
一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
3、Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
4、FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
5、Kafka: 数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
6、Zookeeper来协调管理Kafka日志队列最终推送给Logstash集群处理。
在之前的搭建elk环境中,日志的处理流程为:filebeat --> logstash --> elasticsearch,随着业务量的增长,需要对架构做进一步的扩展,引入kafka集群。日志的处理流程变为:filebeat --> kafka --> logstash --> elasticsearch。架构图如下所示:
在这里插入图片描述
准备安装部署
安装软件 主机名 IP地址 系统版本
elasticsearch mes-1-zk 192.168.88.129 centos7.4–3G
zookeeper/kafka/Logstash es-2-zk-log 192.168.88.131 centos7.4–2G
head/Kibana es-3-head-kib-zk-File 192.168.88.132 centos7.4–2G
环境 三台一样
1、关闭防火墙
systemctl stop firewalld && systemctl disable firewalld && setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
2、三台都要部署java环境,kafka,logstash,elasticsearch,zookeeper都需要java环境
[root@mes-1 ~]# tar xzf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[root@mes-1 ~]# cd /usr/local/
[root@mes-1 local]# mv jdk1.8.0_191/ java
[root@mes-1 local]# echo '
JAVA_HOME=/usr/local/java
PATH=PATH
export JAVA_HOME PATH
' >>/etc/profile
[root@mes-1 ~]# source /etc/profile
3、ntpdate对时,kibana创建索引需要实时收集日志
yum -y install ntpdate
ntpdate -b ntp1.aliyun.com
4、修改静态IP,一定要静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="d4c4d1df-507f-4a75-a52a-b792ac5622c7"
DEVICE="ens33"
ONBOOT="yes"
GATEWAY=192.168.88.2
NATMASK=255.255.255.0
IPADDR=192.168.88.129
DNS1=8.8.8.8
5、域名互相解析
vim /etc/hosts
192.168.88.129 mes-1-zk
192.168.88.131 es-2-zk-log
192.168.88.132 es-3-head-kib-zk-File
6、三台分别设置一下用户名
hostnamectl set-hostname mes-1-zk
hostnamectl set-hostname es-2-zk-log
hostnamectl set-hostname es-3-head-kib-zk-File
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
安装包
Elasticsearch: 6.5.4 #https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
Logstash: 6.5.4 #https://artifacts.elastic.co/downloads/logstash/logstash-6.5.4.tar.gz
Kibana: 6.5.4 #https://artifacts.elastic.co/downloads/kibana/kibana-6.5.4-linux-x86_64.tar.gz
Kafka: 2.11-2.1 #https://archive.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
Filebeat: 6.5.4
相应的版本最好下载对应的插件
安装部署
1.安装配置ES----只在第一台操作操作下面的部分
(1) 创建运行ES的普通用户(因为生产环境都是普通用户)
[root@mes-1 ~]# useradd elsearch
[root@mes-1 ~]# echo “123456” | passwd --stdin “elsearch”
(2)安装配置ES
[root@mes-1 ~]# tar xzf elasticsearch-6.5.4.tar.gz -C /usr/local/
[root@mes-1 ~]# cd /usr/local/elasticsearch-6.5.4/config/
[root@mes-1 config]# ls
elasticsearch.yml log4j2.properties roles.yml users_roles
jvm.options role_mapping.yml users
[root@mes-1 config]# cp elasticsearch.yml elasticsearch.yml.bak
[root@mes-1 config]# vim elasticsearch.yml ----找个地方添加如下内容
cluster.name: elk
node.name: elk01
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: [“192.168.88.129”, “192.168.88.131”,“192.168.88.132”]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: “*”
配置项含义:
cluster.name 集群名称,各节点配成相同的集群名称。
node.name 节点名称,各节点配置不同。
node.master 指示某个节点是否符合成为主节点的条件。
node.data 指示节点是否为数据节点。数据节点包含并管理索引的一部分。
path.data 数据存储目录。
path.logs 日志存储目录。
bootstrap.memory_lock 内存锁定,是否禁用交换。
bootstrap.system_call_filter 系统调用过滤器。
network.host 绑定节点IP。
http.port rest api端口。
discovery.zen.ping.unicast.hosts 提供其他 Elasticsearch 服务节点的单点广播发现功能。
discovery.zen.minimum_master_nodes 集群中可工作的具有Master节点资格的最小数量,官方的推荐值是
(N/2)+1,其中N是具有master资格的节点的数量。
discovery.zen.ping_timeout 节点在发现过程中的等待时间。
discovery.zen.fd.ping_retries 节点发现重试次数。
http.cors.enabled 是否允许跨源 REST 请求,用于允许head插件访问ES。
http.cors.allow-origin 允许的源地址。
(3) 设置JVM堆大小
[root@mes-1 config]# vim jvm.options ----将
-Xms1g ----修改成 -Xms2g
-Xmx1g ----修改成 -Xms2g
或者:
推荐设置为4G,请注意下面的说明:
sed -i ‘s/-Xms1g/-Xms4g/’ /usr/local/elasticsearch-6.5.4/config/jvm.options
sed -i ‘s/-Xmx1g/-Xmx4g/’ /usr/local/elasticsearch-6.5.4/config/jvm.options
注意: 确保堆内存最小值(Xms)与最大值(Xmx)的大小相同,防止程序在运行时改变堆内存大小。 堆内存大
小不要超过系统内存的50%
(4)创建ES数据及日志存储目录
[root@mes-1 ~]# mkdir -p /data/elasticsearch/{data,logs}
(5)修改安装目录及存储目录权限
[root@mes-1 ~]# chown -R elsearch:elsearch /data/elasticsearch
[root@mes-1 ~]# chown -R elsearch:elsearch /usr/local/elasticsearch-6.5.4
2.系统优化 下面两部都要做 不要忘了打乘号
(1)增加最大文件打开数
永久生效方法: echo “* - nofile 65536” >> /etc/security/limits.conf
(2)增加最大进程数
[root@mes-1 ~]# vim /etc/security/limits.conf —在文件最后面添加如下内容
- soft nofile 65536
- hard nofile 131072
- soft nproc 2048
- hard nproc 4096
(3)增加最大内存映射数
[root@mes-1 ~]# vim /etc/sysctl.conf —添加如下
vm.max_map_count=262144
vm.swappiness=0
[root@mes-1 ~]# sysctl -p
3启动ES
[root@mes-1 ~]# su - elsearch
Last login: Sat Aug 3 19:48:59 CST 2019 on pts/0
[root@mes-1 ~] ./bin/elasticsearch #先启动看看报错不,需要多等一会
终止之后
[root@mes-1 elasticsearch-6.5.4] nohup: ignoring input and appending output to ‘nohup.out’
[root@mes-1 elasticsearch-6.5.4]$ tail -f nohup.out #看一下是否启动
或者:
su - elsearch -c “cd /usr/local/elasticsearch-6.5.4 && nohup bin/elasticsearch &”
测试:浏览器访问http://192.168.88.129:9200/
在这里插入图片描述
tailf nohup.out
…
[2019-08-11T11:42:55,923][INFO ][o.e.p.PluginsService ] [elk01] no plugins loaded
这里显示没有插件安装
…
最后一行显示
[2019-08-11T11:43:13,070][INFO ][o.e.l.LicenseService ] [elk01] license [d380737f-c735-4a2b-8b9e-24a92bbc3dc9] mode [basic] - valid
2、安装head监控插件(Web前端)----只需要安装一台就可以了。192.168.88.132
(1)安装node 插件的依赖
[root@es-3-head-kib ~]# wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
[root@es-3-head-kib ~]# tar -zxf node-v4.4.7-linux-x64.tar.gz -C /usr/local
[root@es-3-head-kib ~]# vim /etc/profile #添加如下变量
NODE_HOME=/usr/local/node-v4.4.7-linux-x64
PATH=PATH
export NODE_HOME PATH
[root@es-3-head-kib ~]# source /etc/profile
[root@es-3-head-kib ~]# node --version #检查node版本号
v4.4.7
(2)下载head插件
[root@es-3-head-kib ~]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip
[root@es-3-head-kib ~]# cp master.zip /usr/local/
[root@es-3-head-kib ~]# unzip -d /usr/local/ master.zip
[root@es-3-head-kib ~]# cd /usr/local
或者
unzip –d /usr/local elasticsearch-head-master.zip
(3)安装grunt
[root@es-3-head-kib ~]# cd elasticsearch-head-master/
[root@mes-3-head-kib elasticsearch-head-master]# npm install -g grunt-cli #时间会很长
如果没有安装上多试几次就好了
[root@es-3-head-kib elasticsearch-head-master]# grunt --version #检查grunt版本号
(4)修改head源码
[root@es-3-head-kib elasticsearch-head-master]# vim /usr/local/elasticsearch-head-master/Gruntfile.js (95
左右)
在这里插入图片描述
添加hostname,注意在上一行末尾添加逗号,hostname 不需要添加逗号 !!!
vim /usr/local/elasticsearch-head-master/_site/app.js +4395 (4359左右)
原来是localhost,现在head插件没有安装在elastic search上,所以需要改ip来连接
(5)下载head必要的文件
[root@es-3-head-kib ~]# wget
https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-
x86_64.tar.bz2
[root@es-3-head-kib ~]# yum -y install bzip2
[root@es-3-head-kib ~]# tar -jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /tmp/ #解压
(6)运行head
[root@es-3-head-kib ~]# cd /usr/local/elasticsearch-head-master/
[root@es-3-head-kib elasticsearch-head-master]# npm install
这里安装如果报错,也是多安装几次就好了,而且这个不重要,可以先放在一边先做下面的,因为下载时间太长了,再打开一个窗口
npm ERR! node v4.4.7
npm ERR! npm v2.15.8
npm ERR! code ELIFECYCLE
npm ERR! phantomjs-prebuilt@2.1.16 install: node install.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the phantomjs-prebuilt@2.1.16 install script ‘node install.js’.
npm ERR! This is most likely a problem with the phantomjs-prebuilt package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node install.js
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs phantomjs-prebuilt
npm ERR! Or if that isn’t available, you can get their info via:
npm ERR!
npm ERR! npm owner ls phantomjs-prebuilt
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR! /usr/local/elasticsearch-head-master/npm-debug.log
上面是报错,多安装几次就好了
…
grunt-contrib-jasmine@1.0.3 node_modules/grunt-contrib-jasmine
├── sprintf-js@1.0.3
├── lodash@2.4.2
├── es5-shim@4.5.13
├── chalk@1.1.3 (escape-string-regexp@1.0.5, supports-color@2.0.0, ansi-styles@2.2.1, strip-
ansi@3.0.1, has-ansi@2.0.0)
├── jasmine-core@2.99.1
├── rimraf@2.6.3 (glob@7.1.4)
└── grunt-lib-phantomjs@1.1.0 (eventemitter2@0.4.14, semver@5.7.0, temporary@0.0.8, phan
[root@es-3-head-kib elasticsearch-head-master]# nohup grunt server & 后台运行
(7)测试
访问http://192.168.88.132:9100
在这里插入图片描述
3、kibana部署
系统类型:Centos7.5 节点IP:192.168.88.132 D 软件版本:nginx-1.14.2、kibana-6.5.4-linux-x86_64.tar.gz kibana只是展示日志的画面,所以最后部署也可以
1
- 安装配置Kibana
[root@es-3-head-kib ~]# tar zvxf kibana-6.5.4-linux-x86_64.tar.gz -C /usr/local/
[root@es-3-head-kib ~]# cd /usr/local/kibana-6.5.4-linux-x86_64/config/
[root@es-3-head-kib config]# vim kibana.yml
server.port: 5601
server.host: "192.168.88.132"
elasticsearch.url: "http://192.168.88.129:9200"
kibana.index: ".kibana"
1
2
3
4
5
6
7
8
注意这里版本不一样,7.2和6.5的配置文件内容不一样
配置项含义
server.port kibana服务端口,默认5601
server.host kibana主机IP地址,默认localhost
elasticsearch.url 用来做查询的ES节点的URL,默认http://localhost:9200
kibana.index kibana在Elasticsearch中使用索引来存储保存的searches, visualizations和
dashboards,默认.kibana
启动
[root@es-3-head-kib config]# cd ..
[root@es-3-head-kib kibana-6.5.4-linux-x86_64]# nohup ./bin/kibana &
[1] 12054
[root@es-3-head-kib kibana-6.5.4-linux-x86_64]# nohup: ignoring input and appending output to‘nohup.out’
访问测试http://192.168.88.132:5601
1
2
3
4
5
6
2.安装配置Nginx反向代理
(1)配置YUM源:
[root@es-3-head-kib ~]# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
(2)安装:
[root@es-3-head-kib ~]# yum install -y nginx 注意:httpd-tools用于生成nginx认证访问的用户密码文件
systemctl restart nginx
(3)配置反向代理
[root@es-3-head-kib ~]# cd /etc/nginx/conf.d/
[root@es-3-head-kib conf.d]# cp default.conf nginx.conf
[root@es-3-head-kib conf.d]# mv default.conf default.conf.bak
[root@es-3-head-kib conf.d]# vim nginx.conf
[root@es-3-head-kib conf.d]# cat nginx.conf
server {
listen 80;
server_name 192.168.88.132;
charset koi8-r;
access_log /var/log/nginx/host.access.log main;
access_log off;
location / {
proxy_pass http://192.168.88.132:5601;
proxy_set_header Host remote_addr;
proxy_set_header X-Forwarded-For host:9100;
proxy_set_header X-Real-IP proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
访问http://192.168.88.132
1
在这里插入图片描述
4、部署kafka集群 三台都要部署
1.安装配置Zookeeper
Kafka运行依赖ZK,Kafka官网提供的tar包中,已经包含了ZK,这里不再额下载ZK程序。
tar xzvf kafka_2.11-2.1.0.tgz -C /usr/local/
sed -i 's/[#]/#&/' /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties
vim /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties
dataDir=/opt/data/zookeeper/data
dataLogDir=/opt/data/zookeeper/logs
clientPort=2181
tickTime=2000
initLimit=20
syncLimit=10
server.1=192.168.88.129:2888:3888
server.2=192.168.88.131:2888:3888
server.3=192.168.88.132:2888:3888
注意这里的顺序,1,2,3后面对应id号 1,2,3
创建data、log目录
mkdir -p /opt/data/zookeeper/{data,logs}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
配置项含义
dataDir ZK数据存放目录。
dataLogDir ZK日志存放目录。
clientPort 客户端连接ZK服务的端口。
tickTime ZK服务器之间或客户端与服务器之间维持心跳的时间间隔。
initLimit 允许follower(相对于Leaderer言的“客户端”)连接并同步到Leader的初始化连接时间,以
tickTime为单位。当初始化连接时间超过该值,则表示连接失败。
syncLimit Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通
信,那么此follower将会被丢弃。
server.1=192168.88.129:2888:3888 2888是follower与leader交换信息的端口,3888是当leader挂了时用来
执行选举时服务器相互通信的端口。
2、配置kafka
sed -i 's/[#]/#&/' /usr/local/kafka_2.11-2.1.0/config/server.properties
vim /usr/local/kafka_2.11-2.1.0/config/server.properties #在最后添加
broker.id=1 #注意这里要和server1,2,3对应
listeners=PLAINTEXT://192.168.88.129:9092 #本机的kafka ip
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/data/kafka/logs
num.partitions=6
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.88.129:2181,192.168.88.131:2181,192.168.88.132:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
创建目录
mkdir -p /opt/data/kafka/logs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
三台分别创建myid文件
echo 1 > /opt/data/zookeeper/data/myid #myid号按顺序排
echo 2 > /opt/data/zookeeper/data/myid #myid号按顺序排
echo 3 > /opt/data/zookeeper/data/myid #myid号按顺序排
1
2
3
4
配置项含义:
broker.id 每个server需要单独配置broker id,如果不配置系统会自动配置。
listeners 监听地址,格式PLAINTEXT://IP:端口。
num.network.threads 接收和发送网络信息的线程数。
num.io.threads 服务器用于处理请求的线程数,其中可能包括磁盘I/O。
socket.send.buffer.bytes 套接字服务器使用的发送缓冲区(SO_SNDBUF)
socket.receive.buffer.bytes 套接字服务器使用的接收缓冲区(SO_RCVBUF)
socket.request.max.bytes 套接字服务器将接受的请求的最大大小(防止OOM)
log.dirs 日志文件目录。
num.partitions partition数量。
num.recovery.threads.per.data.dir 在启动时恢复日志、关闭时刷盘日志每个数据目录的线程的数量,默认
1。
offsets.topic.replication.factor 偏移量话题的复制因子(设置更高保证可用),为了保证有效的复制,
偏移话题的复制因子是可配置的,在偏移话题的第一次请求的时候可用的broker的数量至少为复制因子的大小,否则要么
话题创建失败,要么复制因子取可用broker的数量和配置复制因子的最小值。
log.retention.hours 日志文件删除之前保留的时间(单位小时),默认168
log.segment.bytes 单个日志文件的大小,默认1073741824
log.retention.check.interval.ms 检查日志段以查看是否可以根据保留策略删除它们的时间间隔。
zookeeper.connect ZK主机地址,如果zookeeper是集群则以逗号隔开。
zookeeper.connection.timeout.ms 连接到Zookeeper的超时时间。
3 、启动、验证ZK集群
(1)启动 先启动zookeeper
在三个节点依次执行:
cd /usr/local/kafka_2.11-2.1.0/
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
三台都启动以后查看一下端口,这里端口正常就可以进行下一步了
ss -anpt | grep 2181
[root@es-3-head-kib-zk-file kafka_2.11-2.1.0]# ss -anpt | grep 2181
LISTEN 0 50 :::2181 :::* users:(("java",pid=84513,fd=97))
(2)验证
yum install -y nc
[root@es-2-zk-log kafka_2.11-2.1.0]# echo conf | nc 127.0.0.1 2181
clientPort=2181
dataDir=/opt/data/zookeeper/data/version-2
dataLogDir=/opt/data/zookeeper/logs/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=1
initLimit=20
syncLimit=10
electionAlg=3
electionPort=3888
quorumPort=2888
peerType=0
(3)启动kafka
在三个节点依次执行
[root@es-2-zk-log ~]# cd /usr/local/kafka_2.11-2.1.0/
[root@es-2-zk-log kafka_2.11-2.1.0]# nohup bin/kafka-server-start.sh config/server.properties &
都执行完了看一下nohup.out
发现第二台机器报错了
[2019-08-11 13:20:00,428] INFO Got user-level KeeperException when processing sessionid:0x30000fef0f00000 type:multi cxid:0x38 zxid:0x10000003b txntype:-1 reqpath:n/a aborting remaining multi ops. Error Path:/admin/preferred_replica_election Error:KeeperErrorCode = NoNode for /admin/preferred_replica_election (org.apache.zookeeper.server.PrepRequestProcessor)
好像忘了创建目录
mkdir -p /opt/data/kafka/logs
杀掉kafka的进程又重启了一次OK
[2019-08-11 13:20:00,253] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)
[2019-08-11 13:29:56,673] INFO [GroupMetadataManager brokerId=1] Removed 0 expired offsets in 0 milliseconds. (kafka.coordinator.group.GroupMetadataManager)
(2)验证
创建topic
[root@mes-1-zk kafka_2.11-2.1.0]# bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopic 最好在第一台机器上创建
Created topic "testtopic".
三台机器上都查询一下
bin/kafka-topics.sh --zookeeper 192.168.88.129:2181 --list
显示testtopic就算可以了
模拟消息生产和消费 发送消息到192.168.88.129
[root@mes-1-zk kafka_2.11-2.1.0]# bin/kafka-console-producer.sh --broker-list 192.168.88.129:9092 --topic testtopic
hello
[root@es-2-zk-log kafka_2.11-2.1.0]# bin/kafka-console-consumer.sh --bootstrap-server 192.168.88.129:9092 --topic testtopic --from-beginning
hello 接收到消息 可能会有延迟比较慢
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
5、Logstash部署----192.168.88.131
logstash-6.5.4.tar.gz
(1).安装配置Logstash
[root@es-2-zk-log ~]# tar xvzf logstash-6.5.4.tar.gz -C /usr/local/
(2)配置
创建目录,我们将所有input、filter、output配置文件全部放到该目录中。
安装nginx这里是要收集这个nginx的日志
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
[root@es-2-zk-log ~]# yum install -y nginx
[root@es-2-zk-log ~]# systemctl start nginx
[root@es-2-zk-log ~]# systemctl enable nginx
多访问几次页面,,不然后面没有日志产生无法排错
[root@es-2-zk-log ~]# mkdir -p /usr/local/logstash-6.5.4/etc/conf.d
[root@es-2-zk-log ~]# cd /usr/local/logstash-6.5.4/etc/conf.d/
[root@es-2-zk-log conf.d]# vim input.conf #---在下面添加
input {
kafka { #指定kafka服务
type => "nginx_log"
codec => "json" #通用选项,用于输入数据的编解码器
topics => "nginx" #这里定义的topic
decorate_events => true #此属性会将当前topic、group、partition等信息也带到message中
bootstrap_servers => "192.168.88.129:9092, 192.168.88.131:9092, 192.168.88.132:9092"
}
}
[root@es-2-zk-log conf.d]# vim output.conf
output{ #输出插件,将事件发送到特定目标
stdout{
codec => "rubydebug"
}
elasticsearch { #输出到es
hosts => ["192.168.88.129:9200"] #指定es服务的ip加端口
index => ["%{type}-%{+YYYY.MM.dd}"] #引用input中的type名称,定义输出的格式
}
}
这里先不要启动,等配置完filebeat再启动
[root@es-2-zk-log conf.d]# cd /usr/local/logstash-6.5.4/
[root@es-2-zk-log logstash-6.5.4]# nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Filebeat 部署--------192.168.88.131
为什么用 Filebeat ,而不用原来的 Logstash 呢?
原因很简单,资源消耗比较大。
由于 Logstash 是跑在 JVM 上面,资源消耗比较大,后来作者用 GO 写了一个功能较少但是资源消耗也小的轻量级
的 Agent 叫 Logstash-forwarder。
后来作者加入 elastic.co 公司, Logstash-forwarder 的开发工作给公司内部 GO 团队来搞,最后命名为
Filebeat。
Filebeat 需要部署在每台应用服务器上,可以通过 Salt 来推送并安装配置
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz
tar xzvf filebeat-6.5.4-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local/
mv filebeat-6.5.4-linux-x86_64 filebeat
cd filebeat/
修改配置
修改 Filebeat 配置,支持收集本地目录日志,并输出日志到 Kafka 集群中
mv filebeat.yml filebeat.yml.bak
vim filebeat.yml
filebeat.prospectors:
- input_type: log #指定输入的类型
paths: - /var/log/nginx/*.log #日志的路径
json.keys_under_root: true
json.add_error_key: true
json.message_key: log
output.kafka:
hosts: [“192.168.88.129:9092”,“192.168.88.131:9092”,“192.168.88.132:9092”]kafka服务器
topic: 'nginx' #输出到kafka中的topic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
注意这里是剧本的格式 如果格式不对会报错
filebeat.prospectors:(冒号后面有个空格)
- input_type: log
(这里两个空格)paths:
(这里两个空格)- /var/log/nginx/*.log
json.keys_under_root: true
json.add_error_key: true
json.message_key: log
output.kafka:(冒号后面有个空格)
(这里两个空格)hosts: [“192.168.88.129:9092”,“192.168.88.131:9092”,“192.168.88.132:9092”]
(这里两个空格)topic: ‘nginx’
启动
nohup ./filebeat -e -c filebeat.yml &
tail -f nohup.out
访问nginx页面,这里显示已经抓取到日志了
验证kafka是否生成topic
[root@es-3-head-kib filebeat]# cd /usr/local/kafka_2.11-2.1.0/
[root@es-3-head-kib kafka_2.11-2.1.0]# bin/kafka-topics.sh --zookeeper 192.168.246.231:2181 --
list
__consumer_offsets
nginx #已经生成topic
testtopic
现在启动logstash
cd /usr/local/logstash-6.5.4/
nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
发现报错了 查看nohup.out
[2019-08-11T15:05:01,918][ERROR][logstash.config.sourceloader] Could not fetch all the sources {:exception=>LogStash::ConfigLoadingError, :message=>"The following config files contains non-ascii characters but are not UTF-8 encoded ["/usr/local/logstash-6.5.4/etc/conf.d/filebeat-6.5.4-linux-x86_64.tar.gz"]",
配置文件里竟然有个压缩包,删掉就好了
再次查看一下
[root@es-2-zk-log conf.d]# ls
input.conf output.conf
再次杀进程启动一下
nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
tailf nohup.out 下面就好了
[2019-08-11T15:21:08,208][INFO ][org.apache.kafka.clients.consumer.internals.ConsumerCoordinator] [Consumer clientId=logstash-0, groupId=logstash] Setting newly assigned partitions [nginx-1, nginx-0, nginx-3, nginx-2, nginx-5, nginx-4]
[2019-08-11T15:21:08,607][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
访问http://192.168.88.132:9100/ 这里需要等一两分钟
1
在这里插入图片描述
访问kibana页面 http://192.168.88.132
创建索引
在这里插入图片描述
选择第一个时间
在这里插入图片描述
继续访问·nginx 实时产生日志
在这里插入图片描述
ELK+Filebeat+Kafka+ZooKeeper构建大数据日志分析平台
阅读数 1192
本来从原公司离职以后,应该去约好的公司去面试的。但是家里出了一点急事就回老家了。因此利用在老家的这段时间来整理下之前的公司项目里面用的的知识点和一些经验。原来的项目数据采集部分都是使用flume+ka...
博文
来自: xujing
网友评论