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

【Elasticsearch】监控与管理:集群监控指标

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

文章目录

  • 【Elasticsearch】监控与管理:集群监控指标
    • 引言
    • 1. Elasticsearch 集群监控概述
      • 1.1 什么是 Elasticsearch 集群监控?
      • 1.2 监控的重要性
      • 1.3 Elasticsearch 内置监控工具
    • 2. 节点状态指标
      • 2.1 CPU 使用率
      • 2.2 内存使用率
      • 2.3 磁盘空间
      • 2.4 JVM 堆内存
      • 2.5 网络使用情况
    • 3. 索引指标
      • 3.1 文档数量
      • 3.2 索引大小
      • 3.3 索引操作统计
      • 3.4 索引碎片化程度
    • 4. 搜索性能指标
      • 4.1 查询延迟
    • 4.2 查询吞吐量
      • 4.3 聚合操作性能
      • 4.4 响应时间分布
    • 5. 通过 Java API 获取监控指标
      • 5.1 使用 REST API 获取节点状态
      • 5.2 使用 Java High Level REST Client 获取索引统计信息
      • 5.3 实时监控搜索性能
    • 6. 可视化工具:Kibana 的应用
      • 6.1 Kibana 的安装与配置
      • 6.2 创建监控仪表盘
      • 6.3 实时监控与告警设置
    • 7. 总结与展望
    • 8. 参考资料

【Elasticsearch】监控与管理:集群监控指标

引言

在现代互联网应用中,Elasticsearch 已经成为不可或缺的核心组件之一。无论是搜索引擎、日志分析系统,还是实时数据分析平台,Elasticsearch 凭借其强大的分布式特性、灵活的查询能力以及高效的全文检索功能,在各个领域中都有着广泛的应用。然而,随着业务规模的不断扩大和数据量的持续增长,Elasticsearch 集群的稳定性、性能和资源利用率成为了运维人员和开发人员关注的重点。

在实际生产环境中,Elasticsearch 集群可能会面临多种挑战:节点负载不均导致某些节点成为性能瓶颈、磁盘空间不足引发节点不可用、索引碎片化严重导致查询性能下降等等。这些问题如果得不到及时发现和处理,将会直接影响系统的可用性和用户体验。因此,对 Elasticsearch 集群进行实时监控和深入分析,成为了保障系统稳定运行的关键环节。

Elasticsearch 本身提供了丰富的内置监控指标和工具,可以帮助我们全面了解集群的运行状态。这些指标涵盖了节点级别的资源使用情况(如 CPU 使用率、内存使用率、磁盘空间等)、索引级别的数据分布和操作统计(如文档数量、索引大小、查询请求量等),以及搜索性能相关的指标(如查询延迟、查询吞吐量等)。通过这些指标,我们可以快速定位集群中的潜在问题,并采取相应的优化措施。

对于 Java 开发者来说,掌握如何通过 Elasticsearch 的 Java API 获取和分析这些监控指标尤为重要。无论是通过编写自定义监控脚本,还是集成第三方监控工具(如 Kibana、Prometheus 等),了解如何高效地获取和解析这些指标数据,都是提升系统运维能力的关键技能。

本文将从 Elasticsearch 集群监控的基本原理出发,详细介绍各类监控指标的作用和应用场景,并结合实际案例展示如何通过 Java API 和可视化工具(如 Kibana)获取和分析这些指标。希望通过本文的讲解,能够帮助读者全面掌握 Elasticsearch 集群监控的核心技术和实践方法。


1. Elasticsearch 集群监控概述

1.1 什么是 Elasticsearch 集群监控?

Elasticsearch 集群监控是指通过对 Elasticsearch 集群的各项运行指标进行实时采集、分析和展示,从而全面了解集群的健康状况、性能表现以及资源使用情况的过程。监控的目标是及时发现潜在问题,并采取相应的优化措施,以保障集群的稳定性和高效性。

1.2 监控的重要性

  • 保障系统稳定性:通过监控可以及时发现节点故障、资源不足等问题,避免因单点故障导致整个集群不可用。
  • 优化性能:通过对 CPU、内存、磁盘等资源的使用情况进行分析,可以识别性能瓶颈并进行针对性优化。
  • 资源规划:基于历史数据和趋势分析,可以更好地规划硬件资源的扩展,避免资源浪费或不足。
  • 故障排查:当系统出现异常时,监控数据可以为故障排查提供有力的支持。

1.3 Elasticsearch 内置监控工具

Elasticsearch 提供了多种内置工具和接口用于集群监控:

  • Nodes API:用于获取节点级别的各项指标。
  • Cluster Health API:用于查看集群的整体健康状况。
  • Indices Stats API:用于获取索引级别的统计信息。
  • Search Profiler:用于分析搜索请求的执行过程和性能瓶颈。

此外,Elasticsearch 还支持与第三方工具(如 Kibana、Prometheus、Grafana 等)集成,以实现更强大的可视化监控和告警功能。


2. 节点状态指标

2.1 CPU 使用率

CPU 使用率反映了节点的计算资源使用情况。如果某个节点的 CPU 使用率长期处于高位(如超过 80%),可能会导致节点响应变慢甚至不可用。

// 示例:通过 Java API 获取节点 CPU 使用率
public void getNodeCpuUsage() {NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();for (NodeInfo node : response.getNodes()) {System.out.println("Node name: " + node.getName());System.out.println("CPU usage: " + node.getJvm().getCpuLoad());}
}

2.2 内存使用率

内存使用率是衡量节点内存资源使用情况的重要指标。如果内存使用率过高,可能会导致垃圾回收(GC)频繁发生,进而影响系统性能。

// 示例:获取节点内存使用情况
public void getNodeMemoryUsage() {NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();for (NodeInfo node : response.getNodes()) {System.out.println("Node name: " + node.getName());System.out.println("Heap used: " + node.getJvm().getMem().getHeapUsed());System.out.println("Heap max: " + node.getJvm().getMem().getHeapMax());}
}

2.3 磁盘空间

磁盘空间不足是导致节点不可用的常见原因之一。通过监控磁盘空间使用情况,可以及时发现并处理磁盘满的问题。

// 示例:获取节点磁盘空间信息
public void getNodeDiskSpace() {NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();for (NodeInfo node : response.getNodes()) {System.out.println("Node name: " + node.getName());for (NodeInfo.NodeInfoFs fs : node.getFs()) {System.out.println("Path: " + fs.getPath());System.out.println("Total space: " + fs.getTotal());System.out.println("Free space: " + fs.getFree());}}
}

2.4 JVM 堆内存

JVM 堆内存的使用情况直接影响着节点的性能。如果堆内存不足,可能会导致频繁的 Full GC,从而影响系统响应速度。

// 示例:获取 JVM 堆内存使用情况
public void getJvmHeapUsage() {NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();for (NodeInfo node : response.getNodes()) {System.out.println("Node name: " + node.getName());JvmInfo jvmInfo = node.getJvm();System.out.println("Heap used: " + jvmInfo.getMem().getHeapUsed());System.out.println("Heap max: " + jvmInfo.getMem().getHeapMax());}
}

2.5 网络使用情况

网络使用情况反映了节点之间的通信负载。如果网络带宽被大量占用,可能会导致节点间通信延迟增加。

// 示例:获取节点网络使用情况
public void getNodeNetworkUsage() {NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();for (NodeInfo node : response.getNodes()) {System.out.println("Node name: " + node.getName());System.out.println("Network rx: " + node.getTransport().getRxCount());System.out.println("Network tx: " + node.getTransport().getTxCount());}
}

3. 索引指标

3.1 文档数量

文档数量反映了索引中存储的数据量。通过监控文档数量的变化趋势,可以了解业务数据的增长情况。

// 示例:获取索引文档数量
public void getIndexDocCount(String indexName) {GetIndexResponse response = client.admin().indices().getIndex(new GetIndexRequest(indexName)).actionGet();long docCount = response.getIndices().get(indexName).getDocs().getCount();System.out.println("Document count in index '" + indexName + "': " + docCount);
}

3.2 索引大小

索引大小反映了存储在磁盘上的数据量。通过监控索引大小的变化,可以了解数据的增长趋势,并提前规划存储资源。

// 示例:获取索引大小
public void getIndexSize(String indexName) {GetIndexResponse response = client.admin().indices().getIndex(new GetIndexRequest(indexName)).actionGet();long storeSize = response.getIndices().get(indexName).getStore().getSizeInBytes();System.out.println("Index size of '" + indexName + "': " + storeSize + " bytes");
}

3.3 索引操作统计

索引操作统计包括插入、更新、删除等操作的数量和耗时。通过这些指标可以了解索引操作的负载情况。

// 示例:获取索引操作统计
public void getIndexOperations(String indexName) {IndexStatsResponse response = client.admin().indices().stats(new IndexStatsRequest(indexName)).actionGet();IndexStats stats = response.getIndexStats().get(0);System.out.println("Index name: " + indexName);System.out.println("Insert count: " + stats.getTotal().getIndexing().getTotal());System.out.println("Update count: " + stats.getTotal().getIndexing().getUpdate());System.out.println("Delete count: " + stats.getTotal().getIndexing().getDelete());
}

3.4 索引碎片化程度

索引碎片化程度反映了索引段的分布情况。高碎片化会导致查询性能下降。

// 示例:获取索引碎片化程度
public void getIndexFragmentation(String indexName) {IndexStatsResponse response = client.admin().indices().stats(new IndexStatsRequest(indexName)).actionGet();IndexStats stats = response.getIndexStats().get(0);long totalSegments = stats.getTotal().getSegments().getNum();long totalShards = stats.getTotal().getShards().getPrimary();double fragmentation = (double) totalSegments / (totalShards * 2); // 考虑副本System.out.println("Fragmentation level of '" + indexName + "': " + fragmentation);
}

4. 搜索性能指标

4.1 查询延迟

查询延迟反映了搜索请求的响应时间。通过监控查询延迟的变化趋势,可以识别性能瓶颈。

// 示例:获取搜索延迟统计
public void getSearchLatency() {SearchResponse response = client.search(new SearchRequest().indices("your_index").source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).size(0).aggregation(AggregationBuilders.avg("avg_latency").field("_score"))), RequestOptions.DEFAULT);Aggregations aggregations = response.getAggregations();if (aggregations != null) {Avg avg = aggregations.get("avg_latency");System.out.println("Average search latency: " + avg.getValue());}
}

4.2 查询吞吐量

查询吞吐量反映了单位时间内处理的搜索请求数量。通过监控吞吐量的变化趋势,可以了解系统的处理能力。

// 示例:获取搜索吞吐量统计
public void getSearchThroughput() {SearchResponse response = client.search(new SearchRequest().indices("your_index").source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).size(0).aggregation(AggregationBuilders.sum("sum_throughput").field("_score"))), RequestOptions.DEFAULT);Aggregations aggregations = response.getAggregations();if (aggregations != null) {Sum sum = aggregations.get("sum_throughput");System.out.println("Total search throughput: " + sum.getValue());}
}

4.3 聚合操作性能

聚合操作性能反映了复杂查询(如分组、排序等)的执行效率。通过监控聚合操作的性能指标,可以优化查询逻辑。

// 示例:获取聚合操作性能统计
public void getAggregationPerformance() {SearchResponse response = client.search(new SearchRequest().indices("your_index").source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).size(0).aggregation(AggregationBuilders.dateHistogram("histogram").field("@timestamp").interval(DateHistogramInterval.DAY))), RequestOptions.DEFAULT);Aggregations aggregations = response.getAggregations();if (aggregations != null) {Histogram histogram = aggregations.get("histogram");System.out.println("Number of buckets: " + histogram.getBuckets().size());}
}

4.4 响应时间分布

响应时间分布反映了不同时间段内搜索请求的响应时间分布情况。通过分析响应时间分布,可以识别长尾请求的影响。

// 示例:获取响应时间分布统计
public void getResponseTimeDistribution() {SearchResponse response = client.search(new SearchRequest().indices("your_index").source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).size(0).aggregation(AggregationBuilders.range("response_time_range").field("_score").addRange(0, 100).addRange(100, 500).addRange(500, Double.POSITIVE_INFINITY))), RequestOptions.DEFAULT);Aggregations aggregations = response.getAggregations();if (aggregations != null) {Range range = aggregations.get("response_time_range");for (Range.Bucket bucket : range.getBuckets()) {String key = bucket.getKeyAsString();long docCount = bucket.getDocCount();System.out.println("Response time range: " + key + ", Doc count: " + docCount);}}
}

5. 通过 Java API 获取监控指标

5.1 使用 REST API 获取节点状态

Elasticsearch 提供了丰富的 REST API 接口用于获取集群和节点的状态信息。通过这些接口,我们可以轻松地获取 CPU、内存、磁盘等资源的使用情况。

// 示例:获取节点状态信息
public void getNodeStatus() {NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();for (NodeInfo node : response.getNodes()) {System.out.println("Node name: " + node.getName());System.out.println("Node status: " + node.getStatus());System.out.println("Node version: " + node.getVersion());}
}

5.2 使用 Java High Level REST Client 获取索引统计信息

Java High Level REST Client 是 Elasticsearch 官方提供的 Java 客户端库,支持通过简洁的 API 访问 Elasticsearch 的各种功能。

// 示例:获取索引统计信息
public void getIndexStats(String indexName) {IndexStatsResponse response = client.admin().indices().stats(new IndexStatsRequest(indexName)).actionGet();IndexStats stats = response.getIndexStats().get(0);System.out.println("Index name: " + indexName);System.out.println("Document count: " + stats.getTotal().getDocs().getCount());System.out.println("Index size: " + stats.getTotal().getStore().getSizeInBytes());
}

5.3 实时监控搜索性能

通过 Java API 可以实时监控搜索请求的执行情况,并根据结果进行动态调整。

// 示例:实时监控搜索性能
public void monitorSearchPerformance() {SearchRequest request = new SearchRequest().indices("your_index").source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).size(0));while (true) {try {SearchResponse response = client.search(request, RequestOptions.DEFAULT);long tookInMillis = response.getTookInMillis();System.out.println("Search took: " + tookInMillis + " ms");Thread.sleep(1000);} catch (InterruptedException e) {Thread.currentThread().interrupt();break;}}
}

6. 可视化工具:Kibana 的应用

6.1 Kibana 的安装与配置

Kibana 是 Elasticsearch 官方提供的可视化工具,支持创建丰富的仪表盘和图表来展示集群的运行状态。

安装 Kibana
sudo apt-get install kibana配置 Kibana
编辑 /etc/kibana/kibana.yml 文件
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

6.2 创建监控仪表盘

在 Kibana 中可以通过拖拽式界面创建自定义仪表盘,展示 CPU 使用率、内存使用率等关键指标。

// 示例:创建一个包含 CPU 使用率图表的仪表盘
{"title": "Cluster Overview","description": "Monitor cluster health and performance","panelsJSON": [{"type": "metric","id": "cpu_usage","grid": { "x": 0, "y": 0, "w": 6, "h": 4 },"options": {"metrics": [{ "id": "node.cpu.percent", "type": "avg" }],"timeRange": { "from": "now-5m", "to": "now" }}}]
}

6.3 实时监控与告警设置

Kibana 支持设置告警规则,当某个指标超过阈值时触发告警通知。

// 示例:设置 CPU 使用率告警规则
{"name": "High CPU Usage Alert","description": "Trigger when CPU usage exceeds 80%","condition": {"metric": {"aggregation": "avg","field": "node.cpu.percent","operator": ">=","value": 80}},"actions": [{"type": "email","to": "admin@example.com","subject": "[ALERT] High CPU Usage Detected"}]
}

7. 总结与展望

通过对 Elasticsearch 集群监控指标的深入分析和实践,我们能够全面了解集群的运行状态,并采取相应的优化措施以保障系统的稳定性和高效性。随着业务规模的不断扩大和技术的发展,Elasticsearch 集群监控的需求也将变得更加多样化和复杂化。未来,我们可以进一步探索以下方向:

  • 智能化监控:利用机器学习算法对历史数据进行分析和预测,实现智能化的异常检测和容量规划。
  • 自动化优化:结合自动化工具(如 Elastic Stack 的 Curator 工具),实现索引生命周期管理、节点自动扩缩容等功能。
  • 多集群管理:针对大规模分布式环境下的多集群管理需求,开发统一的监控和管理系统。

总之,Elasticsearch 集群监控是一项需要持续关注和投入的工作。只有通过不断的实践和优化,才能真正实现对集群的全面掌控,并为企业创造更大的价值。


8. 参考资料

  1. Elasticsearch 官方文档
  2. Kibana 官方文档
  3. Java High Level REST Client 文档
  4. Prometheus 官方文档
  5. Grafana 官方文档

相关文章:

【Elasticsearch】监控与管理:集群监控指标

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...

Swift的方法派发机制

1. 静态派发(Static Dispatch) 静态派发在编译时确定方法的具体实现,调用时直接跳转到该实现。静态派发的优点是性能高,因为不需要运行时查找方法实现。 适用场景: 值类型(Struct 和 Enum)&am…...

4.python+flask+SQLAlchemy+达梦数据库

前提 1.liunx Centos7上通过docker部署了达梦数据库。从达梦官网下载的docker镜像。(可以参考前面的博文) 2.windows上通过下载x86,win64位的达梦数据库,只安装客户端,不安装服务端。从达梦官网下载达梦数据库windows版。(可以参考前面的博文) 这样就可以用windows的达…...

6.深度学习在推荐系统中的应用

接下来我们将学习深度学习在推荐系统中的应用。深度学习技术近年来在推荐系统中得到了广泛应用,能够有效提升推荐系统的性能和精度。在这一课中,我们将介绍以下内容: 深度学习在推荐系统中的优势常用的深度学习推荐模型深度学习推荐系统的实…...

Leetcode - 149双周赛

目录 一、3438. 找到字符串中合法的相邻数字二、3439. 重新安排会议得到最多空余时间 I三、3440. 重新安排会议得到最多空余时间 II四、3441. 变成好标题的最少代价 一、3438. 找到字符串中合法的相邻数字 题目链接 本题有两个条件: 相邻数字互不相同两个数字的的…...

ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet

集合族谱 在这些集合中,仅有vector和hashtable是线程安全的,其内部方法基本都有synchronized修饰。 ArrayList 底层采用Object数组实现,实现了RandomAccess接口因此支持随机访问。插入删除操作效率慢。 ArrayList需要一份连续的内存空间。 A…...

在 Windows 系统中如何快速进入安全模式的两种方法

在使用电脑的过程中,有时我们可能会遇到一些需要进入“安全模式”来解决的问题。安全模式是一种特殊的启动选项,它以最小化配置启动操作系统,仅加载最基本的驱动程序和服务,从而帮助用户诊断和修复系统问题。本文中简鹿办公将详细…...

【CS61A 2024秋】Python入门课,全过程记录P7(Week13 Macros至完结)【完结撒花!】

文章目录 关于新的问题更好的解决方案Week13Mon Macros阅读材料Lab 11: Programs as Data, MacrosQ1: WWSD: QuasiquoteQ2: If ProgramQ3: Exponential PowersQ4: Repeat Wed SQL阅读材料Disc 11: MacrosQ1: Mystery MacroQ2: Multiple AssignmentQ3: Switch Optional Contest:…...

AspectJ 下 Advisor 的排序过程

在 AbstractAdvisorAutoProxyCreator#findEligibleAdvisors 方法中,找到 BeanFactory 中所有的 Advisor 后,针对当前 beanClass 进行过滤,筛选出符合当前 beanClass 的 Advisor,称之为 eligibleAdvisors。接着对 eligibleAdvisors…...

Unity 高度可扩展的技能与多 Buff 框架详解

一、框架设计 1.1 核心思想 组件化设计: 将技能和 Buff 抽象为可复用的组件,通过组合不同的组件实现复杂的效果。 数据驱动: 使用 ScriptableObject 或 JSON 等数据格式定义技能和 Buff 的属性,方便配置和修改。 事件驱动: 利用 Unity 的事件系统或自…...

机器学习中过拟合和欠拟合问题处理方法总结

目录 一、背景二、过拟合(Overfitting)2.1 基本概念2.2 过拟合4个最主要的特征2.3 防止过拟合的11个有效方法 三、欠拟合(Underfitting)3.1 基本概念3.2 欠拟合的4个特征3.3 防止欠拟合的11个有效方法 四、总结五、参考资料 一、背景 在机器学习模型训练…...

新一代高性能无线传输模块M-GATEWAY3

M-GATEWAY3是M3系列的通用接口模块,用于接收各种总线信号并将它们集成到一个系统中。该模块通过标准化传输协议XCPonETH进行输出,确保为各种测量应用提供无损信号。此外,M-GATEWAY3支持通过热点、ETH-PC或USB-C传输数据。借助M-GATEWAY3&…...

一、通义灵码插件保姆级教学-IDEA(安装篇)

JetBrains IDEA 中安装教学 第一步:事先准备 支持系统:Windows 7 ~ Windows 11、Linux、macOS;下载并安装兼容的 JetBrains IDEA 2020.3 及以上版本; 第二步:在 IntelliJ IDEA 中安装通义灵码 方法 1:通…...

【leetcode 32】1047. 删除字符串中的所有相邻重复项

Java中的queue、deque、ArrayDeque的区别 使用 Deque 作为堆栈(ArrayDeque是双端队列,当仅使用栈操作时push/pop,就是栈) class Solution {public String removeDuplicates(String s) {//使用 Deque 作为堆栈(ArrayDeque是双端队列,当仅使用栈…...

ubuntu 安装vnc之后,本地黑屏,vnc正常

ubuntu 安装vnc之后,本地黑屏,vnc正常 在Ubuntu系统中安装VNC服务器(如TightVNC或RealVNC)后,如果遇到连接时本地屏幕变黑的情况,可能是由于几种不同的配置或兼容性问题。以下是一些解决步骤,可以帮助你解决这个问题&…...

【实战AI】利用deepseek 在mac本地部署搭建个人知识库

之前的文章中实现了本地通过ollma 部署deepseek R1:14b 模型,这里我想继续实现个人知识库,方便自己文档,数据的检索; 下载anythingLLM 地址: https://anythingllm.com/desktop 下载安装即可&#xff1b…...

ASP.NET Core的贫血模型与充血模型

目录 概念 需求 贫血模型 充血模型 总结 概念 贫血模型:一个类中只有属性或者成员变量,没有方法。充血模型:一个类中既有属性、成员变量,也有方法。 需求 定义一个类保存用户的用户名、密码、积分;用户必须具有…...

java基础6(黑马)

一、static 1.static修饰成员变量 static:叫静态,可以修饰成员变量、成员方法。 成员变量按照有无static,分两种。 类变量:有static修饰,属于类,在计算机中只有一份,会被类的全部对象共享。…...

LabVIEW外延片光致发光(PL)扫描系统

本文介绍了基于LabVIEW的PL扫描系统的开发过程,包括硬件选型(如ECOPIA激光器、EPP2000光谱仪)、软件架构(多线程控制、动态显示)、环境适配(温湿度控制、防震)等关键设计。结合工业需求&#xf…...

安装Jenkins

Linux中安装jenkins 采用RPM安装包方式:Jenkins安装包下载地址 wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm执行安装 rpm -ivh jenkins-2.190.1-1.1.noarch.rpm修改配置文件: vi /etc/sysconfig/jenkins修改内容&…...

开发中常用的快捷键

开发中常用的快捷键 浏览器开发工具ideavscode 浏览器 清除浏览器的缓存:ctrl shift delete 开发工具 idea 前端JS代码格式化:ctrl alt L vscode...

前端如何判断浏览器 AdBlock/AdBlock Plus(最新版)广告屏蔽插件已开启拦截

2个月前AdBlock/AdBlock Plus疑似升级了一次 因为自己主要负责面对海外的用户项目,发现以前的检测AdBlock/AdBlock Plus开启状态方法已失效了,于是专门研究了一下。并尝试了很多方法。 已失效的老方法 // 定义一个检测 AdBlock 的函数 function chec…...

ASP.NET Core 如何使用 C# 向端点发出 POST 请求

使用 C#,将 JSON POST 到 REST API 端点;如何从 REST API 接收 JSON 数据。 本文需要 ASP .NET Core,并兼容 .NET Core 3.1、.NET 6和.NET 8。 要从端点获取数据,请参阅本文。 使用 . 将 JSON 数据发布到端点非常容易HttpClien…...

更新无忧:用 Docker 数据卷确保 Open WebUI 数据持久化

在使用 Docker 部署 Open WebUI 时,如何在更新容器的同时确保数据不丢失,始终是工程师们关注的焦点。每次拉取新版镜像、停止并重启容器时,如果没有正确挂载数据卷,配置和数据库数据极易流失,给生产环境带来不必要的麻…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_atomic_cmp_set 函数

目录 修正 执行 ./configure 命令时,输出: checking for OS Linux 6.8.0-52-generic x86_64 checking for C compiler ... found using GNU C compiler gcc version: 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) 所以当前环境是 x86_64 于是在 src…...

为什么我用Python控制仪器比C#慢很多?如何优化性能?

在自动化测试、实验室仪器控制等领域,Python、C# 和 C 是常见的编程语言选择。最近,我在使用 Python 控制仪器时,发现其交互速度明显比 C# 慢很多。这让我感到困惑,毕竟 Python 以其简洁和高效著称,为什么会出现这种情…...

Linux虚拟机克隆

克隆 从现有虚拟机(关机状态)克隆出新虚拟机,右键选择管理>克隆: 选择完整克隆 设置虚拟机名称及存储位置 开机修改系统相关配置 注意: 使用root 用户。 修改vim /etc/sysconfig/network-scripts/ifcfg-ens33 ,修改IP 地址 vim /etc/sysconfig…...

开发完的小程序如何分包

好几次了,终于想起来写个笔记记一下 我最开始并不会给小程序分包,然后我就各种搜,发现讲的基本上都是开发之前的小程序分包,可是我都开发完要发布了,提示我说主包太大需要分包,所以我就不会了。。。 好了…...

气体控制器联动风机,检测到环境出现异常时自动打开风机进行排风;

一、功能:检测到环境出现异常时自动打开风机进行排风; 二、设备: 1.气体控制器主机:温湿度,TVOC等探头的主机,可上报数据,探头监测到异常时,主机会监测到异常可联动风机或声光报警…...

攻防世界33 catcat-new【文件包含/flask_session伪造】

题目: 点击一只猫猫: 看这个url像是文件包含漏洞,试试 dirsearch扫出来/admin,访问也没成功(--delay 0.1 -t 5) 会的那几招全用不了了哈哈,那就继续看答案 先总结几个知识点 1./etc/passwd&am…...

让文物“活”起来,以3D数字化技术传承文物历史文化!

文物,作为不可再生的宝贵资源,其任何毁损都是无法逆转的损失。然而,当前文物保护与修复领域仍大量依赖传统技术,同时,文物管理机构和专业团队的力量相对薄弱,亟需引入数字化管理手段以应对挑战。 积木易搭…...

Java+vue前后端分离项目集群部署

一、项目概述 假设我们有一个前后端分离的项目,前端使用React或Vue框架,后端使用Spring Boot或Node.js。我们将分别部署前端和后端到集群环境中。 二、准备工作 1. 代码准备:确保前端和后端代码已经开发完成,并通过本地测试。 2…...

【算法解析】(2)分治算法:归并排序和快速排序

1. 分治算法(Divide and Conquer) 分治算法的核心思想是将一个大问题分解为多个小问题,分别解决这些小问题,然后将小问题的解合并起来得到大问题的解。 2. 算法步骤 分治算法通常包含以下三个步骤: 分解(Divide):将原问题分解为若干个规模较小、相互独立、与原问题…...

Qt文本处理【正则表达式】示例详解:【QRegularExpression】

在 Qt 中,正则表达式是处理文本的强大工具,它能够帮助我们匹配、搜索和替换特定的字符串模式。自 Qt 5 起,QRegularExpression 类提供了对 ECMAScript 标准的正则表达式支持,这使得它在处理各种复杂的字符串任务时变得更加高效和灵…...

在 Navicat 17 中扩展 PostgreSQL 数据类型 - 枚举类型

枚举类型 在 Navicat Premium 17 中创建 PostgreSQL 的自定义数据类型的系列中,我们已经探索了多个主题。在 第 1 部分 ,我们学习了如何为 免费 DVD 租赁数据库 创建自定义域。上周,我们创建了一个复合类型,用于从用户定义的函数…...

Spring Boot + MyBatis Field ‘xxx‘ doesn‘t have a default value 问题排查与解决

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 执行代码的时候,出现某个字段无法添加 ### Error updating database. Cause: java.sql.SQLException: Field e_f_id doesnt have a default value ### The error may exist in cn...

python基础入门:6.2JSON与CSV数据处理

Python数据处理实战:JSON与CSV高效转换指南 # 天气数据转换示例 import json import csv from datetime import datetimedef process_weather_data(json_file, csv_file):"""将天气JSON数据转换为CSV格式"""with open(json_file, r,…...

尚硅谷课程【笔记】——大数据之Zookeeper【二】

课程视频:【尚硅谷Zookeeper教程】 四、Zookeeper实战 4.1分布式安装部署 1. 集群规划 在Hadoop102、Hadoop103和Hadoop104三个节点上部署Zookeeper 2. 解压安装 1)解压Zookeeper.tar.gz到指定目录 tar -zxvf zookeeper-3.7.2.tar.gz -C /opt/mod…...

机器学习常用包matplotlib篇(一)简单图像绘制

前言 Matplotlib 是支持 Python 语言的开源绘图库,简单且完善。 一、环境配置 1.环境设置 在 Notebook 环境绘图时,需先运行 %matplotlib inline 命令,将绘制图形嵌入当前页面。在桌面环境绘图,无需上述命令,而是在…...

JUnit断言方法详解与实战

在Java开发中,JUnit是一个不可或缺的单元测试框架,而org.junit.Assert类中的断言方法则是JUnit的核心功能之一。通过这些方法,我们可以方便地验证代码的正确性。本文将详细介绍一些常用的断言方法,并通过实例展示它们的使用。 一、…...

npm运行Vue项目报错 error:0308010c:digital envelope routines::unsupported

大家好,我是 程序员码递夫。 问题 VSCode 运行Vue项目,提示错误: building 2/2 modules 0 activeError: error:0308010c:digital envelope routines::unsupported 解决方法 原因是 npm 高版本(大于17),对ssl的处理做了改进&…...

C语言操作符详解

引言 C语言作为一种强大而灵活的编程语言,操作符是其重要组成部分。操作符用于执行各种运算,如算术运算、逻辑运算、比较运算等。深入理解C语言操作符,能帮助开发者编写出高效、准确的代码。 算术操作符 基本算术操作符 - (加法…...

Lucene 中的并发错误:如何修复乐观并发失败

作者:来着 Elastic Benjamin Trent 及 Ao Li 感谢 CMU PASTA 实验室开发的确定性并发测试框架 Fray,我们找到了一个棘手的 Lucene 漏洞并将其修复。 是的,另一个修复错误博客。但这个故事有一个转折,一位开源英雄突然出现并拯救了…...

Oracle的学习心得和知识总结(三十三)|Oracle数据库数据库的SQL ID的底层计算原理分析

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…...

C# OpenCV机器视觉:智能水果采摘

在一个风景如画的小镇边上,有一座阿强家祖传的果园。每到水果成熟的季节,果园里硕果累累,红彤彤的苹果、黄澄澄的梨子、紫莹莹的葡萄,散发着诱人的香气。然而,这丰收的喜悦却总被一件烦心事笼罩 —— 摘水果。 “哎呀…...

逻辑回归不能解决非线性问题,而svm可以解决

逻辑回归和支持向量机(SVM)是两种常用的分类算法,它们在处理数据时有一些不同的特点,特别是在面对非线性问题时。 1. 逻辑回归 逻辑回归本质上是一个线性分类模型。它的目的是寻找一个最适合数据的直线(或超平面&…...

celery + redis - 入门

文章目录 一、基本使用编写任务启动服务创建生产者获取状态和结果二、多目录结构异步执行编写服务启动服务调用服务获取结果https://www.bilibili.com/video/BV1jg4y13718 https://www.cnblogs.com/pyedu/p/12461819.html 一、基本使用 编写任务 celery_task.py import cel…...

SAP-ABAP:在LOOP循环中 ASSIGNING FIELD-SYMBOL的使用代码详解

在ABAP中&#xff0c;ASSIGNING FIELD-SYMBOL的作用是直接引用内表行的数据&#xff0c;避免不必要的数据复制&#xff0c;从而提升性能和代码效率。以下是其核心作用和优势&#xff1a; 基本语法 LOOP AT itab ASSIGNING FIELD-SYMBOL(<fs>)." 处理逻辑 ENDLOOP.i…...

SpringBoot启动流程简略版

启动入口 (main 方法) ↓ SpringApplication 初始化 ↓ 加载配置 (application.properties/yml) ↓ 创建 ApplicationContext ↓ 刷新 ApplicationContext ↓ - 加载 Bean 定义 - 执行自动配置 - 实例化 Bean - 依赖注入 - 调用初…...

Python:凯撒密码

题目内容&#xff1a; 凯撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法&#xff0c;它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符&#xff0c;对应关系如下&#xff1a; 原文&#xff1a;A B C D E F G H I J K L M N O P Q R …...