006-Logstash、FileBeat、ELK整合详解

news2024/9/22 9:43:49

目录

  • ELK架构
    • 背景需求
    • 架构
    • logstash
      • 核心概念
      • 配置文件结构
      • 插件
        • Codec Plugin-Multiline
        • 输出:elasticsearch
        • 输入:jdbc
        • Grok插件
          • Grok语法
        • mutate插件
        • Date插件
      • Logstash Queue
    • Beats
      • 配置步骤
    • ELK整合
      • 步骤1:日志采集
      • 步骤2:配置Logstash接收
      • 步骤3:输出数据到Elasticsearch

ELK架构

背景需求

收集信息,汇总展示

架构

在这里插入图片描述
beats:收集,不依赖java环境
Buffering:避免收集过快导致后边的应用支撑不了
logstash:数据清洗、提供各种插件、开发人员主要维护就是清晰规则配置

logstash

Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的存储库中。
在这里插入图片描述
其实就是接受输入、处理数据、输出

核心概念

  • Pipeline
    包含了input—filter-output三个阶段的处理流程
    插件生命周期管理
    队列管理
  • Logstash Event
    数据在内部流转时的具体表现形式。数据在input 阶段被转换为Event,在 output被转化成目标格式数据
    Event 其实是一个Java Object,在配置文件中,对Event 的属性进行增删改查
  • Codec (Code / Decode)
    将原始数据decode成Event;将Event encode成目标数据

配置文件结构

编写配置文件:logstash-demo.conf

input {
  stdin { }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  grok {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  elasticsearch { hosts => ["localhost:9200"]}  
  stdout { codec => rubydebug }
}

启动使用指定配置文件
input 、filter、output 为数据处理流程的三个步骤
stdin、grok、elasticsearch、stdout 就是数据处理的插件
官网有每个插件的详细使用方法和示例

插件

Codec Plugin-Multiline

参数

  • pattern: 设置行匹配的正则表达式
  • what : 如果匹配成功,那么匹配行属于上一个事件还是下一个事件
    previous / next
  • negate : 是否对pattern结果取反
    true / false

在异常堆栈时往往会自动换行
如果不进行处理则日志有可能同步散乱
通过Multiline就可以将异常堆栈和为一行,就是指定不是字符串开头的就组合起来

# 示例: 多行数据,异常
Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
        at com.example.myproject.Author.getBookTitles(Author.java:25)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

# multiline-exception.conf
input {
  stdin {
    codec => multiline {
      pattern => "^\s"
      what => "previous"
    }
  }
}

filter {}

output {
  stdout { codec => rubydebug }
}

#执行管道
bin/logstash -f multiline-exception.conf

输出:elasticsearch

output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "movies"
     document_id => "%{id}"
     user => "elastic"
     password => "123456"
   }
  stdout {}
}
#输出到es指定索引
#注意:index名称中,不能出现大写字符
output {
  elasticsearch {
    index => "tomcat_web_log_%{+YYYY-MM}"
    hosts => ["http://localhost:9200"]
    user => "elastic"
    password => "123456"
  }
  stdout{
    codec => rubydebug
  }
}

输入:jdbc

1)拷贝jdbc依赖到logstash-7.17.3/drivers目录下
2)准备mysql-demo.conf配置文件

input {
  jdbc {
    jdbc_driver_library => "/home/es/logstash-7.17.3/drivers/mysql-connector-java-5.1.49.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/test?useSSL=false"
    jdbc_user => "root"
    jdbc_password => "123456"
    #启用追踪,如果为true,则需要指定tracking_column
    use_column_value => true
    #指定追踪的字段,
    tracking_column => "last_updated"
    #追踪字段的类型,目前只有数字(numeric)和时间类型(timestamp),默认且推荐是数字类型、timestamp有可能有时区问题
    tracking_column_type => "numeric"
    #记录最后一次运行的结果
    record_last_run => true
    #上面运行结果的保存位置
    last_run_metadata_path => "jdbc-position.txt"
    statement => "SELECT * FROM user where last_updated >:sql_last_value;"
    schedule => " * * * * * *"
  }
}

Grok插件

读取到的日志各有各的格式,如果希望对其进行清洗则可使用Grok
Grok是一种将非结构化日志解析为结构化的插件。

Grok语法

Grok是通过模式匹配的方式来识别日志中的数据
默认Logstash拥有120个模式。

%{SYNTAX:SEMANTIC}
#SYNTAX(语法)指的是Grok模式名称,SEMANTIC(语义)是给模式匹配到的文本字段名。

#举例:
%{NUMBER:duration} %{IP:client}
#duration表示:匹配一个数字,client表示匹配一个IP地址。

#在Grok中,所有匹配到的的数据类型都是字符串,如果要转换成int类型(目前只支持int和float),可以这样:%{NUMBER:duration:int} %{IP:client}

再logstash中配置示例

filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}

# 解析tomcat日志
#192.168.10.128 - - [23/Jun/2022:22:37:23 +0800] "GET /docs/images/docs-stylesheet.css HTTP/1.1" 200 5780

#指定模式:
%{IP:ip} - - \[%{HTTPDATE:date}\] \"%{WORD:method} %{PATH:uri} %{DATA:protocol}\" %{INT:status} %{INT:length} 

mutate插件

使用mutate插件过滤掉不需要的字段

mutate {
    enable_metric => "false"
    remove_field => ["message", "log", "tags", "input", "agent", "host", "ecs", "@version"]
}

Date插件

日期格式化 并修改target属性来重新定义输出字段。

filter {
	date {
	   match => ["date","dd/MMM/yyyy:HH:mm:ss Z","yyyy-MM-dd HH:mm:ss"]
	   target => "date"
	}
}

Logstash Queue

  • In Memory Queue
    进程Crash,机器宕机,都会引起数据的丢失
  • Persistent Queue
    机器宕机,数据也不会丢失; 数据保证会被消费; 可以替代 Kafka等消息队列缓冲区的作用(低并发)
queue.type: persisted (默认是memory)
queue.max_bytes: 4gb

Beats

轻量型数据采集器
在官网有很多数据采集的示例配置

监听指定的日志,FileBeat将新的日志发发送到libbeat
再一块发送给输出(output)
在这里插入图片描述

配置步骤

  1. 下载并安装
  2. 修改配置文件 filebeat.yml
output.elasticsearch:
  hosts: ["esHost1:9200","esHost2:9200","esHost3:9200"]
  username: "elastic"
  password: "123456"
setup.kibana:
  host: "kibanaHost:5601"
  1. 启用和配置数据收集模块
    从安装目录中,运行:
# 查看可以模块列表
./filebeat modules list

#启用nginx模块
./filebeat modules enable nginx
#如果需要更改nginx日志路径,修改modules.d/nginx.yml
- module: nginx
  access:
    var.paths: ["/var/log/nginx/access.log*"]

#启用 Logstash 模块
./filebeat modules enable logstash
#在 modules.d/logstash.yml 文件中修改设置
- module: logstash
  log:
    enabled: true
    var.paths: ["/home/es/logstash-7.17.3/logs/*.log"]
  1. 启动
# setup命令加载Kibana仪表板。 如果仪表板已经设置,则忽略此命令。 
./filebeat setup
# 启动Filebeat
./filebeat -e 

ELK整合

模拟场景:
通过Logstash采集tomcat日志并存储至ElasticSearch中

步骤1:日志采集

创建配置文件filebeat-logstash.yml,配置FileBeats将数据发送到Logstash

vim filebeat-logstash.yml
chmod 644 filebeat-logstash.yml
#因为Tomcat的web log日志都是以IP地址开头的,所以我们需要修改下匹配字段。
# 不以ip地址开头的行追加到上一行
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/es/apache-tomcat-8.5.33/logs/*access*.*
  multiline.pattern: '^\\d+\\.\\d+\\.\\d+\\.\\d+ '
  multiline.negate: true
  multiline.match: after

output.logstash:
  enabled: true
  hosts: ["192.168.65.204:5044"]

pattern:正则表达式
negate:true 或 false;默认是false,匹配pattern的行合并到上一行;true,不匹配pattern的行合并到上一行
match:after 或 before,合并到上一行的末尾或开头

启动FileBeat,并指定使用指定的配置文件

./filebeat -e -c filebeat-logstash.yml

步骤2:配置Logstash接收

vim config/filebeat-console.conf
# 配置从FileBeat接收数据
input {
    beats {
      port => 5044
    }
}

output {
    stdout {
      codec => rubydebug
    }
}

启动logstash

# reload.automatic:修改配置文件时自动重新加载
bin/logstash -f config/filebeat-console.conf --config.reload.automatic

步骤3:输出数据到Elasticsearch

修改Logstash的output配置。

vim config/filebeat-elasticSearch.conf
input {
    beats {
      port => 5044
    }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    user => "elastic"
    password => "123456"
  }
  stdout{
    codec => rubydebug
  }
}

启动logstash

bin/logstash -f config/filebeat-elasticSearch.conf --config.reload.automatic

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

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

相关文章

ChatGLM2体验+ubuntu18.04LTS+CPU版本

ChatGPT在自然语言处理领域的表现让人振奋,开启了大模型在通用人工智能领域的大门。 许多工作随之跟进,并开源,凭借相对小的参数量达到近似GPT的效果,包括LLama,alpace等。 其中LLama训练语料主要选择英语&#xff0…

Docker内部工作原理:容器化背后的魔法

Docker内部工作原理是怎样的? 现在我们知道了Docker是什么以及它提供了哪些好处,让我们逐个重要的细节来了解。 什么是容器?它们是如何工作的? 在深入研究Docker的内部机制之前,我们首先要了解容器的概念。简单地说&am…

在工作与生活中保持情绪稳定的艺术

强烈的情绪波动:工作中的挑战 在我的职业生涯中,我经历过许多情绪波动的时刻。其中一个最具挑战性的时刻是在我负责一个重要项目的时候。我需要在短时间内完成大量的工作,同时还要管理一个由不同背景和技能的人组成的团队。这个项目的压力让…

leetcode-704. 二分查找

leetcode-704. 二分查找 文章目录 leetcode-704. 二分查找一.题目描述二.第1次代码提交(非二分查找)三.第2次代码提交(非二分查找,std::find和std::distance)四.第3次代码提交(二分查找)五.关于C中int型的奇数除以2 一.题目描述 二.第1次代码提交(非二分查找) clas…

Openlayers实战:drawstart,drawend 绘制交互应用示例

Openlayers地图中,绘制一个多边形是非常见的一个应用,涉及到交互会在绘制开始 drawstart 和绘制结束drawend时,通常会在绘制完成后取消继续绘制,然后提出feature的一些信息。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代…

B066-基础环境-前后端整合 批量删除 下拉 级联 增改

目录 批量删除页面调整普通属性的新增和修改引用属性的新增和修改管理员下拉列表部门树 见文档与代码 cd 子项目 运行前端项目 页面布局分析 批量删除 点击多选 - 改变data - 点击批量删除 - 带参数发请求 页面调整 略 普通属性的新增和修改 新增按钮:点击…

【MySQL系列】在Centos7环境安装MySQL

「前言」文章内容大致是在Centos7环境安装MySQL,演示安装的版本为5.7 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 浮生梦,三生渺渺, 因缘无踪,虽堪恋,何必…

回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测,CNN-GRU结合…

Vision Transformer(VIT)论文解读及实现

1 论文解读 paper:VIT 1.1 VIT模型架构如下图所示: 图片原始输入维度 H * W * C在H和W按像素P切分,则H 、W可分割为 NPP, NHW/(PP),N为输入transform序列的长度。 x ∈ R H ∗ W ∗ C > x ∈ R N ∗ P 2 ∗ C x \in R^{H*W…

第三章 SSD存储介质:闪存 3.1

3.1 闪存物理结构 闪存芯片从小到大依此是由:cell(单元)、page(页)、block(块)、plane(平面)、die(核心)、NAND flash(闪存芯片&#…

Python find()函数使用详解

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 find 1、指定检索位置2、参数为负数3、超出范围3、find()和index()的区别&#x…

【Docker】Docker安装MySQL

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前专攻C/C、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL、蓝桥杯&am…

Win11系统如何安装Oracle数据库(超级详细)

前言:在我们安装Oracle之前我们得理解Oracle数据库的优点是什么: Oracle是一个功能强大、可扩展和全面的数据库平台,具有广泛的功能和企业级能力,适用于处理复杂的企业级应用和大型数据集。 目录 一.下载Oracle数据库软件&…

解决idea只能通过 idea.bat打开的问题

解决:C盘用户下面 有idea的配置文件 ,找到idea64.exe.vmoptions 把 -jetbrain : 配置的 jar路径删除

Tablet vs. eReader: Which Is Better for Ebooks? 平板电脑与电子阅读器:哪个更适合电子书?

eReaders are best if all you want to do is have something as close to a paper book as possible. However, if you need anything more than that, a tablet makes more sense as a general-purpose device that can also read ebooks. 如果您只想拥有尽可能接近纸质书的东…

认识文件操作与IO

文章目录 认识文件文件夹文件路径文件分类 文件操作File类构造方法常用方法 字节流IOInputStream常用方法 FileInputStream构造方法FileInputStream实例 OutputStream方法 FileOutputStream 字符流IO 认识文件 我们平时所说的文件指的是存在硬盘上的文件,我们平时的…

Openlayers实战:回显多点、多线段、多多边形

Openlayers地图中,回显数据是非常重要的。 继上一示例回显点、线、圆形、多边形后。本示例回显多线,多点,多个多边形。用到了MultiPoint,MultiLineString,MultiPolygon。 多个信息的显示可以采用循环的方式,单个显示点、线、面。 但是循环方式是要多次计算的,而MultiPoint…

GUI (java)

GUI 一.GUI概念二.Swing概述三.容器组件四.常用容器1.窗体(1) JFrame类的构造方法(2) JFrame类的常用方法 2.面板(1)JPanel类的构造方法(2)JPanel类的常用方法 五.布局管理器1. FlowLayout 流式布局(1)FlowLayout构造方法 2.BorderLayout 边界布局3.GridLayout 网格布局 六.常用…

LangChain: 大语言模型的新篇章

本文介绍了LangChain框架,它能够将大型语言模型与其他计算或知识来源相结合,从而实现功能更加强大的应用。接着,对LangChain的关键概念进行了详细说明,并基于该框架进行了一些案例尝试,旨在帮助读者更轻松地理解LangCh…

Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)

目录 Mycat高级特性_搭建双主双从 Mycat分片技术_垂直拆分-分库 Mycat高级特性_搭建双主双从 环境准备 创建docker容器 #启动第一台 docker run -d -p 3350:3306 -e MYSQL_ROOT_PASSWORD123456 --namemaster1 mysql:5.7#启动第二台 docker run -d -p 3360:3306 -e MYSQL_R…