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

轻量级日志管理平台Grafana Loki

文章目录

  • 轻量级日志管理平台Grafana Loki
    • 背景
    • 什么是Loki
    • 为什么使用 Grafana Loki?
    • 架构
        • Log Storage
    • Grafana
    • 部署使用
      • 基于 Docker Compose 安装 Loki
        • MinIO
      • K8s集群部署Loki采集
      • Helm 部署方式和案例
    • 参考

轻量级日志管理平台Grafana Loki

背景

在微服务以及云原生时代,由于应用部署到遍地是,为了不像传统的方式上每台应用服务器筛选日志,那么我们可以使用日志管理平台,将所有日志都采集到统一的平台,供运维和研发人员快速排查故障,进而提升效率。

在整个运维生命周期中,日志监控主要就是关注程序运行状态。日志系统是现代运维的核心。但随着系统的复杂化和分布式架构的普及,日志量呈现指数级增长。选择一个高效的日志收集和分析工具,直接影响系统的性能和维护成本。

这样的日志平台云厂商有提供,比如腾讯云的日志服务CLS,阿里云日志SLS,百度云日志服务BLS,天翼云日志服务CT-LTS,谷歌云Cloud Logging等等。

在公司的分布式环境中,存储和管理来自各种系统资源的日志是一项具有挑战性的任务。为了简化这项任务,引入了一个称为日志聚合的概念,它从各种系统资源中收集、存储、管理日志。有各种各样的日志聚合工具,其中一个工具是 Grafana Loki。

什么是Loki

官网:https://grafana.com/docs/loki/latest/

Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。Loki采用了分布式的架构,并且与Prometheus、Grafana密切集成,可以快速地处理大规模的日志数据。

项目受 Prometheus 启发,官方的介绍就是: Like Prometheus, but for logs ,类似于 Prometheus 的日志系统。

Grafana Loki 是一个开源的日志收集系统,其功能是收集、存储和查询日志。Grafana Loki 压缩日志并将日志存储在块中,并将它们存储在文件系统或 AWS S3 等后端存储中。

块是一个压缩文件,其中包含基于日志卷的日志条目,因此当块大小达到其大小限制时,它会将日志存储在另一个块中。每当存储一个块时,它都会为每个块创建一个索引。索引不包含日志的内容,它只包含时间戳、块的标签和块的位置。

日志的默认保留期限为24小时,最短期限为1小时,最长可延长至30天。Loki 横向扩展并具有其查询语言 LogQL。

特别适合储存 Kubernetes Pod 日志 ; 诸如 Pod 标签之类的元数据会被自动删除和编入索引。

Loki 的一大特点是它不索引日志内容,只索引标签(Labels),这大幅减少了资源消耗。
它不对原始日志进行索引,只对日志的标签进行索引,而日志通过压缩进行存储,通常是文件系统存储,所以其操作成本更低,数量级效率更高。

与其他日志记录系统不同,Loki 的构建理念是仅索引关于日志标签的元数据(就像 Prometheus 标签一样)。然后将日志数据本身压缩并以块的形式存储在对象存储中,例如 Amazon Simple Storage Service (S3) 或 Google Cloud Storage (GCS),甚至本地文件系统。

总结:相对于EFK/ELK,专为日志而生的Loki,结合Grafana生态,对于中小企业,或者说只是作为日志系统而言,我更倾向于选择Loki代替EFK/ELK

Loki
美[ˈloʊki]英[ˈləuki:]
n.【欧神】洛基
网络洛奇;邪神洛基;火神
在这里插入图片描述

可以把Loki的功能总结如下:

  • 日志收集:Loki可以接收来自不同应用程序、主机和容器的日志数据。
  • 日志存储:Loki使用可扩展的分布式存储后端存储日志数据,包括本地存储和云存储。
  • 日志查询:Loki提供了一个高效的查询语言,可以快速地搜索和过滤日志数据。
  • 日志索引:Loki使用标签索引和压缩算法对日志数据进行索引,可以大大减少存储空间和查询时间。
  • 日志警报:Loki可以根据日志数据中的条件触发警报,并将警报发送到警报通道。
    可以看到,作为一个日志处理系统,从收集、存储、查询、告警支持都是比较全面的,配合Grafana也能够比较好实现可视化,相关组件也比较简单。

为什么使用 Grafana Loki?

  1. 入门非常简单:可以使用各种客户端从任何来源发送任何格式的日志
  2. 没有采集日志格式要求:提供了更大的灵活性以及在查询时格式化的选项
  3. 轻量级:相比ELK,Loki更加轻量级,因为它不需要一个单独的Elasticsearch集群来存储和索引日志数据
  4. 高度可扩展性:Loki可以通过添加更多的Loki实例来实现水平扩展,这使得它更容易处理大量的日志数据。
  5. 与 Prometheus、Grafana 和 K8s 原生集成:可以在单个用户界面中无缝切换查询指标、日志等数据
  6. 根据日志生成告警:可以从日志行构建指标并生成告警

Loki 更适合对日志量大但查询要求相对简单的场景。特别是在 Kubernetes 环境中,Loki 的轻量和与 Prometheus 的无缝集成,让它成为了首选。

架构

Loki 的架构非常简单,主要由以下 3 个部分组成:

  • Loki:负责存储日志和处理查询。
  • Promtail:日志收集的代理,负责在各端收集日志并将其发送给 Loki 。
  • Grafana:用于日志搜索的UI 展示。

在这里插入图片描述

在 Kubernetes 中 Promtail 以 DaemonSet 方式运行在每个节点中,通过 Kubernetes API 得到日志的正确元数据,并将它们发送到 Loki。

Loki则采用了分布式架构,将日志数据存储在多个节点上,Promtail进行日志收集,可视化依赖于Grafana

Loki具有较低的硬件要求,可以在较小的硬件上运行,例如使用少量内存和CPU。可以通过添加更多的Loki实例来实现水平扩展,这使得它更容易处理大量的日志数据。

直接支持Prometheus:Loki与Prometheus深度集成,这使得在Prometheus查询中使用Loki日志数据更加容易。

在这里插入图片描述
该图显示了 Grafana Loki 如何收集、存储、查询和可视化日志。

  1. 在 Grafana Loki 中,agent 负责从文件、容器、pod、应用程序和系统日志中收集日志。
    Loki 使用日志收集代理(agent)来收集日志,如果您在 Kubernetes 中使用 Loki,代理将作为守护程序集(Daemonset)部署,因为我们需要来自集群每个可用节点的日志。
  2. Promtail 是该架构中使用的代理(agent),Promtail 收集日志,然后过滤和压缩日志以节省存储空间。
    压缩日志后,它会为日志提供一个标签并将其发送给 Loki。
  3. 从 Promtail 接收到日志之后,Loki 将每个日志存储为一个块,该块将日志消息收集在一个文件中,以节省存储空间和有效检索。
    它还为块提供标签和时间戳。每当存储块时,它都会为每个块创建一个索引,其中包含块的时间戳、标签和位置。
  4. Loki 使用 LogQL 查询语言查询日志,LogQL 允许我们根据我们选择的标签和值过滤、聚合和分析日志。
  5. 通过将 Loki 添加到 Grafana,您可以可视化查询的日志或使用 LogCLI 从 CLI 查询日志。

Promtail 是充当 Loki 的日志代理(agent)的重要组件。它的功能是从系统中收集每个日志,标记它,然后将其发送给 Loki。Loki 从本地日志文件和系统日志中收集日志。

您必须在要收集日志的每个系统中安装 Promtail,同样,如果您在 Kubernetes 上使用 Loki,则必须在每个节点中部署 Promtail 作为守护进程集(Daemonset)

Log Storage

Loki 存储日志数据,提高查询和接收日志的效率。它将日志数据压缩成块,根据时间进行组织,并为其提供标签和时间戳。然后,它以键值对格式为每个块创建一个索引,其中块时间戳和标签等。

例如,将块的索引视为一本书的索引。

Chunks 和 Index 可以存储在各种后端对象存储或文件系统中。

一旦存储了块,它就会为数据创建一个保留期,并根据保留期自动删除。

如果您使用文件系统作为存储,则块和索引的默认存储路径是 /var/lib/loki/chunks 和 /var/lib/loki/index。

Grafana

官方文档:https://grafana.org.cn/docs/loki/latest/#google_vignette
Loki 的数据查询,都是通过 Grafana,在 Grafana 中支持 loki 的数据源,通过配置 Loki 的接口地址即可

Grafana 的查询,支持 LogQL

部署使用

官方文档:https://grafana.org.cn/docs/loki/latest/get-started/
在这里插入图片描述

使用 Grafana 进行查询验证
通过http://localhost:3000,访问Grafana来查询和观察 Loki 集群的日志数据,Grafana 已经默认把 Loki 配置为数据源。

部署 Loki 有几种方式,包括使用 Docker、Kubernetes 以及 Helm Chart :

  • 使用 Docker 部署 Loki: 使用 Docker 部署 Loki 是一种简便的方式。你可以编写一个 docker-compose.yml 文件来定义 Loki 服务,并通过 docker-compose up 命令启动 Loki。
  • 使用 Kubernetes 部署 Loki: Loki 官方推荐的最佳实践为采用 DaemonSet 部署 Promtail 的方式,Promtail 是 Loki 的代理,负责收集日志并将其发送给 Loki。你可以创建相应的 Kubernetes 配置文件,定义 Loki 和 Promtail 的部署和服务。
  • 使用 Helm Chart 部署 Loki: Helm Chart 是 Kubernetes 的包管理工具,可以用来部署 Loki。首先需要添加 Loki 的 Helm 仓库,然后使用 helm install 命令安装 Loki。安装时可以指定一个 values 文件来覆盖默认配置。

基于 Docker Compose 安装 Loki

参考官方部署手册:https://grafana.com/docs/loki/latest/get-started/quick-start/

官方docker-compose快速部署架构图有下面这些组件:使用的最新版本3.1.x
在这里插入图片描述

轻量级日志管理平台Grafana Loki搭建及应用
flog :生成日志行。 flog是常见日志格式的日志生成器。
Grafana Alloy :从 flog 中刮取原木线,并通过网关将它们推送给 Loki。
网关(nginx),接收请求并根据请求的 URL 将它们重定向到适当的容器。
Loki 读取组件:运行查询前端和查询器。
Loki 写入组件:运行分发器和接收器。
Loki 后端组件:运行 Index Gateway、Compactor、Ruler、Bloom Compactor(实验性)和 Bloom Gateway(实验性)。
Minio :Loki 用它来存储索引和块。
Grafana :提供 Loki 中捕获的日志行的可视化。

上面官方采用的是读写分离以及minio存储后端,启动的组件比较多,本人调整了成单节点部署测试,想初步体验的可以使用我下面的 docker-compose.yaml 快速部署。

[推荐参考这篇文章即可]轻量级日志管理平台Grafana Loki搭建及应用
参考URL: https://cloud.tencent.com/developer/article/2448658

物理部署protmail
若你需要采集其他机器上的日志,那么你只需要安装采集组件protmail,docker版本在上面已经演示过了,下面演示使用物理部署。

MinIO

Minio就是一个开源的、自托管的分布式对象存储服务,分布式架构,可部署在本地服务器、私有云或公有云。

数据访问:基于标准的 Amazon S3 API,支持 RESTful API 访问文件,可以使用标准的 S3 客户端工具(如 aws-cli、MinIO 控制台等)与 MinIO 交互。
协议支持:支持 S3 协议,因此可以无缝集成到现有的 S3 应用和生态系统中,方便与 AWS、Azure、Google Cloud 等其他云服务互通。

K8s集群部署Loki采集

K8s集群部署Loki采集,用NFS持久存储,日志保留7天
参考URL: https://blog.csdn.net/Lilk5/article/details/140174359
如何在k8s集群中安装配置loki并使用grafana可视化管理
参考URL: https://www.cnblogs.com/wod-Y/p/17348436.html

Helm 部署方式和案例

Install Grafana Loki with Helm官方文档:https://grafana.com/docs/loki/latest/setup/install/helm/
使用 Helm 安装 Loki Stack
参考URL: https://todoit.tech/k8s/loki/

  1. 前提条件
    在开始之前,请确保您已经:

安装了 Kubernetes 集群
安装了 Helm
配置了 kubectl 连接到您的集群

  1. 添加 Grafana Helm 仓库

  2. 创建 values.yaml 自定义配置文件

  3. 安装 Loki

# 使用自定义配置安装  
helm install loki grafana/loki \-n monitoring \-f loki-values.yaml \--create-namespace  
  1. 验证安装
# 检查 Loki Pod 状态  
kubectl get pods -n monitoring -l app.kubernetes.io/name=loki  # 查看服务  
kubectl get svc -n monitoring | grep loki  
  1. 配置 Grafana 数据源(可选)
    在 Grafana 中添加 Loki 数据源:

URL: http://loki-gateway.monitoring.svc.cluster.local

参考

真香,Grafana开源Loki日志系统取代ELK?
参考URL: https://blog.csdn.net/projim_tao/article/details/129338320
Loki vs ELK:谁是日志收集的终极选择?
参考URL: https://blog.csdn.net/problc/article/details/142330846
Grafana Loki 架构详解,比 ES 成本低很多
参考URL: https://segmentfault.com/a/1190000045124031
【写的好,推荐阅读】详解轻量日志聚合系统 Loki 架构
参考URL: https://xie.infoq.cn/article/5376127f5956a99941bbb1e00
k8s集群监控cadvisor+prometheus+grafana部署
参考URL: https://blog.csdn.net/weixin_48878440/article/details/128374447
Kubernetes 日志解决方案 Grafana Loki 「Helm 部署案例」
参考URL: https://cloud.tencent.com/developer/article/2307121
基于 Docker Compose 安装 Loki
参考URL:https://blog.csdn.net/a120608yby/article/details/140660210
轻量级日志系统docker-compose搭建Loki+Grafana+Promtail,配置、部署,查询全流程
参考URL:https://tencentcloud.csdn.net/6762647af3b8a55e4e985821.html

相关文章:

轻量级日志管理平台Grafana Loki

文章目录 轻量级日志管理平台Grafana Loki背景什么是Loki为什么使用 Grafana Loki?架构Log Storage Grafana部署使用基于 Docker Compose 安装 LokiMinIO K8s集群部署Loki采集Helm 部署方式和案例 参考 轻量级日志管理平台Grafana Loki 背景 在微服务以及云原生时…...

SOME/IP--协议英文原文讲解12(完结)

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.3 Compa…...

Linux 命令大全完整版(12)

Linux 命令大全 5. 文件管理命令 ln(link) 功能说明&#xff1a;连接文件或目录。语  法&#xff1a;ln [-bdfinsv][-S <字尾备份字符串>][-V <备份方式>][--help][--version][源文件或目录][目标文件或目录] 或 ln [-bdfinsv][-S <字尾备份字符串>][-V…...

AI学习第二,三天-Python基础

变量、运算符与数据类型详解 注释 在 Python 中&#xff0c;注释是用于增加代码可读性、解释代码功能但不会被程序执行的部分。 单行注释&#xff1a;使用 # 符号&#xff0c;从 # 开始到本行末尾的内容均为注释。例如&#xff1a; 收起 python # 这是一个单行注释&#xff…...

Nginx代理ElasticSearch

1、将ES的账号:密码通过Base64加密 假设账号密码如下&#xff1a; 账号&#xff1a;elastic密码&#xff1a;elastichuayunworld.com echo -n elastic:elastichuayunworld.com | base64 ZWxhc3RpYzplbGFzdGljQGh1YXl1bndvcmxkLmNvbQ2、在 Nginx 配置中传递认证信息 locatio…...

开源AI网络爬虫工具Crawl4AI

引言 在信息化时代&#xff0c;网络爬虫作为从互联网中提取信息的重要工具&#xff0c;扮演着至关重要的角色。Crawl4AI作为一款开源AI网络爬虫工具&#xff0c;凭借其功能强大和易用性&#xff0c;受到了广泛关注。本文将详细探讨Crawl4AI的定义、特点、优势&#xff0c;以及…...

实现 INFINI Console 与 GitHub 的单点登录集成:一站式身份验证解决方案

本文将为您详细解析如何通过 GitHub OAuth 2.0 协议&#xff0c;为 INFINI Console 实现高效、安全的单点登录&#xff08;Single Sign-On, SSO&#xff09;集成。通过此方案&#xff0c;用户可直接使用 GitHub 账户无缝登录 INFINI Console&#xff0c;简化身份验证流程&#…...

Linux系统安装MySQL5.7(其他版本类似)避坑指南

1.远程连接 在Linux系统安装好MySQL5.7数据库&#xff0c;不要以为就大功告成了后面还有大坑等着你踩了。宏哥这里介绍一下远程连接遇到的坑以及如何处理。由于征文要求安装环境教学除外宏哥这里就不介绍在Linux系统安装mysql数据库&#xff0c;有需要的可以自己百度一下。但是…...

新数据结构(12)——代理

什么是代理 在进行操作时有时不希望用户直接接触到目标&#xff0c;这时需要使用代理让用户间接接触到目标 给目标对象提供一个代理对象&#xff0c;并且由代理对象控制着对目标对象的引用 图解&#xff1a; 代理的目的 控制访问&#xff1a;通过代理对象的方式间接的访问目…...

VLM(视觉语言模型)与DeepSeek R1(奖励机制)如何结合

VLM&#xff08;视觉语言模型&#xff09;与DeepSeek R1&#xff08;奖励机制&#xff09;如何结合 flyfish VLM的传统训练依赖于监督学习&#xff08;直接拟合问答对&#xff09;&#xff0c;而规则奖励函数通常用于强化学习&#xff08;通过试错和奖励反馈优化策略&#xf…...

问题:Flask应用中的用户会话(Session)管理失效

我来分享一个常见的PythonWeb开发问题&#xff1a; 问题&#xff1a;Flask应用中的用户会话(Session)管理失效 这是一个在Flask开发中经常遇到的问题。当用户登录后&#xff0c;有时会话会意外失效&#xff0c;导致用户需要重复登录。 解决方案&#xff1a; 1. 首先&#x…...

Qt/C++面试【速通笔记一】

Qt 信号与槽机制 什么是信号&#xff08;Signal&#xff09;和槽&#xff08;Slot&#xff09;&#xff1f; 在Qt中&#xff0c;信号&#xff08;Signal&#xff09;和槽&#xff08;Slot&#xff09;是实现对象之间通信的一种机制。信号是对象在某些事件发生时发出的通知&…...

RoCBert:具有多模态对比预训练的健壮中文BERT

摘要 大规模预训练语言模型在自然语言处理&#xff08;NLP&#xff09;任务上取得了最新的最优结果&#xff08;SOTA&#xff09;。然而&#xff0c;这些模型容易受到对抗攻击的影响&#xff0c;尤其是对于表意文字语言&#xff08;如中文&#xff09;。 在本研究中&#xff0…...

DeepSeek入门到大师 清华大学[1-5版]全集

1、文件概览 1、清华大学《DeepSeek:从入门到精通》 2、清华大学《Deepseek如何赋能职场应用?》 3、清华大学《普通人如何抓住DeepSeek红利》 4、清华大学《DeepSeekDeepResearch让科研像聊天一样简单》 5、清华大学《DeepSeek与AI幻觉》 6、天津大学《深度解读Deepseek:原理…...

Debezium:实时数据捕获与同步的利器

一、什么是 Debezium Debezium 是一个开源的分布式平台&#xff0c;专门用于捕获数据库中的数据变更。它通过读取数据库的事务日志&#xff0c;能够以非侵入性的方式捕获数据库中发生的所有变化&#xff0c;并将这些变化转化为事件流&#xff0c;实时推送到像 Kafka 这样的消息…...

【蓝桥杯】第十五届省赛大学真题组真题解析

【蓝桥杯】第十五届省赛大学真题组真题解析 一、智能停车系统 1、知识点 &#xff08;1&#xff09;flex-wrap 控制子元素的换行方式 属性值有&#xff1a; no-wrap不换行wrap伸缩容器不够则自动往下换行wrap-reverse伸缩容器不够则自动往上换行 &#xff08;2&#xff0…...

AI助力下的PPT革命:DeepSeek 与Kimi的高效创作实践

清华大学出品《DeepSeek&#xff1a;从入门到精通》分享 在忙碌的职场中&#xff0c;制作一份高质量的PPT往往需要投入大量时间和精力&#xff0c;尤其是在临近截止日期时。今天&#xff0c;我们将探索如何借助 AI 工具 —— DeepSeek 和 Kimi —— 让 PPT 制作变得既快捷又高…...

【MySQL篇】持久化和非持久化统计信息的深度剖析(含analyze命令和mysqlcheck工具两种收集方式)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;从事IT领域✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(…...

C++ 手撕定时器

C 手撕定时器 思路与知识调用场景类声明 参考 思路与知识 1. 为了支持相同时间戳下多个任务&#xff0c;需要考虑到支持重复key的std::mutimap, 以及成员函数equal_range 2. 工具函数Timer::GetTick 返回一个uint64_t毫秒时间戳作为multimap的key&#xff0c;需要会使用chrono…...

邮件安全之发件人伪造

电子邮件工作原理 电子邮件传输过程中主要涉及到SMTP、IMAP、POP3三种协议&#xff0c;具体功能如下&#xff1a; SMTP:全称Simple Mail Transfer Protocol&#xff0c;即简单邮件传输协议&#xff0c;主要用于发送邮件&#xff0c;使用端口号25。 IMAP:全称Internet Mail Acce…...

前端八股——JS+ES6

前端八股&#xff1a;JSES6 说明&#xff1a;个人总结&#xff0c;用于个人复习回顾&#xff0c;将持续改正创作&#xff0c;已在语雀公开&#xff0c;欢迎评论改正。...

Qt QTreeWidget 总结

Qt QTreeWidget 总结 1. 概述 QTreeWidget 是 Qt 中用于显示树形结构的控件&#xff0c;继承自 QTreeView&#xff0c;但提供了更简单的接口。适合展示层级数据&#xff08;如文件目录、组织结构&#xff09;。每个节点是 QTreeWidgetItem 对象&#xff0c;支持文本、图标、复…...

Python常见面试题的详解16

1. 如何强行关闭客户端和服务器之间的连接&#xff1f; 在网络编程中&#xff0c;有时需要强行中断客户端和服务器之间的连接。对于基于 TCP 协议的连接&#xff0c;由于其面向连接的特性&#xff0c;需要采取特定的步骤来确保连接被正确关闭&#xff1b;而 UDP 是无连接协议&a…...

前端设计模式面试题及参考答案

目录 如何用闭包实现单例模式?列举两种实现方式 工厂模式与构造函数创建对象的核心区别是什么? 抽象工厂模式如何解决多平台 UI 组件兼容问题? 原型模式在前端框架中如何优化对象创建性能? 建造者模式如何实现复杂表单配置的链式调用? 单例模式在全局状态管理中的典型…...

Python Django系列—入门实例(二)

数据库配置 现在&#xff0c;打开 mysite/settings.py 。这是个包含了 Django 项目设置的 Python 模块。 默认情况下&#xff0c;​ DATABASES 配置使用 SQLite。如果你是数据库新手&#xff0c;或者只是想尝试 Django&#xff0c;这是最简单的选择。SQLite 包含在 Python 中…...

STM32-智能台灯项目

一、项目需求 1. 红外传感器检测是否有人&#xff0c;有人的话实时检测距离&#xff0c;过近则报警&#xff1b;同时计时&#xff0c;超过固定时间则报警&#xff1b; 2. 按键 1 切换工作模式&#xff1a;智能模式、按键模式、远程模式&#xff1b; 3. 智能模式下&#xff0c;根…...

HTML之JavaScript DOM操作元素(2)

HTML之JavaScript DOM操作元素&#xff08;2&#xff09; 4.增删元素var element document.createElement("元素名") 创建新元素父元素.appendChild(子元素) 在父元素中追加子元素父元素.insertBefore(新元素,参照元素) 在特定元素之前新增元…...

智能优化算法:莲花算法(Lotus flower algorithm,LFA)介绍,提供MATLAB代码

一、 莲花算法 1.1 算法原理 莲花算法&#xff08;Lotus flower algorithm&#xff0c;LFA&#xff09;是一种受自然启发的优化算法&#xff0c;其灵感来源于莲花的自清洁特性和授粉过程。莲花的自清洁特性&#xff0c;即所谓的“莲花效应”&#xff0c;是由其叶片表面的微纳…...

【复习】计算机网络

网络模型 OSI 应用层&#xff1a;给应用程序提供统一的接口表示层&#xff1a;把数据转换成兼容另一个系统能识别的格式会话层&#xff1a;负责建立、管理、终止表示层实体之间的通信会话传输层&#xff1a;负责端到端的数据传输网络层&#xff1a;负责数据的路由、转发、分片…...

【R语言】读取CSV数据时,显示[1] PK...<0 行> (或0-长度的row.names)

一、问题 当我使用以下代码读取CSV数据后&#xff0c;发现使用head(data)显示[1] PK...<0 行> (或0-长度的row.names)&#xff0c;如下截图所示。 # 尝试读取文件 data <- read.csv("C:\\Users\\11300\\Desktop\\test.csv", header TRUE) # 检查数据 hea…...

CentOS环境变量配置+解析

环境变量的作用就是让系统快速通过你的命令找到你的可执行程序&#xff0c;windows系统里也同理&#xff0c;也就是你每次输入个命令&#xff0c;系统就会找环境变量里到底有没有叫这个命令进程的 一、环境变量配置 1.编辑配置文件 vim /etc/profile export PATH$PATH:$JAVA…...

最新版本Exoplayer扩展FFmpeg音频软解码保姆级教程

ExoPlayer 是一个开源的 Android 媒体播放库&#xff0c;由 Google 开发和维护&#xff0c;用于替代 Android 系统自带的 MediaPlayer。它提供了更强大的功能、更好的性能和更高的灵活性&#xff0c;适用于各种复杂的媒体播放场景。所以被广泛用于各种播放器场景。 最近项目中…...

【蓝桥杯集训·每日一题2025】 AcWing 6134. 哞叫时间II python

6134. 哞叫时间II Week 1 2月20日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛&#xff0c;但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解&#xff0c;所以农夫约翰将竞赛…...

HTML/CSS中子代选择器

1.作用:选中指定元素中,符合要求的子元素. 子代选择器又称:子元素选择器,子选择器. 2.语法:选择器1>选择器2>选择器3>......选择器n 3.实例 <style>/* div中子代选择器 */div>a{color: red;}</style><div><a href"#">张三</…...

计算机毕业设计SpringBoot+Vue.jst网上购物商城系统(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

EasyRTC:全平台支持与自研算法驱动的智能音视频通讯解决方案

在智能硬件的浪潮中&#xff0c;设备之间的互联互通已成为提升用户体验的核心需求。无论是智能家居、智能办公&#xff0c;还是工业物联网&#xff0c;高效的音视频通讯和交互能力是实现智能化的关键。然而&#xff0c;传统音视频解决方案往往面临平台兼容性差、交互体验不佳以…...

C#: 日志函数

背景&#xff1a; 1.常见的官方日志模块项目过于复杂&#xff0c;且配置过于繁琐&#xff0c;针对这种现象&#xff0c;实现在大型项目中快速定位错误问题&#xff1b; 实现思路&#xff1a; 1.设置当前日志文件路径&#xff08;获取到当前文件应用程序路径 \ErrorLog) 2.判…...

PyTorch 是如何进行机器学习的

1. 机器学习的核心流程 机器学习的核心是通过数据训练模型&#xff0c;让模型学会从输入数据中提取规律&#xff0c;并对新数据做出预测。整个过程可以分为以下几个步骤&#xff1a; 准备数据&#xff1a;收集并整理数据&#xff0c;分为输入&#xff08;特征&#xff09;和输…...

Java中的Stream API:从入门到实战

引言 在现代Java开发中&#xff0c;Stream API 是处理集合数据的强大工具。它不仅让代码更加简洁易读&#xff0c;还能通过并行处理提升性能。本文将带你从基础概念入手&#xff0c;逐步深入Stream API的使用&#xff0c;并通过实战案例展示其强大功能。 1. 什么是Stream API…...

【蓝桥杯单片机】客观题

一、第十三届省赛&#xff08;一&#xff09; 二、第十三届省赛&#xff08;二&#xff09;...

Spring Boot 中使用 @Transactional 注解配置事务管理

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务&#xff1b;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污…...

嵌入式八股文(五)硬件电路篇

一、名词概念 1. 整流和逆变 &#xff08;1&#xff09;整流&#xff1a;整流是将交流电&#xff08;AC&#xff09;转变为直流电&#xff08;DC&#xff09;。常见的整流电路包括单向整流&#xff08;二极管&#xff09;、桥式整流等。 半波整流&#xff1a;只使用交流电的正…...

《论多源数据集成及应用》审题技巧 - 系统架构设计师

论多源数据集成及应用写作框架 一、考点概述 本论题“论多源数据集成及应用”主要考察的是计算机软件测试工程师在数据管理和集成方面的专业知识与实践能力。论题聚焦于信息爆炸时代企业、组织和个人所面临的数据挑战&#xff0c;特别是如何有效地收集、整理和清洗来自不同渠…...

怎么在Github上readme文件里面怎么插入图片?

环境&#xff1a; Github 问题描述&#xff1a; 怎么在Github上readme文件里面怎么插入图片&#xff1f; https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解决方案&#xff1a; 1.相对路径引用 上传图片到仓库 将图片文件&#xff08;如 .png/.jpg&#xff…...

【NLP 31、预训练模型的发展过程】

人的行为&#xff0c;究竟是人所带来的思维方式不同还是与机器一样&#xff0c;刻在脑海里的公式呢&#xff1f; 只是因为不同的人公式不同&#xff0c;所以人的行为才不同&#xff0c;可这又真的是人引以为傲的意识吗&#xff1f; 人脑只是相当于一个大型、驳杂的处理器&#…...

【计算机网络】传输层TCP协议

传输层 - layer4 - TCP协议 传输层&#xff1a;位于ISO模型的第四层 ——>L4 tcp协议意为传输控制协议&#xff08;Transmission Control Protocol&#xff09; 提供端到端的连接 端口号范围&#xff1a;0-65535 &#xff08;2^16次方&#xff09; 一个应用程序(服务)会占用…...

vscode settings(二):文件资源管理器编辑功能主题快捷键

参考资料 Visual Studio Code权威指南 by 韩骏 一. 文件资源管理器 1.1 文件资源管理器隐藏文件夹 默认情况下&#xff0c;Visual Studio Code会在文件资源管理器中隐藏一些文件夹&#xff08;如.git文件夹&#xff09;​。可以通过files.exclude来配置要被隐藏的文件和文件…...

halcon机器视觉深度学习对象检测,物体检测

目录 效果图操作步骤软件版本halcon参考代码本地函数 get_distinct_colors()本地函数 make_neighboring_colors_distinguishable() 效果图 操作步骤 首先要在Deep Learning Tool工具里面把图片打上标注文本&#xff0c; 然后训练模型&#xff0c;导出模型文件 这个是模型 mod…...

go 反射 interface{} 判断类型 获取值 设置值 指针才可以设置值

内容包括 1. 用interface{}接收值 2. 判断interface{}的类型 switch 3. 打印interface{}的类型 4. 通过字符串对结构体&#xff0c;interface{}等进行设置值、获取值处理 示例代码 package mainimport ("fmt""log""reflect" )type Student…...

单臂路由

单臂路由&#xff08;Router on a Stick&#xff09;是一种网络配置方式&#xff0c;主要用于在单个物理接口上实现多个VLAN之间的路由。它通常用于交换机与路由器之间的连接&#xff0c;适用于VLAN间通信需求较小的情况。 工作原理 VLAN划分&#xff1a;交换机上配置多个VLAN…...