logstash收集数据

news2025/7/12 21:34:51

防止ES的的I/O的压力过大,使用redis/kafka进行缓冲。

对redis的要求

Redis input plugin | Logstash Reference [8.17] | Elastic

一般企业要求的架构

我实现的架构

filebeat把数据传给logstash

配置好filebeat把收集到的数据输入到redis

然后执行命令,filebeat就开始往redis中写数据

cd /etc/filebeat

/usr/share/filebeat/bin/filebeat -e -c filebeat.yml   

logstash配置,从redis中读数据输出到elasticsearch

当我使用filebeat收集数据,传到redis,然后logstash从redis读取数据的时候有一个大问题就是

filebeat收集的是json格式的nginx访问日志,它被filebeat收集到redis的时候,会对这个收集的日志和与日志相关的元数据进行封装然后输出到redis。等logstash从redis里面取出来的时候,得到的数据是 收集的日志(message)  和 元数据字段的集合。

(就变成了一个字段message,其他都是没用的元数据字段。)

我收集的nginx日志格式

要解决的问题

1.json格式的日志数据message未正确解析

这是在filebeat直接向logstash传送数据的时候发送的错误,因为传送过去的数据没有设置正确的字符集,导致收集到的日志乱码

kibana显示

改正后基本上就没有乱码格式了,一个event是一条日志

2.删除无用的元数据字段

Filebeat直接连接logtsash的时候,filebeat通过output.logstash发送数据,默认不会添加完整元数据,输出到redis的时候,filebeat使用output.redis将日志包装成完整事件结构,包含所有的元数据。

Redis 作为缓冲队列:数据存储到 Redis 时,Filebeat 会保留完整的 Beat 事件结构(包括 @metadatahostagent 等)。

所以当logstash从redis取日志数据的时候,会收集无用的元数据(只有message是收集的访问日志),我们要把无用的元数据过滤掉

然后会得到一整个大的message字段

3.过滤出日志里面的单个信息

所以删除无用的元数据之后如果我们不仅想得到访问日志,还想得到访问日志里面得具体数据,使用这个具体数据进行画图等等(比如我们想得到remote_addr字段,就需要对message进行解析)

input {
  redis {
    host       => "10.8.0.23"
    port       => 6379
    password   => "Pu@1uC2016"
    db         => 0
    data_type  => "list"
    key        => "nginx-accesslog"
    codec      => json  # 自动解析外层 JSON
  }
}
#nginx的原始的json格式的数据是这样的
#{"time_local":"2025-03-28T05:55:57+08:00","remote_addr":"45.90.163.37","remote_user":"","request":"PUT /v1/agent/service/register
#HTTP/1.1","status":"400","body_bytes_sent":"173","request_time":"0.263","http_referer":"","http_user_agent":"","http_x_forwarded_for":"",
#"upstream_addr":"","upstream_response_time":""}


#但是message里面的数据是这样的,我们要把message中的数据转化为json格式,然后json过滤才能把字段(比如ip)过滤出来,然后可以对数据做图形分析
# "message" => "{\"time_local\":\"2025-03-28T18:12:23+08:00\",\"remote_addr\":\"10.8.0.23\",\"request\":\"HEAD / HTTP/1.1\",\"status\":\"200\",
#\"body_bytes_sent\":\"0\",\"request_time\":\"0.000\",\"http_referer\":\"\",\"http_user_agent\":\"curl/7.61.1\",}"


#要把下面转化为上面的这样的json格式(上面是标准的json格式),filter里面的json工具才能把message这个大字段里面的小字段取出来
filter {
  # ========== 第一步:处理 message 字段中的内层 JSON ==========
  mutate {                                          
    gsub => [
        "message", "\\\"", "\""     # 将 \" 替换为普通引号
       ] 
     }
    mutate {
    # 删除末尾多余逗号(如 ",}" → "}")
    gsub => [
      "message", ",}", "}",
      "message", ",]", "]"
    ]
     }



  # 解析 message 字段中的业务日志   这个json过滤,它只作用于json格式的数据
  json {
    source => "message"
    target => "nginx_log"  # 解析结果存入 nginx_log 子对象
    remove_field => ["message"]
    tag_on_failure => ["_json_parse_failure"]  # 标记解析失败的日志
  }
  # ========== 第二步:提升业务字段到根层级 ==========
  mutate {
    rename => {
      "[nginx_log][time_local]"          => "time_local"
      "[nginx_log][remote_addr]"         => "remote_addr"
      "[nginx_log][request]"             => "request"
      "[nginx_log][status]"              => "status"
      "[nginx_log][body_bytes_sent]"     => "body_bytes_sent"
      "[nginx_log][http_referer]"        => "http_referer"
      "[nginx_log][http_user_agent]"     => "http_user_agent"
    }
  }


#把一些无用的元数据过滤掉不要
  # ========== 第三步:清理所有元数据字段 ==========
  mutate {
    remove_field => [
      "host", "agent", "ecs", "log", "input", "fields",
      "@version", "event", "nginx_log"
    ]
  }
  # ========== 第四步:修正时间戳 ==========
  date {
    match  => [ "time_local", "ISO8601" ]
    target => "@timestamp"  # 覆盖默认时间戳
  }
}
output {
  elasticsearch {
    hosts  => ["https://10.8.0.23:9200"]
    index  => "dami-logs-%{+YYYY.MM.dd}"
    user   => "elastic"
    password => "sxm@325468"
    ssl => true
    cacert => "/logstash/http_ca.crt"    
  }
  # 调试时开启 stdout,查看完整字段
  stdout {
    codec => rubydebug {
      metadata => true  # 显示元数据(确认字段结构)
    }
  }
}

最后可以得到message里面的单个小字段信息,以前只能在message中进行查看,不能对数据进行分析和画图,现在可以了

filter过滤器的其他用法

Filter plugins | Logstash Reference [8.17] | Elastic

1.grok  

也可以康康这个人的文章

logstash过滤器插件filter详解及实例 - 峰哥ge - 博客园

官方文档

Grok filter plugin | Logstash Reference [8.17] | Elastic

grok %{语法:语义}  

#语法在配置文件里已经定义好了 

#语义是自己定义的,表示要将获得的字段放在哪个key里,例如下面ip就是key值,取出的字段值是value

match => {"message" => "%{IPV4:ip}"}    #message是收集到的每一条数据

/usr/share/logstash/vendor/bundle/jruby/3.1.0/gems/logstash-patterns-core-4.3.4/patterns/ecs-v1/grok-patterns   #语法在配置文件里已经定义好了 

match => {"message" => "%{IPV4:ip}"}    #message是收集到的每一条数据

match => {"message" => "%{@HTTPDATE:time}"}    #

match => {"message" => "%{LOGLEVEL:level}"}       #

2.groip 通过ip定位物理位置

Geoip 过滤器插件 |Logstash 参考 [8.17] |弹性的

logstash上要安装这个数据库(要先注册才能看)

Download GeoIP Databases | MaxMind

我的geoip配置写错了但是我懒得改了,我的阿里云服务器要释放了。

logstash收集到的数据还可以存放到数据库中,然后可以自己公司开发一个前端工具连接到数据库进行数据分析

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

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

相关文章

智能运维时代的网络拓扑管理:乐维监控的架构可视化实践

在数字化转型的浪潮中,企业IT基础设施正经历着前所未有的复杂化进程。当数以千计的网络设备、服务器、存储系统构成庞大网络体系时,如何实现全局可视化管理已成为企业数字化转型的关键命题。乐维监控网络拓扑系统作为新一代智能运维平台的核心组件&#…

CentOS 7 安装 EMQX (MQTT)

CentOS 7 安装 EMQX 通过 Yum 源安装 EMQX 支持通过 Yum 源安装,您可通过以下 Yum 命令从中自动下载和安装 EMQX。 通过以下命令配置 EMQX Yum 源: curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash安装以下依赖项&#xff…

人工智能:officeAI软件,如何调整AI对话界面的字体?

1、首先,随便打开一个excel(使用wps) 依次点击上方的【OfficeAI】—【右侧面板】 2、在弹出的面板中,输入:助手设置 , 然后按【回车】发送出去 3、之后会弹出界面,在【样式设定】中&#xff…

Qt之共享内存类QSharedMemory的使用及实现原理(全)

目录 1.简介 2.使用 3.实现原理 3.1.Windows内存映射 3.2.POSIX 共享内存 3.3.System V 共享内存 3.4.QSharedMemory的实现原理 4.总结 1.简介 QSharedMemory 是 Qt 框架提供的一个类,用于在不同进程或线程之间实现共享内存的管理。借助共享内存&#xff0c…

Problem A: 接口使用

1.题目问题 2.样例 3.代码实现 补充:注意空格 // 定义Vehicle接口 interface Vehicle {void start();void stop(); }// 实现Vehicle接口的Bike类 class Bike implements Vehicle {Overridepublic void start() {System.out.println("i am bike,i am running&…

用Python插入Excel表格到Word文档

在日常办公场景中,通过Python脚本自动化整合Excel数据与Word文档,能够实现表格的智能迁移,满足不同场景下数据呈现的专业性要求。直接提取表格内容插入Word适用于需要快速传递核心数据的场景,确保信息精准直达;完整复制…

合合信息TextIn大模型加速器 2.0来了:智能文档解析和图表解析能力全面升级

合合信息“TextIn大模型加速器 2.0”版本来了:文档解析和图表解析能力全面升级 背景 在日常工作中,我们常常遇到无法直接复制的文档内容或图片内容,这些内容通常需要进行识别和解析。一个典型的例子是,当我们需要将折线图转化为…

消息队列Message Queue

前面,我们在黑点点评中秒杀场景中,首次了解到消息队列MQ,它主要解决了秒杀场景中异步场景,提升了并发性,吞吐量。可是还是对消息队列又很多的疑惑? 消息队列是什么 消息队列是一种通信协议或中间件&#…

如何利用AI智能生成PPT提升工作效率

如何利用AI智能生成PPT提升工作效率?PPT制作曾经是每个人办公生活中的一大痛点。你有多久没有在制作PPT时感到焦头烂额,选模板、调整格式、插入图片,每一项都得花费大量的时间和精力,最后还未必能做出一份令人满意的效果。随着人工…

WIN11 企业版 部署Dify+Docker

Dify(Do it for you)是一款开源的大语言模型应用开发平台,旨在简化AI应用的创建、部署和管理过程,使开发者能够更快速、更轻松地构建和运营基于GPT等模型的AI应用。 Dify平台创建和运营一个AI chatbot应用,涉及到登录…

1.25-20GHz/500ns超快跳频!盛铂SWFA300国产捷变频频率综合器模块赋能雷达/5G/电子战高频精密控制 本振/频综模块

盛铂SWFA300捷变频频率综合器模块简述: 盛铂科技国产SWFA300捷变频频率综合器是一款在频率范围内任意两点频率的跳频时间在500nS以内的高速跳频源,其输出频率范围为1.25GHz至20GHz,频率的最小步进为10kHz。同时它拥有优秀的相位噪声特性&…

代理IP协议详解HTTP、HTTPS、SOCKS5分别适用于哪些场景

“代理IP协议在现代网络通信中扮演着至关重要的角色。它们通过提供中间层服务,帮助用户匿名访问网络、绕过地理限制、提高安全性和加速数据传输。HTTP、HTTPS和SOCKS5是三种最常见的代理IP协议,每种协议都有其特定的用途和适用场景。” HTTP代理及其适用…

AIGC工具平台-通用抠图换背景

本模块采用先进的大模型智能算法,精准识别并分割图像中的人物或物品主体,实现高效、精准、智能化的抠图处理。无论是人物肖像、产品展示,还是复杂场景,该工具均能准确提取主体,并自动适配至背景图像,实现自…

word快速创建虚拟文字

创建虚拟文字的作用:如培训新员工使用 Word,用虚拟文字演示如何设置段落格式。不需要你随便乱敲文字或者去复制一段文字过来。帮你节约了时间! 两个函数的使用必须在段落的开头!!! rand函数 在 Word 中…

win10下python脚本运行缺失ccache的问题处理

问题 python脚本运行时,会提醒参考 https://github.com/ccache/ccache/blob/master/doc/INSTALL.md 处理缺失ccache的问题。 下载编译 下载ccache主干版本, 例如 https://github.com/ccache/ccache/archive/refs/heads/master.zip 按照说明编译 mkd…

开发复合组件TLabel + TwwDBLookupCombo

老鸟跳过。。。。。。。。本文只是为小白准备的 -------------- TwwDBLookupCombo 组件是老牌控件包的 Inofpower 中的一个组件。Inofpower 很久也没有更新了,只是作了新版DELPHI的适配,组件的功能从D2007那些开始到现在,可以说几乎没有任何…

0328-内存图2

是否正确待定: Perso类 package com.qc.内存图2;public class Perso {public int age;public String name;public static int flag;public void m1() {}public static void m2() {}Overridepublic String toString() {return "Perso [age" age "…

【ESP32S3】esp32获取串口数据并通过http上传到前端

通过前面的学习(前面没发过,因为其实就是跑它的demo)了解到串口配置以及开启线程实现功能的工作流程,与此同时还有esp32作为STA节点,将数据通过http发送到服务器。 将这两者联合 其实是可以得到一个:esp32获…

《一本书讲透Elasticsearch:原理、进阶与工程实践》读书笔记

1:es的组成部分: Elasticsearch 引擎:核心组件,处理索引和搜索请求 Kibana:es的可视化的数据界面,用于分析和展示数据 Beats(可选)轻量级的日志采集器 2:基本概念 es开…

Android15查看函数调用关系

Android15 Camera3中打印函数调用栈 1.使用CallStack跟踪函数调用 修改涉及三个内容: Android.bp中添加对CallStack的引用。CallStack被打包在libutilscallstack.so。代码中包含CallStack的头文件。代码中调用CallStack接口,打印函数调用栈。 例子&am…