组件介绍:
Elasticsearch:
- 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Logstash:
- 主要是用来日志的搜集、分析、过滤日志的工具。用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。
Kibana:
- 是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持,它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Kafka:
- 数据缓冲队列。作为消息队列解耦了处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
- 1.发布和订阅记录流,类似于消息队列或企业消息传递系统。
- 2.以容错持久的方式存储记录流。
- 3.处理记录发生的流。
Filebeat:
- 隶属于Beats,轻量级数据收集引擎。基于原先 Logstash-fowarder的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择,目前Beats包含四种工具:
- 1.Packetbeat(搜集网络流量数据)
- 2.Metricbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据。通过从操作系统和服务收集指标,帮助您监控服务器及其托管的服务。)
- 3.Filebeat(搜集文件数据)
- 4.Winlogbeat(搜集 Windows 事件日志数据)
实验环境:
主机 | 服务 |
---|---|
172.16.3.225/21 | Elasticsearch、zookeeper、kafka、Logstash/kibana |
172.16.3.226/21 | Elasticsearch、zookeeper、kafka |
172.16.3.227/21 | Elasticsearch、zookeeper、kafka |
172.16.5.55/21 | filebeat、Nginx |
相关软件包下载地址:
-
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
- https://artifacts.elastic.co/downloads/logstash/logstash-6.5.4.tar.gz
-
https://artifacts.elastic.co/downloads/kibana/kibana-6.5.4-linux-x86_64.tar.gz
- https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz
- https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- https://github.com/mobz/elasticsearch-head/archive/master.zip
- https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
- https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2
实验步骤:
节点:172.16.3.225、172.16.3.226、172.16.3.227
将安装所需的软件包分别放到三台服务器上:
[root@k8s-master01 ~]# ls /usr/local/src/
elasticsearch-6.5.4.tar.gz kafka_2.11-2.0.0.tgz master.zip
filebeat-6.5.4-linux-x86_64.tar.gz kibana-6.5.4-linux-x86_64.tar.gz node-v4.4.7-linux-x64.tar.gz
jdk-8u211-linux-x64.tar.gz logstash-6.5.4.tar.gz phantomjs-2.1.1-linux-x86_64.tar.bz2
1、安装JDK,因为es运行依赖jdk
[root@k8s-master01 ~]# echo '
172.16.3.225 elk01
172.16.3.226 elk02
172.16.3.227 elk03
' >> /etc/hosts
[root@k8s-master01 ~]# tar zxf /usr/local/src/jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@k8s-master01 ~]# mv /usr/local/jdk1.8.0_211/ /usr/local/java
[root@k8s-master01 ~]# echo 'JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
' >> /etc/profile
[root@k8s-master01 ~]# source /etc/profile
[root@k8s-master01 ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
2、安装并配置ES
2.1、创建运行es的普通用户
[root@k8s-master01 ~]# useradd elk
[root@k8s-master01 ~]# echo "xxx" | passwd --stdin elk
2.2、安装配置ES
[root@k8s-master01 ~]# tar zxf /usr/local/src/elasticsearch-6.5.4.tar.gz -C /usr/local/
[root@k8s-master01 ~]# echo '
cluster.name: qf01-elk # 集群名称,各节点配成相同的集群名称。
node.name: elk01 # 节点名称,各节点配置不同。 [!!各节点不同]。 节点二改为elk02、节点三改为elk03
node.master: true # 指示某个节点是否符合成为主节点的条件。
node.data: true # 指示节点是否为数据节点。数据节点包含并管理索引的一部分。
path.data: /data/elasticsearch/data # 数据存储目录
path.logs: /data/elasticsearch/logs # 日志存储目录
bootstrap.memory_lock: true # 内存锁定,是否禁用交换
bootstrap.system_call_filter: false # 系统调用过滤器。
network.host: 172.16.3.225 # 绑定节点IP 、 此处修改成当前自己主机的IP
http.port: 9200 # rest api端口。
discovery.zen.ping.unicast.hosts: ["172.16.3.225:9300","172.16.3.226:9300","172.16.3.227:9300"] # 提供其他Elasticsearch 服务节点的单点广播发现功能
discovery.zen.minimum_master_nodes: 2 # 集群中可工作的具有Master节点资格的最小数量,官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数>量。
discovery.zen.ping_timeout: 150s # 节点在发现过程中的等待时间。
discovery.zen.fd.ping_retries: 10 # 节点发现重试次数。
client.transport.ping_timeout: 60s
http.cors.enabled: true # 是否允许跨源 REST 请求,用于允许head插件访问ES
http.cors.allow-origin: "*" # 允许的源地址
' >> /usr/local/elasticsearch-6.5.4/config/elasticsearch.yml
2.3、设置JVM堆大小
[root@k8s-master01 ~]# sed -i 's/-Xms1g/-Xms6g/' /usr/local/elasticsearch-6.5.4/config/jvm.options
[root@k8s-master01 ~]# sed -i 's/-Xmx1g/-Xmx6g/' /usr/local/elasticsearch-6.5.4/config/jvm.options
注意:1.确保堆内存最小值(Xms)与最大值(Xmx)的大小相同,防止程序在运行时改变堆内存大小。
2.如果系统内存足够大,将堆内存最大和最小值设置为31G,因为有一个32G性能瓶颈问题。
3.堆内存大小不要超过系统内存的50%
2.4、创建es数据及日志存储目录
[root@k8s-master01 ~]# mkdir -pv /data/elasticsearch/data
[root@k8s-master01 ~]# mkdir -pv /data/elasticsearch/logs
2.5、修改安装目录及存储目录权限
[root@k8s-master01 ~]# chown -R elk.elk /data/elasticsearch
[root@k8s-master01 ~]# chown -R elk.elk /usr/local/elasticsearch-6.5.4/
3、系统优化
3.1、增加最大文件打开数
[root@k8s-master01 ~]# echo "* - nofile 65536" >>/etc/security/limits.conf
3.2、增加最大进程数
[root@k8s-master01 ~]# echo '* soft nofile 819200' >> /etc/security/limits.conf
[root@k8s-master01 ~]# echo '* hard nofile 819200' >> /etc/security/limits.conf
[root@k8s-master01 ~]# echo '* soft nproc 2048' >> /etc/security/limits.conf
[root@k8s-master01 ~]# echo '* hard nproc 4096' >> /etc/security/limits.conf
[root@k8s-master01 ~]# echo '* hard memlock unlimited' >> /etc/security/limits.conf
[root@k8s-master01 ~]# echo '* soft memlock unlimited' >> /etc/security/limits.conf
3.3、增加最大内存映射数
[root@k8s-master01 ~]# echo "vm.max_map_count=262144" >> /etc/sysctl.conf
[root@k8s-master01 ~]# sysctl -p
3.4、启动ES
[root@k8s-master01 ~]# su - elk -s /bin/bash
[elk@k8s-master01 ~]$ cd /usr/local/elasticsearch-6.5.4/bin/
[elk@k8s-master01 bin]$ nohup ./elasticsearch &
测试一下elk是否正常:http://172.16.3.225:9200/、http://172.16.3.226:9200/、http://172.16.3.227:9200/
出现如下结果说明没有问题
3.5、查看集群状态:
[root@k8s-master01 config]# curl 172.16.3.225:9200/_cluster/health?pretty
{
"cluster_name" : "qf01-elk", # 集群名称
"status" : "green", # 集群状态,分为green、yellow和red
"timed_out" : false,
"number_of_nodes" : 3, # 集群的节点数。
"number_of_data_nodes" : 3, # 集群的数据节点数。
"active_primary_shards" : 0, # 集群中所有活跃的主分片数。
"active_shards" : 0, # 集群中所有活跃的分片数。
"relocating_shards" : 0, # 当前节点迁往其他节点的分片数量,通常为0,当有节点加入或者退出时该值会增加
"initializing_shards" : 0, # 正在初始化的分片。
"unassigned_shards" : 0, # 未分配的分片数,通常为0,当有某个节点的副本分片丢失该值就会增加
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0, # 是指主节点创建索引并分配shards等任务,如果该指标数值一直未减小代表集群存在不稳定因素
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0 # 集群分片健康度,活跃分片数占总分片数比例
}
3.6、查看master是谁:
[root@k8s-master01 config]# curl 172.16.3.225:9200/_cat/master
6rDALlC-SbOG0_O85fU-VQ 172.16.3.225 172.16.3.225 elk01
3.7、查看所有node:
[root@k8s-master01 config]# curl 172.16.3.225:9200/_cat/nodes
172.16.3.225 4 99 1 0.00 0.08 0.09 mdi * elk01 # *代表master
172.16.3.227 14 59 1 0.00 0.06 0.07 mdi - elk03
172.16.3.226 14 59 1 0.00 0.07 0.08 mdi - elk02
4、安装es可视化插件head监控
此插件提供有好的界面,实现基本信息的查看,rest请求的模拟,数据的检索
head插件不需要在所有的机器上安装,安装一台上即可,因为一台安装了他就会获取到整个集群
4.1、安装node,因为head插件依赖于node
[root@k8s-master01 ~]# tar zxf /usr/local/src/node-v4.4.7-linux-x64.tar.gz -C /usr/local/
[root@k8s-master01 ~]# echo '
NODE_HOME=/usr/local/node-v4.4.7-linux-x64
PATH=$NODE_HOME/bin:$PATH
export NODE_HOME PATH
' >> /etc/profile
[root@k8s-master01 ~]# source /etc/profile
[root@k8s-master01 ~]# node --version
v4.4.7
4.2、下载head插件
[root@k8s-master01 ~]# unzip /usr/local/src/master.zip -d /usr/local/
4.3、安装grunt
[root@k8s-master01 ~]# cd /usr/local/elasticsearch-head-master/
[root@k8s-master01 elasticsearch-head-master]# npm install -g grunt-cli
[root@k8s-master01 elasticsearch-head-master]# grunt --version
grunt-cli v1.3.2
4.4、修改head源码
[root@k8s-master01 elasticsearch-head-master]# vim /usr/local/elasticsearch-head-master/Gruntfile.js
94 connect: {
95 server: {
96 options: {
97 port: 9100,
98 base: '.',
99 keepalive: true, # 注意这里需要有个逗号分开
100 hostname: '*' # 添加一行内容
101 }
102 }
103 }
[root@k8s-master01 elasticsearch-head-master]# vim /usr/local/elasticsearch-head-master/_site/app.js
4374 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://172.16.3.225:9200";
注:这里原本是http://localhost:9200,如果head和ES不在同一台节点,注意修改成ES的ip地址,如果在同一台机器可以不修改
4.5、下载head必要的文件
[root@k8s-master01 elasticsearch-head-master]# mkdir /tmp/phantomjs
[root@k8s-master01 elasticsearch-head-master]# cp /usr/local/src/phantomjs-2.1.1-linux-x86_64.tar.bz2 /tmp/phantomjs/4.6、运行head
[root@k8s-master01 elasticsearch-head-master]# cd /usr/local/elasticsearch-head-master/
[root@k8s-master01 elasticsearch-head-master]# yum install bzip2 -y
[root@k8s-master01 elasticsearch-head-master]# npm install --registry=https://registry.npm.taobao.org
[root@k8s-master01 elasticsearch-head-master]# nohup grunt server &
[root@k8s-master01 elasticsearch-head-master]# less nohup.out # 查看一下日志是否启用成功
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
注:如果在npm install --registry=https://registry.npm.taobao.org 出现如下问题
Error: read ECONNRESET
at exports._errnoException (util.js:1020:11)
at TCP.onread (net.js:568:26)
如果出现这个报错,
-------1.尝试重启电脑即可;
-------2.查看自己的网络有没有问题、或者多尝试几次
4.7、测试
访问:http://172.16.3.225:9100
注意:
- 1.Master 与 Data 节点分离,当 Data 节点大于 3 个的时候,建议责任分离,减轻压力
- 2.Data Node 内存不超过 32G ,建议设置成 31 G ,因为有一个32G性能瓶颈问题。
- 3.discovery.zen.minimum_master_nodes 设置成( total / 2 +1 ),避免脑裂情况
- 4.最重要的一点,不要将 ES 暴露在公网中,建议都安装 X-PACK,来加强其安全性
5、Kibana 部署
节点:172.16.3.225
5.1、安装
[root@k8s-master01 ~]# tar zxf /usr/local/src/kibana-6.5.4-linux-x86_64.tar.gz -C /usr/local/
5.2、配置
[root@k8s-master01 ~]# echo '
server.port: 5601 # kibana服务端口,默认5601
server.host: "172.16.3.225" # kibana主机IP地址,默认localhost
elasticsearch.url: "http://172.16.3.225:9200" # 用来做查询的ES节点的URL,默认http://localhost:9200
kibana.index: ".kibana" # kibana在Elasticsearch中使用索引来存储保存的searches, visualizations和dashboards,默认.kibana
' >> /usr/local/kibana-6.5.4-linux-x86_64/config/kibana.yml
[root@k8s-master01 kibana-6.5.4-linux-x86_64]# nohup ./bin/kibana &
其他配置可参考:https://www.elastic.co/guide/en/kibana/6.5/settings.html
5.3、访问Kibana
6、Kafka 部署
节点: 172.16.3.225、172.16.3.226、172.16.3.227
6.1、安装jdk环境
[root@k8s-master01 ~]# tar zxf /usr/local/src/jdk-8u211-linux-x64.tar.gz -C /usr/local/
[root@k8s-master01 ~]# mv /usr/local/jdk1.8.0_211/ /usr/local/java
[root@k8s-master01 ~]# echo 'JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
' >> /etc/profile
[root@k8s-master01 ~]# source /etc/profile
[root@k8s-master01 ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
6.2、安装配置zk
kafka运行依赖zk,kafka官网提供的tar包中,已经包含了zk,这里不再额下载zk的程序
(1)安装
[root@k8s-master01 ~]# tar zxf /usr/local/src/kafka_2.11-2.0.0.tgz -C /usr/local/
(2)配置
[root@k8s-master01 ~]# sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.0.0/config/zookeeper.properties
[root@k8s-master01 ~]# echo '
dataDir=/opt/data/zookeeper/data
dataLogDir=/opt/data/zookeeper/logs
clientPort=2181
tickTime=2000
initLimit=20
syncLimit=10
server.1=172.16.3.225:2888:3888
server.2=172.16.3.226:2888:3888
server.3=172.16.3.227:2888:3888
' >>/usr/local/kafka_2.11-2.0.0/config/zookeeper.properties
配置解释:
dataDir ------------ZK数据存放目录。.
dataLogDir ------ ZK日志存放目录。
clientPort -------- 客户端连接ZK服务的端口。
tickTime ---------- ZK服务器之间或客户端与服务器之间维持心跳的时间间隔。
initLimit ----------- 允许follower(相对于Leaderer言的“客户端”)连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。
syncLimit ---------- Leader与Follower之间发送消息时,请求和应答时间⻓度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
server.1=172.16.3.225:2888:3888 ------------2888是follower与leader交换信息的端口,3888是当leader挂了时用来执行选举时服务器相互通信的端口。
(3)创建data、log目录
[root@k8s-master01 ~]# mkdir -p /opt/data/zookeeper/{data,logs}
(4)创建myid
[root@k8s-master01 ~]# echo 1 > /opt/data/zookeeper/data/myid # 每台kafka机器都要做成唯一的ID
6.3、配置Kafka
[root@k8s-master01 ~]# sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.0.0/config/server.properties
[root@k8s-master01 ~]# echo '
broker.id=1
listeners=PLAINTEXT://172.16.3.225:9092
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=172.16.3.225:2181,172.16.3.226:2181,.16.3.227:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
' >> /usr/local/kafka_2.11-2.0.0/config/server.properties
配置文件解释:
broker.id 每个server需要单独配置broker id,如果不配置系统会自动配置。需要和上一步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的超时时间。
6.4、创建log目录
[root@k8s-master01 ~]# mkdir -p /opt/data/kafka/logs
6.5、其他节点配置
只需把配置好的安装包直接分发到其他节点,然后修改ZK的myid,Kafka的broker.id和listeners就可以了。
6.6、启动、验证zk集群
(1)启动
在三个节点依次执行:
[root@k8s-master01 ~]# cd /usr/local/kafka_2.11-2.0.0/
[root@k8s-master01 kafka_2.11-2.0.0]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
(2)验证、查看ZK配置
[root@k8s-master01 kafka_2.11-2.0.0]# yum install nc -y
[root@k8s-master01 kafka_2.11-2.0.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)查看zk状态
[root@k8s-master01 kafka_2.11-2.0.0]# echo stat | nc 127.0.0.1 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 00:39 GMT
Clients:
/127.0.0.1:39216[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x100000000
Mode: follower
Node count: 4
(4)查看zk端口是否正常
[root@k8s-node01 kafka_2.11-2.0.0]# yum install lsof -y
[root@k8s-node01 kafka_2.11-2.0.0]# lsof -i:2181
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 10270 root 96u IPv6 41732 0t0 TCP *:eforward (LISTEN)
6.7、启动、验证kafka
(1)启动kafka
[root@k8s-master01 kafka_2.11-2.0.0]# nohup bin/kafka-server-start.sh config/server.properties &
(2)验证
在172.16.3.225上创建topic、随机一台都可以
[root@k8s-master01 kafka_2.11-2.0.0]# ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopic
Created topic "testtopic".
在172.16.3.226上查看topic
[root@k8s-node01 kafka_2.11-2.0.0]# ./bin/kafka-topics.sh --zookeeper 172.16.3.225:2181 --list
testtopic
分别查看一下三台节点的topic
[root@k8s-node01 kafka_2.11-2.0.0]# ./bin/kafka-topics.sh --zookeeper 172.16.3.225:2181 --list
testtopic
[root@k8s-node01 kafka_2.11-2.0.0]# ./bin/kafka-topics.sh --zookeeper 172.16.3.227:2181 --list
testtopic
[root@k8s-node01 kafka_2.11-2.0.0]# ./bin/kafka-topics.sh --zookeeper 172.16.3.226:2181 --list
testtopic
模拟消息生产和消费 发送消息到172.16.3.225
[root@k8s-master01 kafka_2.11-2.0.0]# ./bin/kafka-console-producer.sh --broker-list 172.16.3.225:9092 --topic testtopic
>
从172.16.3.226接收消息
[root@k8s-node01 kafka_2.11-2.0.0]# ./bin/kafka-console-consumer.sh --bootstrap-server 172.16.3.226:9092 --topic testtopic --from-beginning
可以看到只要在在225上生产了消息,那么226上就会接收到到此为止说明没有问题
7、Logstash 部署
节点:172.16.3.225
安装配置Logstash
Logstash运行同样依赖jdk,本次为节省资源,故将Logstash安装在了kafka 225节点
(1)安装
[root@k8s-master01 ~]# tar zxf /usr/local/src/logstash-6.5.4.tar.gz -C /usr/local/
(2)配置
创建目录,我们将所有input、filter、output配置文件全部放到该目录中
[root@k8s-master01 ~]# mkdir -p /usr/local/logstash-6.5.4/etc/conf.d -p
[root@k8s-master01 ~]# vim /usr/local/logstash-6.5.4/etc/conf.d/input.conf
input {
kafka {
type => "nginx_kafka"
codec => "json"
topics => "nginx"
decorate_events => true
bootstrap_servers => "172.16.3.225:9092, 172.16.3.226:9092, 172.16.3.227:9092"
}
}
[root@k8s-master01 ~]# vim /usr/local/logstash-6.5.4/etc/conf.d/output.conf
output {
if [type] =="nginx_kafka" {
elasticsearch {
hosts =>["172.16.3.225","172.16.3.226","172.16.3.227"]
index => 'logstash-nginx-%{+YYYY-MM-dd}'
}
}
stdout{
codec=>rubydebug
}
}
(3)启动
[root@k8s-master01 logstash-6.5.4]# nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &
8、filebeat部署
节点:172.16.5.55
8.1、解压
[root@localhost ~]# tar zxf filebeat-6.5.4-linux-x86_64.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv filebeat-6.5.4-linux-x86_64/ filebeat
8.2、配置
修改 Filebeat 配置,支持收集本地目录日志,并输出日志到 Kafka集群中
[root@localhost local]# vim filebeat/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.add_error_key: true
json.message_key: log
output.kafka:
hosts: ["172.16.3.225:9092","172.16.3.226:9092","172.16.3.227:9092" ]
topic: 'nginx'
Filebeat 6.0 之后一些配置参数变动比较大,比如document_type 就不支持,需要用fields 来代替等等。
注释:
#keys_under_root可以让字段位于根节点,默认为false
json.keys_under_root: true
#对于同名的key,覆盖原有key值j
son.overwrite_keys: true
#message_key是用来合并多行json日志使用的,如果配置该项还需要配置multiline的设置,后面会讲
json.message_key: message
#将解析错误的消息记录储存在error.message字段中
json.add_error_key: true
8.3、启动filebeat
[root@localhost local]# nohup ./filebeat -e -c filebeat.yml &
测试:多访问几次nginx
查看一下es-head插件里面的索引是否增加了
可以看到这里多了一个咱们设置的索引,如果出现这个就说明没有问题