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

常用监控方案 Prometheus + Grafana 简单使用小结

文章目录

  • 前言
  • 一、概念
    • 1.1 发展
    • 1.2 时序数据
    • 1.3 Metric
  • 二、Prometheus
    • 2.1 架构
    • 2.2 配置
    • 2.3 查询语言PromQL
    • 2.4 Exporter
  • 三、Grafana
    • 3.1 数据源
    • 3.2 权限
    • 3.3 面板可视化
    • 3.4 仪表盘
  • 四、实战
    • 4.1 监控 Windows/Linux
    • 4.2 监控 JVM
    • 4.3 监控 MySQL
    • 4.4 监控 Springboot API
  • 参考

前言

​ Prometheus 是用 GO 语言开发的一个开源的系统监控和告警工具包,最初是 2012 年 SoundCloud 发布的,后面被很多大公司组织所使用,于2016年加入了云原生云计算基金会(Cloud Native Computing Foundation,CNCF),并于2018年毕业,它现在是一个独立的开源项目,并独立于任何公司进行维护。

​ Prometheus是一个非常优秀的监控工具,准确的说,更是一套监控方案。Prometheus提供了监控数据收集,存储,处理可视化和告警的一套完整的监控解决方案。

  • 官方网站:https://prometheus.io/

  • github 地址:https://github.com/prometheus/prometheus

​ Grafana 是一个开源的跨平台的度量分析、可视化工具,支持多种数据源,如Prometheus、Elasticsearch、InfluxDB等。它提供了丰富的可视化图表和面板,可以帮助用户更好地理解和分析监控数据。

  • 文档地址:https://grafana.com/docs/grafana/latest/
  • github 地址:https://github.com/grafana/grafana

Prometheus 自身携带一个web UI用来显示数据图表,但是有点简陋,而 Grafana 能够支持精美图表的制作并显示,而且自身支持Prometheus, 所以经典的监控方案就是 Prometheus + Grafana。

一、概念

1.1 发展

运维监控的发展历程可以追溯到计算机技术的早期阶段。随着计算机技术的不断发展,运维监控也在不断地演化和改进。

  • 最初的运维监控主要是通过手动检查系统日志和性能指标来进行的,这种方法非常耗时且容易出错。
  • 随着计算机技术的不断发展,出现了一些基于SNMP 协议的监控工具,例如Nagios、Zabbix等等。这些工具可以自动地收集系统日志和性能指标,并对其进行分析和处理,从而帮助用户更好地了解系统的运行状态。
  • 近年来,随着云计算和容器技术的不断发展,运维监控也在不断地演化和改进。例如 Prometheus就是一种基于云原生技术的开源监控系统,它可以帮助用户更好地管理和监控云原生应用程序。

总之,随着计算机技术的不断发展,运维监控也在不断地演化和改进,从最初的手动检查到基于SNMP协议的监控工具,再到现在的自动化运维监控工具,运维监控为用户提供更好的服务和支持。

1.2 时序数据

时序数据,即时间序列数据(Time Series Data),按时间维度顺序记录且索引的数据。像物联网、车联网、工业互联网等领域各种类型的设备都会产生海量的时序数据,这些数据将占世界数据总量的90%以上。在监控平台,时序数据常常指的是系统的性能指标、日志信息等等带有时间戳的序列数据。

时序数据和传统关系数据的对比,时序数据侧重CRUD中的CR,没有U

1.3 Metric

metric(度量,指标)一个很重要的概念,在运维监控出现的非常高频,是指监控系统中的指标,例如CPU使用率、内存使用率、网络流量等等,在Prometheus 其本质是指存在于数据库的一条记录。

在Prometheus client 中可分为4种类型

  • Counter:一种累积度量,它表示一个单调递增的计数器,其值只能在重新启动时增加或重置为零。例如,可以使用计数器来表示所服务的请求、已完成的任务或错误的数量。
  • Gauge:一个可以任意起伏的单个数值。 测量器通常用于测量值,比如温度或当前内存使用量,但也用于可能上下波动的“计数”,比如并发请求的数量。
  • Histogram:直方图,表示一段时间内的数据采样统计结果,通过分桶(bucket)的方式来统计样本的分布。比如统计接口的耗时,多少的请求落在 10ms - 20ms,多少的请求落在 20ms - 30ms 等。
  • Summary:和Histogram类似,根据样本统计出百分位。例如统计链路耗时,TP99 是多少,TP95 是多少等。

二、Prometheus

2.1 架构

  • Prometheus Server:利用服务发现机制获取需要监控的 target,通过Pull方式从target处拉取指标数据,根据定义的rule,可以提前对指标数据再次进行计算,触发报警的发送到 alertmanager组件,用于收集和存储时间序列数据。

  • PushGateway:各个目标主机可上报数据到 PushGateway,然后Prometheus server统一从pushgateway拉取数据。

  • Exporters:采集已有的第三方服务监控指标并暴露metrics。Prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到Prometheus server 端。

  • Alertmanager:组件根据报警的告警方式发送相应的通知。从Prometheus server端接收到alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉,slack等。

  • Grafana:数据可视化组件,监控仪表盘,通过PromQL从Prometheus Server查询数据,进行展示

  • Prometheus web UI:简单的Web控制台,默认端口9090

2.2 配置

Prometheus 可以通过 --config.file 命令选项来加载配置文件。

当启用–web.enable-lifecycle,可通过URL /-/reload 发送 POST 请求实现不需要重启Prometheus 加载配置文件

配置文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/,下面是4个常用的配置大类

  • global

    配置全局的信息,如监控数据的间隔,业务的超时时间,告警规则执行周期等

    • scrape_interval 拉取 targets 的默认时间间隔,默认1m
    • scrape_timeout 拉取超时时间,默认10s
    • evaluation_interval 执行rules间隔时间,默认1m
  • rule_files

    包含两种规则文件:记录规则和告警规则。

    • 记录规则

      记录规则允许预先计算经常需要的或计算成本昂贵的表达式,并将其结果保存为一组新的时间序列。查询预先计算的结果通常会比每次需要时执行原始表达式快得多。这对于仪表板特别有用,它们需要在每次刷新时重复查询相同的表达式。

      文档:https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/

    • 告警规则

      根据PromQL来定义警报条件,并向外部服务发送关于触发警报的通知。

      文档:https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/

  • alerting

    配置管理 Alertmanager

  • scrape_configs

    配置拉取数据节点job,文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config

    • job_name job名字
    • scrape_interval 抓取频率,默认globa.scrape_interval
    • scrape_timeout 抓取超时,默认globa.scrape_timeout
    • metrics_path 抓取路径, 默认/metric
    • static_configs 抓取目标URL地址

2.3 查询语言PromQL

Prometheus 提供了一种名为PromQL(Prometheus Query Language)的函数式查询语言,允许用户实时选择和聚合时间序列数据.文档地址:https://prometheus.io/docs/prometheus/latest/querying/basics/

  • 过滤查询

    通过{} 对结果进行过滤,内部标签值可使用=表示相等,!= 表示不相等,=~表示正则匹配,!~表示正则不匹配

    http_requests_total{method="GET"}
    http_requests_total{environment=~"staging|testing|development",method!="GET"}
    http_requests_total{status!~"4.."}
    
  • 范围时间查询

    可通过[时间值]进行选择,例如

    http_requests_total [5m]
    
  • 偏移时间查询

    通过offset 可以允许更改查询中单个即时向量和范围向量的时间偏移量。例如过去5分钟http请求总数

    http_requests_total offset 5m
    
  • 定点时间查询

    @ 允许更改查询中 单个即时向量和范围向量的计算时间。提供给@修改符的时间是一个unix时间戳,用浮点数表示

    例如:返回在2021-01-04T07:40:00+00:00时的值

    http_requests_total @ 1609746000
    
  • 聚合查询

    Prometheus 提供sum,max,min,avg,count,bottomk,topk等聚合命令查询数据

    sum(http_requests_total)
    sum by (application, group) (http_requests_total)
    topk(5, http_requests_total)
    
  • 函数查询

    Prometheus 提供函数参与计算查询数据,文档:https://prometheus.io/docs/prometheus/latest/querying/functions/

    rate(http_requests_total[5m])[30m:1m]
    

2.4 Exporter

Prometheus通过 Exporter 来获取数据,可以根据文档中的链接按需下载安装:https://prometheus.io/docs/instrumenting/exporters/

三、Grafana

3.1 数据源

grafana_datasource_01.png

3.2 权限

grafana 提供一套权限系统,能够让用户根据不同的角色拥有不同的权限,如面板的查看,编辑等等

权限分为三种:admin, viewer, editer

可通过邀请用户,并向用户发送链接的操作来添加用户,并且可以通过组来通知查看面板的权限控制

3.3 面板可视化

相关文档:https://grafana.com/docs/grafana/latest/panels-visualizations/

  • 面板查询表达式

    grafana_03_create-panel_query.png

  • 面板种类

    最常见的就是Graph,更多的种类可以去官网下载导入,注意下版本

    grafana_04_panel_type.png

  • 面板参数

    y轴的参数如果是百分比可以通过如下控制

    grafana_05_panel_percent.png

3.4 仪表盘

上述多个面板整合在一起就是仪表盘了

  • 导入

    除了可以自定义面板外,还可以使用其他人制作好的面板 https://grafana.com/grafana/dashboards/,通过菜单中的Import导入

  • 查看

    • 查看仪表盘可通过url添加参数&kiosk 隐藏侧边栏和顶部菜单

    • 匿名访问

      修改配置文件conf/defaults.ini

      [auth.anonymous]
      # 设置为true即可匿名访问,不用登陆就可以直接访问url
      enabled = true
      
    • 嵌套允许

      修改配置文件conf/defaults.ini

      # 设置为true即可嵌套
      allow_embedding = true
      
  • 变量

    通过变量可以实现下拉列表选择想要显示的部分:文档:https://grafana.com/docs/grafana/latest/dashboards/variables/

四、实战

4.1 监控 Windows/Linux

windows: 下载Exporter https://github.com/prometheus-community/windows_exporter/releases

linux: 下载 https://github.com/prometheus/node_exporter/releases

下面以windows 为例

windows_exporter.exe --collectors.enabled "[defaults],process,container"
windows_exporter.exe --config.file config.yml

grafana_02_windows.png

监控项

监控指标表达式
CPU 使用率100 - (avg by (instance,region) (irate(windows_cpu_time_total{mode=“idle”}[2m])) * 100)
内存 使用率100-(windows_os_physical_memory_free_bytes/windows_cs_physical_memory_bytes)*100
磁盘总使用率(sum(windows_logical_disk_size_bytes{volume!~“Harddisk."}) by (instance) - sum(windows_logical_disk_free_bytes{volume!~"Harddisk.”}) by (instance)) / sum(windows_logical_disk_size_bytes{volume!~"Harddisk."}) by (instance) *100
各个磁盘使用率100- 100 * (windows_logical_disk_free_bytes/windows_logical_disk_size_bytes)
带宽(sum(irate(windows_net_bytes_total[1m])) > 1)* 8
系统线程windows_system_threads
系统进程windows_os_processes

4.2 监控 JVM

下载Exporter:https://github.com/prometheus/jmx_exporter/releases

java -javaagent:jmx_prometheus_javaagent-0.18.0.jar=12345:config.yml -jar vhr-web-0.0.1-SNAPSHOT.jar
rules:
- pattern: ".*"

grafana_06_panel_jvm.png

监控指标表达式
jvm 堆内存使用jvm_memory_bytes_used{area=“heap”}
Eden 区使用jvm_memory_pool_bytes_used{pool=“PS Eden Space”}
Old 区使用jvm_memory_pool_bytes_used{pool=“PS Old Gen”}
元空间 使用jvm_memory_pool_bytes_used{pool=“Metaspace”}
gc时间increase(jvm_gc_collection_seconds_sum[$__interval])
gc增长次数increase(jvm_gc_collection_seconds_count[$__interval])

4.3 监控 MySQL

https://github.com/prometheus/mysqld_exporter/releases

mysqld_exporter.exe --config.my-cnf config.cnf --web.listen-address=localhost:9104
[client]
user=root
password=

grafana_08_mysql_01.png

监控指标表达式
连接数sum(max_over_time(mysql_global_status_threads_connected[$__interval]))
慢查询数sum(rate(mysql_global_status_slow_queries[$__interval]))
平均运行线程数sum(avg_over_time(mysql_global_status_threads_running[$__interval]))
当前QPSrate(mysql_global_status_queries[$__interval])

4.4 监控 Springboot API

有时候在 Springboot 项目中需要统计 API 接口的调用次数和调用时间,可以使用actuator+micrometer ,已经内置两个注解实现两者功能,因为要使用到aop,所以还需导入aop包

文档:https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enabling

<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
management:metrics:tags:application: ${spring.application.name}web:server:max-uri-tags: 200endpoints:web:exposure:include: prometheusspring:application:name: prometheus-test-api
@Bean
public TimedAspect timedAspect(MeterRegistry registry) {return new TimedAspect(registry);
}
@GetMapping("/test")
@Timed(value = "test_method",description = "测试接口耗时")
@Counted(value = "test_method", description = "测试接口次数")
public String test() {//try {//    Thread.sleep(1000);//} catch (InterruptedException e) {//    throw new RuntimeException(e);//}return "ok";
}

grafana_09_springboot.png

参考

  1. Prometheus+Grafana 搭建全方位的监控告警系统

相关文章:

常用监控方案 Prometheus + Grafana 简单使用小结

文章目录 前言一、概念1.1 发展1.2 时序数据1.3 Metric 二、Prometheus2.1 架构2.2 配置2.3 查询语言PromQL2.4 Exporter 三、Grafana3.1 数据源3.2 权限3.3 面板可视化3.4 仪表盘 四、实战4.1 监控 Windows/Linux4.2 监控 JVM4.3 监控 MySQL4.4 监控 Springboot API 参考 前言…...

基于长短期神经网络LSTM的飞行轨迹跟踪预测,基于长短期神经网络LSTM的三维路径预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的飞行轨迹跟踪 完整代码: https://download.csdn.net/download/abc991835105/87705046 效果图 结果分析 展望 参考论文 背影 路径追踪预测,对实现自动飞行驾驶拥有重要意义,长短期神经网络是一种改进…...

计算机组成原理-指令系统-指令格式及寻址方式

目录 一、指令的定义 1.1 扩展操作码指令格式 二、指令寻址方式 2.1 顺序寻址 2.2 跳跃寻址 三、 数据寻址 3.1 直接寻址 3.2 间接寻址 3.3 寄存器寻址 ​ 3.4 寄存器间接寻址 3.5 隐含寻址 3.6 立即寻址 3.7 偏移地址 3.7.1 基址寻址 3.7.2 变址寻址 3.7.3 相对寻址…...

【满分】【华为OD机试真题2023B卷 JAVAJS】经典屏保

华为OD2023(B卷)机试题库全覆盖,刷题指南点这里 经典屏保 知识点循环迭代编程基础 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: DVD机在视频输出时,为了保护电视显像管,在待机状态会显示“屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹…...

Apache 网页与安全优化

目录 一&#xff1a;Apache网页优化概述 1、概述 2、优化内容 3、gzip介绍 4、Apache的压缩模块 5、mod_ gzip 模块与mod_ deflate 模块 二&#xff1a; 网页压缩 1.检查是否安装 mod_deflate 模块 2. 如果没有安装mod_deflate 模块&#xff0c;重新编译安装 Apache 添…...

Unity的IFilterBuildAssemblies:深入解析与实用案例

Unity IFilterBuildAssemblies Unity IFilterBuildAssemblies是Unity引擎中的一个非常有用的功能&#xff0c;它可以让开发者在构建项目时自定义哪些程序集需要被包含在构建中&#xff0c;哪些程序集需要被排除在建之外。这个功能可以帮助开发者更好地控制项目的构建过程&…...

分片架构,Redis Cluster 分析

分片架构解决的问题 通过堆机器&#xff0c;提升读写性能&#xff0c;与存储性能 分片架构设计要点 分片规则 选择Cardinality大的作为分片键&#xff0c;尽可能保证数据分布均匀 常见分片键&#xff1a; 基于主键&#xff08;业务型数据&#xff09;&#xff0c;基于时间…...

Linux-0.11 文件系统bitmap.c详解

Linux-0.11 文件系统bitmap.c详解 模块简介 该模块包含了两对函数&#xff0c;第一对是和i节点相关的free_inode()和new_inode()。第二对是和逻辑块相关的free_block()和new_block()。 函数详解 free_block void free_block(int dev, int block)该函数的作用是释放设备dev…...

【Linux】基本指令,拥抱Linux的第一步

[Linux]常见指令 Linux基本指令指令的本质ls指令pwd指令cd指令touch指令mkdir指令(重要)rmdir&&rm指令(重要)man指令&#xff08;重要&#xff09;cp指令&#xff08;重要&#xff09;mv指令&#xff08;重要&#xff09;重定向cat指令more指令less指令&#xff08;重要…...

CTF 2015: Search Engine-fastbin_dup_into_stack

参考&#xff1a; [1]https://gsgx.me/posts/9447-ctf-2015-search-engine-writeup/ [2]https://blog.csdn.net/weixin_38419913/article/details/103238963(掌握利用点&#xff0c;省略各种逆向细节) [3]https://bbs.kanxue.com/thread-267876.htm&#xff08;逆向调试详解&am…...

DRF之全局异常处理

一、REST framework 提供了异常处理&#xff0c;我们可以自定义异常处理函数 使用方式&#xff1a; from rest_framewoork.views import exception_handerdef custom_exception_handler(exc,context):# 先调用REST framework默认的异常处理方法获得标准错误响应对象response …...

AI创作工具的使用体验报告

下面是AI创作工具的使用体验报告&#xff0c;围绕以下三点展开&#xff1a; 一、工具的使用体验如何&#xff1f; CSDN博客AI创作工具是一款非常易用的工具&#xff0c;操作简单&#xff0c;可以很快地开始创建内容。在使用过程中&#xff0c;我发现它的语言模型很智能&#…...

C++算法模板(转自acwing)

快速排序算法模板 —— 模板题 AcWing 785. 快速排序 void quick_sort(int q[], int l, int r) {if (l > r) return;int i l - 1, j r 1, x q[l r >> 1];while (i < j){do i ; while (q[i] < x);do j -- ; while (q[j] > x);if (i < j) swap(q[i],…...

阿里云服务器最新优惠价格及最新收费标准(2023更新)

阿里云服务器收费标准分为包年包月和按量付费两种模式&#xff0c;包年包月是一种先付费后使用的计费方式&#xff0c;按量付费是一种先使用后付费的计费方式。选择包年包月的收费模式&#xff0c;用户可以提前预留资源&#xff0c;同时享受更大的价格优惠&#xff0c;帮您更大…...

React实现监听粘贴事件并获取粘贴板中的截图

目录 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件从粘贴板获取截图文件React监听事件 事件监听绑定的事件函数相关扩展 监听粘贴事件并获取粘贴板中的截图 TSX中给组件添加监听粘贴事件 ? 1 2 3 4 5 6 7 8 9 10 11 const pasteImageRef useRef<HTML…...

ISO_IEC_7816-3

介绍 ISO/IEC 7816 是一系列标准&#xff0c;规定了集成电路卡和此类卡的使用 互换。 这些卡是用于在外部世界和卡中的集成电路之间协商的信息交换的识别卡。 作为信息交换的结果&#xff0c;卡传递信息&#xff08;计算结果、存储的数据&#xff09;和/或修改其内容&#xff0…...

学习C#反射(Reflection)

反射提供描述程序集、模块和类型的对象&#xff08;Type 类型&#xff09;。 可以使用反射动态地创建类型的实例&#xff0c;将类型绑定到现有对象&#xff0c;或从现有对象中获取类型&#xff0c;然后调用其方法或访问器字段和属性。 如果代码中使用了特性(Attribute)&#xf…...

Spring Boot的核心组件和工作原理

引言 Spring Boot是一个快速构建应用程序的框架&#xff0c;通过自动化配置和约定优于配置的原则&#xff0c;可以快速地创建可独立运行的、生产级别的Spring应用程序。Spring Boot的核心组件是自动配置、起步依赖和嵌入式Web服务器。 在本文中&#xff0c;我们将深入了解Spr…...

【指针的深刻理解】

如何看待下面代码中的a变量? #include<stdio.h> int main() {int a 0;//同样的一个a&#xff0c;在不同的表达式中&#xff0c;名称是一样的&#xff0c;但是含义是完全不同的&#xff01;a 10;//使用的是a的空间&#xff1a;左值int b a; //使用的是a的内容&#x…...

lintcode-图的拓扑排序(java)

拓扑排序 拓扑排序-lintcode原题题目介绍解题思路代码演示解题方法二 (参考,不用掌握)前置知识 图的拓扑序和深度优先遍历和广度优先遍历 拓扑排序-lintcode原题 127.拓扑排序-原题链接,可以点进去测试 题目介绍 描述 给定一个有向图&#xff0c;图节点的拓扑排序定义如下: 对…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...

GeoServer发布PostgreSQL图层后WFS查询无主键字段

在使用 GeoServer&#xff08;版本 2.22.2&#xff09; 发布 PostgreSQL&#xff08;PostGIS&#xff09;中的表为地图服务时&#xff0c;常常会遇到一个小问题&#xff1a; WFS 查询中&#xff0c;主键字段&#xff08;如 id&#xff09;莫名其妙地消失了&#xff01; 即使你在…...