ELK 日志监控平台(二)- 优化日志格式

文章目录

  • ELK 日志监控平台(二)- 优化日志格式
    • 1.日志输出要点
    • 2.优化应用的日志格式
      • 2.1.确定日志输出要点来源
        • 2.1.1.服务名称
        • 2.1.2.服务环境
        • 2.1.3.日志级别
        • 2.1.4.日志输出时间
        • 2.1.5.日志内容
        • 2.1.6.日志输出对象
        • 2.1.7.线程名称
      • 2.2.logback.xml修改日志输出格式
    • 3.修改logstash的配置文件
    • 4.Kibana查看日志

ELK 日志监控平台(二)- 优化日志格式

上一篇文章《ELK 日志监控平台(一)- 快速搭建》中的最后一节,展示了一个小demo。其实细心一点就会发现一个问题,输出到 ES 的日志格式一点也不友好,实际的应用日志信息都集中在message索引字段中,而且日志的实际输出时间也不是应用中打印日志的时间,而是输出到 ES 的时间。

一个良好的日志格式可以确保日志信息易于阅读、解析和分析,便于在日志分析和故障排查中发挥作用。

1.日志输出要点

  • 服务名称:service_name
    • 生成该日志的具体组件或服务的名称,以便更好地区分不同来源的日志。
  • 服务环境:environment
    • 用于区分当前应用所在环境:测试、开发、验收、生产。
  • 日志级别:level
    • 指示日志的重要程度或严重程度
  • 日志输出时间:time
    • 包含精确到毫秒的时间信息,以便准确定位事件发生的时间点。
  • 日志内容:message
    • 清晰、简洁、易于理解的日志消息,描述了所记录事件的关键信息。
  • 日志输出对象:clazz
    • 用于记录日志的组件或对象。
  • 线程名称:thread_name
    • 如果是多线程应用程序,可以在日志中包含线程的名称或ID,以便更好地理解日志事件发生时的上下文。
  • 跟踪标识或请求ID:trace_id(本次不实现)
    • 在分布式系统中,为了能够追踪整个请求的处理过程,建议为每个请求生成唯一的跟踪标识或请求ID,并将其包含在日志中。

2.优化应用的日志格式

2.1.确定日志输出要点来源

2.1.1.服务名称

可以在配置文件中指定,例如application.yaml。这些都是可以自定义属性来指定的,所以不一定非得和鄙人的配置方式一致。

spring:
  application:
    name: AHAO日志应用
2.1.2.服务环境
spring:
  profiles:
    active: test
2.1.3.日志级别

logback.xml%level表示。

2.1.4.日志输出时间

logback.xml%d表示。

2.1.5.日志内容

logback.xml%msg表示。

2.1.6.日志输出对象

logback.xml%logger表示。

2.1.7.线程名称

logback.xml%thread表示。

2.2.logback.xml修改日志输出格式

首先引入增加 Logbak JSON 解析依赖。

<!-- Logback JSON Encoder -->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.6</version>
</dependency>

logback.xml文件修改日志输出文件中的日志格式。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--日志文件所在目录-->
    <property name="LOG_HOME" value="/logs/log" />
    <springProperty scope="context" name="application" source="spring.application.name"/>
    <springProperty scope="context" name="env" source="spring.profiles.active"/>

    <!--采用打印到控制台,记录日志的方式-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--日志输出格式-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--滚动记录文件-->
<!--    <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        &lt;!&ndash;日志文件地址&ndash;&gt;-->
<!--        <file>${LOG_HOME}/demoLog.log</file>-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            &lt;!&ndash;粒度:天。等价于一天一个文件&ndash;&gt;-->
<!--            <fileNamePattern>${LOG_HOME}/demoLog-%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!--        </rollingPolicy>-->
<!--        <encoder>-->
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
<!--        </encoder>-->
<!--    </appender>-->

    <appender name="rollingFile2" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文件地址-->
        <file>${LOG_HOME}/demoLog.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--粒度:天。等价于一天一个文件-->
            <fileNamePattern>${LOG_HOME}/demoLog-%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <pattern>
                    <pattern>
                        {
                        "time":"%d{yyyy-MM-dd HH:mm:ss.SSS}",
                        "level":"%level",
                        "thread_name":"%thread",
                        "clazz":"%logger{36}",
                        "message":"%msg",
                        "environment":"${env}",
                        "service_name":"${application}"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>

    <root level="INFO" additivity="false">
        <appender-ref ref="rollingFile2" />
        <appender-ref ref="console" />
    </root>
</configuration>

3.修改logstash的配置文件

logstash/config目录新增一个配置文件名为 demo_json.log,内容如下:

input {
  file {
    path => "/logs/log/demoLog.log"
    start_position => "beginning"
    stat_interval => "3"
    type => "demo_log"
    codec => json
  }
}

filter {
    date {
        match => ["time", "yyyy-MM-dd HH:mm:ss.SSS"]
        target => "@timestamp"
    }
}

output {
   if [type] == "demo_log" {
     elasticsearch {
       hosts => ["http://127.0.0.1:9200"]
       index => "demo_log-%{+YYYY.MM.dd}"
    }
  }
}

编码插件(codec)可以在logstash输入或输出时处理不同类型的数据。如果logstash采集的日志是JSON格式,那我们可以在input字段加入codec => json来进行解析,这样就可以根据具体内容生成字段,方便分析和储存。同理 logstash输出为JSON格式,可以在output字段加入codec=>json

filter/date 插件可以用来转换你的日志记录中的时间字符串,变成 LogStash::Timestamp 对象,然后转存到 @timestamp 字段里

  • **match中参数:**字段名,格式化模式,要转换的时间格式
  • **target:**值类型是字符串,默认值是“@timestamp”。将匹配的时间戳存储到给定的目标字段中。

最后重新启动 Logstash。

在这里插入图片描述

4.Kibana查看日志

进入Stack Management/索引模式,并点击 demo_log* 界面(上一篇文章配置过,如果不会可以先看一下上一篇文章的demo)。

在这里插入图片描述

如上图所示,我们新增的字段已经添加进去了。

仔细查看可知,输出的日志信息与预期一致,并且我们日志打印时间也和实际的时间一致。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

win10安装rabbitmq

安装 第一步&#xff1a;下载并安装erlang RabbitMQ服务端代码是使用并发式语言Erlang编写&#xff0c;因此首先需要安装Erlang下载地址&#xff1a;http://www.erlang.org/downloads采用默认安装即可&#xff0c;选择适合的安装路径 添加环境变量 第二步&#xff1a;下载并…

【DevOps】深入了解RabbitMQ:AMQP协议基础、消息队列工作原理和应用场景

目录 一、核心功能 二、优势 三、核心概念 四、工作原理 五、交换机类型 六、消息确认 七、持久性和可靠性 八、插件和扩展 九、集群和镜像队列 十、客户端库 十一、管理界面 十二、应用场景 RabbitMQ是一个基于AMQP协议的消息队列中间件&#xff0c;提供高可用、可…

【数据结构与算法 刷题系列】移除链表元素

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;数据结构与算法刷题系列&#xff08;C语言&#xff09; 期待您的关注 目录 一、问题描述 二、解题思路 三、源代码实现 一、问题…

Qt for android 获取USB设备列表(二)JNI方式 获取

简介 基于上篇 [Qt for android 获取USB设备列表&#xff08;一&#xff09;Java方式 获取]&#xff0c; 这篇就纯粹多了&#xff0c; 直接将上篇代码转换成JNI方式即可。即所有的设备连接与上篇一致。 (https://listentome.blog.csdn.net/article/details/139205850) 关键代码…

UTC与GPS时间转换-[week, sow]

UTC与GPS时间转换-[week, sow] utc2gpsgps2utc测试参考 Ref: Global Positioning System utc2gps matlab源码 function res utc2gps(utc_t, weekStart)%% parameterssec_day 86400;sec_week 604800;leapsec 18; % 默认周一为一周的开始if nargin < 2weekStart d…

HarmonyOS-MPChart绘制一条虚实相接的曲线

本文是基于鸿蒙三方库mpchart&#xff08;OpenHarmony-SIG/ohos-MPChart&#xff09;的使用&#xff0c;自定义绘制方法&#xff0c;绘制一条虚实相接的曲线。 mpchart本身的绘制功能是不支持虚实相接的曲线的&#xff0c;要么完全是实线&#xff0c;要么完全是虚线。那么当我…

VTK 数据处理:特征边提取

VTK 数据处理&#xff1a;特征边提取 VTK 数据处理&#xff1a;特征边提取原理实例 1&#xff1a;边界边提取实例 2&#xff1a;模型特征边提取实例 3&#xff1a;利用 vtkFeatureEdges 提取的边界补洞实例 4&#xff1a;利用 vtkFillHolesFilter 补洞 VTK 数据处理&#xff1a…

[C语言]自定义类型详解:结构体、联合体、枚举

目录 &#x1f680;结构体 &#x1f525;结构体类型的声明 &#x1f525;结构的自引用 &#x1f525;结构体变量的定义和初始化 &#x1f525;结构体内存对齐 &#x1f525;结构体传参 &#x1f525;结构体实现位段&#xff08;位段的填充&可移植性&#xff09; &a…

企业异地网络组网:SD-WAN解决方案的优势

在当今全球化的商业环境中&#xff0c;企业的业务扩展已不再局限于本地或单一国家。随着分公司和子公司的不断增加&#xff0c;企业总部与这些分支机构之间的数据通信和资源共享变得尤为重要。然而&#xff0c;传统的网络访问方式&#xff0c;如点对点电路和多协议标签交换&…

17.7K星开源产品分析平台:Posthog

Posthog&#xff1a;开源洞察&#xff0c;产品优化的得力助手 - 精选真开源&#xff0c;释放新价值。 概览 PostHog是一个全面开源的平台&#xff0c;旨在帮助团队构建更好的产品。它提供了从产品分析到会话回放、功能标志和A/B测试等一系列工具&#xff0c;支持自托管&#x…

个人博客网站搭建笔记1

文章目录 前言要求自己的理解资源过程视频教程SpringBoot开发一个小而美的个人博客p1课程介绍p2需求和功能 前言 自己之前其实就想搭建一个属于自己的网站&#xff0c;但是不知道怎么操作&#xff0c;没找到合适的教程&#xff0c;&#xff08;手把手的那种&#xff09;&#…

Prometheus+Grafana监控服务器、mysql数据库并配置报警规则推送邮箱

文章目录 一、安装prometheus1.1下载1.2 安装1.3 开机启动1.4 验证 二、安装 Grafana2.1 下载2.2 安装2.3 启动2.4 验证 三、安装服务器监控 node_exporter3.1 下载3.2 安装3.3 设置 node_exporter 系统服务3.4 设置开机自动启动3.5 验证3.6配置Prometheus3.7 修改 Prometheus …

Tomcat部署项目的方式

目录 1、Tomcat发布项目的方式 方式1&#xff1a; 直接把项目发布到webapps目录下 方式2&#xff1a;项目发布到ROOT目录 方式3&#xff1a;虚拟路径方式发布项目 方式4&#xff1a;(推荐)虚拟路径&#xff0c;另外的方式&#xff01; 方式5&#xff1a;发布多个网站 1、…

[windows系统安装/重装系统][step-4][番外篇-2]N卡驱动重装 |解决:开机几小时后电脑卡顿 | 后台自动运行了上千个Rundll32进程问题

现象 开机几小时后&#xff0c;电脑变卡&#xff0c;打开后台管理器都卡&#xff0c;后台管理去转圈圈一小会儿后看到后台进程上千个&#xff0c;好多个Rundll32进程 重启下运行会稍快 重启后运行快&#xff0c;后台管理器反应也快 打开后台管理器不卡&#xff08;几小时后打…

Python语法(全)

前言&#xff1a; 下面是Python基本的语法&#xff0c;大家耐心观看&#xff01; 1.基础语法 1.1字面量 字面量&#xff1a;在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面 1.2字符串 字符串&#xff08;string&#xff09;&#xff0c;又称文本&#xff…

C语言数据结构栈的概念及结构、栈的实现、栈的初始化、销毁栈、入栈、出栈、检查是否为空、获取栈顶元素、获取有效元素个数等的介绍

文章目录 前言栈的概念及结构栈的实现一、 栈结构创建二、 初始化结构三、销毁栈四、入栈五、出栈六、检查是否为空七、获取栈顶元素八、获取有效元素的个数九、测试 1十、测试 2总结 前言 C语言数据结构栈的概念及结构、栈的实现、栈的初始化、销毁栈、入栈、出栈、检查是否为…

blender 布尔运算,切割模型。

1.创建一个立方体和球体。 2.选中立方体&#xff0c;在属性面板添加布尔修改器。点击物体属性右边的按钮选中球体。参数如下。 3.此时隐藏球体&#xff0c;就可以看到被切掉的效果了。

C结构详解

目录 1、结构模板 1. 建立结构声明 2. 定义结构变量 3. 访问结构成员 4. 初始化结构 声明结构数组 声明和初始化结构指针 1、结构模板 1. 建立结构声明 struct book{char title[MAXTITL];char author[MAXAUTL];float value; }&#xff1b; 该声明描述了一个又两个字符…

【漫画算法】哈希表:古代皇帝的秘密魔法书

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

三个有意思的链表面试题的完成

上一篇博客我们已经完成了链表的所有内容&#xff0c;那么这一篇博客我们来看一下三个特别有意思的链表题目。 **第一个题目如下&#xff1a;**相信不少朋友看到这题目就已经晕了&#xff0c;那就简单说明下这个题目&#xff0c;题目就是创建一个链表&#xff0c;其中每个节点…