【超详细】ELK实现日志采集(日志文件、springboot服务项目)进行实时日志采集上报

本文章介绍,Logstash进行自动采集服务器日志文件,并手把手教你如何在springboot项目中配置logstash进行日志自动上报与日志自定义格式输出给logstash。kibana如何进行配置索引模式,可以在kibana中看到采集到的日志

日志流程

logfile-> logstash -> es -> kibana 进行展示

ELK环境安装(docker)

Docker 安装 elk(elasticsearch、logstash、kibana)、ES安装ik分词器

Logstash实现日志文件的采集

本示例进行采集nginx日志进行演示。

1. logstash配置文件内容:

位于:/data/docker/logstash/config/logstash.conf

input {# 监听nginx日志file {path => ["/data/docker/nginx/logs/access.log", "/data/docker/nginx/logs/error.log"]type => "nginx_log" # 自定义类型start_position => "beginning" # beginning-从头开始 end-从结束不配置默认读取最新的数据,默认end}
}filter {# nginx日志格式配置if [type] == "nginx_log" {grok {match => { "message" => "%{COMBINEDAPACHELOG}"} # 标准日志格式}date {match => [ "timestamp", "ISO8601", "yyyy/MM/dd HH:mm:ss" ] # 增加ISO8601支持更多日期格式target => "@timestamp"}mutate {add_field => { "[@metadata][app]" => "%{type}" }}}}output {elasticsearch {hosts => ["elasticsearch:9200"]index => "%{[@metadata][app]}-%{+YYYY.MM.dd}"}
}

2. 修改完配置后,进行重启logstash

kibana配置索引模式,用于在kibana中进行查看日志

1. 检查配置的日志是否被采集到

进入Index Management中查看是否含有nginx_log-yyyy-MM-dd 的index,如果有说明日志被正常采集到了。

菜单位于左侧菜单栏的Management->Stack Management->Index Management中
在这里插入图片描述
在这里插入图片描述

2. 设置索引模式

在 Index patterns页面中进行新增索引模式,输入nginx_log*进行模糊匹配到我们的nginx日志索引,然后选择timestamp点击确定即可生成日志看板。然后在Discover页面中就能看到我们配置的日志面板了。

菜单位于左侧菜单栏的Management->Stack Management-> Index patterns

  • 创建新的索引模式
    在这里插入图片描述
  • 输入索引名称进行模糊匹配
    在这里插入图片描述
  • 第二步骤选择timestamp
    在这里插入图片描述

3. 进入到Discover页面进行查看日志

在这里插入图片描述

  • 下拉找到nginx_log*,就能看到采集到的日志了
    在这里插入图片描述

SpringBoot 服务上报给Logstash

该示例使用的springboot自带的logback日志框架进行上报给logstash。

如使用log4j日志框架的可以参考我写的另外一个文章: springboot 集成log4j日志,需要自定义json格式内容输出方便ES采集

springboot项目demo

GITEE项目:springboot实现logstash日志上报

pom依赖


<properties><java.version>1.8</java.version><lombok.version>1.18.28</lombok.version><fastjson2.version>2.0.34</fastjson2.version><junit.version>4.13.2</junit.version><logstash.version>7.2</logstash.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!-- lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version>
</dependency><!-- fastjson2 -->
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>${fastjson2.version}</version>
</dependency><!-- logstash -->
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>${logstash.version}</version>
</dependency></dependencies>

yaml配置


server:port: 8080spring:application:name: springboot-log-logstash-logback-demojackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8default-property-inclusion: non_null# 日志配置
logging:level:org.springframework: warnconfig: classpath:logback-spring.xml# logstash 配置logstash:url: 127.0.0.1:4560

注意:需要文件名需要为logback-spring.xml ,不然在配置日志参数时,会报错无法获取到yaml的配置

logback-spring.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><property name="log.path" value="/data/logs/springboot-log-logback-demo"/><property name="console.log.pattern"value="%green(%d{yyyy-MM-dd HH:mm:ss}) %highlight([%level]) %boldMagenta(${PID}) --- %green([%thread])  %boldMagenta(%class) - [%method,%line]: %msg%n"/><property name="log.pattern"value="%d{yyyy-MM-dd HH:mm:ss} [%level] ${PID} --- [%thread] %class - [%method,%line]: %msg%n"/><springProperty name="LOG_STASH_URL" scope="context" source="logging.logstash.url" defaultValue="127.0.0.1:4560"/><springProperty name="app" scope="context" source="spring.application.name" defaultValue="springboot-server"/><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${console.log.pattern}</pattern><charset>utf-8</charset></encoder></appender><appender name="file_out" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/out.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}/out.%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>10</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level></filter><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>WARN</level></filter><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level></filter></appender><appender name="async_out" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>512</queueSize><appender-ref ref="file_out"/></appender><!-- Logstash --><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>${LOG_STASH_URL}</destination><!-- logstash默认输出格式  --><!-- <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><customFields>{"app":"${app}"}</customFields><pattern>${log.json.pattern}</pattern></encoder>--><!-- 自定义logstash输出格式 - json--><encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"><providers><pattern><pattern>{"app":"${app}","timestamp": "%d{MM-dd HH:mm:ss.SSS}","level": "%level","class": "%class","method": "%method","line": "%class#%method - %line","message": "%msg","header.client-ip": "%X{header.client-ip}","header.content-length": "%X{header.content-length}","thread": "%thread","stack_trace": "%exception{10}"}</pattern></pattern></providers></encoder></appender><root level="info"><appender-ref ref="console"/><appender-ref ref="async_out"/><appender-ref ref="logstash"/></root></configuration>

logstash配置文件内容

# 采集配置input {# 设置监听端口为4560,格式为json格式tcp {mode => "server"host => "0.0.0.0"port => 4560codec => jsontype => "json_log"  # 自定义类型标识}
}filter {# json 格式 设置app名称,用于定义index索引名称if [type] == "json_log" {mutate {copy => { "app" => "[@metadata][app]" }}}}output {elasticsearch {hosts => ["elasticsearch:9200"]index => "%{[@metadata][app]}-%{+YYYY.MM.dd}"}# 输出到控制台以便调试# stdout { codec => rubydebug }
}

kibana配置日志查看↑和nginx的配置一样

在这里插入图片描述

logstash多文件配置

# 采集配置input {# 设置监听端口,格式为json格式tcp {mode => "server"host => "0.0.0.0"port => 4560codec => jsontype => "json_log"  # 自定义类型标识}# 监听nginx日志file {path => ["/data/docker/nginx/logs/access.log", "/data/docker/nginx/logs/error.log"]type => "nginx_log" # 自定义类型start_position => "beginning" # beginning-从头开始 end-从结束不配置默认读取最新的数据,默认end}
}filter {# json 格式 设置app名称,用于定义index索引名称if [type] == "json_log" {mutate {copy => { "app" => "[@metadata][app]" }}}# nginx日志格式配置if [type] == "nginx_log" {grok {match => { "message" => "%{COMBINEDAPACHELOG}"} # 标准日志格式}date {match => [ "timestamp", "ISO8601", "yyyy/MM/dd HH:mm:ss" ] # 增加ISO8601支持更多日期格式target => "@timestamp"}mutate {add_field => { "[@metadata][app]" => "%{type}" }}}}output {elasticsearch {hosts => ["elasticsearch:9200"]index => "%{[@metadata][app]}-%{+YYYY.MM.dd}"}# 输出到控制台以便调试# stdout { codec => rubydebug }
}

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

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

相关文章

从入门到精通:RabbitMQ的深度探索与实战应用

目录 一、RabbitMQ 初相识 二、基础概念速览 &#xff08;一&#xff09;消息队列是什么 &#xff08;二&#xff09;RabbitMQ 核心组件 三、RabbitMQ 基本使用 &#xff08;一&#xff09;安装与环境搭建 &#xff08;二&#xff09;简单示例 &#xff08;三&#xff09;…

[苍穹外卖] 1-项目介绍及环境搭建

项目介绍 定位&#xff1a;专门为餐饮企业&#xff08;餐厅、饭店&#xff09;定制的一款软件产品 功能架构&#xff1a; 管理端 - 外卖商家使用 用户端 - 点餐用户使用 技术栈&#xff1a; 开发环境的搭建 整体结构&#xff1a; 前端环境 前端工程基于 nginx 运行 - Ngi…

Docker使用 使用Dockerfile来创建镜像

本篇文章主要介绍了Docker使用Dockerfile来创建镜像&#xff0c; 本文学习Dcokerfile的基本命令,并且创建一个支持ssh服务的镜像. 1.Dockerfile 1.1基本案例 基本案例 dockerfile可以说是docker的描述符,该文件定义了docker镜像的所能拥有哪些东西.基本格式如下: 第一行指定…

USART_串口通讯轮询案例(HAL库实现)

引言 前面讲述的串口通讯案例是使用寄存器方式实现的&#xff0c;有利于深入理解串口通讯底层原理&#xff0c;但其开发效率较低&#xff1b;对此&#xff0c;我们这里再讲基于HAL库实现的串口通讯轮询案例&#xff0c;实现高效开发。当然&#xff0c;本次案例需求仍然和前面寄…

IJK播放器问题集

IJK播放器问题集 在使用ijkplayer进行播放时候&#xff0c;时常会遇到一些问题&#xff0c;故记录下&#xff1a; 1 ijkplayer出现小窗切换到大窗画面卡住问题 检查是否大小窗口切换时候&#xff0c;频繁设置了surface。某些底层api频繁设置会导致画面不动。 //holder判断是…

后端面试题分享第一弹(状态码、进程线程、TCPUDP)

后端面试题分享第一弹 1. 如何查看状态码&#xff0c;状态码含义 在Web开发和调试过程中&#xff0c;HTTP状态码是了解请求处理情况的重要工具。 查看状态码的步骤 打开开发者工具&#xff1a; 在大多数浏览器中&#xff0c;您可以通过按下 F12 键或右键单击页面并选择“检查…

“推理”(Inference)在深度学习和机器学习的语境

“推理”&#xff08;Inference&#xff09;在深度学习和机器学习的语境中&#xff0c;是指使用经过训练的模型对新数据进行预测的过程。将其简单地理解为“模型的应用阶段”。在这一阶段&#xff0c;我们不再进行模型训练&#xff0c;而是利用已训练好且保存下来的模型来获取对…

简识JVM栈帧中的操作数栈

在JVM&#xff08;Java虚拟机&#xff09;中&#xff0c;栈帧&#xff08;Stack Frame&#xff09;是方法执行时的数据结构&#xff0c;用于存储局部变量、操作数栈、方法返回地址等信息。 其中&#xff0c;操作数栈&#xff08;Operand Stack&#xff09;是栈帧中的一个重要组…

我国的金融组织体系,还有各大金融机构的分类,金融行业的组织

中国金融组织体系介绍 中国金融组织体系是一个复杂而多层次的系统&#xff0c;涵盖了各种类型的金融机构和监管机构。以下是关于中国金融组织体系的详细介绍&#xff0c;包括一行三会等金融监管机构&#xff0c;各大金融机构的分类、涉及的银行以及行业组织。 &#xff08;一…

OpenCV相机标定与3D重建(66)对立体匹配生成的视差图(disparity map)进行验证的函数validateDisparity()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用左右检查来验证视差。矩阵 “cost” 应该由立体对应算法计算。 cv::validateDisparity 函数是 OpenCV 库中用于对立体匹配生成的视差图&…

Apache Hive3定位表并更改其位置

Apache Hive3表 1、Apache Hive3表概述2、Hive3表存储格式3、Hive3事务表4、Hive3外部表5、定位Hive3表并更改位置6、使用点表示法引用表7、理解CREATE TABLE行为 1、Apache Hive3表概述 Apache Hive3表类型的定义和表类型与ACID属性的关系图使得Hive表变得清晰。表的位置取决于…

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后&#xff0c;可以从系统基础设置、网络配置、性能优化等方面进行配置和优化&#xff0c;以下是具体内容&#xff1a; 系统基础设置 更新系统&#xff1a;以root用户登录系统后&#xff0c;在终端中执行sudo yum update命令&#xff0c;对系统进行更新&#x…

Vue | 搭建第一个Vue项目(安装node,vue-cli)

一.环境搭建&#xff1a; 1.安装node&#xff1a; 进入网站&#xff0c;下载对应版本的node.js Index of /dist/ (nodejs.org) 我这里下载的是&#xff1a; 解压到对应的目录下&#xff1a; 并新建两个文件夹node_cache和node_global&#xff1a; 2.配置环境&#xff1a; …

日历热力图,月度数据可视化图表(日活跃图、格子图)vue组件

日历热力图&#xff0c;月度数据可视化图表&#xff0c;vue组件 先看效果&#x1f447; 在线体验https://www.guetzjb.cn/calanderViewGraph/ 日历图简单划分为近一年时间&#xff0c;开始时间是 上一年的今天&#xff0c;例如2024/01/01 —— 2025/01/01&#xff0c;跨度刚…

JS学习之JavaScript模块化规范进化论

前言 JavaScript 语言诞生至今&#xff0c;模块规范化之路曲曲折折。 前言 JavaScript 语言诞生至今&#xff0c;模块规范化之路曲曲折折。社区先后出现了各种解决方案&#xff0c;包括 AMD、CMD、CommonJS 等&#xff0c;而后 ECMA 组织在 JavaScript 语言标准层面&#xff0…

2024年第十五届蓝桥杯青少组国赛(c++)真题—快速分解质因数

快速分解质因数 完整题目和在线测评可点击下方链接前往&#xff1a; 快速分解质因数_C_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/cpp/show-3781.htmlhttps://www.hixinao.com/tiku/cpp/show-3781.html 若如其他赛事真题可自行前往题库中心查找&#xff0c;题…

PCF8563一款工业级、低功耗多功能时钟/日历芯片

PCF8563是PHILIPS&#xff08;现NXP&#xff09;公司生产的一款工业级、内含I2C总线接口功能的低功耗多功能时钟/日历芯片。以下是对该芯片的详细介绍&#xff1a; 一、主要特性 低功耗&#xff1a;典型值为0.25μA&#xff08;VDD3.0V&#xff0c;Tamb25℃&#xff09;。宽电…

[Computer Vision]实验三:图像拼接

目录 一、实验内容 二、实验过程及结果 2.1 单应性变换 2.2 RANSAC算法 三、实验小结 一、实验内容 理解单应性变换中各种变换的原理&#xff08;自由度&#xff09;&#xff0c;并实现图像平移、旋转、仿射变换等操作&#xff0c;输出对应的单应性矩阵。利用RANSAC算法优…

FPGA自分频产生的时钟如何使用?

对于频率比较小的时钟&#xff0c;使用clocking wizard IP往往不能产生&#xff0c;此时就需要我们使用代码进行自分频&#xff0c;自分频产生的时钟首先应该经过BUFG处理&#xff0c;然后还需要进行时钟约束&#xff0c;处理之后才能使用。

【喜讯】海云安荣获“数字安全产业贡献奖”

近日&#xff0c;国内领先的数字化领域独立第三方调研咨询机构数世咨询主办的“2025数字安全市场年度大会”在北京成功举办。在此次大会上&#xff0c;海云安的高敏捷信创白盒产品凭借其在AI大模型技术方面的卓越贡献和突出的技术创新能力&#xff0c;荣获了“数字安全产业贡献…