Linux搭建ELK日志收集系统构建:Filebeat+Redis+Logstash+Elasticse

news2024/11/23 14:04:29

Linux搭建ELK日志收集系统构建:Filebeat+Redis+Logstash+Elasticse

一、ELK概述:

ELK是一组开源软件的简称,其包括Elasticsearch、Logstash 和 Kibana。ELK最近几年发展迅速,已经成为目前最流行的集中式日志解决方案。

Elasticsearch: 能对大容量的数据进行接近实时的存储,搜索和分析操作。 本项目中主要通过Elasticsearch存储所有获取的日志。

Logstash: 数据收集引擎,它支持动态的的从各种数据源获取数据,并对数据进行过滤,分析,丰富,统一格式等操作,然后存储到用户指定的位置。

Kibana: 数据分析与可视化平台,对Elasticsearch存储的数据进行可视化分析,通过表格的形式展现出来。

Filebeat: 轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装Filebeat,并指定目录与日志格式,Filebeat就能快速收集数据,并发送给logstash进行解析,或是直接发给Elasticsearch存储。

Redis:NoSQL数据库(key-value),也数据轻型消息队列,不仅可以对高并发日志进行削峰还可以对整个架构进行解耦。

二、新型ELK框架

 

三、部署过程

1、客户端安装filebeat

早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。

Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。

(2)filebeat的工作原理

启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。

工作流程图如下。

 

从图中所示,filebeat结构:由两个组件构成,分别是inputs(输入)和harvesters(收集器),这些组件一起工作来跟踪文件并将事件数据发送到您指定的输出,harvester负责读取单个文件的内容。harvester逐行读取每个文件,并将内容发送到输出。为每个文件启动一个harvester。harvester负责打开和关闭文件,这意味着文件描述符在harvester运行时保持打开状态。如果在收集文件时删除或重命名文件,Filebeat将继续读取该文件。这样做的副作用是,磁盘上的空间一直保留到harvester关闭。默认情况下,Filebeat保持文件打开,直到达到close_inactive。

关闭harvester可以会产生的结果:

文件处理程序关闭,如果harvester仍在读取文件时被删除,则释放底层资源。

只有在scan_frequency结束之后,才会再次启动文件的收集。

如果该文件在harvester关闭时被移动或删除,该文件的收集将不会继续。

(3)filebeat的安装

通过wget获取filebeat的tar.gz包。

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.2-linux-x86_64.tar.gz

命令执行结果如下。

 

在/home目录下建立filebeat目录,然后把filebeat的压缩包解压到目录filebeat下。

 

解压后,在/usr/filebeat的对应版本filebeat目录下,编辑file--beat.yml文件。

修改的内容有加几个字段。

enabled:true
paths:程序日志路径
output.redis:日志输出地方
hosts:redis所在服务器IP
port:redis端口
key:redis中的key

①filebeat.input中的enabled改为true

②注意input的paths:-/var/log/*.log,其目的监控var中的log日志。

③将output.elasticsearch内容注释。将输出内容输出到redis中,redis数据的key值是filebeat,输出参数中的db是写入redis数据库中是哪一个库。

内容如下。

 

 

接下来停止防火墙。

systemctl disable firewalld.service
systemctl stop firewalld.service

 

再关闭selinux。

进入到etc,再进入到selinux目录下,编辑config文件,注释掉SELINUX相关内容。

 

2、安装redis

yum install -y redis

 

安装成功后,如下图。

 

然后,进入etc目录下,编辑redis.conf文件。

 

将地址绑定设定为0.0.0.0,即任何地址IP都可以登录redis。

 

启动filebeat。

在filebeat的目录下执行:

./filebeat -e -c filebeat.yml

 

然后启动redis,主要是查看filebeat的log数据是否被redis接收。

 

redis-cli进入redis 的命令行方式。

 

进入redis查看是否有数据

keys *可以看看所有key,此操作为慢查询,若redis跑了大量线上业务请不要进行此操作。

 

lrange filebeat 0 -1 查询key所有的数据,若filebeat启动时间过长请勿进行此操作。

 

3、安装jdk

首先在/usr中创建目录java。如下图所示。

 

然后在/home/soft目录下将jdk的tar包解压到/usr的java目录下。

在/etc目录下编辑profile文件,设置环境变量。 

接下来,source一下profile文件,使设置生效。

 

4、安装elasticsearch

在/home/soft 目录下拷贝elasticsearch文件夹,将文件夹拷贝到/usr目录下并重命名elasticsearch。

 

因为root用户不能启动,所以需要创建一个ES用户。

创建用户使用

useradd es

如下图。

 

给用户添加密码使用

passwd es

如下图。

 

给用户授权。

chown -R es:es elasticsearch

 

接下来切换用户。

su es

 

在elasticsearch目录下编辑文件elasticsearch.yml

将xpack.security.enabled和xpack.security.http.ssl设为false

如下图。

#ES监听地址任意IP都可访问
network.host: 0.0.0.0
http.port: 9200
 
#若是集群,可在里面引号中添加,逗号隔开
discovery.zen.ping.unicast.hosts: [“192.168.3.205”]
 
# enable cors,保证_site类的插件可以访问es 
http.cors.enabled: true #手动添加
http.cors.allow-origin: “*” #手动添加

进入elasticsearch的文件夹,启动elasticsearch,需要注意的是启动elasticsearch需要注意bin下面elasticsearch文件的执行权限。

两点:

(1)切换到es用户。su es

(2)为elasticsearch添加执行权限

Chmod +X elasticsearch

 

接下来,启动elasticsearch就可以启动elasticsearch程序了。

 

不过启动时,报错。

 

其原因在于虚拟机内存太小。需要设置etc下的文件sysctl.conf文件。

 

在文件的最后一行添加内容,vm.maxmapcount=262144

设置虚拟机内存的大小后,再次重启机器,启动./elasticsearch,最终启动elasticsearch的结果如下图所示。

 

至此,elasticsearch已启动成功。

5、安装logstash

首先在usr的目录下建立文件夹logstash

 

把home目录下soft目录下的logstash的压缩包解压到/usr/logstash目录下。

 

解压后可以测试logstash,测试脚本如下。

logstash -e “input {stdin{}} output {stdout{}}”

Stdin是基本的输入,stdout是基本的输出。

注意,logstash也需要jdk8.0的支持。在centos中的logstash目录的bin目录下,执行./logstash。执行测试指令如下。

 

此时输入任何一个语句,输出当前时间及后面的语句。如下图。

 

这里可以将输出限定为指定的格式。

logstash -e “iniput{stdin{}} output {stdout{codec=>rubydebug}}”

这里的输出code=>rubydebug指出了一种特定的输出格式。

如下图所示。

 

从图中所示,logstash已经显示Successfully started,表示logstash已经启动成功。

输入”this is a book”,输出会有一定的格式,如下图所示。

 

设定logstash的输入为Redis,输出为ES,将此设置存储成文件,文件内容如下。

input{
    redis{
      port=>”6379”
      host=>”192.168.110.150”,
      data_type=>”list”,
      type=>”log”,
      key=>”filebeat”
    }
}
output{
    elasticsearch{
        host=>”192.168.110.150:9200”
        index=>”logstash1-%{+YYYY.MM.dd}”
    }
}

logstash加载文件可以通过-f来实现。具体执行指令如下。

 

最终显示started,如下图所示。

 

6、检查redis中的keys值,是否被logstash取走。

打开终端,进入redis-cli,在命令行中输入keys *,可以查看log日志是否被logstash取走。如下图所示。

 

可以发现,redis终端中的“filebeat”键已经被logstash取走。

7、验证ES是否接收到数据。

使用curl指令查看ES中是否已接收到数据。

curl http://192.168.110.150:9200/_search?pretty

如下图所示。

 

从结果上看,logstash已经把数据推送到ES中。

8、安装node.

安装node是安装elasticsearch-head的前提条件。

安装node可以使用yum install -y nodejs,如下图。

 

安装后,可以使用node -v查看安装是否成功。

 

安装nodejs后,安装npm

yum install -y npm

 

安装后,可以验证npm的版本号

npm -v

 

9、安装elasticsearch-head插件

进入home/soft中的elasticsearch-head-master的文件夹。

 

 

然后执行npm install方法,安装elasticsearch-head插件。

安装结束后,npm run start启动elasticsearch-head的服务。

10、安装kibana

解压目录文件,把home/soft目录中的kibana压缩文件解压到/usr的kibana目录下。

 

解压成功后,在usr/kibana目录下有一个文件kibana-5.3.1-x86_64,在其目录下有一个配置目录config。编辑其下面的配置文件kibana.yml。

 

在kabana.yml打开一些配置前的#号,并修改内容如下。

  

 

 

 

注意配置文件中,每个“:”号后面有空格。

最后启动kibana服务,进入到/usr/kibana目录下,再进入kibana-5.3.1-linux-x86_64,再进入bin目录中,使用./kibana命令,启动kibana。

 

访问http://192.168.110.150:5601,出现kibaba的界面如下。

过一阵,kibana页面发生变化。如下图所示。

 

在Index name or pattern中输入与ES中索引相匹配的ES数据。同时选择Time-fileld-name,Time-field-name会存在默认项。点击“create”进入下一项。

 

通过地址http://192.168.110.150:5601/status可以查看kibana的运行情况。

 

正常情况下,点击Discover可以显示具体的图像。

 

异常情况如下图。

至此,设置结束。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git和Github

一、Git和Github概念 Git是本地电脑上运行的版本控制软件,Github是基于Git打造的版本控制网站,可以理解为是一个全球网站仓库。Git是由Linux开发的 Github由于是网站所有具有网站的属性,同时也具有版本控制的属性。Github有三个概念&#x…

SpringBoot+Vue实现美食交流网站的设计与实现

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat J…

新加坡国际学校IB均分持续全球霸榜

新加坡的教育水平和资源一直是亚洲翘楚,甚至在中小学教育方面赶超很多欧美国家。这其中,新加坡国际学校作为进入海外名校的捷径进入了中国父母的视野。 当然了新加坡有很多国际学校,虽说新加坡整体教育水平比较高,但是总归是有在平…

不同材质皮革皮衣皮裤应对西南盆地地区冬季低温阴冷湿冷气候会有什么样的效果?

PU皮 ​PU 是英文poly urethane的缩写,化学中文名称“聚氨酯”。 PU皮革就是聚氨酯成份的表皮。广泛适用于做箱包、服装、鞋、车辆和家具的装饰,它已日益得到市场的肯定,其应用范围之广,数量之大,品种之多&#xff0c…

关于git、gitlab、jenkins你知道多少?

目录 🍁git简述 🍁git基本命令 🍁分支 🍁Gitlab 🦐安装Gitlab 🦐部署Gitlab 🦐git常用命令 🍁CI&CD 🍁Jenkins 🦐安装Jenkins 🦐部署Jenkins …

关于幻读,该捋清楚了

小伙伴们都知道,MySQL 有四种不同的隔离级别,四种不同的隔离级别会带来三种不同的问题,今天我想再和大家捋一捋这个问题。 1. 隔离级别 1.1 理论 MySQL 中事务的隔离级别一共分为四种,分别如下: 序列化(…

2-2-3-6、ForkJoin工作原理分析

目录任务类型CPU密集型任务IO密集型任务线程数计算方法思考单线程相加利用多线程进行任务拆分分治算法应用场景Fork/Join引入使用前提使用ForkJoinPoolForkJoinPool构造器提交任务的方式ForkJoinTask使用限制ForkJoinPool 的工作原理工作窃取工作队列WorkQueueForkJoinWorkThre…

电压放大器的作用原理是什么

很多电子工程师虽然经常使用电压放大器,但是对于它的了解却是完全不够的。电压放大器是电子测量中经常使用到的电子测量仪器,那么什么是电压放大器,电压放大器的作用原理是什么呢,下面我们一起来看看。 电压放大器是指实验中能够帮…

pytorch 最简单的单向RNN应用

单向RNN 这几天一直在看RNN方面的知识,其中最感到疑惑的是下面的两张图。下面两张图说出了单向循环神经网络的所有原理,但是这里面其实是有一点问题的。比如下面第一张图,整个RNN的构成其实是有三个矩阵的。首先输入向量通过输入矩阵U&#…

实验8 数据库完整性、安全设计

第1关 执行 CREATE USER 创建以2022100904为用户名的用户,同时设置其密码为root1234 任务描述 执行 CREATE USER 创建以2022100904为用户名的用户,同时设置其密码为root1234 相关知识 创建用户的语法为如下: CREATE USER 用户名localhost IDE…

记一次 .NET 某安全生产信息系统 CPU爆高分析

一:背景 1.讲故事 今天是🐏的第四天,头终于不巨疼了,写文章已经没什么问题,赶紧爬起来写。 这个月初有位朋友找到我,说他的程序出现了CPU爆高,让我帮忙看下怎么回事,简单分析了下…

JaveWeb框架(三):JavaWeb项目实战 基于Servlet 实现系统登录注册功能

MVC实战项目 仓储管理系统需求:实现基本的登录和注册功能MVC实战项目:登录和注册登录功能实现注册功能实现总结Redis章节复习已经过去,新的章节JavaWeb开始了,这个章节中将会回顾JavaWeb实战项目 公司管理系统部分功能 代码会同步…

软件测试线上故障规范及模板,希望能帮到大家

目录 前言 线上故障规范及模板 [NOF-32] 全平台所有业务下单后支付异常,无法调起支付 创建: XX年/XX月/XX日 更新: XX年/XX月/XX日 解决: XX年/XX月/XX日 总结 前言 对于每一个测试人员来说,软件测试过程中有一个四字成语,真的是如噩梦一…

通用springboot框架

前言 到现在已经学习并工作了许久,于是打算弄一个通用的springboot框架。 这个框架,哪怕是你到正式工作的时候,也是能用上的,也不会给人感觉特别的low 那么,本项目的git我会放在结尾 接下来我来具体说一下该通用的spr…

谷粒商城技术栈总结

文章目录谷粒商城ElasticSearch一、基本概念1、Index(索引)2、Type(类型)3、Document(文档)4、倒排索引机制二、Docker 安装 Es1、下载镜像文件2、创建实例三、初步检索1、_cat2、索引一个文档(…

vue - vue中的process.env.NODE_ENV讲解

vue中process.env讲解: 1,什么是process.env process.env 是 Node.js 中的一个环境对象。其中保存着系统的环境的变量信息。可使用 Node.js 命令行工具直接进行查看。如下: 而 NODE_ENV 就是其中的一个环境变量。这个变量主要用于标识当前的环…

【微服务】Nacos 如何做到⼀致性协议下沉的与自研 Distro 协议

目录 一、⼀致性协议下沉 1、⼀致性协议抽象 2、数据存储抽象 二、Nacos 自研 Distro 协议 1、背景 2、设计思想 2.1、数据初始化 2.2、数据校验 2.3、写操作 2.4、读操作 3、小结 一、⼀致性协议下沉 既然 Nacos 已经做到了将 AP、CP 协议下沉到了内核模块&#xff…

Hasoop实训2:实现课件分发

目录 1、准备工作 2、创建工作目录 3、上传课件压缩包 4、创建IP地址列表文件 5、创建脚本完成课件分发任务 6、总结 1、准备工作 在实训1:Hadoop实训1:Linux基本搭建和操作_open_test01的博客-CSDN博客​​​​​​ 中已经配置好了三台虚拟主机…

架构师必读 —— 逻辑模型(6)

横向思考与纵向思考 为了不陷入歪理之中,养成从宏观到微观的思考习惯极其重要。换句话说,就是“先横向思考,再纵向思考”。 横向思考是指,“广而浅地把握整体”。纵向思考是指, “针对某部分深入分析“。有了广泛而基本…

微服务框架 SpringCloud微服务架构 服务异步通讯 51 死信交换机 51.2 TTL

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 服务异步通讯 文章目录微服务框架服务异步通讯51 死信交换机51.2 TTL51.2.1 TTL51.2.2 总结51 死信交换机 51.2 TTL 51.2.1 TTL TTL&…