分布式运用之企业级日志ELFK+logstash的过滤模块

news2024/12/28 4:30:05

一、ELFK集群部署(Filebeat+ELK)

 在搭建ELK的基础上安装Filebeat服务,Filebeat服务可以布置在以下任意一台主机,本次实验将布置在apache服务器的节点上 

步骤一:安装 Filebeat(在apache节点操作) 

#上传软件包 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

步骤二:设置 filebeat 的主配置文件 

 cd /usr/local/filebeat
 ​
 vim filebeat.yml
 filebeat.prospectors:
 - type: log         #指定 log 类型,从日志文件中读取消息
   enabled: true
     paths:
      #指定监控的日志文件
    - /var/log/httpd/access_log
 
   tags: ["filebeat"]         #设置索引标签
    fields:                  #可以使用 fields 配置选项设置一些参数字段添加到 output 中
        service_name: apache
        log_type: access
        from: 192.168.73.107
 
 
 ​
 --------------Elasticsearch output-------------------
 (全部注释掉)
 ​
 ----------------Logstash output---------------------
 output.logstash:
   hosts: ["192.168.73.107:5044"]      #指定 logstash 的 IP 和端口
 ​
 

 步骤三: 新建 Logstash 配置文件

cd /etc/logstash/conf.d
cp system.conf filebeat.conf ​
vim filebeat.conf
input {
   beats { port => "5044" }
 
}
 
output {
    elasticsearch {
        hosts => ["192.168.73.105:9200","192.168.73.106:9200"]
        index =>"%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
 
   stdout {
    codec => rubydebug
  }
}
 
 ​
 

filebeat 功能的引入测试 

1)创建两个访问页面

echo "<h1>this  is   filebeat test </h1>" >/var/www/html/test1.html
echo "h1> this is a test    </h1>" >/var/www/html/test2.html

2)启动filebeat和logstash 

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

 

3)进行访问测试 

此时:屏幕输出的日志以及发生改变(Logstash的新建配置文件中output模块中stdout) 

 

4)kibana中创建于apache相关的索引,并且通过时序,可以查看到访问日志的信息 

 

 

解决日志与kibana时间不一致的方法 

 

 

二、 Logstash的过滤模块 

2.1 Logstash配置文件中的模块

(1)input {}
  • 指定输入流,通过file、beats、kafka、redis中获取数据

(2)filter {}

常用插件:

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

(3)ourput {}

  • elasticsearch stdout

2.2 Filter(过滤模块)中的插件 

而对于 Logstash 的 Filter,这个才是 Logstash 最强大的地方。Filter 插件也非常多,我们常用到的 grok、date、mutate、mutiline 四个插件。

对于 filter 的各个插件执行流程,可以看下面这张图:

grok插件(通过grok插件实现对字段的分割,使用通配符)

这里就要用到 logstash 的 filter 中的 grok 插件。filebeat 发送给 logstash 的日志内容会放到message 字段里面,logstash 匹配这个 message 字段就可以了。

 2.3 kibana 的DEV Tools 中 Grok Debugger工具的运用

 

在此我们以apache访问日志索引中的message字段为例 ,进行数据切片:

 假设我们要进行的切片信息为messge中的

192.168.73.105 - - [13/Nov/2022:02:57:13 +0800] "GET /test1.html HTTP/1.1" 304 - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"

数据切片的格式为: 

 匹配格式:(?<字段名>正则表达式) 

切片案例一:分离访问用户的IP 

(?<remote_addr>%{IPV6}|%{IPV4} )(?<other_info>.+)

 

切片案例二:以上面的为基础,将时间分离出来 

(?<remote_addr>%{IPV4}|%{IPV6})[\s-]+\[(?<logTime>.+)](?<other_info>.+)

 

切片案例三:取出状态码和http方法  

(?<remote_addr>%{IPV4}|%{IPV6})[\s-]+\[(?<logTime>.+)] "GET (?<http_method>.+")[\s](?<status_code>\d+) -\s"-"\s(?<other_info>.+)

 

2.4 数据切片的实战演练 

 切片前的操作 

vim apache_log.conf
input {
    file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
    }
}
 
 
output {
    if [type] == "access" {
        elasticsearch {
            hosts => ["192.168.73.105:9200","192.168.73.105:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
}
 
logstash -f apache_log.conf

 

 对apche服务进行访问 

 

 进行切片分离 

修改logstash的控制conf 

vim apache_log.conf
input {
    file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
    }
}
filter {
  grok {
 match => ["message","(?<remote_addr>%{IPV4}|%{IPV6})[\s-]+\[(?<logTime>.+)] \"GET (?<http_method>.+\")[\s](?<status_code>\d+) -\s\"-\"\s(?<other_info>.+)"]
 
}
 
 
}
 
 
output {
    if [type] == "access" {
        elasticsearch {
            hosts => ["192.168.73.105:9200","192.168.73.105:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
}
logstash -f apache_log.conf

 

 再次进行访问测试 

 

三、filebeat中multiline 插件的引入 

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

3.1  安装 multiline 插件

在线安装插件
cd /usr/share/logstash
bin/logstash-plugin install logstash-filter-multiline
 
离线安装插件
先在有网的机器上在线安装插件,然后打包,拷贝到服务器,执行安装命令
bin/logstash-plugin install file:///usr/share/logstash/logstash-offline-plugins-6.7.2.zip
 
检查下插件是否安装成功,可以执行以下命令查看插件列表
bin/logstash-plugin list

3.2  使用 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: 归属于上一个事件,向上合并。next: 归属于下一个事件,向下合并

negate:是否对 pattern 的结果取反。false: 不取反,是默认值。true: 取反。将多行事件扫描过程中的行匹配逻辑取反(如果pattern匹配失败,则认为当前行是多行事件的组成部分)

3.3 多行被拆分

Java 堆栈日志太长了,有 100 多行,被拆分了两部分,一部分被合并到了原来的那一条日志中,另外一部分被合并到了不相关的日志中。

为了解决这个问题,可以通过配置 filebeat 的 multiline 插件来截断日志。至于为什么不用 logstash 的 multiline 插件呢?因为在 filter 中使用 multiline 没有截断的配置项。filebeat 的 multiline 配置项如下:

multiline.type: pattern
multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}.\d{3}'
multiline.negate: true
multiline.match: after
multiline.max_lines: 50

配置项说明:

  • multiline.pattern:希望匹配到的结果(正则表达式)

  • multiline.negate:值为 true 或 false。使用 false 代表匹配到的行合并到上一行;使用 true 代表不匹配的行合并到上一行

  • multiline.match:值为 after 或 before。after 代表合并到上一行的末尾;before 代表合并到下一行的开头

  • multiline.max_lines:合并的最大行数,默认 500

  • multiline.timeout:一次合并事件的超时时间,默认为 5s,防止合并消耗太多时间导致 filebeat 进程卡死

四、mutate 插件

当我们将日志解析出来后,Logstash 自身会传一些不相关的字段到 ES 中,这些字段对我们排查线上问题帮助不大。可以直接剔除掉。这里我们就要用到 mutate 插件了。它可以对字段进行转换,剔除等。

一般会把把 log.offset 字段去掉,这个字段可能会包含很多无意义内容。

filter{
   mutate {
      remove_field => ["host" "[log][offset]"]
   } 

 

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

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

相关文章

渲染路径RenderingPath

文章目录 前言一、什么是渲染路径二、渲染路径有哪些1、前向渲染路径2、延迟渲染路径3、顶点照明渲染路径(已过时)4、旧的渲染路径&#xff08;已过时&#xff09; 前言 渲染路径RenderingPath 一、什么是渲染路径 为进行光照计算而设计的渲染方式 二、渲染路径有哪些 1、前向…

虹科案例 | ELPRO帮助客户实现符合GDP标准的温度监测和高效的温度数据管理

文章来源&#xff1a;虹科环境监测技术 点击阅读原文&#xff1a;https://mp.weixin.qq.com/s/wwIPx_GK3ywqWr5BABC4KQ 在本案例研究中&#xff0c;虹科ELPRO帮助客户 ● 实施了温度监测解决方案&#xff0c;以一致的数据结构获取各国和各种运输方式的数据; ● 通过将温度数据上…

华为OD机试 - 快递运输 - 送分题(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、题目描述2、大白话分析 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题…

邓俊辉《数据结构》→ “2.6.5 二分查找(版本A)”之“成功查找长度”递推式推导

【问题描述】 邓俊辉的《数据结构&#xff08;C语言版&#xff09;&#xff08;第3版&#xff09;》&#xff08;ISBN&#xff1a;9787302330646&#xff09;中&#xff0c;开始于第48页的“2.6.5 二分查找&#xff08;版本A&#xff09;”内容在第50页详述了“成功查找长度”的…

敏捷在建设项目中的应用

敏捷这个概念天然地和软件开发密不可分&#xff0c;因为在2001年由17位软件业的管理大师聚在一起举办一场具有历史里程碑意义的大会&#xff0c;确定了敏捷软件开发宣言和敏捷原则&#xff0c;软件开发就是敏捷的起源之地。 钱亮老师在ShineScrum捷行举办的第五届敏捷论坛&…

vue项目打包部署到服务器,报错。

这个是因为后端部署服务器时&#xff0c;名称没有对上&#xff0c;不是前端的问题&#xff0c;后端配置名称和前端的包名称保持一致就可以了。

pve虚拟lxc安装docker教程

目录 &#xff08;一&#xff09;前提1. 存在的问题2. 解决办法 &#xff08;二&#xff09;安装lxc系统1. 环境2. 镜像3. 安装流程 &#xff08;三&#xff09;ubuntu安装docker1. 不同版本docker介绍&#xff1a;2. 安装docker-ce3. 安装青龙4. 青龙的卸载更新 &#xff08;四…

9.23统计学金融学(第一部分)

泊松分布 某事件在特定时间或空间中发生的次数。比如一天内中奖的个数&#xff0c;一个月内某机器损坏的次数等。 泊松概率的成立条件是在任意两个长度相等的区间中&#xff0c;时间发生的概率是相同的&#xff0c;并且事件是否发生都是相互独立的。 泊松概率既然表示事件在…

Python的安装教程(Windows)

简单理解就两个动作&#xff1a;安装python、安装PyCharm 我们要跟着做&#xff01;&#xff01;&#xff01; 编辑器和编译器 编辑器和编译器是两个不同的概念。编辑器是一种编写代码的工具&#xff0c;方便人对程序的操作和管理。常见的编辑器有文本编辑器、网页编辑器、源…

python回文素数

这能有1和本身整除的整数叫素数&#xff1b;如一个素数从左向右和从右向左是相同的数&#xff0c;则该素数为回文素数。编程求出2-1000内的所有回文素数。 源代码&#xff1a; def sushu(n): for i in range(2,n//21): if n%i 0: return False r…

PZ-3B-70E2A-10、PZ-6B-220E2A-20电控比例压力流量驱动泵放大器

PZ-2B-35E1A-11、PZ-2B-35E2A-11、PZ-2B-35E3A-11、PZ-2B-45E1A-11、PZ-2B-45E2A-11、PZ-2B-45E3A-11、PZ-3B-70E1A-10、PZ-3B-70E2A-10、PZ-3B-70E3A-10、PZ-4B-70E1A-10、PZ-4B-70E2A-10、PZ-4B-70E3A-10、PZ-5B-130E1A-10、PZ-5B-130E2A-10、PZ-5B-130E3A-10、PZ-6B-180E1A-…

MySQL数据库入门到精通5--进阶篇(视图/存储过程/触发器)

4.视图/存储过程/触发器 4.1 视图 4.1.1 介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视 图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存了…

windows系统将 CMD(命令提示符)添加到鼠标右键菜单

一、新建OpenCMDHere.reg文件 OpenCMDHere.reg Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCMDHere] "Open CMD Here" "Icon""C:\\WINDOWS\\system32\\cmd.exe"[HKEY_CLASSES_ROOT\Directory\Ba…

相机数据恢复!详细步骤解析(2023新版)

和朋友在外面旅游用相机拍了好多有意义的照片和视频&#xff0c;但是导入电脑后不知道是被我删除了还是什么原因&#xff0c;这些照片都不见了&#xff0c;请问有方法恢复吗&#xff1f;” 在数字摄影时代&#xff0c;我们依赖相机记录珍贵的瞬间。然而&#xff0c;相机数据丢失…

废料出售回收小程序开发制作方案

随着社会对环保意识的提高&#xff0c;废料回收已经成为一项备受关注的社会活动。许多人意识到将废料进行回收不仅可以保护环境&#xff0c;还可以获得一定的经济回报。因此&#xff0c;开发一款废料出售回收小程序具有重要意义。这个小程序将有助于简化废料交易流程&#xff0…

华为云云耀云服务器L实例评测|定时给微信群中推送每日新闻及生活小常识

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 目录 前言效果图前期准备 前言 你是否遇到过这样的场景&#xff1a; 自己的私域群或粉丝群&#xff0c;为了活跃群内气氛&#xff0c;每日早晨发送热点新闻至群中&#xff0c;供大家讨论自…

OpenHarmony应用分发运营体系

一、分发流程 图片来源&#xff1a;OpenHarmony官网 二、主要途径 更多 开鸿智谷在鸿OS 开发板 设备 润和HiHopeOS 开发板 设备 软通动力SwanLinkOS 开发板 设备 深开鸿KaiHongOS 开发板 设备 华为HarmonyOS AGC 18N 开放原子开源基金会OpenHarmony 底座基础

伯俊ERP与金蝶云星空对接集成表头表体组合查询打通应收单新增

伯俊ERP与金蝶云星空对接集成表头表体组合查询打通应收单新增 数据源平台:伯俊ERP 伯俊科技拥有近千人的团队、出色的本地化服务能力及强劲的研发创新实力&#xff0c;在深耕零售行业24年中&#xff0c;成功研发企业级ERP系统、OMS订单管理系统、门店收银系统、门店管理软硬件一…

打通谷歌办公软件 Bard与ChatGPT走差异化道路

时隔半年&#xff0c;曾被ChatGPT吊打的Bard发布重磅更新&#xff0c;打通了Gmail、Docs等谷歌办公应用全家桶的数据&#xff0c;支持一键转存AIGC内容至谷歌系的邮箱、文档、表格等应用程序中&#xff0c;还在对话页面加入“Google it”自核实功能&#xff0c;避免对话机器人的…

SOLIDWORKS特征冻结 防止意外更改模型

在日常的设计过程中&#xff0c;有的零件特征比较复杂&#xff0c;特别是具有曲面特征、纹理数据的模型&#xff0c;对于这些多特征的模型进行查看的时候&#xff0c;也很容易以外更改模型&#xff0c;如何避免这些呢&#xff1f;用特征冻结功能&#xff0c;防止意外更改模型。…