ELFK日志分析系统并使用Filter对日志数据进行处理

news2025/1/9 2:05:48

目录

  • 一、 Filebeat+ELK 部署
    • Filebeat 节点上操作
  • 二、Filter
    • grok 正则捕获插件
      • 内置正则表达式调用
      • 自定义表达式调用
    • mutate 数据修改插件
    • multiline 多行合并插件
    • date 时间处理插件


一、 Filebeat+ELK 部署

Node1节点(2C/4G):node1/192.168.154.10 Elasticsearch
Node2节点(2C/4G):node2/192.168.154.11 Elasticsearch
Apache节点:apache/192.168.154.12 Logstash Kibana Apache
Filebeat节点:filebeat/192.168.154.13 Filebeat

先在Filebeat节点添加网页文件
在这里插入图片描述

浏览器访问http://192.168.154.13/test.html获取日志
在这里插入图片描述

Filebeat 节点上操作

1.安装 Filebeat

#上传软件包 filebeat-6.7.2-linux-x86_64.tar.gz 到/opt目录
tar zxvf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64/ /usr/local/filebeat

2.设置 filebeat 的主配置文件

cd /usr/local/filebeat

vim filebeat.yml
filebeat.inputs:
- type: log         #指定 log 类型,从日志文件中读取消息
  enabled: true
  paths:
    - /var/log/httpd/access_log       #指定监控的日志文件

tags: ["filebeat"]		#设置索引标签
  
fields:                      #可以使用 fields 配置选项设置一些参数字段添加到 output 中
      service_name: httpd
      log_type: access
      from: 192.168.154.13   #要收集日志的来源

在这里插入图片描述

--------------Elasticsearch output-------------------
(全部注释掉)
----------------Logstash output---------------------
output.logstash:
  hosts: ["192.168.154.12:5044"]      #指定 logstash 的 IP 和端口

在这里插入图片描述

#启动 filebeat
nohup ./filebeat -e -c filebeat.yml > filebeat.out &
#-e:输出到标准输出,禁用syslog/文件输出
#-c:指定配置文件
#nohup:在系统后台不挂断地运行命令,退出终端不会影响程序的运行

4.在 Logstash 组件所在节点上新建一个 Logstash 配置文件

cd /etc/logstash/conf.d

vim filebeat.conf
input {
    beats {
        port => "5044"
    }
}

filebeat发送给logstash的日志内容会放到message字段里面,logstash使用grok插件正则匹配message字段内容进行字段分割

Kibana自带grok的正则匹配的工具:http://:5601/app/kibana#/dev_tools/grokdebugger
#%{IPV6}|%{IPV4} 为 logstash 自带的 IP 常量

filter {
  grok {
    match => ["message", "(?<remote_addr>%{IPV6}|%{IPV4})[\s\-]+\[(?<logTime>.*)\]\s+\"(?<method>\S+)\s+(?<url_path>.+)\"\s+(?<rev_code>\d+) \d+ \"(?<req_addr>.+)\" \"(?<content>.*)\""]
  }
}
output {
    elasticsearch {
        hosts => ["192.168.154.10:9200","192.168.154.11:9200"]
        index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
    stdout {
        codec => rubydebug
    }
}

在这里插入图片描述

#启动 logstash
logstash -f filebeat.conf

在这里插入图片描述

5.浏览器访问 http://192.168.154.10:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引“httpd-*”,单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/05e8f15223184d2c94d767970d85bd1b.png

二、Filter

表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式

  • grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名>正则表达式) 字段名: 正则表达式匹配到的内容
  • date 对数据中的时间格式进行统一和格式化
  • mutate 对一些无用的字段进行剔除,或增加字段
  • mutiline 对多行数据进行统一编排,多行合并或拆分

grok 正则捕获插件

grok 使用文本片段切分的方式来切分日志事件

内置正则表达式调用

%{SYNTAX:SEMANTIC}

SYNTAX代表匹配值的类型,例如,0.11可以NUMBER类型所匹配,10.222.22.25可以使用IP匹配

SEMANTIC表示存储该值的一个变量声明,它会存储在elasticsearch当中方便kibana做字段搜索和统计,你可以将一个IP定义为客户端IP地址client_ip_adress,
如%{IP:client_ip_address},所匹配到的值就会存储到client_ip_address这个字段里边,类似数据库的列名,也可以把event log
中的数字当成数字类型存储在一个指定的变量当中,比如响应时间http_response_time,假设event log record 如下:

messages: 192.168.154.10 GET /index.html 15824 0.043

可以使用如下grok pattern来匹配这种记录

%{IP:client_id_address} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:http_response_time}

在这里插入图片描述

自定义表达式调用

语法: (?<field_name>pattern)
举例:捕获10或11和长度的十六进制数的queue_id可以使用表达式(?<queue_id>[0-9A-F]{10,11})

messages: 192.168.154.10 GET /index.html 15824 0.043
(?<remote_addr>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) (?<http_method>[A-Z]+) (?<request_uri>/.*) (?<response_bytes>[0-9]+) (?<response_time>[[0-9]\.]+)

在这里插入图片描述

对日志来进行字段分割
在这里插入图片描述

使用Dev Tools调试

192.168.154.1 - - [28/May/2023:23:25:37 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "http://192.168.154.13/test.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"

(?<remote_addr>%{IP})[\s\-]+\[(?<log_time>.+)\]\s\"(?<method>[A-Z]+)\s(?<request_url>/.*)\s(?<http_ver>.+)\"\s(?<rev_code>\d{3})\s\d+\s\".*\"\s\"(?<user_agent>.+)\"

在这里插入图片描述

cd /etc/logstash/conf.d

vim filebeat.conf
input {
    beats {
        port => "5044"
    }
}
filter {
  grok {
    match => ["message", "(?<remote_addr>%{IP})[\s\-]+\[(?<log_time>.+)\]\s\"(?<method>[A-Z]+)\s(?<request_url>/.*)\s(?<http_ver>.+)\"\s(?<rev_code>\d{3})\s\d+\s\".*\"\s\"(?<user_agent>.+)\""]
  }
}

output {
    elasticsearch {
        hosts => ["192.168.154.10:9200","192.168.154.11:9200"]
        index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
    stdout {
        codec => rubydebug
    }
}


logstash -f filebeat.conf

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

mutate 数据修改插件

它提供了丰富的基础类型数据处理能力。可以重命名,删除,替换和修改事件中的字段。

Mutate 过滤器常用的配置选项
在这里插入图片描述
示例:将字段old_field重命名为new_field

filter {
   mutate {
      #写法1,使用中括号括起来
      rename => ["old_field" => "new_field"]
   
      #写法2,使用大括号括起来
      rename => { "old_field" => "new_field" }
   }
}

添加字段

filter {
    mutate {
	     add_field => {
		     "f1" => "field1"
			 "f2" => "field2"
		 }
	}
}

将字段删除

filter {
    mutate {
	   remove_field => ["messages","@version","tags"]
	}
}

将fileName1字段数据类型转换成string类型,filedName2字段数据类型转换成float类型

filter {
   mutate {
      #写法1,使用中括号括起来
	  convert => ["filedName1","string"]
	  
	  #写法2,使用大括号括起来
	  convert => { "filedName2","float" }
   }
}

将filedName字段中所有 “/” 字符替换为"_"

filter {
    mutate {
	    gsub => ["filedName","/","_"]
	}
}

multiline 多行合并插件

java错误日志一般都是一条日志很多行的,会把堆栈信息打印出来,当经过 logstash 解析后,每一行都会当做一条记录放到 ES,那这种情况肯定是需要处理的。这里就需要使用 multiline 插件,对属于同一条日志的记录进行拼接。

安装 multiline 插件

在线安装插件
cd /usr/share/logstash
bin/logstash-plugin install logstash-filter-multiline

离线安装插件
先在有网的机器上在线安装插件,然后打包,拷贝到服务器,执行安装命令
bin/logstash-plugin preepare-offline-pack --overwrite --output logstash-filter-multiline.zip logstash-filter-multiline

bin/logstash-plugin install file:///usr/share/logstash/logstash-filter-multiline.zip

检查下插件是否安装成功,可以执行一下命令查看插件列表
bin/logstash-plugin list

使用 multiline 插件
第一步:每一条日志的第一行开头都是一个时间,可以用时间的正则表达式匹配到第一行
第二步:然后将后面每一行的日志与第一行合并。
第三步:当遇到某一行的开头是可以匹配正则表达式的时间的,就停止第一条日志的合并,开始合并第二条日志。
第四步:重复第二步和第三步。

filter {
   multiline {
    pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}.\d{3}"     
    negate => true
    what => "previous"
   }
}
  • pattern:用来匹配文本的表达式,也可以是grok表达式
  • what:如果pattern匹配成功的话,那么匹配行是归属于上一个事件,还是归属于下一个事件。previous:归属于上一个事件,向上合并。
  • negate:是否对pattern的结果取反。false:不取反,是默认值。true:取反。将多行事件扫描过程中的行匹配逻辑取反(如果pattern匹配失败,则认为当前行是多行事件的组成部分)

date 时间处理插件

用于分析字段中的日期,然后使用该日期或时间戳作为事件的logstash时间戳。

在Logstash产生了一个Event对象的时候,会给该Event设置一个时间,字段为"@timestamp",同时,我们的日志内容一般也会有时间,但是这两个时间是不一样的,因为日志内容的时间是该日志打印出来的时间,而"@timestamp"字段的时间是input插件接收到了一条数据并创建Event的时间,所有一般来说的话"@timestamp"的时间要比日志内容的时间晚一点,因为Logstash监控数据变化,数据输入,创建Event导致的时间延迟。这两个时间都可以使用,具体要根据自己的需求来定。

filter {
    date {
	    match => ["access_time","dd/MMM/YYYY:HH:mm:ss Z","UNIX","yyyy-MM-dd HH:mm:ss","dd-MMM-yyyy HH:mm:ss"]
		target => "@timestamp"
		timezone => "Asia/Shanghai"
	}
}
  • match:用于配置具体的匹配内容规则,前半部分内容表示匹配实际日志当中的时间戳的名称,后半部分则用于匹配实际日志当中的时间戳格式,这个地方是整条配置的核心内容,如果此处规则匹配是无效的,则生成后的日志时问戳将会被input插件读取的时间替代。如果时间格式匹配失败,会生成一个tags字段,字段值为 _dateparsefailure,需要重新检查上边的match配置解析是否正确。
  • target: 将匹配的时间戳存储到给定的目标字段中。如果未提供,则默认更新事件的@timestamp字段。
  • timezone: 当需要配置的date里面没有时区信息,而且不是UTC时间,需要设置timezone参数。

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

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

相关文章

【数据结构】虽然很难很抽象,但是你还是得努力弄懂的数据结构——数组,你常用但是你懂它吗

数组(Array) 数组是实现顺序存储结构的基础,数组(Array)存储具有相同数据类型的元素集合.一维数组占用一块内存空间,数组的存储单元个数称为数组容量,也称为数组长度. 每个存储单元的地址是连续的,即每个元素连续存储,计算第i个元素地址所需时间是一个常量,时间复杂度是O(1),…

【论文解读|GL-Cache 】基于组级学习的缓存替换算法

论文原文&#xff1a; GL-Cache: Group-level learning for efficient and high-performance caching | FAST 23 源码 地址&#xff1a; GitHub - Thesys-lab/fast23-GLCache: Repository for FAST23 paper GL-Cache: Group-level Learning for Efficient and High-Performance…

基于Python+百度语音的智能语音ChatGPT聊天机器人(机器学习+深度学习+语义识别)含全部工程源码 适合个人二次开发

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Pycharm 环境ChatterBot 环境 模块实现1. 模型构建2. 服务器端3. 客户端4. 语音录入5. 接口调用6.模型训练及保存 系统测试1. 模型效果2. 模型应用 参考资料其它资料下载 前言 本项目基于机器学习和语义识别技术…

Qt翻金币小游戏详细教程(内涵所有源码、图片资源)

一、项目简介 翻金币项目是一款经典的益智类游戏&#xff0c;我们需要将金币都翻成同色&#xff0c;才视为胜利。首先&#xff0c;开始界面如下&#xff1a; 点击start按钮&#xff0c;进入下层界面&#xff0c;选择关卡&#xff1a; 在这里我们设立了20个关卡供玩家选择&…

IDEA使用技巧

1. 安装教程 1.1 安装过程 1.2 安装后的软件目录结构 目录结构&#xff1a; bin&#xff1a;容器&#xff0c;执行文件和启动参数等 这里以我的电脑系统(64 位 windows7&#xff0c; 16G 内存)为例&#xff0c;说明一下如何调整 VM 配置文件&#xff1a; 1、大家根据电脑系统…

【(Ubuntu22.04 Jammy)安装ROS 2 Iron Irwini】

ROS2 IronIrwini的Debian软件包目前可用于Ubuntu22.04 Jammy 1、安装ROS2 IronIrwini前准备 需要先安装好Ubuntu22.04 Jammy的前提下开始安装ROS2 1.1 Set locale 请确保Set locale支持UTF-8 locale # check for UTF-8sudo apt update && sudo apt install locale…

Rhapsody新手提示(1)如何在安装之后更换界面语言

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 安装之后&#xff0c;如果还想更换界面语言&#xff0c;Windows平台操作如下&#xff1a; &#xff08;1&#xff09;在C:\ProgramData\IBM\Rhapsody\9.0.1x64文件夹下找到…

2023 年最新、最全、最实用的 Java 岗面试真题,已收录 GitHub

Java 面试 Java 作为编程语言中的 NO.1,选择入行做 IT 做编程开发的人&#xff0c;基本都把它作为首选语言,进大厂拿高薪也是大多数小伙伴们的梦想。以前 Java 岗位人才的空缺&#xff0c;而需求量又大&#xff0c;所以这种人才供不应求的现状&#xff0c;就是 Java 工程师的薪…

WIN32 API —— 最简单的Windows窗口封装类[通俗易懂]

1 开发语言抉择 1.1 关于开发Win32 程序的语言选择 C还是C 在决定抛弃MFC&#xff0c;而使用纯Win32 API 开发Window桌面程序之后&#xff0c;还存在一个语言的选择&#xff0c;这就是是否使用C。C作为C的超集&#xff0c;能实现所有C能实现的功能。其实反之亦然&#xff0c;…

机器学习 | matplotlib超详细教程

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

Git的安装和环境变量的配置

目录 前言一、下载Git二、安装Git三、检查是否安装成功四、 配置用户名和邮箱五、环境变量配置1. 获取git的安装路径2. 设置环境变量 前言 当我们第一次在新电脑上使用git命令的时候&#xff0c;会报错【git 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件】…

Typora+PicGo+阿里云OSS搭建博客图床

&#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公司实习&#x1f…

中国民营快递:战事永不休

【潮汐商业评论/原创】 在中国&#xff0c;没有一个任何行业的“战争”在时间和烈度上可以与快递业相比。这是一场持续长达20年&#xff0c;融合了规模战、价格战、资本战等你能想象到的所有形态的立体化“战争”。 更令人难以置信的是&#xff0c;眼下这场以人力、技术为武器…

你还不会写系统?超详细驾校科考系统教程,手把手教学(内涵源码,Qt实现界面,有接口可供二次开发刷题使用)

目录 一、创建项目 二、登录界面 三、验证邮箱地址 四、验证账号密码 五、考试时间 六、初始化题库 七、布局按钮 八、提交试题 九、窗口交互 一、创建项目 新建Qt桌面应用程序&#xff0c;项目名&#xff1a;ExamSys。 类信息&#xff1a;类名LoginDialog继承自QDi…

Windows 7出现两个IP地址,导致联网问题

Qt源码解析 索引 Windows7 出现两个IP介绍 问题描述 win7电脑连接网线后出现两个IP地址&#xff0c;导致网络连接出现问题。 可能的现象有 连接网络出现黄色感叹号 局域网即时通信&#xff08;例如飞秋软件收发失败&#xff09; 修改IP地址不生效 服务软件启动报错&#…

12吋全自动划片机有哪些功能?

1、大面积工作盘&#xff1a;可容纳多个工件&#xff0c;并自动对位。 2、轴光/环光&#xff1a;采用合适的光源照射&#xff0c;显示影像更能呈现工作物表面特征。 3、双倍率显微镜头&#xff1a;视野更大&#xff0c;精准快速进行对准校正工作。 4、非接触测高&#xff1a…

Text2Video-Zero:Text-to-Image Diffusion Models are Zero-Shot Video Generators

【AIGC-AI视频生成系列-文章1】Text2Video-Zero - 知乎一句话亮点&#xff1a;当文本-视频生成也不需要额外数据训练&#xff0c;只需要基于现有的diffusion-model 如Stable Diffusion能力调整即可实现&#xff0c;解决生成视频帧间不一致问题&#xff0c;是不是很心动。 文章链…

腾讯云轻量2核2G4M带宽月流量/CPU/地域选择及限制说明

腾讯云轻量应用服务器2核2G4M活动上线了&#xff0c;这款轻量服务器4M公网带宽&#xff0c;每月300G免费流量&#xff0c;系统盘为50GB SSD盘&#xff0c;腾讯云百科来详细说下轻量应用服务器配置、租用费用、地域选择、CPU型号等详细说明&#xff1a; 目录 腾讯云轻量2核2G4…

2023年上半年软件设计师中级学习总结(超详细)

目录 前言 一、背景1.1上次考试感受&#xff1a;1.2这次考试感受&#xff1a;1.3方法&#xff1a; 二、 过程2.1计算机网络概论计算机组成数据表示相关知识校验码相关知识计算机体系结构网络体系结构OSI/RM和TCP/IP计算机安全性可靠性性能评价 2.2 程序设计语言基础知识编译和解…

前端开发如何更好的避免样式冲突?级联层(CSS@layer)

作者&#xff1a;vivo 互联网前端团队 - Zhang Jiqi 本文主要讲述了CSS中的级联层&#xff08;CSSlayer&#xff09;&#xff0c;讨论了级联以及级联层的创建、嵌套、排序和浏览器支持情况。级联层可以用于避免样式冲突&#xff0c;提高代码可读性和可维护性。 一、什么是级联…