入门 | Prometheus+Grafana 普罗米修斯

news2024/10/27 21:45:53

#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/local

HOST=`hostname -I|awk '{print $1}'`


. /etc/os-release

msg_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=60
    MOVE_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_COL
    echo -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} ] ;then
        wget ${PROMETHEUS_URL} ||  { color "下载失败!" 1 ; exit ; }
    fi
    [ -d $INSTALL_DIR ] || mkdir -p $INSTALL_DIR
    tar xf ${PROMETHEUS_FILE} -C $INSTALL_DIR
    cd $INSTALL_DIR &&  ln -s prometheus-${PROMETHEUS_VERSION}.linux-amd64 prometheus
    mkdir -p $INSTALL_DIR/prometheus/{bin,conf,data}
    cd $INSTALL_DIR/prometheus && { mv prometheus promtool bin/ ; mv prometheus.yml conf/; }
    groupadd -r prometheus
    useradd -r -g prometheus -s /sbin/nologin prometheus
    chown -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
EOF
    systemctl daemon-reload
    systemctl enable --now prometheus.service
}


start_prometheus() {
    systemctl is-active prometheus
    if [ $?  -eq 0 ];then
        echo 
        color "Prometheus 安装完成!" 0
        echo "-------------------------------------------------------------------"
        echo -e "访问链接: \c"
        msg_info "http://$HOST:9090/"
    else
        color "Prometheus 安装失败!" 1
        exit
    fi
}

install_prometheus

prometheus_service

start_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/local

HOST=`hostname -I|awk '{print $1}'`


. /etc/os-release

msg_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=60
    MOVE_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_COL
    echo -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} ] ;then
        wget ${NODE_EXPORTER_URL} ||  { color "下载失败!" 1 ; exit ; }
    fi
    [ -d $INSTALL_DIR ] || mkdir -p $INSTALL_DIR
    tar xf ${NODE_EXPORTER_FILE} -C $INSTALL_DIR
    cd $INSTALL_DIR &&  ln -s node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64 node_exporter
    mkdir -p $INSTALL_DIR/node_exporter/bin
    cd $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
EOF
    systemctl daemon-reload
    systemctl enable --now node_exporter.service
}


start_node_exporter() {
    systemctl is-active node_exporter.service
    if [ $?  -eq 0 ];then
        echo 
        color "node_exporter 安装完成!" 0
        echo "-------------------------------------------------------------------"
        echo -e "访问链接: \c"
        msg_info "http://$HOST:9100/metrics"
    else
        color "node_exporter 安装失败!" 1
        exit
    fi
}

install_node_exporter

node_exporter_service

start_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的采样点,拉取时间间隔5s
    scrape_interval: 5s
    static_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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS Code 自动生成代码

1. 在vs code中的左下角&#xff0c;点击设置中的snippets。 2. 输入你需要生成的代码种类&#xff0c;这边以JS为例 打开后可以看到下面这样 从Example看起&#xff0c; 1.Print to console 这个是提升信息&#xff0c;就是当你输入代码的时候的提升。 2.prefix是缩写。 3.b…

python爬虫——Selenium的基本使用

目录 一、Selenium的介绍 二、环境准备 1.安装Selenium 2.安装WebDriver 三、元素定位 1.常用定位元素的方法 2. 通过指定方式定位元素 四、窗口操作 1.最大化浏览器窗口 2.设置浏览器窗口大小 3.切换窗口或标签页 切换回主窗口 4. 关闭窗口 关闭当前窗口 关闭所…

由于找不到mfc140u.dll,无法继续执行代码怎么办,总有6个解决方法

在软件开发和程序运行过程中&#xff0c;许多用户可能会遇到“找不到mfc140u.dll&#xff0c;无法继续执行代码”的问题。本文将对该问题进行详细解读&#xff0c;分析其产生原因&#xff0c;并提供相应的解决方案。 一、mfc140u.dll是什么 mfc140u.dll是Microsoft Visual C 2…

apache poi导出excel

简介 常见的使用场景 入门 导入maven依赖 <!-- poi --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId> </dependency> <dependency><groupId>org.apache.poi</groupId><arti…

Java Web项目实战:从零基础到项目开发全流程

Java Web开发环境搭建 Java Web开发需要Java运行环境、IDE&#xff08;如IntelliJ IDEA或Eclipse&#xff09;以及Maven集成开发工具等。首先&#xff0c;确保电脑上安装有Java 8或更高版本&#xff0c;可以通过访问Java官网获取最新版本。其次&#xff0c;安装IDE&#xff0c…

jupyter notebook改变默认启动路径

安装好Anaconda 3以后&#xff0c;就可以使用Jupyter notebook了&#xff0c;但是我们打开Jupyter notebook后&#xff0c;发现界面是一个默认的目录&#xff0c;这个目录在哪里&#xff1f;如果想把自己写的程序文件保存在自己新建的一个文件夹里&#xff0c;修改默认目录到自…

vue elementui el-table实现增加行,行内编辑修改

需求&#xff1a; 前端进行新增表单时&#xff0c;同时增加表单的明细数据。明细数据部分&#xff0c;可进行行编辑。 效果图&#xff1a; <el-card><div slot"header"><span style"font-weight: bold">外来人员名单2</span><…

MySQL8.0.40编译安装

近期MySQL发布了8.0.40版本&#xff0c;与之前的版本相比&#xff0c;部分依赖包发生了变化&#xff0c;因此重新编译一版&#xff0c;也便于大家参考。 1. 下载源码 选择对应的版本、选择源码、操作系统 如果没有登录或者没有MySQL官网账号&#xff0c;可以选择只下载 2. 进…

Flutter仿京东商城APP实战 用户中心基础布局

用户中心界面 pages/tabs/user/user.dart import package:flutter/material.dart; import package:jdshop/utils/zdp_screen.dart; import package:provider/provider.dart;import ../../../store/counter_store.dart;class UserPage extends StatefulWidget {const UserPage…

自动化部署-02-jenkins部署微服务

文章目录 前言一、配置SSH-KEY1.1 操作jenkins所在服务器1.2 操作github1.3 验证 二、服务器安装git三、jenkins页面安装maven四、页面配置自动化任务4.1 新建任务4.2 选择4.3 配置参数4.4 配置脚本 五、执行任务5.1 点击执行按钮5.2 填写参数5.3 查看日志 六、查看服务器文件七…

qt QOperatingSystemVersion详解

QOperatingSystemVersion 是 Qt 提供的一个类&#xff0c;用于表示和管理操作系统的版本信息。它允许开发者获取操作系统的名称、版本号和平台信息。这个类对于需要根据操作系统版本执行特定操作的应用程序尤其有用。 1. 构造函数 QOperatingSystemVersion(): 默认构造函数&…

mysql中的视图表

视图&#xff08;View&#xff09;是数据库中的一种对象&#xff0c;它是基于 SQL 语句的结果集的可视化的表。视图包含行和列&#xff0c;类似于一个真实的表&#xff0c;但它并不在数据库中以存储的数据值集形式存在。视图的内容由查询定义&#xff0c;可以来自单个表或多个表…

docker 镜像详解

Docker镜像是一种轻量级、可移植的软件打包格式&#xff0c;它包含了运行应用程序所需的一切&#xff0c;是构建和分发应用程序的基础。以下是对Docker镜像的详细解释&#xff1a; 一、镜像的定义 镜像本质上是一个只读文件&#xff0c;包含了文件系统、源码、库文件、依赖、…

openpnp - 解决“底部相机高级校正成功后, 开机归零时,吸嘴自动校验失败的问题“

文章目录 openpnp - 解决"底部相机高级校正成功后, 开机归零时&#xff0c;吸嘴自动校验失败的问题"概述笔记问题现象1问题现象2原因分析现在底部相机和吸嘴的位置偏差记录修正底部相机位置现在再看看NT1在底部相机中的位置开机归零&#xff0c;看看是否能通过所有校…

ubuntu进程相关操作

进程相关操作 1.查看进程top/htop top 命令输出解释 在 top 命令中&#xff0c;字段通常表示如下&#xff1a; USER&#xff1a;进程的所有者。PR&#xff1a;优先级。NI&#xff1a;nice 值&#xff08;优先级调整&#xff09;。VIRT&#xff1a;进程使用的虚拟内存总量。…

深度解析百度搜索引擎点击结果:如何提高网站曝光率和用户满意度

在互联网时代&#xff0c;搜索引擎已成为广大网民获取信息的重要途径。作为国内领先的搜索引擎&#xff0c;百度拥有庞大的用户群体。本文将为您分析百度搜索引擎点击搜索结果&#xff0c;助您提高网站曝光率和用户满意度。 一、百度搜索引擎点击搜索结果的重要性 提高网站曝…

jsMind:炸裂项目,用JavaScript构建的思维导图库,GitHub上的热门开源项目

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和工作学习方法 jsMind 是一个基于 JavaScript 的思维导图库&#xff0c;它利用 HTML5 Canvas 和 SVG 技术构建&#xff0c;可以轻松地在网页中嵌入和编辑思维导图。它以 …

LeetCode --- 420周赛

题目列表 3324. 出现在屏幕上的字符串序列 3325. 字符至少出现 K 次的子字符串 I 3326. 使数组非递减的最少除法操作次数 3327. 判断 DFS 字符串是否是回文串 一、出现在屏幕上的字符串序列 根据题目意思进行模拟即可&#xff0c;代码如下 class Solution { public:vector…

ASP.NET Core8.0学习笔记(二十三)——EF Core自引用

一、什么是自引用 1.在常见的树状目录中&#xff0c;其结构如下&#xff1a; 每一个菜单可能有父级菜单&#xff0c;也可能有子菜单。但是无论是哪一级菜单&#xff0c;他们都是同属于菜单对象。将这个菜单对象使用代码进行描述&#xff1a; 在上面的代码中&#xff0c;主…

【论文精读】LTGC: Long-tail Recognition via Leveraging LLMs-driven Generated Content

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;论文精读_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 摘要 2. …