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

入门 | Prometheus+Grafana 普罗米修斯

#1024程序员节|征文#

一、prometheus介绍

1、监控系统组成

        一个完整的监控系统需要包括如下功能:数据产生、数据采集、数据存储、数据处理、数据展示、分析、告警等。

(1)、数据来源

        数据来源,也就是需要监控的数据。数据常见的产生、直接或间接暴露方式如下:

                硬件本身的记录信息---以文件或者以内存属性的方式存在

                应用业务的接口-- 主动暴露软件本身的运行状态,比如redis info、各种status 等

                相关的信息采集工具 --- 方便收集数据或者采集数据的 系统级别的命令等

注意:这些数据在长时间的运行过程中,都是以固定的“属性指标”来描述他们,我们把这些称为 metric (监控指标),监控系统就需要对每个环境的每个指标都要进行数据的获取,并且按照用户的需要方式,提供给用户来使用。

(2)、数据采集和传输

        对于上面所说的metric指标数据,我们需要持续性、周期性的方式来采集,根据数据采集方式的不同划分了两个分类:

        软件层面:

                agent:专用的软件的一种应用机制

                ssh:系统常见的一种应用通信机制,但是并非所有的系统都支持

                SNMP:简单网络管理协议,是工作在各种网络设备中的一种机制

        硬件层面:

                IPMI:智慧平台管理接口,是一种工业标准用于采集硬件设备的各种物理健康状态数据,如温度、电压、工作状态、电源状态等

注意:由于每个业务场景不同,我们需要的采集指标量不好评估,甚至一个业务场景,就需要采集数百个指标,如果按照上述所说的周期性采集的方式来说,数据的采集量是相当大的。

(3)、数据存储

        由于采集到是“样本数据” ,不是一次性使用的,尤其是单个数据是没有意义的,我们需要将这些数据存储下来,在后续的工作场景中进行聚合操作,从而满足我们的需求。

        我们在后续使用这些数据的时候,不仅仅要知道这些数据,还要知道这些数据的事件属性--什么时候的数据,所以这些数据在存储的时候,必须有一个重要的时间维度,所以我们一般将这种用于监控场景的数据,称为时间序列数据 -- TS,专门用于存储这些数据的数据库,称其为 时序数据库  TSDB 

        其具备以下特点:

                数据结构简单:某一度量指标在某一时间点只会有一个值,没有复杂的结构(嵌套、层次)和关系(关联、主外键)

                数据量大:由于时序数据由所监控的大量数据源来产生、收集和发送,比如主机、IoT设备、终端或 APP等

(4)、数据处理

        如果仅仅采集到的是单条数据,本身没有太大的意义,我们需要对数据进行各种聚合和处理操作,才可以正常的用于工作分析场景,所以对于各种聚合操作之后的数据,我们也需要进行分析和展示。

(5)、数据分析展示

        无论是采集到的时序数据,还是经过聚合分析之后的统计数据,由于数据量巨大,用肉眼观察很难看得清楚,尤其是通过表格来查看成千上万条数据,来分析其内在的逻辑趋势关系,所以对于监控系统来说,其本身的数据可视化功能是非常重要的,以各种图形演示的方式展示我们数据的发展趋势,方便我们进行分析。

 (6)、告警

        告警,就是在某些特殊情况下,提醒我们去看相关的数据,根据日常工作的状态值,设置一个阈值指标,后续数据采集的时候,一旦超出我们的阈值指标,就通过告警机制通知我们,提高我们的工作效率。

(7)、监控内容

        资源监控:

                硬件设备:服务器、路由器、交换机、IO系统等

                系统资源:OS、网络、容器、VM实例

                应用软件:nginx 、MySQL 、Java 应用等

        业务服务:

                业务状态:服务通信、服务运行、服务下线、性能指标、QPS、DAU日活、转化率、业务接口(登录、注册、聊天、留言)、产品转化率、充值额度、用户投诉等

                一般故障:访问缓慢、存储空间不足、数据同步延迟、主机宕机、主机不可达

                严重故障:服务不可达、集群故障

        趋势分析:

                数据统计:时间序列数据展示历史数据等

                数据预测:事件什么时候发生、持续时间、发生概率是多大等,比如:电商大促时间

(8)、监控设施实现方式

          对于Linux系统来说,他的系统监控的实现方式很多,主要有系统命令、开源软件、监控平台等

                系统命令(略)

                uptime

                开源软件

                        zabbix、nogios、Prometheus、smoke ping 、cacti

        对于传统的业务数据监控来说,Zabbix 是优秀的,由于 Zabbix 诞生的时代业务数据量相对不是太多,所以它默认采取的是关系型数据库作为后端存储。

        所以随着业务场景的发展,尤其是微服务、云原生场景的发展,大量数据的存储就成为了 Zabbix 本身的限制。所以就出现了另外一种监控软件 Prometheus。

2、时序数据库

        时间序列数据(TimeSeriesData) : 按照时间顺序记录系统、设备状态变化的数据被称为时序数据。

        时间序列数据库 (Time Series Database , 简称 TSDB) 是一种高性能、低成本、稳定可靠的在线时间序列数据库服务,提供高效读写、高压缩比存储、时序数据插值及聚合计算等服务

        特点:

                顺序写入操作,很少涉及修改数据

                删除操作都是删除一段时间的数据,而不涉及到删除无规律数据,读操作一般都是升序或者降序

                高效的压缩算法,节省存储空间,有效降低 IO,存储成本低

                高性能读写, 每秒百万级数据点写入,亿级数据点聚合结果秒级返回

3、Prometheus

        Prometheus是一个开源的系统监控和报警系统,本身基于Go语言开发的一套开源的系统监控报警框架和时序列数据库(TSDB)。

        其特点主要如下:

                支持多维数据模型:由度量名和键值对组成的时间序列数据

                内置时间序列数据库TSDB(Time Series Database )

                支持PromQL(Prometheus Query Language)查询语言,可以完成非常复杂的查询和分析,对图表展示和告警非常有意义

                支持 HTTP 的 Pull 方式采集时间序列数据

                支持 PushGateway 采集瞬时任务的数据

                支持静态配置和服务发现两种方式发现目标

                多种可视化和仪表盘,支持第三方 Dashboard,比如:Grafana

        数据特点:

                监控指标采用,独创的指标格式,我们称之为Prometheus格式,这个格式在监控场景中很常见。

                数据标签,支持多维度标签,每个独立的标签组合都代表一个独立的时间序列

                数据处理,Prometheus内部支持多种数据的聚合、切割、切片等功能。

                数据存储,Prometheus支持双精度浮点型数据存储和字符串

        适用场景:

                Prometheus非常适合记录任何纯数字时间序列。它既适合以机器为中心的监控场景,也适合于高度动态的面向服务的体系结构的监控场景。尤其是在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势。

        不足:

                不支持集群化

                被监控集群规模过大后本身性能有一定瓶颈

                中文支持不好中文资料也很少

二、Prometheus架构

1、Prometheus架构图

2、架构详解

(1)、Prometheus Server(普罗米修斯服务器)

        负责从各种数据源拉取指标数据(metrics pull)以及接收通过 Pushgateway 推送过来的指标数据(alerts push)。
        通过 HTTP 与数据源进行交互,包括与各种 exporters(如 Jobs/ Node HDD/SSD 对应的 exporters)以及 targets(目标)通信。
        内部包含一个时间序列数据库(TSDB server)用于存储抓取到的指标数据,支持 PromQL(Prometheus 查询语言)进行数据查询和分析。
        提供 web UI 供用户查看和管理监控数据。

(2)、Pushgateway(推送网关)

        主要用于接收短生命周期作业(Short-lived jobs)的数据推送,因为这些作业可能在 Prometheus 主动抓取数据之前就已经结束了。
        将接收到的数据缓存起来,等待 Prometheus Server 来拉取。

(3)、Exporters(导出器)

        负责从各种不同的数据源(如 Jobs/ Node HDD/SSD)收集数据,并将其转换为 Prometheus 可以理解的格式进行暴露。
        使得 Prometheus 可以监控各种不同类型的系统和应用程序。

(4)、PromQL(Prometheus 查询语言)

        用于查询和分析存储在 Prometheus Server 中的时间序列数据。
        可以进行复杂的查询操作,例如聚合、过滤、函数计算等。

(5)、Grafana visualization(Grafana 可视化)

        Grafana 是一个流行的开源数据可视化工具,可以与 Prometheus 集成。
        通过使用 Prometheus 作为数据源,Grafana 可以将 Prometheus 中的监控数据以各种直观的图表和仪表盘形式展示出来。

(6)、Alertmanager(Prometheus 告警)

        当监控数据满足特定条件时,可以触发警报。
        可以通过 Alertmanager 将警报发送到各种渠道,如 PagerDuty、Email 等,以便及时通知相关人员进行处理。

(7)、API clients(API 客户端)

        可以通过 Prometheus 的 API 与 Prometheus Server 进行交互,获取监控数据或者进行管理操作。

(8)、工作流程

        Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。

        Prometheus server 在本地存储收集到的 metrics,并运行已定义好的alert.rules,记录新的时间序列或者向 Alertmanager 推送警报,实现一定程度上的完全冗余功能。Alertmanager 根据配置文件,对接收到的警报进行去重分组,根据路由配置,向对应主机发出告警。集成Grafana或其他API作为图形界面,用于可视化收集的数据。

        为保存数据的拉取效果,当数据量特别大时,会产生一定的延迟。基于promQL语句显示在web、UI上。

(9)、Prometheus数据模型

        rometheus中存储的数据为时间序列,即基于同一度量标准或者同一时间维度的数据流。除了时间序列数据的正常存储之外,Prometheus还会基于原始数据临时生成新的时间序列数据,用于后续查询的依据或结果。

metric名字:

        该名字必须有意义,用于表示 metric 的一般性功能,metric名字由ASCII 字符,数字,下划线,以及冒号组成,且必须满足正则表达式[a-zA-Z_:][a-zA-Z0-9_:]* 的查询需求。

注意:冒号是为用户定义的记录规则保留的。

标签:

        标签是以键值对的样式而存在,不同的标签用于表示时间序列的不同维度标识,方便检索

基本格式:

<metric name>{<label name>=<label value>, …}

指标类型:

        Counter-累计图:

                counter是一个累加的计数器,代表一个从0开始累积单调递增的计数器,其值只能在重新启动时增加或重置为零。典型的应用如:用户的访问量,请求的总个数,任务的完成数量或错误的数量等。不能使用Counter来表示递减值。

        Gauge- 量规图:

                Gauge是一种度量标准,只有一个简单的返回值,或者叫瞬时状态,可以代表可以任意metric的上下波动的数值。通常用于测量值,例如,硬盘剩余空间,当前的内存使用量,一个待处理队列中任务的个数等,还用于可能上升和下降的“计数”,例如并发请求数。

        Histogram-直方图:

                某一段范围内的分布情况

                Histogram统计数据的分布情况。比如最小值,最大值,中间值,还有中位数,75百分位,90百分位, 95百分位.98百分位,99百分位,和9.9百分位的值(percenties ,代表着近似的百分比估算数值

三、Prometheus部署

1、脚本安装Prometheus server

下载二进制安装包:

https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz

进行脚本安装:

#!/bin/bash
#
#無爲謂PROMETHEUS_VERSION=2.54.1
PROMETHEUS_FILE="prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz"
PROMETHEUS_URL="https://mirrors.tuna.tsinghua.edu.cn/github-release/prometheus/prometheus/LatestRelease/${PROMETHEUS_FILE}"
#PROMETHEUS_URL="https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/${PROMETHEUS_FILE}"INSTALL_DIR=/usr/localHOST=`hostname -I|awk '{print $1}'`. /etc/os-releasemsg_error() {echo -e "\033[1;31m$1\033[0m"
}msg_info() {echo -e "\033[1;32m$1\033[0m"
}msg_warn() {echo -e "\033[1;33m$1\033[0m"
}color () {RES_COL=60MOVE_TO_COL="echo -en \\033[${RES_COL}G"SETCOLOR_SUCCESS="echo -en \\033[1;32m"SETCOLOR_NORMAL="echo -en \E[0m"echo -n "$1" && $MOVE_TO_COLecho -n "["if [ $2 = "success" -o $2 = "0" ] ;then${SETCOLOR_SUCCESS}echo -n $"  OK  "    elif [ $2 = "failure" -o $2 = "1"  ] ;then${SETCOLOR_FAILURE}echo -n $"FAILED"else${SETCOLOR_WARNING}echo -n $"WARNING"fi${SETCOLOR_NORMAL}echo -n "]"echo 
}install_prometheus () {if [ ! -f  ${PROMETHEUS_FILE} ] ;thenwget ${PROMETHEUS_URL} ||  { color "下载失败!" 1 ; exit ; }fi[ -d $INSTALL_DIR ] || mkdir -p $INSTALL_DIRtar xf ${PROMETHEUS_FILE} -C $INSTALL_DIRcd $INSTALL_DIR &&  ln -s prometheus-${PROMETHEUS_VERSION}.linux-amd64 prometheusmkdir -p $INSTALL_DIR/prometheus/{bin,conf,data}cd $INSTALL_DIR/prometheus && { mv prometheus promtool bin/ ; mv prometheus.yml conf/; }groupadd -r prometheususeradd -r -g prometheus -s /sbin/nologin prometheuschown -R prometheus.prometheus ${INSTALL_DIR}/prometheus/cat >  /etc/profile.d/prometheus.sh <<EOF
export PROMETHEUS_HOME=${INSTALL_DIR}/prometheus
export PATH=\${PROMETHEUS_HOME}/bin:\$PATH
EOF}prometheus_service () {cat > /lib/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target[Service]
Restart=on-failure
User=prometheus
Group=prometheus
WorkingDirectory=${INSTALL_DIR}/prometheus
ExecStart=${INSTALL_DIR}/prometheus/bin/prometheus --config.file=${INSTALL_DIR}/prometheus/conf/prometheus.yml
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65535[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reloadsystemctl enable --now prometheus.service
}start_prometheus() {systemctl is-active prometheusif [ $?  -eq 0 ];thenecho color "Prometheus 安装完成!" 0echo "-------------------------------------------------------------------"echo -e "访问链接: \c"msg_info "http://$HOST:9090/"elsecolor "Prometheus 安装失败!" 1exitfi
}install_prometheusprometheus_servicestart_prometheus

Dashboard 菜单说明

        Alerts  #Prometheus的告警信息菜单

        Graph   #Prometheus的图形展示界面,这是prometheus默认访问的界面

        Status  #Prometheus的状态数据界面

        Help    #Prometheus的帮助信息界面

                #Status子菜单,在Status菜单下存在很多的子选项,其名称和功能效果如下:

                Runtime& Build Information 服务主机的运行状态信息及内部的监控项基本信息

                Command-LineFlags 启动时候从配置文件中加载的属性信息

                Configuration配置文件的具体内容(yaml格式)

                Rules查询、告警、可视化等数据分析动作的规则记录

                Targets监控的目标对象,包括主机、服务等以endpoint形式存在

                ServiceDiscovery 自动发现的各种Targets对象列表

2、脚本安装node_exporter 

安装 Node Exporter 用于收集各 node 主机节点上的监控指标数据,监听端口为9100

#!/bin/bash
#
#無僞謂NODE_EXPORTER_VERSION=1.8.2
NODE_EXPORTER_FILE="node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz"
NODE_EXPORTER_URL=https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/${NODE_EXPORTER_FILE}
INSTALL_DIR=/usr/localHOST=`hostname -I|awk '{print $1}'`. /etc/os-releasemsg_error() {echo -e "\033[1;31m$1\033[0m"
}msg_info() {echo -e "\033[1;32m$1\033[0m"
}msg_warn() {echo -e "\033[1;33m$1\033[0m"
}color () {RES_COL=60MOVE_TO_COL="echo -en \\033[${RES_COL}G"SETCOLOR_SUCCESS="echo -en \\033[1;32m"SETCOLOR_FAILURE="echo -en \\033[1;31m"SETCOLOR_WARNING="echo -en \\033[1;33m"SETCOLOR_NORMAL="echo -en \E[0m"echo -n "$1" && $MOVE_TO_COLecho -n "["if [ $2 = "success" -o $2 = "0" ] ;then${SETCOLOR_SUCCESS}echo -n $"  OK  "    elif [ $2 = "failure" -o $2 = "1"  ] ;then${SETCOLOR_FAILURE}echo -n $"FAILED"else${SETCOLOR_WARNING}echo -n $"WARNING"fi${SETCOLOR_NORMAL}echo -n "]"echo 
}install_node_exporter () {if [ ! -f  ${NODE_EXPORTER_FILE} ] ;thenwget ${NODE_EXPORTER_URL} ||  { color "下载失败!" 1 ; exit ; }fi[ -d $INSTALL_DIR ] || mkdir -p $INSTALL_DIRtar xf ${NODE_EXPORTER_FILE} -C $INSTALL_DIRcd $INSTALL_DIR &&  ln -s node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64 node_exportermkdir -p $INSTALL_DIR/node_exporter/bincd $INSTALL_DIR/node_exporter &&  mv node_exporter bin/cat >  /etc/profile.d/node_exporter.sh <<EOF
export NODE_EXPORTER_HOME=${INSTALL_DIR}/node_exporter
export PATH=\${NODE_EXPORTER_HOME}/bin:\$PATH
EOF}node_exporter_service () {cat > /lib/systemd/system/node_exporter.service <<EOF
[Unit]
Description=Prometheus Node Exporter
After=network.target[Service]
Type=simple
ExecStart=$INSTALL_DIR/node_exporter/bin/node_exporter
Restart=on-failure[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reloadsystemctl enable --now node_exporter.service
}start_node_exporter() {systemctl is-active node_exporter.serviceif [ $?  -eq 0 ];thenecho color "node_exporter 安装完成!" 0echo "-------------------------------------------------------------------"echo -e "访问链接: \c"msg_info "http://$HOST:9100/metrics"elsecolor "node_exporter 安装失败!" 1exitfi
}install_node_exporternode_exporter_servicestart_node_exporter

3、修改配置,使得Prometheus采集node数据

修改配置文件

vim /usr/local/prometheus/conf/prometheus.yml
# my global config
global:# 默认情况下,每15s拉取一次目标采样点数据。注释后为1分钟scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.# 每15秒评估一次规则。默认值为每1分钟。evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# Alertmanager configuration
alerting:alertmanagers:- static_configs:- targets:# - alertmanager:9093# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:# - "first_rules.yml"# - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:# job名称会增加到拉取到的所有采样点上,同时还有一个instance目标服务的host:port标签也会增加到采样点上- job_name: 'prometheus'# 覆盖global的采样点,拉取时间间隔5sscrape_interval: 5sstatic_configs:- targets: ['localhost:9090']
#添加新的node节点- job_name: "node1"static_configs:- targets: - "192.168.10.110:9100"
-- 插入 --                     

检查配置文件语法是否有误:

新版本可能没有下载这个命令 promtool 可以下载一下:

promtool check config /usr/local/prometheus/conf/prometheus.yml

语法检查无误,重启Prometheus服务

systemctl restart prometheus.service 

相关文章:

入门 | Prometheus+Grafana 普罗米修斯

#1024程序员节&#xff5c;征文# 一、prometheus介绍 1、监控系统组成 一个完整的监控系统需要包括如下功能&#xff1a;数据产生、数据采集、数据存储、数据处理、数据展示、分析、告警等。 &#xff08;1&#xff09;、数据来源 数据来源&#xff0c;也就是需要监控的数据…...

制作Ubuntu根文件系统

制作Ubuntu根文件系统&#xff1a; gunzip ubuntu-base-22.04.5-base-arm64.tar.gz mkdir ubuntu tar xvpf ubuntu-base-22.04.5-base-arm64.tar -C ubuntu 挂载目录、复制dns、执行chroot cd /userdisk/ubuntu cp /etc/resolv.conf ./etc/resolv.conf mount --bind /dev ./d…...

16个最佳测试管理工具(2024)

1、前言 测试管理解决方案能够帮助你捕捉测试需求、设计测试用例、生成测试执行报告、管理资源等。软件质量的疏忽可能导致公司遭受巨大的经济损失、声誉损害或面临诉讼风险。一个优秀的测试管理工具是防止缺陷和故障进入生产环节的关键。 2、PractiTest ​ 功能特点&#x…...

基于知识图谱的猕猴桃种植技术问答系统

猕猴桃怎么种植更高效、病虫害怎么防治、最适宜的气候条件有哪些&#xff1f;作为一名科技研发迷&#xff0c;这些问题是不是听起来很有挑战性&#xff1f;咱们今天就来聊聊一个特别的研发项目——基于知识图谱的猕猴桃种植技术问答系统。这不仅仅是一个农业项目&#xff0c;它…...

Swift雨燕蜂窝无线通信系统介绍

本文博客链接:jdh99-CSDN博客,作者:jdh,转载请注明. 1. 概述 物联网小无线通信技术众多&#xff0c;其中大多是小范围小规模的无线通信技术&#xff0c;而行业难点是如何做到广覆盖、大容量、低功耗。 针对以上难点&#xff0c;宏讯物联研发了Swift雨燕蜂窝无线通信技术&…...

【ZZULI】数据库第二次实验

【ZZULI】数据库第二次实验 创建学生信息管理系统的数据库通过T-SQL语句创建学生表、课程表、选课表创建学生表创建课程表创建选课表 修改表结构。为SC表添加写的列&#xff0c;列名为备注修改备注列的数据长度。删除SC表的备注列。 通过T-SQL语句对表的列添加约束&#xff0c;…...

Javaee---多线程(一)

文章目录 1.线程的概念2.休眠里面的异常处理3.实现runnable接口4.匿名内部类子类创建线程5.匿名内部类接口创建线程6.基于lambda表达式进行线程创建7.关于Thread的其他的使用方法7.1线程的名字7.2设置为前台线程7.3判断线程是否存活 8.创建线程方法总结9.start方法10.终止&…...

Java后端面试内容总结

先讲项目背景&#xff0c;再讲技术栈模块划分&#xff0c; 讲业务的时候可以先讲一般再特殊 为什么用这个&#xff0c;好处是什么&#xff0c;应用场景 Debug发现问题/日志发现问题. QPS TPS 项目单元测试&#xff0c;代码的变更覆盖率达到80%&#xff0c;项目的复用性高…...

DC-1渗透测试

DC1 五个flag的拿取&#xff08;截图是五个flag里面的内容&#xff09; 注意事项&#xff1a;kali的用户名&#xff1a;root 密码&#xff1a;kali 注意&#xff1a;DC1 只要开机服务就起来了 思路&#xff1a;信息收集—> 寻找漏洞—> 利用漏洞(sql注入,文件上传漏洞…...

深度剖析:电商 API 接口如何成就卓越用户体验

在电商领域的激烈竞争中&#xff0c;提供卓越的用户体验已成为企业脱颖而出的关键。而电商 API 接口在其中扮演着举足轻重的角色&#xff0c;它如同电商平台的神经系统&#xff0c;连接着各个关键环节&#xff0c;为用户带来无缝、高效且个性化的购物之旅。 一、极速响应&#…...

C++调试经验:Ubuntu下CMake链接常见库的方式(持续更新)

目录 1. CMake链接OpenCV库 2. CMake链接VTK库 3. CMake链接Qt库 4. CMake链接PCL库 5. CMake链接Gstreamer 6. CMake链接json-cpp库 7. CMake链接yaml-cpp库 8. CMake链接breakpad库 9. CMake链接Eigen3库 1. CMake链接OpenCV库 find_package (OpenCV 4 REQUIRED)…...

【HarmonyOS】应用实现APP国际化多语言切换

【HarmonyOS】应用实现APP国际化多语言切换 前言 在鸿蒙中应用国际化处理&#xff0c;与Android和IOS基本一致&#xff0c;都是通过JSON配置不同的语言文本内容。在UI展示时&#xff0c;使用JSON配置的字段key进行调用&#xff0c;系统选择对应语言文本内容。 跟随系统多语言…...

使用pandas进行数据分析

文章目录 1.pandas的特点2.Series2.1新建Seriws2.2使用标签来选择数据2.3 通过指定位置选择数据2.4 使用布尔值选择数据2.5 其他操作2.5.1 修改数据2.5.2 统计操作2.5.3 缺失数据处理 3.DataFrame3.1 新建 DataFrame3.2 选择数据3.2.1 使用标签选择数据3.2.2 使用 iloc 选择数据…...

用于无监督域适应的提示分布对齐

论文探讨了视觉语言模型&#xff08;VLMs&#xff09;及其在无监督域适应&#xff08;UDA&#xff09;中的应用&#xff0c;并引入了一种名为提示分布对齐&#xff08;Prompt-based Distribution Alignment&#xff0c;PDA&#xff09;的方法&#xff0c;该方法采用双分支训练策…...

Rust整合Elasticsearch

Elasticsearch是什么 Lucene&#xff1a;Java实现的搜索引擎类库 易扩展高性能仅限Java开发不支持水平扩展 Elasticsearch&#xff1a;基于Lucene开发的分布式搜索和分析引擎 支持分布式、水平扩展提高RestfulAPI&#xff0c;可被任何语言调用 Elastic Stack是什么 ELK&a…...

Linux 文件权限管理:chown、chgrp 和 chmod 的使用及权限掩码规则

目录 文件权限的基本概念 chown&#xff1a;更改文件的拥有者 使用方法 示例 选项 chgrp&#xff1a;更改文件的所属组 使用方法 示例 chmod&#xff1a;更改文件的权限 使用方法 权限表示 选项 权限掩码&#xff08;umask&#xff09;规则 如何查看和设置 umask…...

简单记录ios打包流程

1、点击这里获取UDID 2、xcode登录开发者账户、确定唯一id&#xff08;Bundle ID&#xff09; 3、去这里注册appid 4、在这里这里创建app 5、之后xcode中打包...

右键以vscode打开目录的时候出现找不到应用程序

出现这个问题的主要原因&#xff0c;大概率可能是因为你移动了vscode的安装路径导致的。 解决办法 打开注册表&#xff1a;通过cmd 打开regedit 然后搜索&#xff1a;计算机\HKEY_CLASSES_ROOT\Directory\Background\shell 这个两个参数可以自己比对一下&#xff0c;主要需要检…...

【Go-Taskflow:一个类似任务流的有向无环图(DAG)任务执行框架,集成了可视化和性能分析工具,旨在简化并行任务的复杂依赖管理】

Go-Taskflow是一个静态有向无环图&#xff08;DAG&#xff09;任务计算框架&#xff0c;它受到taskflow-cpp的启发&#xff0c;结合了Go语言的原生能力和简洁性&#xff0c;特别适合于并发任务中复杂的依赖管理。 Go-Taskflow的主要特点包括&#xff1a; 高可扩展性&#xff1…...

排查PHP服务器CPU占用率高的问题

排查PHP服务器CPU占用率高的问题通常可以通过以下步骤进行&#xff1a; 使用top或htop命令&#xff1a;这些命令可以实时显示服务器上各个进程的CPU和内存使用情况。找到CPU使用率高的进程。 查看进程日志&#xff1a;如果PHP-FPM或Apache等服务器进程的日志记录了具体的请求…...

【学术会议论文投稿】“从零到一:使用IntelliJ IDEA打造你的梦幻HTML项目“

【JPCS独立出版】2024年工业机器人与先进制造技术国际学术会议&#xff08;IRAMT 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看 学术会议-学术交流征稿-学术会议在线-艾思科蓝 目录 引言&#xff1a;为何选择IntelliJ IDEA&#xff1f; 第一步&#xff1a…...

Win11安装基于WSL2的Ubuntu

1. 概述 趁着还没有完全忘记&#xff0c;详细记录一下在Win11下安装基于WSL2的Ubuntu的详细过程。不得不说WSL2现在被微软开发的比较强大了&#xff0c;还是很值得安装和使用的&#xff0c;笔者就通过WSL2安装的Ubuntu成功搭建了ROS环境。 2. 详论 2.1 子系统安装 在Win11搜…...

如何对pdf文件进行加密?pdf文件加密全攻略与深度解析(5个方法)

如何对pdf文件进行加密&#xff1f; 只见&#xff0c;在深夜的情报局里&#xff0c;特工小李将一份绝密PDF文件放在保险箱内&#xff0c;以为这样就天衣无缝了。 细细推敲&#xff0c;漏洞百出&#xff1a; 如果钥匙被盗呢&#xff1f;如果被神匠破解出密码呢&#xff1f;如果…...

c++面向对象三大特性之一-----多态

前言:本文将介绍在32位平台下,c的多态,通过本篇文章的学习你讲了解多态的原理,多态的底层还有一些不常见的关键字的介绍(final,override). 文章内容如下&#xff1a; 1:多态的概念 2:多态的定义与实现 3:多态的原理 4:抽象类 文章正式开始 1&#xff1a;多态的概念 多…...

8.Linux按键驱动-中断下半部

1.编程思路 1.1在gpio结构体中添加tasklet_struct结构体 1.2在probe函数中初始化tasklet结构体 1.3在中断服务程序中调度tasklet 1.4在这个函数中执行其它任务 2.代码&#xff1a; 应用程序和Makefile和上节一致 https://blog.csdn.net/weixin_40933496/article/details/1…...

Redis 线程控制 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 线程控制 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 线程控制 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis &a…...

Scrapy框架原理与使用流程

一.Scrapy框架特点 框架&#xff08;Framework&#xff09;是一种软件设计方法&#xff0c;它提供了一套预先定义的组件和约定&#xff0c;帮助开发者快速构建应用程序。框架通常包括一组库、工具和约定&#xff0c;它们共同工作以简化开发过程。scrapy框架是python写的 为了爬…...

【C语言】字符型在计算机中的存储方式

ASCII对照表&#xff1a;https://www.jyshare.com/front-end/6318/ ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息互换标准代码&#xff0c;ASCII&#xff09;是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西…...

python:ADB通过包名打开应用

一、依赖库 os 二、命令 1.这是查看设备中所有应用包名的最简单方法。只需在命令行中输入以下命令&#xff1a; adb shell pm list packages 2.打印启动的程序包名 adb shell am monitor回车&#xff0c;然后启动你想要获取包名的那个应用&#xff0c;即可获得 3.查看正在运…...

机器翻译技术:AI 如何跨越语言障碍

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 AI工具集1&#xff1a;大厂AI工具【共23款…...