ELK 详细安装及介绍
组件介绍:
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
http://172.16.3.225:5601/

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

查看一下es-head插件里面的索引是否增加了
可以看到这里多了一个咱们设置的索引,如果出现这个就说明没有问题

9 、 Kibana展示Nginx日志
http://172.16.3.225:5601/






浙公网安备 33010602011771号