当前位置: 首页 > news >正文

SpringBoot+ELK 搭建日志监控平台

ELK 简介

ELK(Elasticsearch, Logstash, Kibana)是一个目前主流的开源日志监控平台。由三个主要组件组成的:

Elasticsearch: 是一个开源的分布式搜索和分析引擎,可以用于全文检索、结构化检索和分析,它构建在Lucene搜索引擎库之上,是当前使用较为广泛的开源搜索引擎之一。
Logstash: 一个用于收集、处理和转发日志数据的数据处理管道。Logstash可以从不同的日志源(如文件、应用程序日志、数据库等)中收集日志数据,并对其进行过滤、解析和转换,然后将其发送到Elasticsearch中进行存储和索引。
Kibana: 一个用于可视化和分析存储在Elasticsearch中的日志数据的用户界面。Kibana提供了一个直观且功能强大的仪表盘,可以根据特定需求创建各种图表、表格和地图,并进行实时数据可视化和监控。

安装Elasticsearch和Kibana

参考我之前写的博客

安装 Logstash

官方下载地址:https://www.elastic.co/cn/downloads/past-releases#logstash
与 Elasticsearch 一致

进入bin 目录,输入logstash.bat -e "input { stdin {} } output { stdout {} }"启动。
在这里插入图片描述

日志收集DEMO

创建SpringBoot应用

依赖导入

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>

日志配置文件 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 日志存放路径 --><property name="log.path" value="./logs"/><!-- 日志输出格式 --><property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><!-- 是否在当天日志滚动时,对当天日志进行改名 --><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>INFO</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 系统错误日志输出 --><appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-error.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder><!-- 是否在当天日志滚动时,对当天日志进行改名 --><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><!-- 用户访问日志输出  --><appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-user.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 按天回滚 daily --><fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 60天 --><maxHistory>60</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统模块日志级别控制  --><logger name="com.project" level="info"/><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn"/><root level="info"><appender-ref ref="console"/></root><!--系统操作日志--><root level="info"><appender-ref ref="file_info"/></root><root level="info"><appender-ref ref="file_error"/></root><!--系统用户操作日志--><logger name="sys-user" level="info"><appender-ref ref="sys-user"/></logger>
</configuration> 

启动类

创建Logstash配置文件

进入Logstash的config目录,创建一个名为 logstash.conf文件,并进行如下配置

input {#监控所有服务的error.log文件file {path => "F:/twj/mygitee/project/logs/sys-error.log"start_position => "beginning"sincedb_path => "E:/logstash-8.17.3/sincedb_error_file"codec => "plain"type => "error"}#监控所有服务的user.log文件file {path => "F:/twj/mygitee/project/logs/sys-user.log"start_position => "beginning"sincedb_path => "E:/logstash-8.17.3/sincedb_user_file"codec => "plain"type => "info"}}filter {# 使用 grok 解析日志内容grok {match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{DATA:thread} --- \[%{DATA:logger}\] \: %{GREEDYDATA:message}" }}# 如果需要从文件路径中提取服务名grok {match => { "path" => "logs/(?<service_name>[^/]+)/.*" }}# 时间字段转换为标准的时间格式date {match => [ "timestamp", "ISO8601" ]}# 过滤掉低于 ERROR 的日志(只保留 ERROR 日志)# if [loglevel] == "ERROR" {#   mutate {#     add_field => { "is_error_log" => "true" }#   }# }
}output {# 将 error 日志发送到 Elasticsearchif [type] == "error" {elasticsearch {hosts => ["http://localhost:9201"]index => "sys-error.log-%{+YYYY.MM.dd}"user => "elastic"password => "qD+=4WRHuM7JgmJVo-ZD"}}# 将 user 日志发送到 Elasticsearchif [type] == "info" {elasticsearch {hosts => ["http://localhost:9201"]index => "sys-user.log-%{+YYYY.MM.dd}"user => "elastic"password => "qD+=4WRHuM7JgmJVo-ZD"}}# 可选:你也可以将日志输出到文件(调试用)# file {#   path => "C:/path/to/output/logstash_output.json"# }
}

input部分: 定义了日志输入来源及其处理方式。配置中有两个 file 输入插件,用于读取不同的日志文件,*表示匹配该目录下的所有文件

  • path => “E:/work/sinosoft/logs/*/debug.log”: 这个配置指向所有子目录中的 debug.log 文件。
  • start_position => “beginning”: 从文件的开始位置开始读取。如果是首次读取,它会从文件开头读取。
  • sincedb_path => “E:/soft/ELK/logstash_sincedb/sincedb_debug_file”: sincedb 文件用于记录 Logstash 已经处理过的文件位置,确保在 Logstash 重启时能够继续读取未处理的日志。
  • codec => “plain”: 指定使用 plain 编解码器,即不对日志内容做任何特殊编码。
  • type => “debug”: 设置事件类型为 debug,用于后续在输出部分区分 debug 和 error 类型的日志。

filter部分: 用于对输入的日志数据进行解析和处理。

使用grok解析日志内容

  • 使用 grok 解析日志中的 message 字段,匹配日志的标准模式(例如时间戳、日志级别、线程、日志记录器、实际日志消息等)。

该表达式将日志分解为以下字段:

timestamp: 时间戳
loglevel: 日志级别(例如 INFO, ERROR 等)
thread: 线程名
logger: 日志记录器名
message: 实际的日志消息内容

  • 从日志的文件路径中提取服务名称,正则表达式 (?<service_name>[^/]+)/.* 会从路径
    logs/{service_name}/ 中提取 service_name 字段。
  • 将 timestamp 字段的时间格式转换为标准的时间格式(ISO8601),这样可以确保时间字段在 Elasticsearch
    中存储为正确的时间戳格式。
  • 过滤低于ERROR的日志,如果日志级别是 ERROR,则通过 mutate 插件给事件添加一个 is_error_log 字段,值为
    true,用于标识该事件是一个错误日志

output部分: 定义了日志最终的输出目标。

  • 输出debug类型的日志到Elasticsearch

  • 只有当事件的 type 字段为 debug 时,日志才会被发送到 Elasticsearch。

    hosts => [“http://localhost:9201”]: Elasticsearch 的地址。

    index => “sys-error.log-%{+YYYY.MM.dd}”: 日志会被索引到 sys-error.log-YYYY.MM.dd 这样的索引中,其中 %{+YYYY.MM.dd} 会自动替换为日志事件的年月(例如 2025.03.01)。

    user => “elastic”: Elasticsearch 用户名(一般为 elastic)。并且按日或按周等创建索引,将%{+YYYY.MM.dd}里面的+YYYY.MM.dd替换成其他便可。

  • 输出error类型的日志到Elasticsearch

  • 只有当事件的 type 字段为 error 时,日志才会被发送到 Elasticsearch。

  • index => “sys-error.log-%{+YYYY.MM.dd}”: 错误日志会被索引到
    sys-error.log-YYYY.MM.dd 这样的索引中。

调试用的文件输出,index => “sys-error.log-%{+YYYY.MM.dd}”: 错误日志会被索引到 sys-error.log-YYYY.MM.dd 这样的索引中。(可选)

索引创建频率:

根据配置,索引的创建是按月进行的。具体来说,索引名称为 sys-error.log-%{+YYYY.MM} 和 sys-error.log-%{+YYYY.MM},其中 %{+YYYY.MM} 会被替换为事件的年和月,因此每个月会自动创建一个新的索引。

例如,2025年3月1日的 debug 日志会被索引到 sys-user.log-2025.03.01,错误日志则会被索引到 sys-error.log-2025.03.01。

总结:

输入: 从多个文件中读取 debug.log 和 error.log,并根据文件路径设置不同的类型 (debug 和 error)。
过滤: 使用 grok 解析日志,提取必要的字段,并转换时间格式。只保留 ERROR 级别的日志。
输出: 根据日志类型,分别将 debug 和error 日志输出到不同的 Elasticsearch 索引中,索引按月创建。

这样配置的目的是将 debug 和 error 日志分开存储,便于查询和分析,并且确保日志的时间信息被标准化处理。

启动logstash

在将logstash.conf文件配置好并保存后,win+r打开终端(或者以管理员的方式),cd到bin目录下

在这里插入图片描述
输入命令:logstash.bat -f …/logstash-8.17.3/config/logstash.conf,启动logstash并且使用logstash.conf配置文件
在这里插入图片描述
在这里插入图片描述

启动成功后,logstash已经将配置文件中配置的将对应目录下的日志文件读入es中
在这里插入图片描述

配置kibana

1、选择Management

在这里插入图片描述

2、选择数据视图

在这里插入图片描述

3、创建数据视图

在这里插入图片描述

4、配置信息填写

在这里插入图片描述

日志查看

1、点击Discover 在这里插入图片描述

2、选择相应要查看的数据视图

在这里插入图片描述
在这里插入图片描述

相关文章:

SpringBoot+ELK 搭建日志监控平台

ELK 简介 ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;是一个目前主流的开源日志监控平台。由三个主要组件组成的&#xff1a; Elasticsearch&#xff1a; 是一个开源的分布式搜索和分析引擎&#xff0c;可以用于全文检索、结构化检索和分析&#xff0c;它构建…...

家庭数字生态构建实战:基于飞牛fnOS的智能家居数据中台搭建全流程解析

文章目录 前言1. VMware安装飞牛云&#xff08;fnOS&#xff09;1.1 打开VMware创建虚拟机1.3 初始化系统 2. 安装Cpolar工具3. 配置远程访问地址4. 远程访问飞牛云NAS5. 固定远程访问地址 前言 在数字生活时代&#xff0c;数据管理正成为每个家庭的刚需。今天要向大家重点推荐…...

博客系统功能测试

博客系统网址&#xff1a;http://8.137.19.140:9090/blog_list.html 主要测试内容 功能测试、界面测试、性能测试、易用性测试、安全测试、兼容性测试、弱网测试、安装卸载测试、压力测试… 测试方法及目的 利用selenium和python编写测试脚本&#xff0c;对博客系统进行的相关…...

抽奖相关功能测试思路

1. 抽奖系统功能测试用例设计&#xff08;登录 每日3次 中奖40% 道具兑换码&#xff09; ✅ 功能点分析 必须登录后才能抽奖每天最多抽奖3次抽奖有 40% 概率中奖中奖返回兑换码 ✅ 测试用例设计 编号 用例描述 前置条件 操作 预期结果 TC01 未登录时抽奖 未登录 …...

paddle ocr本地化部署进行文字识别

一、Paddle 简介 1. 基本概念 Paddle&#xff08;全称 PaddlePaddle&#xff0c;飞桨&#xff09;是百度开发的 开源深度学习平台&#xff0c;也是中国首个自主研发、功能丰富、技术领先的工业级深度学习平台。它覆盖了深度学习从数据准备、模型训练、模型部署到预测的全流程…...

在CentOS系统上部署GitLabRunner并配置CICD自动项目集成!

在CentOS系统上部署GitLabRunner并配置CICD自动项目集成 在CentOS系统上部署GitLab Runner并配置CI/CD自动项目集成GitLab CI/CD是一个强大的持续集成和持续部署工具&#xff0c;能够显著提高开发团队的效率。 本文将详细介绍如何在CentOS系统上部署GitLab Runner&#xff0c…...

python学习day2(未写完,明天继续补充)

今天主要学习了变量的数据类型&#xff0c;以及如何使用格式化符号进行输出。 一、认识数据类型 在python里为了应对不同的业务需求&#xff0c;也把数据分为不同的类型。 代码如下&#xff1a; """ 1、按类型将不同的变量存储在不同的类型数据 2、验证这些…...

深度强化学习框架DI-engine

深度强化学习框架DI-engine 一、DI-engine概述&#xff1a;决策智能的通用引擎 DI-engine是由OpenDILab开源的决策智能引擎&#xff0c;基于PyTorch和JAX构建&#xff0c;旨在为强化学习&#xff08;RL&#xff09;、模仿学习&#xff08;IL&#xff09;、离线学习等场景提供…...

gitlab迁移

需求&#xff1a;需要将A服务器上的 gitlab 迁移到B服务器上&#xff0c;均使用docker 部署 一、备份数据 进入到A服务器的 gitlab 的容器中&#xff0c;运行gitlab-rake gitlab:backup:create 该命令会在 /var/opt/gitlab/backups/ 目录下创建一个xxx_gitlab_backup.tar 压缩…...

UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings

33.2.6 Strings UEFI 环境中的 string 是使用 UCS-2 格式定义&#xff0c;每个字符由 16bit 数据表示。对于用户界面&#xff0c;strings 也是一种可以安装到 HIIdatabase 的一种数据。 为了本土化&#xff0c;每个 string 通过一个唯一标识符来识别&#xff0c;而每一个标识…...

如何确保低空经济中的数据安全?

低空经济涉及大量敏感数据&#xff0c;如无人机的飞行轨迹、拍摄的地理图像和视频等。为确保这些数据的安全&#xff0c;可从以下几方面着手&#xff1a; 加强数据加密 传输加密 &#xff1a;采用 SSL/TLS 等加密协议&#xff0c;对数据在传输过程中进行加密&#xff0c;防止…...

在linux平台下利用mingw64编译windows程序

背景 笔者平时都是基于linux平台开发C代码&#xff0c;已经熟悉使用CMake这一套工具上一次开发windows应用程序还要追溯到10多年前&#xff0c;彼时还是使用微软的visual studio这个IDE&#xff0c;这个IDE确实也很强大&#xff0c;但也确实很笨重&#xff0c;当时用起来也很不…...

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡?

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡&#xff1f; code review! 参考笔记&#xff1a; 1.虚幻引擎5-Unreal Engine笔记之GameMode、关卡&#xff08;Level&#xff09; 和 关卡蓝图&#xff08;Level Blueprint&#xff09;的关系 2.虚幻引擎…...

[IMX] 04.定时器 - Timer

目录 1.周期中断定时器 - EPIT 1.1.工作模式 1.2.配置寄存器 - EPIT_CR 1.3.状态寄存器 - EPIT_SR 1.4.加载寄存器 - EPIT_LR 1.5.比较寄存器 - EPIT_CMPR 1.6.计数寄存器 - EPIT_CNR 2.通用定时器 - GPT 2.1. 时钟源 2.2.模块结构 2.3.工作模式 2.4.配置寄存器 - …...

前端 vue + element-ui 框架从 0 - 1 搭建

1. 安装node 地址&#xff1a; Node.js — 在任何地方运行 JavaScript 2. 安装 vue 2.1 执行安装命令 npm uninstall -g vue-cli npm install -g vue/cli 安装最新的vue3版本 2.2 使用vue 脚手架 搭建项目 vue create project_name 2.2.1 注意 项目名称不能包…...

【IDEA】删除/替换文件中所有包含某个字符串的行

目录 前言 正则表达式 示例 使用方法 前言 在日常开发中&#xff0c;频繁地删除无用代码或清理空行是不可避免的操作。许多开发者希望找到一种高效的方式&#xff0c;避免手动选中代码再删除的繁琐过程。 使用正则表达式是处理字符串的一个非常有效的方法。 正则表达式 …...

算法刷题(Java与Python)2.数组、列表

目录 Java的数组 数组介绍 注意事项 Python的列表 列表介绍 Python 的列表和 Java 的 ArrayList 一样吗&#xff1f; 例题1 代码分析 Java代码 Python代码 对比代码 例题2 代码分析 Java代码 Python代码 对比代码 例题三 Java代码 Python代码 代码对比 Jav…...

uniapp打包H5,输入网址空白情况

由于客户预算有限&#xff0c;最近写了两个uniapp打包成H5的案例&#xff0c;总结下面注意事项 1. 发行–网站-PCWeb或手机H5按钮&#xff0c;输入名称&#xff0c;网址 点击【发行】&#xff0c;生成文件 把这个给后端&#xff0c;就可以了 为什么空白呢 最重要一点&#xf…...

JavaScript 中使用 Elasticsearch 的正确方式,第一部分

作者&#xff1a;来自 Elastic Jeffrey Rengifo 讲解如何用 JavaScript 创建一个可用于生产环境的 Elasticsearch 后端。 想获得 Elastic 认证&#xff1f;看看下一期 Elasticsearch 工程师培训什么时候开始吧&#xff01; Elasticsearch 拥有大量新功能&#xff0c;能帮助你…...

每日一道leetcode(增加版)

901. 股票价格跨度 - 力扣&#xff08;LeetCode&#xff09; 题目 设计一个算法收集某些股票的每日报价&#xff0c;并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数&#xff08;从今天开始往回数&#xff0c;包括今…...

排序复习/下(C语言版)

目录 1.快速排序&#xff08;hoare法&#xff09; 单趟&#xff1a; 整体&#xff1a; 代码优化&#xff1a; ​编辑三数取中代码&#xff1a; 小区间优化代码&#xff1a; hoare法疑问解答&#xff1a; 2.快速排序&#xff08;挖坑法&#xff09; 3.快速排序&#x…...

Vue百日学习计划Day33-35天详细计划-Gemini版

总目标: 在 Day 33-35 理解 Vue 组件从创建到销毁的完整生命周期&#xff0c;熟练掌握 Composition API 中主要的生命周期钩子&#xff0c;并知道在不同阶段执行哪些操作。 所需资源: Vue 3 官方文档 (生命周期钩子): https://cn.vuejs.org/guide/essentials/lifecycle.html你…...

Apidog MCP服务器,连接API规范和AI编码助手的桥梁

#作者&#xff1a;曹付江 文章目录 1.了解 MCP2.什么是 Apidog MCP 服务器&#xff1f;3.Apidog MCP 服务器如何工作4.利用人工智能改变开发工作流程5.设置 Apidog MCP 服务器&#xff1a; 分步指南5.高级功能和提示5.1 使用 OpenAPI 规范5.2.多个项目配置5.3.安全最佳实践5.4…...

统计客户端使用情况,使用es存储数据,实现去重以及计数

这篇文件的重点在tshark、filebeat、和logstash。 需求&#xff1a;统计客户使用的客户端版本 实现工具&#xff1a;tshark 1.10.14&#xff0c;filebeat 8.17.0&#xff0c;logstash 8.17.0&#xff0c;elasticsearch 8.17.0&#xff0c;kibana 8.17.0 总体设计&#xff1a…...

Git基础面试题

git的rm命令与系统的rm命令有什么区别 git rm 和系统的 rm (在 Windows 上是 del) 命令都用于删除文件&#xff0c;但它们在 Git 仓库的上下文中作用有所不同&#xff1a; 系统 rm (或 del) 命令&#xff1a; 作用&#xff1a; 直接从文件系统中删除文件。Git 的感知&#xff…...

conda 的常用命令

好的&#xff0c;下面为你介绍conda的常用命令&#xff1a; 环境管理 # 创建新环境 conda create -n env_name python3.8# 激活环境 conda activate env_name# 查看所有环境 conda env list# 复制环境 conda create -n new_env --clone old_env# 删除环境 conda remove -n en…...

PLC双人舞:profinet转ethernet ip网关奏响施耐德与AB的协奏曲

PLC双人舞&#xff1a;ethernet ip转profinet网关奏响施耐德与AB的协奏曲 案例分析&#xff1a;施耐德PLC与AB PLC的互联互通 在现代工业自动化中&#xff0c;设备之间的互联互通至关重要。本案例旨在展示如何通过北京倍讯科技的EtherNet/IP转Modbus网关&#xff0c;将施耐德P…...

百度OCR:证件识别

目录 一、编写目的 二、准备工作 2.1 OCR密钥 三、代码实现 3.1 配置文件 3.2 请求接收封装 3.3 请求响应封装 3.4 服务类参数初始化 3.5 服务类实现 3.6 解析结果 3.7 定义Web接口 四 测试效果 五、总结 欢迎来到盹猫&#x1f431;的博客 本篇文章主要介绍了 [百…...

纯前端实现图文识别 OCR

Tesseract.js Tesseract.js 是一个基于 Google Tesseract OCR 引擎的 JavaScript 库&#xff0c;利用 WebAssembly 技术将的 OCR 引擎带到了浏览器中。它完全运行在客户端&#xff0c;无需依赖服务器&#xff0c;适合处理中小型图片的文字识别。 基本使用 以下示例展示了如何…...

2025.05.01【Barplot】柱状图的多样性绘制

Custom color A few examples showing how to custom barplot color. Horizontal barchart It makes sense to make your barchart horizontal: group labels are now much easier to read 文章目录 Custom colorHorizontal barchart 探索Barplot的奥秘Barplot基础什么是Barp…...

在资源受限环境下,移动端如何实现流畅动画?如何在内存、CPU、GPU、网络等多种限制条件下,依然保持动画高帧率、低延迟、不卡顿?

在日常生活中&#xff0c;移动设备已经成为不可或缺的工具。从社交、购物到游戏、教育&#xff0c;几乎所有的应用场景都依赖于移动终端的计算和显示能力。然而&#xff0c;随着用户体验的不断提升需求&#xff0c;动画成为了界面交互中不可忽视的一环。动画不仅提升了视觉吸引…...

HJ10 字符个数统计【牛客网】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 HJ10 字符个数统计 一、题目描述 二、测试用例 三、解题思路 基本思路&#xff1a;   建立字符串的散列表&#xff0c;然后统计不同字符个数具体思路&#xff1a;   遍历字符串的字…...

关键点检测算法-RTMPose

一、网络框架&#xff08;top-down模式&#xff09; 二、各部分内容 1、骨干网络 对于网络而言&#xff0c;CXPset太大&#xff0c;可以换成starnet 2、一个卷积层 7x7的卷积核对性能提升最大 3、一个全连接层 将一维关键点表示扩展到由超参数控制的所需维度。 4、一个用…...

云原生安全:错误策略S3存储桶ACL设置为Everyone:FullControl

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从基础到实践的深度解析 1. 基础概念 S3存储桶与ACL Amazon S3(Simple Storage Service)是AWS提供的对象存储服务,支持存储和检索任意规模的数据。ACL(访问控制列表…...

Axure疑难杂症:垂直菜单展开与收回(4大核心问题与专家级解决方案)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢!如有帮助请订阅专栏! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:垂直菜单展开与收回 主要内容:超长菜单实现、展开与收回bug解释、Axure9版本限制等问题解…...

图漾相机错误码解析(待补充)

文章目录 1.相机错误码汇总2.常见报错码2.1 -1001报错2.1.1 没有找到相机2.1.2 SDK没有进行初始化 2.2 -1005报错2.2.1 跨网段打开相机2.2.2 旧版本SDK在软触发失败后提示的报错2.2.3 相机初始化上电时报错2.2.4 USB相机被占用 2.3 -1009报错2.3.1 相机本身不支持改属性 2.4 -1…...

SpringBoot 中文转拼音 Pinyin4j库 拼音转换 单据管理 客户管理

介绍 在客户管理系统中部分客户的名字会有生僻字为了沟通时候不叫错客户的名称&#xff0c;因此决定将客户名称的拼音一起返回给前端&#xff0c;也可以直接交给前端去处理。这里介绍后端的做法 Pinyin4j 是一个用于将汉字转换为拼音的 Java 库。在需要对中文文本进行拼音转换…...

使用 Whisper 生成视频字幕:从提取音频到批量处理

生成视频字幕是许多视频处理任务的核心需求。本文将指导你使用 OpenAI 的 Whisper 模型为视频文件&#xff08;如电视剧《Normal People》或电影《花样年华》&#xff09;生成字幕&#xff08;SRT 格式&#xff09;。我们将从提取音频开始&#xff0c;逐步实现字幕生成&#xf…...

Kotlin Compose Button 实现长按监听并实现动画效果

想要实现长按按钮开始录音&#xff0c;松开发送的功能。发现 Button 这个控件如果去监听这些按下&#xff0c;松开&#xff0c;长按等事件&#xff0c;发现是不会触发的&#xff0c;究其原因是 Button 已经提前消耗了这些事件所以导致&#xff0c;这些监听无法被触发。因此为了…...

SQL练习——(15/81)

目录 1.计算次日留存率 2.多条件查询 方法1&#xff1a;子查询 方法2&#xff1a;窗口函数实现 3.条件查询——自连接相关 1.计算次日留存率 550. 游戏玩法分析 IV - 力扣&#xff08;LeetCode&#xff09; 错误查询1&#xff1a;&#xff08;没有考虑从首次登录日期开始…...

数据中心 智慧机房解决方案

该文档介绍数据中心智慧机房解决方案,涵盖模块化数据中心(机柜式、微模块),具备低成本快速部署、标准化建设等特点;监控管理系统(DCIM)可实现设施、资产、容量、能效管理;节能解决方案含精密空调节能控制柜,节能率高达 30%;还有7X24 小时云值守运维服务。方案亮点包括…...

网络-MOXA设备基本操作

修改本机IP和网络设备同网段&#xff0c;输入设备IP地址进入登录界面&#xff0c;交换机没有密码&#xff0c;路由器密码为moxa 修改设备IP地址 交换机 路由器 环网 启用Turbo Ring协议&#xff1a;在设备的网络管理界面中&#xff0c;找到环网配置选项&#xff0c;启用Turb…...

Docker构建 Dify 应用定时任务助手

概述 Dify 定时任务管理工具是一个基于 GitHub Actions 的自动化解决方案&#xff0c;用于实现 Dify Workflow 的定时执行和状态监控。无需再为缺乏定时任务支持而感到困扰&#xff0c;本工具可以帮助设置自动执行任务并获取实时通知&#xff0c;优化你的工作效率。 注意&…...

前端测试策略:单元测试到 E2E 测试

引言 在现代前端开发中&#xff0c;测试已成为确保应用质量和可靠性的关键环节。随着前端应用复杂度的不断提高&#xff0c;仅依靠手动测试已经远远不够。一个全面的前端测试策略应该包含多个层次的测试&#xff0c;从最小粒度的单元测试到模拟真实用户行为的端到端(E2E)测试。…...

Web漏洞扫描服务的特点与优势:守护数字时代的安全防线

在数字化浪潮中&#xff0c;Web应用程序的安全性已成为企业业务连续性和用户信任的核心要素。随着网络攻击手段的不断升级&#xff0c;Web漏洞扫描服务作为一种主动防御工具&#xff0c;逐渐成为企业安全体系的标配。本文将从特点与优势两方面&#xff0c;解析其价值与应用场景…...

大中型水闸安全监测系统解决方案

一、系统概述 水闸是重要的水利基础设施&#xff0c;具有防洪、挡潮、排涝、灌溉、供水、生态、航运和水力发电等综合功能&#xff0c;在国家水网构建、支撑经济社会高质量发展等方面具有十分重要的作用。我国水闸工程面广量大&#xff0c;据2021年统计数据&#xff0c;我国已建…...

紫光同创FPGA实现AD9238数据采集转UDP网络传输,分享PDS工程源码和技术支持和QT上位机

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目紫光同创FPGA相关方案推荐我这里已有的以太网方案本方案在Xilinx系列FPGA的应用方案 3、设计思路框架工程设计原理框图AD输入源AD9238数据采集AD9238数据缓存控制模块…...

ffmpeg 把一个视频复制3次

1. 起因&#xff0c; 目的: 前面我写过&#xff0c;使用 python 把一个视频复制3次但是速度太慢了&#xff0c;我想试试看能否改进。而且我想换一种新的视频处理思路&#xff0c;并试试看速度如何。 2. 先看效果 效果就是能行&#xff0c;而且速度也快。 3. 过程: 代码 1…...

仿腾讯会议——添加音频

1、实现开启或关闭音频 2、 定义信号 3、实现开始暂停音频 4、实现信号槽连接 5、回收资源 6、初始化音频视频 7、 完成为每个人创建播放音频的对象 8、发送音频 使用的是对象ba&#xff0c;这样跨线程不会立刻回收&#xff0c;如果使用引用&#xff0c;跨线程会被直接回收掉&a…...

从零训练一个大模型:DeepSeek 的技术路线与实践

从零训练一个大模型&#xff1a;DeepSeek 的技术路线与实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 从零训练一个大模型&#xff1a;DeepSeek 的技术路线与实践摘要引言技术路线对比1. 模型架构&#xff1a…...