ELK+kafka+filebeats日志采集部署

ELK版本:7.4.0
elastic官网地址:https://www.elastic.co/cn/
elastic产品地址:https://www.elastic.co/cn/elastic-stack
yum源地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum

一、ELK简介

ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。

Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。在elasticsearch中,所有节点的数据是均等的。

Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。

版本说明:

Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。

ELK常见的几种架构:

1 Elasticsearch + Logstash + Kibana

每台机器(客户端)上部署Logstash,logstash收集了数据直接往es里面写,es分析日志,kibana查询es的数据做展示。

这是一种最简单的架构。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。因为这样要在每台机器上都部署logstash,资源消耗比较大。

2 Elasticsearch + Logstash + filebeat + Kibana

每台机器(客户端)上部署filebeat收集数据,filebeat往1台logstash里面写,logstash往es里面写,es分析日志,kibana查询es的数据做展示。

与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。

3 Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如RabbitMQ、kafka) + Kibana

每台机器(客户端)上部署filebeat收集数据,filebeat往消息中间件集群写,1台logstash消费消息中间件集群然后往es里面写,es分析日志,kibana查询es的数据做展示。

这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。

二、部署

本文以es+logstash+filebeat+kafka+kibana为例 

机器部署计划

node1: es、filebeat、kafka、zk

node2: es、filebeat、kafka、zk、logstash

node3: es、filebeat、kafka、zk、kibana

1.首先安装JDK

1.8

注意es的版本要和JDK的版本匹配

2.安装kafka+zk集群

zk集群安装:https://blog.csdn.net/jy02268879/article/details/80615189

kafka集群安装:https://blog.csdn.net/jy02268879/article/details/80616889 

注意这里在启动kafka前还需要修改一下配置

vi /app/kafka/kafka_2.12-2.0.0/config/server.properties

listeners=PLAINTEXT://172.20.10.8:9092
advertised.listeners=PLAINTEXT://172.20.10.8:9092

这里的IP是本机的IP,默认为localhost,不补齐会导致filebeat启动时连接kafka会有问题:

3.安装es

https://www.elastic.co/cn/downloads/past-releases#elasticsearch

每台机器下载7.4.0并且解压

每台机器创建数据目录 mkdir -p /app/es/data

每台机器修改配置

cd /app/es/elasticsearch-7.4.0/config

vi elasticsearch.yml

cluster.name: my-log-es (集群名称)
node.name: node-1 (节点名称)
path.data: /app/es/data   (存储数据的目录,需要根据具体服务器目录配置)
network.host: 172.20.10.8 (ip地址,需要根据具体服务器地址配置)
http.port: 9200        (端口号,默认为9200)
discovery.seed_hosts: ["172.20.10.11", "172.20.10.10"]
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

启动 

./bin/elasticsearch -d (输入-d表示后台运行)

Linux下elasticsearch不允许root用户运行,需要切换到其他用户执行该命令

在浏览器上输入http://172.20.10.10:9200 如果显示以下页面则说明安装成功

还要在浏览器输入http://172.20.10.8:9200/_cat/nodes?pretty

 启动报错

ERROR: [4] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [3795] for user [sid] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[4]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

 解决方法

修改配置文件,即可解决[4]的报错

vi /app/es/elasticsearch-7.4.0/config/elasticsearch.yml

cluster.initial_master_nodes: ["node-1", "node-2","node-3"]

切换到root用户,编辑limits.conf 添加类似如下内容,即可解决[1][2]的报错

vi /etc/security/limits.conf 

添加如下内容:

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

切换到root用户,即可解决[3]的报错

执行命令:

sysctl -w vm.max_map_count=262144

查看结果:

sysctl -a|grep vm.max_map_count

显示:

vm.max_map_count = 262144

上述方法修改之后,如果重启虚拟机将失效

在   /etc/sysctl.conf文件最后添加一行,即可解决[3]的报错

vm.max_map_count=262144

4.Logstash安装

下载https://www.elastic.co/cn/downloads/logstash  7.4.0版本

在node2安装

在config文件中定义一个kafka.conf文件,定义input以及output

cd /app/logstash/logstash-7.4.0/config

vi kafka.conf

input {
kafka {               #指定kafka服务
    type => "app_log"
    codec => "json"        #通用选项,用于输入数据的编解码器
    topics => "topic.log.es"        #这里定义的topic
    decorate_events => true  #此属性会将当前topic、group、partition等信息也带到message中
    bootstrap_servers => "172.20.10.8:9092,172.20.10.11:9092,172.20.10.10:9092"  #kafka集群IP和端口号9092
  }
}
output{ #输出插件,将事件发送到特定目标
elasticsearch { #输出到es
hosts => ["172.20.10.8:9200","172.20.10.11:9200","172.20.10.10:9200"] #指定es服务的ip加端口
index => ["%{type}-%{+YYYY.MM.dd}"] #引用input中的type名称,定义输出的格式
}
}

注意这里的type的值为app_log,在kibana才启动后喊创建索引,能看到:

其实这个type,比如说哈,我有5套环境,每套环境有7个组件。那这里可以分开,写35个input。

每个的type叫环境名-组件名。且每个走不同的topic

启动服务 ./bin/logstash -f config/kafka.conf

后台启动 nohup ./bin/logstash -f config/kafka.conf &

报错

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /app/logstash/logstash-7.4.0/hs_err_pid7568.log

解决方法

我是在虚拟机上运行的,虚拟机的内存只有1G,改成了2G

报错

Got response code '503' contacting Elasticsearch at URL 'http://172.20.10.8:9200/_template/logstash'

5.Kibana安装

在node3安装

下载:https://www.elastic.co/cn/downloads/past-releases#kibana

下载7.4.0版本并且解压到/app/kibana

修改config/kibana.yml文件

config/kibana.yml文件加入配置使之变成中文界面

i18n.locale: "zh-CN" 

启动

nohup ./bin/kibana &

同样也是不能以root启动

在浏览器输入http://172.20.10.10:5601

启动报错

{"type":"log","@timestamp":"2021-08-23T12:50:39Z","tags":["reporting","warning"],"pid":23049,"message":"Reporting plugin self-check failed. Please check the Kibana Reporting settings. Error: Could not close browser client handle!"}
Could not create APM Agent configuration: Request Timeout after 30000ms

 解决方法

参考:https://blog.csdn.net/qq_40907977/article/details/104499178

https://www.oschina.net/question/2312022_2314950

6.filebeat安装

下载:https://www.elastic.co/cn/downloads/past-releases#filebeat

下载7.4.0.版本并且解压

cd /app/filebeat/filebeat-7.4.0-linux-x86_64

vi filebeat.yml

加入

output.kafka:
  # initial brokers for reading cluster metadata
  hosts: ["172.20.10.8:9092", "172.20.10.11:9092", "172.20.10.10:9092"]

  # message topic selection + partitioning
  topic: 'topic.log.es'
  partition.round_robin:
    reachable_only: false

  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

其中paths表示从采集什么日志文件

type:log表示输入内容Log方式

启动  nohup ./filebeat -e -c filebeat.yml &

三、kibana简单使用、及验证

kibana启动起来后创建索引

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值