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

云原生日志Loki

1. Loki简介

1.1 Loki介绍

  • Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs,类似于 Prometheus 的日志系统。

image-20240615172128856

1.2 Loki 的主要特点

  • 水平可扩展性:Loki 能够通过增加更多的节点来扩展其处理能力,以应对不断增长的数据量。

  • 高可用性:设计上保证了系统的稳定性和可靠性,即使在部分组件发生故障时也能继续运行。

  • 多租户支持:Loki 支持在同一个实例中为不同的用户提供隔离的日志数据存储和查询服务。

  • 经济高效:与传统的日志系统相比,Loki 不会对日志内容进行全文索引,而是通过为每个日志流创建一组标签来组织数据,这大大减少了存储需求和提高了查询效率。

  • 易于操作:Loki 的设计理念是简单易用,使得用户可以快速上手并有效地管理日志数据。

2. Loki部署

主机名作用系统IPV4
master采集端CentOS 7.9192.168.110.21/24
node-01被采集端CentOS 7.9192.168.110.22/24
node-02被采集端CentOS 7.9192.168.110.23/24

2.1 Loki主要组件

Loki 作为日志聚合系统的设计理念确实非常先进和实用,它通过以下三个主要组件来实现高效的日志管理:

  • Promtail

    • Promtail 是 Loki 的日志收集器,它运行在每个主机上,负责从本地文件中收集日志数据。

    • 它使用类似于 Prometheus 的服务发现机制来动态地发现日志文件。

    • Promtail 将日志作为流发送到 Loki 服务器,这些流由一组标签定义,而不是通过全文索引。

  • Loki

    • Loki 本身是一个高效的日志存储系统,它接收来自 Promtail 的日志数据,并将其存储在后端数据库中,如 BoltDB 或 Cassandra。

    • Loki 提供了一个 RESTful API,允许用户查询和聚合日志数据。

    • 它的设计允许快速查询和聚合,因为查询是基于标签的,而不是基于文本的全文搜索。

  • Grafana

    • Grafana 是一个流行的开源数据可视化和监控平台,它与 Loki 紧密集成。

    • 用户可以通过 Grafana 来创建仪表板,实时监控和分析 Loki 中的日志数据。

    • Grafana 提供了丰富的图表和可视化选项,帮助用户更直观地理解日志数据。

image-20240615172706011

2.2 Loki主要特性

Loki 与其他日志聚合系统相比确实具有一些独特的特性,这些特性使得 Loki 成为处理大规模日志数据的理想选择,特别是在云原生和容器化环境中。它的简单性、效率和成本效益使其在日志聚合领域中独树一帜。

  • 不进行全文索引

    • Loki 不对日志内容进行全文索引,而是存储压缩的非结构化日志数据,并仅索引元数据。这种方法简化了操作,减少了存储和计算资源的需求,从而降低了成本。

  • 使用标签记录流

    • Loki 采用了与 Prometheus 类似的标签系统,通过标签来索引和分组日志流。这种方法提高了日志数据的扩展性和操作效率,使得用户可以快速地查询和聚合具有特定标签的日志。

  • 适合存储 Kubernetes Pod 日志

    • Loki 特别适合于存储和处理 Kubernetes 环境中的 Pod 日志。在 Kubernetes 中,Pod 是短暂的,而 Loki 的设计允许它高效地处理这些短暂生命周期的日志源。

    • Kubernetes Pod 的标签等元数据可以自动被 Loki 索引,这使得用户能够利用这些标签来查询特定 Pod 或命名空间的日志。

  • 水平可扩展性

    • Loki 设计为易于水平扩展,可以通过增加更多的节点来处理更多的日志数据,这使得它能够适应不断增长的数据量。

  • 多租户支持

    • Loki 支持多租户部署,允许多个团队或项目在同一个 Loki 实例上独立地存储和查询日志,而不会相互干扰。

  • 与 Grafana 的集成

    • Loki 与 Grafana 的紧密集成提供了强大的可视化和监控能力,使得用户可以轻松地创建仪表板和警报。

  • 成本效益

    • 由于 Loki 的设计减少了对存储和计算资源的需求,它提供了一种成本效益更高的日志聚合解决方案,特别是在处理大规模日志数据时。

  • 各日志收集组件简单对比

名称安装的组件优点
ELK/EFKElasticsearch, Logstash支持自定义grok正则解析复杂日志内容- Dashboard支持丰富的可视化展示
Kibana, Filebeat, Kafka/Redis
LokiGrafana, Loki, Promtail占用资源小- Grafana原生支持- 查询速度快
  • 相关资料

    • 官方地址:Grafana Loki OSS | Log aggregation system

    • 文档地址:Configure the Loki data source | Grafana documentation

    • git地址:https://github.com/grafana/loki/blob/master/docs/README.md

    • 下载地址:https://github.com/grafana/loki/releases/

2.3 安装Loki

  • Grafana Loki 是一个日志聚合工具,它是功能齐全的日志堆栈的核心。

  • Loki 是一个为有效保存日志数据而优化的数据存储。日志数据的高效索引将 Loki 与其他日志系统区分开来,

  • 与其他日志系统不同,Loki 索引是根据标签构建的,原始日志消息未编入索引。

 [root@master ~]# wget -c https://github.com/grafana/loki/releases/download/v2.9.8/loki-2.9.8.x86_64.rpm[root@master ~]# yum install loki-2.9.8.x86_64.rpm -y[root@master ~]# sed -i 's/127.0.0.1/192.168.110.21/' /etc/loki/config.yml  # 修改IP[root@master ~]# systemctl enable loki --now[root@master ~]# systemctl is-active loki.service active[root@master ~]# ss -lnupt | egrep '3100|9096'tcp    LISTEN     0      128    [::]:9096               [::]:*                   users:(("loki",pid=11871,fd=9))tcp    LISTEN     0      128    [::]:3100               [::]:*                   users:(("loki",pid=11871,fd=8))
  • 文件介绍

 [root@master ~]# rpm -ql loki/etc/loki/config.yml               # 配置文件/etc/systemd/system/loki.service   # 系统服务文件/usr/bin/loki                      # 二进制文件​[root@master ~]# cat /etc/loki/config.yml auth_enabled: false     # 是否启用鉴权​server:http_listen_port: 3100  # http访问端口grpc_listen_port: 9096  # rpc访问端口​common:instance_addr: 127.0.0.1  # 修改为自己的IP或localhostpath_prefix: /tmp/lokistorage:filesystem:chunks_directory: /tmp/loki/chunks # 记录块存储目录,默认chunks块上的日志数量或到期后,将chunks数据打标签后存储rules_directory: /tmp/loki/rulesreplication_factor: 1ring:kvstore:store: inmemory​query_range:            # 查询规则results_cache:cache:embedded_cache:enabled: truemax_size_mb: 100​schema_config:configs:- from: 2020-10-24store: boltdb-shipperobject_store: filesystemschema: v11index:prefix: index_period: 24h​ruler:alertmanager_url: http://localhost:9093   # 告警通知url,修改为自己的IP# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration# analytics to Grafana Labs. These statistics are sent to https://stats.grafana.org/## Statistics help us better understand how Loki is used, and they show us performance# levels for most users. This helps us prioritize features and documentation.# For more information on what's sent, look at# https://github.com/grafana/loki/blob/main/pkg/usagestats/stats.go# Refer to the buildReport method to see what goes into a report.## If you would like to disable reporting, uncomment the following lines:#analytics:#  reporting_enabled: false

2.4 安装Promtail

 [root@master ~]# wget -c https://github.com/grafana/loki/releases/download/v2.9.8/promtail-2.9.8.x86_64.rpm[root@master ~]# yum install promtail-2.9.8.x86_64.rpm -y[root@master ~]# setfacl -m u:promtail:r /var/log/messages  # 注意默认是没有读权限[root@master ~]# systemctl enable promtail --now[root@master ~]# systemctl is-active promtailactive
  • 测试

    • 访问http://192.168.110.21:9080/targets

image-20240615181646630

 [root@master ~]# cat /tmp/positions.yaml positions:/var/log/messages: "1008852"
  • 配置文件详解

 [root@master ~]# cat /etc/promtail/config.yml# This minimal config scrape only single log file.# Primarily used in rpm/deb packaging where promtail service can be started during system init process.# And too much scraping during init process can overload the complete system.# https://github.com/grafana/loki/issues/11398​server:http_listen_port: 9080grpc_listen_port: 0​positions:filename: /tmp/positions.yaml # 用于记录每次读取日志文件的索引行数,如:promtail重启后从该配置中恢复日志文件的读取位置​clients:- url: http://localhost:3100/loki/api/v1/push  # 推送日志流到Loki中的api​scrape_configs:     # 发现日志文件的位置并从中提取标签- job_name: system  # 任务名称static_configs:   # 目录配置- targets:        # 标签- localhostlabels:job: varlogs  # 子任务名称,通常以项目命令#NOTE: Need to be modified to scrape any additional logs of the system.__path__: /var/log/messages  # 收集本地系统日志

2.5 安装命令行工具

 [root@master ~]# wget -c https://github.com/grafana/loki/releases/download/v2.9.8/logcli-2.9.8.x86_64.rpm[root@master ~]# yum install logcli-2.9.8.x86_64.rpm -y[root@master ~]# logcli --help--help:显示帮助信息。--version:显示应用程序版本。--quiet:抑制查询元数据。--stats:显示查询统计信息。--output:指定输出模式,可选 default, raw, jsonl。raw 模式会抑制日志标签和时间戳。--timezone:指定格式化输出时间戳时使用的时区,默认为本地时区或 UTC。--cpuprofile 和 --memprofile:指定 CPU 和内存分析文件的写入位置。--stdin:从标准输入读取日志输入。--addr:设置 Loki 服务器地址,默认为 http://localhost:3100。--username 和 --password:设置 HTTP 基本认证的用户名和密码。--ca-cert:设置服务器 CA 证书的路径。--tls-skip-verify:跳过 TLS 服务器证书验证。--cert 和 --key:设置客户端证书和密钥的路径。--org-id:添加 API 请求的租户 ID。--query-tags:添加 HTTP 请求头,用于跟踪查询统计。--bearer-token 和 --bearer-token-file:设置用于 API 请求的身份验证令牌。--retries:设置查询失败时的重试次数。--min-backoff 和 --max-backoff:设置重试之间的最小和最大回退时间。--auth-header:设置用于 API 请求的身份验证头部。--proxy-url:设置 HTTP 或 HTTPS 代理的 URL。

2.6 安装Granafa

 [root@master ~]# wget -c https://dl.grafana.com/enterprise/release/grafana-enterprise-10.0.2-1.x86_64.rpm[root@master ~]# yum install grafana-enterprise-10.0.2-1.x86_64.rpm -y[root@master ~]# systemctl enable --now grafana-server
  • 访问: http://192.168.110.21:3000

    • 用户名密码都为:admin

image-20240615182851316

  • 添加Loki数据源

Data sources ——> Add new data source ——> Loki

image-20240615183127589

image-20240615183146759

image-20240615183206340

image-20240615183616747

image-20240615183713012

image-20240615183804638

image-20240615183843065

2.7 增加一个标签

 [root@master ~]# vim /etc/promtail/config.yml...scrape_configs:- job_name: systemstatic_configs:- targets:- localhostlabels:job: varlogs#NOTE: Need to be modified to scrape any additional logs of the system.__path__: /var/log/messages- targets:              # 添加一个targets- localhostlabels:job: varlogs-02__path__: /var/log/secure​[root@master ~]# setfacl -m u:promtail:r /var/log/secure [root@master ~]# systemctl restart promtail.service 

image-20240615184435177

  • 添加监控指标

image-20240615184628913

image-20240615184647967

3. LogQL语法

在 Loki 中,查询日志数据时可以使用标签选择器和过滤表达式来精确地定位和检索所需的日志流。

3.1 标签选择器

  • 标签选择器用于指定一组标签,以便从 Loki 中检索匹配特定标签的日志流。

  • 选择器放在 {} 中,多个标签表达式用逗号分隔。

image-20240615185435757

3.1.1 支持的符号

  • =:表示标签的值需要完全相同。

  • !=:表示标签的值需要不平等。

  • =~:表示标签的值需要与正则表达式匹配。

  • !~:表示标签的值不能与正则表达式匹配。

3.1.2 过滤表达式

  • 在选择了日志流之后,可以使用搜索表达式进一步过滤结果。

  • 搜索表达式可以是文本或正则表达式。

3.1.3 示例

  • {job="mysql"} |= "error":选择 job 标签为 mysql 的日志流,并且日志行包含字符串 "error"

  • {name="kafka"} |~ "tsdb-ops.*io:2003":选择 name 标签为 kafka 的日志流,并且日志行匹配正则表达式 "tsdb-ops.*io:2003"

  • {instance=~"kafka-[23]",name="kafka"} != kafka.server:type=ReplicaManager:选择 instance 标签匹配正则表达式 "kafka-[23]" 并且 name 标签为 kafka 的日志流,排除包含 kafka.server:type=ReplicaManager 的行。

3.1.4 支持的操作符

  • |=:日志行包含指定的字符串。

  • !=:日志行不包含指定的字符串。

  • |~:日志行匹配指定的正则表达式。

  • !~:日志行不匹配指定的正则表达式。

3.1.5 支持多个过滤

  • 可以在同一查询中使用多个过滤条件,例如:

    • {job="mysql"} |= "error" != "timeout":选择 job 标签为 mysql 的日志流,日志行包含 "error" 但不包含 "timeout"

4. Loki收集Nginx日志

  • 为了方便grafana dashbord展示,我们把日志格式修改为json

4.1 修改Nginx配置

# 在被监控端上做
[root@node-01~]# vim /etc/nginx/nginx.conf   # 再http模块内添加
http {
...
log_format json escape=json '{''"remote_addr": "$remote_addr", ''"request_uri": "$request_uri", ''"request_length": "$request_length", ''"request_time": "$request_time", ''"request_method": "$request_method", ''"status": "$status", ''"body_bytes_sent": "$body_bytes_sent", ''"http_referer": "$http_referer", ''"http_user_agent": "$http_user_agent", ''"http_x_forwarded_for": "$http_x_forwarded_for", ''"http_host": "$http_host", ''"server_name": "$server_name", ''"upstream": "$upstream_addr", ''"upstream_response_time": "$upstream_response_time", ''"upstream_status": "$upstream_status"'# '"geoip_country_code": "$geoip2_data_country_code", '# '"geoip_country_name": "$geoip2_data_country_name", '# '"geoip_city_name": "$geoip2_data_city_name"''};';
access_log /var/log/nginx/json_access.log json;
}[root@node-01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@node-01 ~]# systemctl start nginx
  • 访问Nginx

[root@node-01 ~]# tail /var/log/nginx/access.log 
192.168.110.23 - - [15/Jun/2024:19:45:37 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.23 - - [15/Jun/2024:19:45:38 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.23 - - [15/Jun/2024:19:45:38 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.21 - - [15/Jun/2024:19:45:42 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.21 - - [15/Jun/2024:19:45:42 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.21 - - [15/Jun/2024:19:45:44 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.21 - - [15/Jun/2024:19:45:44 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.21 - - [15/Jun/2024:19:45:44 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.21 - - [15/Jun/2024:19:45:45 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"
192.168.110.21 - - [15/Jun/2024:19:45:45 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"

4.2 安装Promtail

4.2.1 安装

[root@node-01 ~]# yum install promtail-2.9.8.x86_64.rpm -y

4.2.2 修改targets

[root@node-01 ~]# vim /etc/promtail/config.yml 
# This minimal config scrape only single log file.
# Primarily used in rpm/deb packaging where promtail service can be started during system init process.
# And too much scraping during init process can overload the complete system.
# https://github.com/grafana/loki/issues/11398server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yamlclients:
- url: http://192.168.110.21:3100/loki/api/v1/push    # 指定收集端scrape_configs:
- job_name: systemstatic_configs:- targets:- localhostlabels:job: nginxlogs     # 修改标签host: 192.168.110.22#NOTE: Need to be modified to scrape any additional logs of the system.__path__: /var/log/nginx/*.log     # 采集的日志

4.2.3 授权启动

[root@node-01 ~]# setfacl -m u:promtail:r /var/log/nginx/*.log
[root@node-01 ~]# systemctl restart promtail

image-20240615195155911

4.3 Granafa采集数据

image-20240615200353449

4.4 添加Doshbarod

ID:16101

image-20240615200559256

image-20240615200631165

image-20240615200644312

image-20240615200719362

相关文章:

云原生日志Loki

1. Loki简介 1.1 Loki介绍 Loki是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签…...

初阶数据结构之直接选择排序和快速排序

直接选择排序 1.在元素集合 array[i]–array[n-1] 中选择关键码最⼤(⼩)的数据元素 2.若它不是这组元素中的最后⼀个(第⼀个)元素,则将它与这组元素中的最后⼀个(第⼀个)元素 交换 3.在剩余的 array[i]–array[n-2](array[i1]–…...

Java语言程序设计——篇十三(4)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…...

低代码: 组件库测试之渲染和元素获取,触发事件,更新表单,验证事件以及异步请求

组件库测试步骤 渲染组件(怎样将一个组件渲染到测试用例里面) mount 和 shallowMount传递属性元素是否成功的显示 查找元素的不同写法get, getAllfind, findAllfindComponent 和 getComponent触发事件(是click也好,是input也好,让它触发对应的事件) trigger 方法观察测试界面…...

银河麒麟服务器操作系统Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤

银河麒麟服务器操作系统 Kylin-Server-V10-SP3-2403-Release-20240426-x86_64安装步骤 一、准备工作1. 下载ISO镜像2. 制作安装介质3. 设置BIOS 二、安装过程1. 启动系统2. 选择安装语言3. 选择安装配置4. 配置root密码与创建用户5. 开始安装6. 重启系统7. 同意许可协议 三、系…...

2024年电赛H题全开源

当题目出来的的那一刻,看到了M0芯片,我们实验室只有一块板子,并且我没有接触过M0,电赛只准备了TI的MSP430f5529。但是我并没有放弃,决然的选择了H题。基本上将四问全做出来,可是测试由于使用了感为科技的寻…...

Docker:宿主机可以ping通外网,docker容器内无法ping通外网之解决方法

问题描述 1、宿主机可以ping外网,docker容器内无法ping外网 ping www.baidu.com 提示:unknown host baidu.com 2、宿主机可以wget下载,docker容器内无法wget下载 wget www.baidu.com 提示:unknown host baidu.com 解决方法 1、…...

bootchart抓Android系统启动各阶段性能数据

最近在做Android系统启动优化,首要任务是找到启动过程中各阶段耗时点,进而有针对性地进行优化。主要用bootchart抓开机数据,本文主要记录下工具的使用方法。 1.抓开机数据 adb root adb shell ‘touch /data/bootchart/enabled’ adb rebo…...

使用 Node.js 和 Express 框架通过网页访问GPIO和嵌入式 Linux 系统中使用 GSM/3G/4G 模块

点击上方"蓝字"关注我们 01、前言 想要快速开发嵌入式 Linux 网络应用,控制硬件 GPIO,从而使得用户能够远程控制和监控系统。 主要目的是向读者展示开发使用文件系统控制 GPIO 的 Node 代码、创建用户有好的界面、以及运行基于 Express 框架使用 AJAX 通客户端进…...

IT 行业的就业情况

当前,IT 行业的就业情况呈现出以下特点: 1. 需求持续增长:随着数字化转型的加速,各个行业对信息技术的依赖程度不断提高,推动了对 IT 人才的持续需求。特别是在云计算、大数据、人工智能、物联网等新兴领域&#xff…...

如何快速获取麒麟操作系统版本信息

如何快速获取麒麟操作系统版本信息 一、桌面版系统1. 使用 /etc/kylin-build 文件2. 使用 /etc/.kyinfo 文件 二、服务器版系统1. 使用 /etc/.productinfo 文件2. 使用 nkvers 命令3. 使用 /etc/kylin-release 文件 三、总结 💖The Begin💖点点关注&…...

git提交规范检查husky

一、Eslint 尤雨溪推荐的 prettierrc 配置,句尾不带分号 单引号。 尤雨溪推荐配置:vue-next/.prettierrc lint lint 是最著名的 C 语言工具之一,是由贝尔实验室 SteveJohnson 于 1979 在 PCC(PortableC Compiler) 基础上开发的静态代码分…...

LeetCode 919. 完全二叉树插入器

完全二叉树是每一层(除最后一层外)都是完全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。 设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操作&#xf…...

C++密码管理器

先问一句 最近有几个关注我的原力等级为0或-1,文章全是转载,转载时间基本都在2021年,而且关注了很多人,这些是僵尸粉吗? 文末有投票,麻烦参与一下谢谢 实现功能列表 暂时还没做加密功能 打算用openssl/a…...

算法【Java】 —— 滑动窗口

滑动窗口 在上一篇文章中,我们了解到了双指针算法,在双指针算法中我们知道了前后指针法,这篇文章就要提到前后指针法的一个经典的使用 —— 滑动窗口,在前后指针法中,我们知道一个指针在前,一个指针在后&a…...

Spring Aware接口执行时机

一. 介绍 Spring Aware 接口的执行时机有两处,都在 getBean() 中的 initializeBean() 中; 下面我们分析这两处时机; // ----------------------- AbstractAutowireCapableBeanFactory --------------------- protected Object initializeB…...

android FD_SET_chk问题定位

android FD_SET_chk问题定位 一、FD报错二、问题定位2.1 APM定位2.2 adb定位2.3. 代码获取FD数 三、FD优化 一、FD报错 App在运行中记录报错如下,FD_SET,这个问题大概是文件描述符(File Descriptor,简称FD)超过了最大…...

Chapter 39 Python多线程编程

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、并行执行二、threading模块 前言 现代操作系统如 macOS、UNIX、Linux 和 Windows 等,均支持多任务处理。本篇文章详细讲解了并行执行的概念以及如何在 …...

STM32(二):GPIO

GPIO(General Purpose Input Output)通用输入输出口 1.可配置为8种输入输出模式,引脚电平:0V~3.3V,部分引脚可容忍5V,输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等,输入模式下…...

一文入门mysql 数据库

一、对数据库的操作 1.展示所有的数据库 show databases; 2.创建数据库 create database 数据库名 charset utf8; 3.删除数据库 drop database 数据库名; 4.查看当前使用的数据库 select database(); 5.使用数据库 use 数据库名; 二、对数据表的操作 1.展示所有表…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

【JavaEE】-- HTTP

1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

深度学习习题2

1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...