【APM】Build an environment for Traces, Metrics and Logs of App by OpenTelemetry
系列文章目录
此系列文章介绍如何搭建Observability(可观测性)环境(Opentelemetry-Collector、Tempo、Prometheus、Loki和Grafana),以及应用。
【APM】Observability Solution
【APM】Build an environment for Traces, Metrics and Logs of App by OpenTelemetry
【APM】NET Traces, Metrics and Logs to OLTP
【APM】How to enable Trace to Logs on Grafana?
前言
在现代化的分布式应用程序中,Observability(可观测性)对于监控、排查故障和优化性能至关重要。本系列文章显示如何整合OpenTelemetry、Opentelemetry-Collector、Tempo、Prometheus、Loki和Grafana来提升.NET应用程序的可观测性,以及使用Promtail收集Nginx access log,.NET应用程序通过Serilog 记录日志到Loki。
一、先决条件
在开始之前,确保你已经安装以下工具:
- Docker
- .NET SDK
二、Docker image download and re-tag
1.Download images
There are 8 images of docker that need to be downloaded.
- otel/opentelemetry-collector-contrib
- otel/opentelemetry-collector (not support exporter logs to loki, replaced by otel/opentelemetry-collector-contrib)
- grafana/tempo
- grafana/loki
- prom/prometheus
- grafana/grafana
- grafana/promtail
- your/nginx
The scripts as below:
docker pull otel/opentelemetry-collector-contrib:latest
docker pull otel/opentelemetry-collector:latest
docker pull grafana/tempo:latest
docker pull grafana/loki:latest
docker pull prom/prometheus:latest
docker pull grafana/grafana:latest
docker pull grafana/promtail:latest
docker pull your/nginx:latest
2.Get versions for each images
Use docker run, the sample code as below:
docker rm -f grafana
docker run -it -p 3000:3000 --rm -e http_proxy="" --name grafana grafana:latest# If you can't go to the container, please use the command: docker logs grafana, then get a version from the logs.
docker logs grafana...
3.Re-tag all images
The scripts as below:
# 当使用latest tag,会出现兼容性问题,故以程式的版本作为tag。
docker tag otel/opentelemetry-collector-contrib:latest otel/opentelemetry-collector-contrib:0.123.0
docker tag otel/opentelemetry-collector:latest otel/opentelemetry-collector:0.123.0
docker tag grafana/tempo:latest grafana/tempo:2.7.2
docker tag grafana/loki:latest grafana/loki:3.4.3
docker tag prom/prometheus:latest prom/prometheus:3.3.0
docker tag grafana/grafana:latest grafana/grafana:11.1.0
docker tag grafana/promtail:latest grafana/promtail:3.4.2
docker tag your/nginx:latest your/nginx:1.0.11# delete original images
docker rmi otel/opentelemetry-collector-contrib:latest
docker rmi otel/opentelemetry-collector:latest
docker rmi grafana/tempo:latest
docker rmi grafana/loki:latest
docker rmi prom/prometheus:latest
docker rmi grafana/grafana:latest
docker rmi grafana/promtail:latest
docker rmi your/nginx:latest
二、Setting configuration
1.loki.yaml
# This is a complete configuration to deploy Loki backed by the filesystem.
# The index will be shipped to the storage via tsdb-shipper.auth_enabled: falseserver:http_listen_port: 3100http_listen_address: 0.0.0.0 # 监听所有 IPv4 地址common:ring:instance_addr: 127.0.0.1kvstore:store: inmemoryreplication_factor: 1path_prefix: /tmp/lokischema_config:configs:- from: 2020-05-15store: tsdbobject_store: filesystemschema: v13index:prefix: index_period: 24hstorage_config:filesystem:directory: /tmp/loki/chunks
2.otel-collector.yaml
receivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318exporters:debug:verbosity: detailedprometheus:endpoint: ":9201"send_timestamps: truemetric_expiration: 180menable_open_metrics: trueotlp:endpoint: tempo:4317tls:insecure: true# 转发 Logs 到 Lokiloki:endpoint: "http://loki:3100/loki/api/v1/push"tls:insecure: truedefault_labels_enabled:exporter: truejob: true service:pipelines:traces:receivers: [otlp]exporters: [debug, otlp]metrics:receivers: [otlp]exporters: [debug, prometheus]logs:receivers: [otlp]exporters: [debug, loki]
3.prometheus.yaml
global:scrape_interval: 15sevaluation_interval: 15sscrape_configs:- job_name: 'otel'static_configs:- targets: [ 'otel-collector:9201' ]
4.promtail-config.yaml
# Promtail服务配置
server:http_listen_port: 9080grpc_listen_port: 0# 记录读取日志的位置信息文件,Promtail重新启动时需要它
positions:filename: /run/promtail/positions.yaml# Loki的api服务的地址
clients:- url: http://loki:3100/loki/api/v1/pushscrape_configs:
# nginx日志收集并打标签- job_name: nginx_logs # 服务名称static_configs:- targets:- localhost # 目标服务器名称labels:job: nginx # 作业名称host: localhost # 服务器地址__path__: /var/log/nginx/*.log #服务器日志路径
5.tempo.yaml
server:http_listen_port: 3200distributor:receivers:otlp:protocols:http:endpoint: "0.0.0.0:4318"grpc:endpoint: "0.0.0.0:4317"storage:trace:backend: localwal:path: /tmp/tempo/wallocal:path: /tmp/tempo/blocks
6.grafana-datasources.yaml
apiVersion: 1datasources:
- name: Prometheustype: prometheusuid: prometheusaccess: proxyorgId: 1url: http://prometheus:9090basicAuth: falseisDefault: trueversion: 1editable: falsejsonData:httpMethod: GETexemplarTraceIdDestinations:- name: trace_iddatasourceUid: Tempo
- name: Tempotype: tempoaccess: proxyorgId: 1url: http://tempo:3200basicAuth: falseisDefault: falseversion: 1editable: falseapiVersion: 1uid: tempojsonData:httpMethod: GETserviceMap:datasourceUid: prometheus
7.nginx-custom.conf
# user myuser;worker_processes auto; # 自动计算可用CPU核数来决定worker进程的数量
pid /tmp/nginx.pid; # 将PID文件放到/tmp下避免权限问题events {worker_connections 1024; # 最大连接数
}http {include /etc/nginx/mime.types; # 默认MIME类型配置default_type application/octet-stream;sendfile on; # 打开高效传输模式keepalive_timeout 65; # 长连接保持时间log_format json_analytics escape=json '{''"msec": "$msec", ' # request unixtime in seconds with a milliseconds resolution'"connection": "$connection", ' # connection serial number'"connection_requests": "$connection_requests", ' # number of requests made in connection'"pid": "$pid", ' # process pid'"request_id": "$request_id", ' # the unique request id'"request_length": "$request_length", ' # request length (including headers and body)'"remote_addr": "$remote_addr", ' # client IP'"remote_user": "$remote_user", ' # client HTTP username'"remote_port": "$remote_port", ' # client port'"time_local": "$time_local", ''"time_iso8601": "$time_iso8601", ' # local time in the ISO 8601 standard format'"request": "$request", ' # full path no arguments if the request'"request_uri": "$request_uri", ' # full path and arguments if the request'"args": "$args", ' # args'"status": "$status", ' # response status code'"body_bytes_sent": "$body_bytes_sent", ' # the number of body bytes exclude headers sent to a client'"bytes_sent": "$bytes_sent", ' # the number of bytes sent to a client'"http_referer": "$http_referer", ' # HTTP referer'"http_user_agent": "$http_user_agent", ' # user agent'"http_x_forwarded_for": "$http_x_forwarded_for", ' # http_x_forwarded_for'"http_host": "$http_host", ' # the request Host: header'"server_name": "$server_name", ' # the name of the vhost serving the request'"request_time": "$request_time", ' # request processing time in seconds with msec resolution'"upstream": "$upstream_addr", ' # upstream backend server for proxied requests'"upstream_connect_time": "$upstream_connect_time", ' # upstream handshake time incl. TLS'"upstream_header_time": "$upstream_header_time", ' # time spent receiving upstream headers'"upstream_response_time": "$upstream_response_time", ' # time spend receiving upstream body'"upstream_response_length": "$upstream_response_length", ' # upstream response length'"upstream_cache_status": "$upstream_cache_status", ' # cache HIT/MISS where applicable'"ssl_protocol": "$ssl_protocol", ' # TLS protocol'"ssl_cipher": "$ssl_cipher", ' # TLS cipher'"scheme": "$scheme", ' # http or https'"request_method": "$request_method", ' # request method'"server_protocol": "$server_protocol", ' # request protocol, like HTTP/1.1 or HTTP/2.0'"pipe": "$pipe", ' # "p" if request was pipelined, "." otherwise'"gzip_ratio": "$gzip_ratio", ''"http_cf_ray": "$http_cf_ray",'# '"http_authorization": "$http_authorization", ' # 添加 Authorization 头信息 # added by Rubin @2025/4/6 '"geoip_country_code": ""' # "$geoip_country_code"'}';# 日志配置(按天生成日誌文件名)map $time_iso8601 $logdate {'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;default 'date-not-found';}# access_log /var/log/nginx/access.log;access_log /var/log/nginx/access_$logdate.log json_analytics;error_log /var/log/nginx/error.log warn;# 简单的HTTP服务器设置server {listen 80; # 监听80端口# 请求根目录时返回的内容location / {root /usr/share/nginx/html; # 网页所在目录index index.html; # 默认主页}error_page 404 /index.html;# 错误页面设置error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}# Optionally, enable gzip for all server blocksgzip on;
}
8.docker-compose.yml
# version: "3.8"services:# OTEL Collector to receive logs, metrics and traces from the applicationotel-collector:#image: otel/opentelemetry-collector:0.123.0 # no loki exporterimage: otel/opentelemetry-collector-contrib:0.123.0container_name: otel-collectorcommand: [ "--config=/etc/otel-collector.yaml" ]volumes:- ./otel-collector.yaml:/etc/otel-collector.yamlports:- "4317:4317"- "4318:4318"- "9201:9201"networks:- my_network# Exports Traces to Tempotempo:image: grafana/tempo:2.7.2container_name: tempocommand: [ "-config.file=/etc/tempo.yaml" ]volumes:- ./tempo.yaml:/etc/tempo.yaml- ./tempo-data:/tmp/tempoports:- "3200" # tempo- "4317" # otlp grpc- "4318" # otlp httpnetworks:- my_network# Loki for log managementloki:image: grafana/loki:3.4.3container_name: lokicommand: [ "-config.file=/etc/loki.yaml" ]volumes:- ./loki.yaml:/etc/loki.yaml- ./loki-data:/tmp/lokiports:- "3100"networks:- my_network# Exports Metrics to Prometheusprometheus:image: prom/prometheus:3.3.0container_name: prometheuscommand:- --config.file=/etc/prometheus.yaml- --web.enable-remote-write-receiver- --enable-feature=exemplar-storagevolumes:- ./prometheus.yaml:/etc/prometheus.yaml- ./prometheus-data:/prometheusports:- "9090:9090"networks:- my_network# UI to query traces, metrics and logsgrafana:image: grafana/grafana:11.1.0container_name: grafanavolumes:- ./grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml- ./grafana-data:/var/lib/grafanaenvironment:- GF_AUTH_ANONYMOUS_ENABLED=true- GF_AUTH_ANONYMOUS_ORG_ROLE=Editor # Admin Viewer Editor- GF_AUTH_DISABLE_LOGIN_FORM=false # true- GF_FEATURE_TOGGLES_ENABLE=traceqlEditor- http_proxy=ports:- "3000:3000"networks:- my_networkpromtail:image: grafana/promtail:3.4.2container_name: promtailcommand: [ "-config.file=/etc/promtail/config.yaml" ]volumes:- ./promtail-config.yaml:/etc/promtail/config.yaml- ./nginx-data/logs:/var/log/nginx- ./promtail-data:/run/promtailports:- "9080:9080"networks:- my_networknginx:image: your/nginx:1.0.11container_name: nginxvolumes:- ./nginx-custom.conf:/etc/nginx/nginx.conf- ./nginx-data/logs:/var/log/nginx # mount a folder for logs- ./nginx-data/logs:/etc/nginx/html # ports:- "8002:80"networks:- my_networknetworks:my_network:driver: bridge
三、Docker run
1.start.sh
docker-compose up -d
2.stop.sh
docker-compose down
3.Run ./start.sh
四、Reference
Quick start | OpenTelemetry
https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/examples/AspNetCore/docker-compose.yaml
总结
此篇文章分享了Observability(可观测性)环境的安装过程,下一篇将分享.NET程式如何把Traces, Metrics, Logs发送给opentelemetry-collector。
相关文章:
【APM】Build an environment for Traces, Metrics and Logs of App by OpenTelemetry
系列文章目录 此系列文章介绍如何搭建Observability(可观测性)环境(Opentelemetry-Collector、Tempo、Prometheus、Loki和Grafana),以及应用。 【APM】Observability Solution 【APM】Build an environment for Traces, Metrics and Logs …...
全自动驾驶(FSD,Full Self-Driving)自动驾驶热点技术的成熟之处就是能判断道路修复修路,能自动利用类似“人眼”的摄像头进行驾驶!值得学习!
全自动驾驶(FSD,Full Self-Driving)软件是自动驾驶领域中的热点技术,其核心目标是实现车辆在各种复杂交通环境下的安全、稳定、高效自动驾驶。FSD软件的技术核心涉及多个方面的交叉技术,下面将详细分析说明其主要核心技…...
需要处理哪些响应数据?
在调用淘宝商品搜索 API 时,响应数据通常是一个 JSON 对象,包含了搜索结果的详细信息。以下是需要处理的主要响应数据字段及其说明: 响应数据结构 示例 JSON 数据 JSON {"code": "0","errorMessage": &quo…...
【NLP 63、大模型应用 —— Agent】
人与人最大的差距就是勇气和执行力,也是唯一的差距 —— 25.4.16 一、Agent 相关工作 二、Agent 特点 核心特征: 1.专有场景(针对某个垂直领域) 2.保留记忆(以一个特定顺序做一些特定任务,记忆当前任务的前…...
Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(三)
一、与目标无关的光栅化 (TIR) 独立于目标的光栅化 (TIR) 为涉及结构化图形的高质量抗锯齿的 Direct2D 使用方案提供高性能抗锯齿路径。 TIR 使 Direct2D 能够将光栅化步骤从 CPU 移动到 GPU,同时保留 Direct2D 抗锯齿语义和质量。 使用此功能,软件层可…...
总结【过往部分项目经历二(计算机图形学方向)】
过往部分项目经历二 1.加强杆自动生成算法2.牙龈线序列批量算法3.光伏多阵列排布算法 1.加强杆自动生成算法 介绍: 主要用于牙科正畸定制化应用。采用纯数字化技术,一键导入加强杆后,自动摆放、加强杆结构设计、网格重建、接触部分自动定位、…...
鸿蒙智行多款重磅新品发布,开启智慧出行新篇章
4月16日,鸿蒙智行新品发布会在上海隆重举办。问界M8、问界新M7全新配色、享界S9增程版上市;尊界S800内饰设计公布;SAIC尚界品牌首次官宣。 本次发布会后,鸿蒙智行将在4月17日举办智界品牌之夜,携手用户共同探索未来出…...
冰川流域提取分析——ArcGIS pro
一、河网提取和流域提取视频详细GIS小熊 || 6分钟学会水文分析—河网提取(以宜宾市为例)_哔哩哔哩_bilibili 首先你要生成研究区域DEM,然后依次是填洼→流向→流量→栅格计算器→河网分级→栅格河网矢量化(得到河网.shpÿ…...
SpringBoot——配置文件
目录 前言 1.参数配置化 1.1使用application.properties 2.yml配置文件 3.ConfigurationProperties 3.1ConfigurationProperties 4.总结 前言 我们在配置一个类的对象属性时如果我们直接写在类里就属于硬编码,如果我们在做项目时每设计到一个第三方服务就将其…...
Lambda 函数与 peek 操作的使用案例
Lambda 函数和 peek 操作是 Java 8 Stream API 中非常有用的特性,下面我将介绍它们的使用案例。 Lambda 函数使用案例 Lambda 表达式是 Java 8 引入的一种简洁的匿名函数表示方式。 集合操作 List<String> names Arrays.asList("Alice", "B…...
Java 中常用队列用法详解
Java 中常用队列用法详解 在Java编程中,队列是一种非常重要的数据结构,广泛应用于任务调度、消息传递以及多线程通信等场景。以下将详细介绍几种常用的Java队列及其使用方法。 1. Queue 接口概述 Queue 是Java集合框架中的一个接口,它定义…...
IoT FEM射频前端模组芯片(2.4G PA)三伍微电子GSR2401 兼容替代RFX2401
型号:GSR2401应用:适用于蓝牙(BT)、ZigBee及物联网(IoT)设备 功能:集成了功率放大器(PA)、开关(Switch)和低噪声放大器(LNAÿ…...
android如何在生产环境中做到详实的日志收集而不影响性能?
在Android应用的生命周期中,日志收集贯穿于开发、测试到生产环境的每一个阶段。特别是在生产环境中,当应用部署到成千上万的用户设备上时,开发者无法直接访问用户的运行环境,也无法像在开发阶段那样通过调试工具实时查看代码执行情况。这时,日志就成为连接开发者与用户设备…...
深入解析 Linux 系统中的动静态库:从原理到实践
引言 在 Linux 开发中,动态库(.so)和静态库(.a)如同软件开发的“乐高积木”,它们将代码模块化,提高复用性并优化系统资源。当你在终端输入 ls 时,背后可能依赖了数十个动态库&#…...
Django视图(未分离)
ListView、DetailView、CreateView、UpdateView 和 DeleteView 是 Django 框架中基于类的通用视图(Class-Based Generic Views) 配置 URL 路由 在 urls.py 中为这些视图配置路由: from django.urls import path from .views import (PostLis…...
0基础 | 开发环境 |51单片机编译环境 Keil C251和C51,STM32的编译环境Keil 5 MDK-ARM
51单片机编译环境 Keil C51 简介:Keil C51是Keil Software公司(现已被ARM收购)专门为8051微控制器家族开发的编译器,它将标准C语言与8051单片机硬件特性相结合,让开发者能够用C语言高效地开发51单片机应用程序。特点 …...
Python内置函数---all()
Python内置函数 all() 用于判断可迭代对象中的所有元素是否都为真值(Truthy),是逻辑判断的重要工具。 1. 基本语法 all(iterable) 参数: iterable 必须为可迭代对象(如列表、元组、集合、字典的值等)。…...
Windows系统安装RustDesk Server的详细步骤和客户端设置
Windows系统安装RustDesk Server的详细步骤 在Windows系统上安装RustDesk Server涉及几个关键步骤,包括安装必要的依赖、下载RustDesk Server程序、配置并启动服务。以下是详细的步骤: 1. 安装Node.js和PM2 RustDesk Server的某些版本可能需要Node.js环境来运行,而PM2是一…...
路由过滤实验
实验拓扑以及要求 此实验总结 1.ip-prefix 拒绝192.168.4.1 32,这样写的话并不会匹配192.168.4.1 32,需要加上范围less-eq 32,也就是说,192.168.4.1 32只是规则的范围,匹配还是得写范围 2.router-policy适合用在边界路由器引入 filter-policy都可以用 配置IP 配置ospf,rip …...
数据结构学习笔记 :栈、队列与表达式转换详解
目录 栈(Stack) 1.1 顺序存储实现 1.2 链式存储实现队列(Queue) 2.1 顺序存储实现 2.2 链式存储实现中缀表达式转后缀表达式后缀表达式计算总结与应用场景 一、栈(Stack) 栈是一种**后进先出(…...
项目优化中ini配置文件解析器
一、项目背景 在停车管理项目中不同道闸口的终端配置可能不同,如靠近居民楼的道闸终端LED的语音播报音量和靠近马路的道闸门口不同;不同终端道闸锁闸时间也可能不同,诸如此类放在数据库中,不同的终端在启动时必须先连接到数据库才…...
【FPGA】【DE2-115】DDS信号发生器设计
目录 一、基本概述 1.1 DDS简介 1.2 DDS工作原理 1.2.1 核心组成部分 1.2.2 工作流程 1.2.3 输出频率计算 1.3 常见的RAM、ROM、FIFO等IP核的参数设置和调用过程 1.3.1 RAM IP核的参数设置和调用过程 1.3.2 ROM IP核的参数设置和调用过程 1.3.3 FIFO IP核的参数设置和…...
使用 OpenRewrite 简化 Java 和 SpringBoot 迁移
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 移民的挑战 随着 Spring Boot 2.x 等旧版本即将到期且不再获得支持,迁移到较新版本对于安全性、兼容性和性能改进至关重要。但…...
电脑怎么设置锁屏密码 分享详细设置教程
电脑不仅仅是工作的工具,更是存储着大量个人信息和重要数据的私人空间。设置电脑锁屏密码是保护这些信息,免受未经授权访问的基本安全措施之一。那么,电脑怎么锁屏密码呢?下面便为大家介绍在一些不同操作系统中怎么设置电脑锁屏密…...
【Netty篇】Handler Pipeline 详解
目录 一、 Handler & Pipeline——流水线上的“特种部队”与“生产线”1、 ChannelHandler —— 流水线上的“特种兵”👮♂️2、 ChannelPipeline —— 生产线上的“接力赛跑”🏃♀️🏃♂️ 二、 代码实例1、 服务端代码示例2、 客…...
Postman实现接口测试(附项目实战)
Postman实现接口测试(附项目实战) Postman实现接口测试 掌握如何安装Postman 掌握Postman的基本用法 掌握全局变量与环境变量 掌握Postman断言和关联 掌握如何读取外部文件实现参数化 掌握如何使用Newman生成HTML测试报告 1.Postman介绍和安装 Postman是…...
从零上手GUI Guider学习LVGL——Button
视频教程请关注我b站:同学_好好学习,这里只是做相应的笔记文稿 从零上手GUI Guider学习LVGL——Buttton 前言: 首先我们为什么要学习LVGL设计工具呢? 1 降低开发难度 2 提高开发效率 所以我们需要学习一款合适的设计工具 在b站很少…...
软件工程知识体系全面梳理
一、软件工程概述 1. 软件工程基本概念 定义:应用系统化、规范化、可量化的方法开发、运行和维护软件的学科 目标:提高软件质量、降低开发成本、控制开发周期 三要素:方法、工具、过程 2. 软件生命周期 可行性分析 → 需求分析 → 设计 …...
操作教程|通过DataEase制作MaxKB系统数据大屏
MaxKB(Max Knowledge Brain)是一款强大易用的企业级AI助手,支持RAG检索增强生成、工作流编排、MCP工具调用能力,目前正在被广泛应用于智能客服、企业内部知识库、学术研究与教育等场景。MaxKB可以帮助用户快速搭建面向不同应用场景…...
关于webpack的知识点
一、什么是webpack?它的核心概念是什么? webpack是现代JavaScript应用程序的打包工具 它的核心概念包括: 入口输出loaderplugin(插件)模式模块依赖图 二、webPack与Grunt\Grulp有什么区别? 首先Grunt/Gulp是任务运行器,用来实现流…...
Linux系统中的 sudo 权限会导致环境变量失效。
标题为什么 sudo 会破坏 配置的环境变量? 权限切换:sudo 以 root 用户 身份执行命令,root 用户的环境变量和当前用户(user)的环境变量是隔离的。 环境变量丢失:nvm 依赖的 PATH、等环境变量是通过用户 She…...
目标分割模型优化自身参数都是梯度下降算法吗?
在计算机视觉的深度学习任务中,诸如 CNN、FCN、U-Net、DeepLab 系列模型已成为图像分类与图像分割任务的核心架构。它们在网络结构和任务上有所差异,但是否共享同一种优化机制?是否都使用梯度下降?优化过程中又有什么本质区别&…...
前端请求传参与后端匹配的接收方式Content-Type类型
文章目录 一、Content-Type简介二、Content-Type类型三、常⽤类型3.1. application/json:JSON数据格式3.2. application/x-www-form-urlencoded:普通表单格式(键值对)3.3. multipart/form-data:多部分表单格式…...
解决:VSCode C++ conan 安装第三方库后 头文件报错
文章目录 1 头文件include路径查找报错参考 1 头文件include路径查找报错 找到conan_toolchain.cmake中 INCLUDE_PATH list(PREPEND CMAKE_INCLUDE_PATH "/Users/hanliqiang/.conan2/p/b/fmte8c4f7a755477/p/include")生成C编译配置 CtrlShiftP 中选择C Edit Confi…...
(leetcode算法题)309. 买卖股票的最佳时机含冷冻期
按照题目要求,研究对象是最后一天结束后获得的最大利润 那么就可以把问题拆分成 第 1 天结束后获得的最大利润, 第 2 天结束后获得的最大利润, 第 i 天结束后获得的最大利润, 由于规则中强调不能同时参与多笔交易,…...
win10和win11系统修复工具各类故障解决
点赞关注一下哈: 在使用电脑时可能会遇到一些问题,通过上网查找解决方法费时费力,而有了这个小工具可以很方便的解决问题。有几十种解决方案,值得下载保存哦。 1、使用方法: 解压文件,双击文件夹内的exe文件…...
微硕WSP6949 MOS管在补水仪中的应用与市场分析
微硕WSP6949 MOS管在补水仪中的应用与市场分析 一、引言 补水仪作为一种常见的家用电器,其核心部件之一是驱动电路,而MOS管作为驱动电路中的关键元件,其性能直接影响到补水仪的运行效率和稳定性。微硕半导体推出的WSP6949 MOS管,…...
【通过Zadig给鼠标适配器安装驱动后,鼠标动不了,无法恢复的解决办法】
【通过Zadig给鼠标适配器安装驱动后,鼠标动不了,无法恢复的解决办法 问题产生缘由感谢这位大佬提供的解决办法解决办法 问题产生缘由 通过Zadig给鼠标适配器安装USB GAMING MOUSE这个驱动后,鼠标动不了,无法恢复(重启电脑,卸载鼠标驱动再重装也不可以), 不过还好,我用的是笔记…...
基本表单的实现即登录注册页面的实现
1.登录页面(opType.value0) 2.注册页面(opType.value1) 3.注意 el-form-item中的prop对应的是rules里面的key值 <el-form-itemlabel"邮箱"prop"email"label-width"100px"> </el-form-i…...
JVM 什么是逃逸分析?它有哪些优化手段?
JVM 逃逸分析 (Escape Analysis) 是一种编译器优化技术,主要由即时编译器 (JIT Compiler) 在运行时进行,用于分析对象的作用域,判断对象是否会逃逸出方法或线程。 什么是逃逸? 在 JVM 的上下文中,“逃逸” 指的是对象…...
Spring AI与通义千问的完美结合:构建智能对话应用
Spring AI是Spring生态系统中的新成员,它为开发人员提供了一套简单而强大的工具,用于集成各种AI大模型。本文将介绍如何使用Spring AI与阿里云通义千问大模型进行集成,构建智能对话应用,帮助你快速掌握AI应用开发的核心技能。 引言 随着人工智能技术的快速发展,越来越多的…...
CST仿真天线流程
基础操作指导 如何建模、设置边界条件、端口激励等。 材料属性设置、网格划分优化。 仿真参数配置(频域/时域仿真)。 常见仿真案例 天线设计(如微带天线、波导天线)。 微波器件(滤波器、功分器、耦合器࿰…...
Vue 组件化开发
引言 在当今的 Web 开发领域,构建一个功能丰富且用户体验良好的博客是许多开发者的目标。Vue.js 作为一款轻量级且高效的 JavaScript 框架,其组件化开发的特性为我们提供了一种优雅的解决方案。通过将博客拆分成多个独立的组件,我们可以提高…...
java + spring boot + mybatis 通过时间段进行查询
前端传来的只有日期内容,如:2025-04-17 需要在日期内容的基础上补充时间部分,代码示例: /*** 日志查询(分页查询)* param recordLogQueryDTO 查询参数对象* return 日志列表*/Overridepublic PageBean<…...
基于pycatia的CATIA自动化干涉检测系统开发全解析
引言 在智能制造时代,三维数模的干涉检测效率直接影响产品开发周期。本文基于Python的pycatia库,深入解析CATIA自动化干涉检测系统的开发要点与工业实践,结合达索系统最新技术趋势,为工程师提供一套高可靠性的二次开发方案。 一、…...
v-model进阶+ref+nextTick
一、v-model进阶 复习 v-model v-model: 双向数据绑定指令 数据 <-> 视图: 数据和视图相互影响, 因此被称为双向数据绑定指令 1> 数据变了, 视图也会跟着变 (数据驱动视图) 2> 视图变了, 数据也会跟着变 1. v-model 原理 v-model只是一个语法糖, 比较好用, …...
vscode+keil嵌入式软件开发全流程
vscodekeil嵌入式软件开发全流程 1 安装MinGW-w64 (1) MinGW-w64 是一个用于Windows操作系统的开发工具集,其包含了C语言编译器 GCC(GNU Compiler Collection),官网地址:https://www.mingw-w6…...
GitHub 从入门到精通完全指南(2025版)
以下是GitHub 从入门到精通完全指南,整合优质教程及官方文档,涵盖基础操作、协作开发、高级功能及实战技巧,助你快速掌握 GitHub 全流程。 一、GitHub 入门篇 1. 注册与配置 注册 GitHub 账号 访问 GitHub 官网,点击“Sign Up”填写邮箱、用户名、密码完成注册。建议绑定双…...
总结【过往部分项目经历一(计算机图形学方向)】
总结【过往部分项目经历】 1.蜂窝填充算法2.孔洞识别算法3.扫掠轮廓计算4.二维排料算法5.最大内接圆算法 1.蜂窝填充算法 介绍: 主要从二维六角网格基本算法出发,基于自定义数据结构和拓扑关系,从二维到三维进行拓展,六角网格->六棱柱-&g…...
Flask(补充内容)配置SSL 证书 实现 HTTPS 服务
没有加密的http服务,就像在裸泳,钻到水里便将你看个精光。数据在互联网上传输时,如果未经加密,随时可能被抓包软件抓住,里面的cookie、用户名、密码什么的,它会看得一清二楚,所以,只…...