PQL查询和监控各类中间件
1 prometheus的PQL查询
1.1 Metrics数据介绍
- prometheus监控中采集过来的数据统一称为Metrics数据,其并不是代表具体的数据格式,而是一种统计度量计算单位
- 当需要为某个系统或者某个服务做监控时,就需要使用到 metrics
prometheus支持的metrics包括但不限于以下几种数据类型:
- guage:最简单的度量指标,只是一个简单的返回值,或者叫瞬时状态。比如说统计硬盘,内存等使用情况
- counter:就是一个计数器,从数据量0开始累积计算,在理想情况下,只能是永远的增长,不会降低。比如统计1小时,1天,1周,1一个月的用户访问量,这就是一个累加的操作
- histograms (直方图):是统计数据的分布情况,比如最小值,最大值,中间值,中位数等,代表的是一种近似百分比估算数值。通过histograms可以分别统计处在一个时间段(1s,2s,5s,10s)内nginx访问用户的响应时间
- summary (摘要):summary是histograms的扩展类型,主要弥补histograms不足
- Info:Info 类型用于记录服务或系统的静态信息,通常包括版本、构建时间、主机名等。这种类型的指标是常用的元数据
- Event(事件):事件类型用于记录系统中发生的特定事件。它们通常表示一次性的事件,而非持续的度量。例如:表示系统启动、重要错误、任务完成等事件
- Rate(速率):速率是用来表示某个计数器在一定时间窗口内的变化速率。Prometheus 提供了 rate() 函数来计算每秒的增量
- Latency(延迟)::延迟通过 Histogram 或 Summary 类型来记录,表示某个操作的延迟分布
1.2 简单的PQL示例
参考链接:https://prometheus.io/docs/prometheus/latest/querying/functions/
1 查看某个特定的key
node_cpu_seconds_total2 查看某个节点的指标
node_cpu_seconds_total{instance="10.0.0.41:9100"}3 查看某个节点的某刻CPU的某种状态
node_cpu_seconds_total{instance="10.0.0.41:9100",cpu="0",mode="idle"}4 查询最近10s内某个节点CPU的某种状态时间
node_cpu_seconds_total{instance="10.0.0.41:9100",cpu="0",mode="idle"}[10s]5 统计1分钟内,使用标签过滤器查看"10.0.0.42:9100"节点的第0颗CPU,非空闲状态使用的总时间
node_cpu_seconds_total{mode!="idle",cpu="0", instance="10.0.0.42:9100"}[1m]6 统计1分钟内,使用标签过滤器查看"10.0.0.42:9100"节点的第0颗CPU,mode名称以字母"i"开头的所有CPU核心
node_cpu_seconds_total{mode=~"i.*",cpu="0", instance="10.0.0.42:9100"}[1m]7 统计1分钟内,使用标签过滤器查看"10.0.0.42:9100"节点的第0颗CPU,mode名称不是以字母"i"开头的所有CPU核心
node_cpu_seconds_total{mode!~"i.*",cpu="0", instance="10.0.0.42:9100"}[1m
1.查看某个节点的某刻CPU的空闲状态,输入:node_cpu_seconds_total{instance="10.0.0.41:9100",cpu="0",mode="idle"}
2.当然也可以查询所有的指标:node_cpu_seconds_total{instance="10.0.0.41:9100"}
3.若要获取更多的CPU指标,可以使用 !=
node_cpu_seconds_total{instance="10.0.0.41:9100",cpu="0",mode != 'irq'}
1.3 prometheus常用的函数
参考链接:https://prometheus.io/docs/prometheus/latest/querying/functions/
1 increase
increase函数:用来针对counter数据类型,截取其中一段时间总的增量。举个例子:increase(node_cpu_seconds_total{mode="idle",cpu="0", instance="10.0.0.42:9100"}[1m])统计1分钟内,使用标签过滤器查看"10.0.0.42:9100"节点的第0颗CPU,空闲状态使用的总时间增量。2 sum
sum函数:加和的作用。举个例子:sum(increase(node_cpu_seconds_total{mode="idle",cpu="0"}[1m]))统计1分钟内,使用标签过滤器查看所有节点的第0颗CPU,空闲状态使用的总时间增量,并将返回结果累加。3 by
by函数:将数据进行分组,类似于MySQL的"GROUP BY"。举个例子:sum(increase(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)统计1分钟内,使用标签过滤器查看CPU空闲状态,并将结果进行累加,基于instance进行分组。4 rate
rate函数:它的功能是按照设置的时间段,取counter在这个时间段中平均每秒的增量。举个例子:rate(node_cpu_seconds_total{mode="idle",cpu="0", instance="10.0.0.42:9100"}[1m])统计1分钟内,使用标签过滤器查看"10.0.0.42:9100"节点的第0颗CPU,空闲状态使用的每秒的增量。
increase和rate如何选择:(1)对于采集数据频率较低的场景建议使用increase函数,因为使用rate函数可能会出现断点,比如针对硬盘容量监控。(2)对于采集数据频率较高的场景建议使用rate函数,比如针对CPU,内存,网络流量等都是可以基于rate函数来采集等。5 topk
topk函数:取前几位的最高值,实际使用的时候一般会用该函数进行瞬时报警,而不是为了观察曲线图。
举个例子:topk(3, rate(node_cpu_seconds_total{mode="idle"}[1m]))统计1分钟内,使用标签过滤器查看CPU,所有状态使用的每秒的增量,只查看前3个节点。6 count
count函数:把数值符合条件的,输出数目进行累加加和。比如说企业中有100台服务器,如果只有10台服务器CPU使用率高于80%时候是不需要报警的,但是数量操作70台时就需要报警了。举个例子:count(zhiyong18_tcp_wait_conn > 500):假设zhiyong18_tcp_wait_conn是咱们自定义的KEY。若TCP等待数量大于500的机器数量就判断条件为真。count(rate(node_cpu_seconds_total{cpu="0",mode="idle"}[1m]))对统计的结果进行计数。
1.4 PQL查询案例
监控CPU的使用情况案例1 统计各个节点CPU的使用率1.1 我们需要先找到CPU相关的KEY
node_cpu_seconds_total1.2 过滤出CPU的空闲时间({mode='idle'})和全部CPU的时间('{}')
node_cpu_seconds_total{mode='idle'}过滤CPU的空闲时间。node_cpu_seconds_total{}此处的'{}'可以不写,因为里面没有任何参数,代表获取CPU的所有状态时间。1.3 统计1分钟内CPU的增量时间
increase(node_cpu_seconds_total{mode='idle'}[1m])统计1分钟内CPU空闲状态的增量。increase(node_cpu_seconds_total[1m])统计1分钟内CPU所有状态的增量。1.4 将结果进行加和统计
sum(increase(node_cpu_seconds_total{mode='idle'}[1m]))将1分钟内所有CPU空闲时间的增量进行加和计算。sum(increase(node_cpu_seconds_total[1m]))将1分钟内所有CPU空闲时间的增量进行加和计算。1.5 按照不同节点进行分组
sum(increase(node_cpu_seconds_total{mode='idle'}[1m])) by (instance)将1分钟内所有CPU空闲时间的增量进行加和计算,并按照机器实例进行分组。sum(increase(node_cpu_seconds_total[1m])) by (instance)将1分钟内所有CPU空闲时间的增量进行加和计算,并按照机器实例进行分组。1.6 计算1分钟内CPU空闲时间的百分比
sum(increase(node_cpu_seconds_total{mode='idle'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance)1.7 统计1分钟内CPU的使用率,计算公式: (1 - CPU空闲时间的百分比) * 100%。
(1 - sum(increase(node_cpu_seconds_total{mode='idle'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance)) * 1001.7 统计1小时内CPU的使用率,计算公式: (1 - CPU空闲时间的百分比) * 100%。
(1 - sum(increase(node_cpu_seconds_total{mode='idle'}[1h])) by (instance) / sum(increase(node_cpu_seconds_total[1h])) by (instance)) * 1002 计算CPU用户态的1分钟内百分比
sum(increase(node_cpu_seconds_total{mode='user'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance) * 1003 计算CPU内核态的1分钟内百分比
(sum(increase(node_cpu_seconds_total{mode='system'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance)) * 1004 计算CPU IO等待时间的1分钟内百分比
(sum(increase(node_cpu_seconds_total{mode='iowait'}[1m])) by (instance) / sum(increase(node_cpu_seconds_total[1m])) by (instance)) * 100
2 grafna展示监控数据
2.1 安装grafana
很明显,对于Prometheus的PromQL语法不太适合新手,可以使用别人写的好的为自己所用即可。比如使用grafana导入的方式监控Linux的常用指标
1.安装 grafana
dpkg install
这个包
修改配置文件设置为中文
grep -in 'default_language' /etc/grafana/grafana.ini470:default_language = zh-Hans
启动 grafana:systemctl enable grafana-server.service --now
2.访问 grafana 的webUI:http://10.0.0.31:3000/
2.2 配置grafana数据源
以配置 prometheus 数据源为例
https://grafana.com/grafana/dashboards/
3 prometheus监控各种中间件
zookeeper
01 开启zookeeper监控指标
1.首先搭建zookeeper集群,略
2.修改zookeeper集群的配置文件(大约在30行),开启监控指标。elk92和elk93操作相同
[root@elk91 ~]# vim /zhiyong18/softwares/apache-zookeeper-3.8.4-bin/conf/zoo.cfg
...
# https://prometheus.io Metrics Exporter
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpHost=0.0.0.0
metricsProvider.httpPort=7000
metricsProvider.exportJvmInfo=true
...
[root@elk91 ~]# systemctl restart zk
测试zookeeper集群是否正常
[root@elk91~]# for i in `seq 91 93`; do echo stat | nc 10.0.0.$i 2181 | grep Mode;done
Mode: follower
Mode: follower
Mode: leader
3.也可以访问zookeeper的webUI
http://10.0.0.91:7000/metrics
http://10.0.0.92:7000/metrics
http://10.0.0.93:7000/metrics
02 采集zookeeper指标
1.Prometheus server配置监控zookeeper集群,只需要新建一个 job 即可。最后重载prometheus:rr
[root@prometheus-server31 ~]# tail -6 /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml - job_name: zhiyong18-zhiyong-zookeeperstatic_configs:- targets:- 10.0.0.91:7000- 10.0.0.92:7000- 10.0.0.93:7000
2.访问Prometheus的WebUI进行验证:http://10.0.0.31:9090/targets
5.grafana导入模板:10465
获取grafana官方模版:https://grafana.com/grafana/dashboards/
kafka
1.启动kafka集群
[root@elk91 ~]# kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
[root@elk92 ~]# kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties
[root@elk93 ~]# kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties 2.验证kafka服务是否正常
[root@elk91 ~]# zkCli.sh ls /zhiyong18-kafka371/brokers/ids | grep "^\["
[91, 92, 93]3.下载kafka的exporter
wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.7.0/kafka_exporter-1.7.0.linux-amd64.tar.gz4.启动kafka的exporter
[root@elk91 ~]# tar xf kafka_exporter-1.7.0.linux-amd64.tar.gz -C /usr/local/bin/ kafka_exporter-1.7.0.linux-amd64/kafka_exporter --strip-components=1
[root@elk91 ~]#
[root@elk91 ~]# ll /usr/local/bin/
total 18876
drwxr-xr-x 2 root root 4096 Aug 16 11:03 ./
drwxr-xr-x 10 root root 4096 Aug 10 2023 ../
-rwxr-xr-x 1 1001 123 19317972 May 24 2023 kafka_exporter*
[root@elk91 ~]#
[root@elk91 ~]# kafka_exporter --web.listen-address=":9308" --web.telemetry-path="/metrics" --kafka.version="3.7.1" --kafka.server=10.0.0.93:90925.访问测试kafka的exporter页面
http://10.0.0.91:9308/metrics6.Prometheus配置监控kafka的exporter
[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
...- job_name: zhiyong18-zhiyong-kafkastatic_configs:- targets:- 10.0.0.91:93087.查看Prometheus的WebUI是否监控到目标
http://10.0.0.31:9090/targets8.grafana出图展示
124609.测试验证准确信
9.1 创建topic
[root@elk93 ~]# kafka-topics.sh --bootstrap-server 10.0.0.91:9092 --create --topic xixi --partitions 3
Created topic xixi.
[root@elk93 ~]# 9.2 启动消费者
[root@elk92 ~]# kafka-console-consumer.sh --bootstrap-server 10.0.0.91:9092 --topic xixi 9.3 启动生产者
[root@elk93 ~]# kafka-console-producer.sh --bootstrap-server 10.0.0.91:9092 --topic xixi
ES
1.下载elasticsearch exporter
2.解压软件包
[root@elk91 ~]# tar xf elasticsearch_exporter-1.7.0.linux-amd64.tar.gz
[root@elk91 ~]#
[root@elk91 ~]# cd elasticsearch_exporter-1.7.0.linux-amd64/
[root@elk91 elasticsearch_exporter-1.7.0.linux-amd64]#
[root@elk91 elasticsearch_exporter-1.7.0.linux-amd64]# ll
total 12844
drwxr-xr-x 2 1001 1002 4096 Dec 22 2023 ./
drwx------ 9 root root 4096 Aug 16 10:25 ../
-rw-r--r-- 1 1001 1002 7010 Dec 22 2023 CHANGELOG.md
-rw-r--r-- 1 1001 1002 49644 Dec 22 2023 dashboard.json
-rw-r--r-- 1 1001 1002 1805 Dec 22 2023 deployment.yml
-rwxr-xr-x 1 1001 1002 13017088 Dec 22 2023 elasticsearch_exporter*
-rw-r--r-- 1 1001 1002 979 Dec 22 2023 elasticsearch.rules
-rw-r--r-- 1 1001 1002 11357 Dec 22 2023 LICENSE
-rw-r--r-- 1 1001 1002 41096 Dec 22 2023 README.md
[root@elk91 elasticsearch_exporter-1.7.0.linux-amd64]#
[root@elk91 elasticsearch_exporter-1.7.0.linux-amd64]# 3.启动测试
[root@elk91 elasticsearch_exporter-1.7.0.linux-amd64]# ./elasticsearch_exporter --es.uri="http://elastic:123456@10.0.0.93:9200" --web.listen-address=:9114 --web.telemetry-path="/metrics" 4.Prometheus server监控es的exporter
[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
...- job_name: zhiyong18-zhiyong-elasticsearchstatic_configs:- targets:- 10.0.0.91:9114[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# check
Checking /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.ymlSUCCESS: /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml is valid prometheus config file syntax[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# rr
[root@prometheus-server31 ~]# 5.查看Prometheus的WebUI是否监控到目标
http://10.0.0.31:9090/targets6.grafana出图展示
14191
jenkins
1.jenkins安装插件
2.验证Jenkins的metrics组件是否生效
http://10.0.0.211:8080/prometheus/
4.修改Prometheus的配置文件
[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
...- job_name: zhiyong18-zhiyong-jenkinsmetrics_path: /prometheusstatic_configs:- targets:- 10.0.0.211:8080
...
[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# check
Checking /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.ymlSUCCESS: /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml is valid prometheus config file syntax[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# rr
[root@prometheus-server31 ~]# 5.访问Prometheus的WebUI
http://10.0.0.31:9090/targets6.导入Jenkins的相关模板
9964
9524
12646
MySQL
- ⚠️mysql的密码不使用
mysql_native_password
,可能导致认证不通过,无法获取监控指标
1.部署MySQL,确保mysql服务运行
[root@jenkins211 ~]# docker run --name mysql-server -d \-e MYSQL_USER="zhiyong" \-e MYSQL_PASSWORD="zhiyong18" \-e MYSQL_ALLOW_EMPTY_PASSWORD="yes" \--network=host \--restart unless-stopped \mysql:8.3.0-oracle \--character-set-server=utf8mb4 \--collation-server=utf8mb4_bin \--default-authentication-plugin=mysql_native_password[root@jenkins211 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5db1d0101b5c mysql:8.3.0-oracle "docker-entrypoint.s…" 13 seconds ago Up 13 seconds mysql-server[root@jenkins211 ~]# ss -ntl | grep 3306
LISTEN 0 151 *:3306 *:*
LISTEN 0 70 *:33060 *:* 2.下载mysql exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz3.安装mysql exporters
[root@jenkins211 ~]# tar xf mysqld_exporter-0.15.1.linux-amd64.tar.gz -C /usr/local/bin/ mysqld_exporter-0.15.1.linux-amd64/mysqld_exporter --strip-components=1[root@jenkins211 ~]# ls /usr/local/bin/
mysqld_exporter*4.准备MySQL的链接认证文件,创建MySQL的配置,指定默认的用户名和密码
[root@jenkins211 ~]# cat ~/.my.cnf
[client]
user=zhiyong
password=zhiyong185.运行mysqld-exporter
[root@jenkins211 ~]# ./mysqld_exporter --mysqld.address="10.0.0.211:3306" --web.listen-address=:9104 --config.my-cnf="/root/.my.cnf"6.访问mysqld_exporter的webUI
http://10.0.0.211:9104/metrics7.修改Prometheus的配置文件,添加mysql采集任务,然后重启服务
[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
...- job_name: zhiyong18-zhiyong-mysqlstatic_configs:- targets:- 10.0.0.211:91048.查看Prometheus是否监控到数据
http://10.0.0.31:9090/targets9.grafana出图展示
18949
17320
14057
redis
注意:运行容器使用host网络模式
prometheus监控Redis服务
1.部署Redis
[root@jenkins211 ~]# docker run -d --name redis-server --restart always --network host redis:7.2.52.下载redis-exporter
wget https://github.com/oliver006/redis_exporter/releases/download/v1.52.0/redis_exporter-v1.52.0.linux-amd64.tar.gz3.解压软件包到PATH路径
[root@jenkins211 ~]# tar xf redis_exporter-v1.61.0.linux-amd64.tar.gz -C /usr/local/bin/ redis_exporter-v1.61.0.linux-amd64/redis_exporter --strip-components=1[root@jenkins211 ~]# ll /usr/local/bin/
-rwxr-xr-x 1 1001 1002 15811157 Dec 12 2023 mysqld_exporter*
-rwxr-xr-x 1 root root 8290456 Jun 10 01:31 redis_exporter*4.运行redis-exporter
[root@jenkins211 ~]# redis_exporter -web.listen-address=:9121 -web.telemetry-path=/metrics -redis.addr=redis://10.0.0.211:63795.访问redis-exporter的WebUI
http://10.0.0.211:9121/metrics6.修改Prometheus的配置文件
[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
...- job_name: zhiyong18-zhiyong-redisstatic_configs:- targets:- 10.0.0.211:91217.访问Prometheus的WebUI
http://10.0.0.31:9090/targets8.grafana出图展示
763
14091
mongodb
参考:https://github.com/percona/mongodb_exporter
目前未验证
nginx
1 编译安装nginx1.1 安装编译工具
CentOS:
yum -y install git wget gcc make zlib-devel gcc-c++ libtool openssl openssl-develUbuntu:
apt -y install git wget gcc make zlib1g-dev build-essential libtool openssl libssl-dev1.2 克隆nginx-module-vts模块
git clone git://github.com/vozlt/nginx-module-vts.git如果上述连接不好用,可以执行下面代码:
git clone https://gitee.com/jasonyin2020/nginx-module-vts.git1.3 下载nginx软件包
wget https://nginx.org/download/nginx-1.26.2.tar.gz1.4 解压nginx
tar xf nginx-1.26.2.tar.gz1.5 配置nginx
cd nginx-1.26.2
./configure --prefix=/zhiyong18/softwares/nginx \--with-http_ssl_module \--with-http_v2_module \--with-http_realip_module \--without-http_rewrite_module \--with-http_stub_status_module \--without-http_gzip_module \--with-file-aio \--with-stream \--with-stream_ssl_module \--with-stream_realip_module \--add-module=/root/nginx-module-vts1.6 编译并安装nginx
make -j 2 && make install1.7 修改nginx的配置文件
[root@jenkins211nginx]# yy /zhiyong18/softwares/nginx/conf/nginx.conf
worker_processes 1;
events {worker_connections 1024;
}
http {include mime.types;vhost_traffic_status_zone;upstream zhiyong18-prometheus {server 10.0.0.31:9090;}default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name localhost;location / {root html;proxy_pass http://zhiyong18-prometheus;}location /status {vhost_traffic_status_display;vhost_traffic_status_display_format html;}error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
}1.8 检查配置文件语法
[root@jenkins211 ~]# /zhiyong18/softwares/nginx/sbin/nginx -t
nginx: the configuration file /zhiyong18/softwares/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /zhiyong18/softwares/nginx/conf/nginx.conf test is successful
[root@jenkins211 ~]# 1.9 启动nginx
[root@jenkins211 ~]# /zhiyong18/softwares/nginx/sbin/nginx
[root@jenkins211 ~]#
[root@jenkins211 ~]# ss -ntl | grep 80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
[root@jenkins211 ~]# 1.10 访问nginx的状态页面
http://10.0.0.211/status/format/prometheus2 安装nginx-vtx-exporter2.1 下载nginx-vtx-exporterwget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz温馨提示:不建议下载更高版本,因为其会提升对GLIC的版本要求,可以通过" strings /lib64/libc.so.6 | grep GLIBC_ "查看默认是2.17版本,若使用较高版本则需要2.32+2.2 解压软件包到path路径
tar xf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz -C /usr/local/bin/ nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter --strip-components=12.3 运行nginx-vtx-exporter
[root@jenkins211 ~]# nginx-vts-exporter -nginx.scrape_uri=http://10.0.0.211/status/format/json3 配置prometheus采集nginx数据3.1 修改配置文件
[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml ...
scrape_configs:...- job_name: "zhiyong18-nginx-exporter"metrics_path: "/status/format/prometheus"static_configs:- targets:- "10.0.0.211:80"- job_name: "zhiyong18-nginx-vts-exporter"static_configs:- targets:- "10.0.0.211:9913"[root@prometheus-server31 ~]# check
Checking /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.ymlSUCCESS: /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml is valid prometheus config file syntax[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# rr
[root@prometheus-server31 ~]# 3.2 访问Prometheus的WebUI
http://10.0.0.31:9090/targets3.3 导入grafana模板
2949
tomcat
- prometheus监控tomcat服务1 基于Dockerfile构建tomcat-exporter
[root@jenkins211 ~]# git clone https://gitee.com/jasonyin2020/tomcat-exporter.git2.编译镜像
[root@jenkins211 ~]# cd tomcat-exporter/
[root@jenkins211 tomcat-exporter]# ll
total 44
drwxr-xr-x 5 root root 4096 Aug 16 17:00 ./
drwx------ 14 root root 4096 Aug 16 17:00 ../
-rw-r--r-- 1 root root 96 Aug 16 17:00 build.sh
-rw-r--r-- 1 root root 503 Aug 16 17:00 Dockerfile
drwxr-xr-x 8 root root 4096 Aug 16 17:00 .git/
drwxr-xr-x 2 root root 4096 Aug 16 17:00 libs/
-rw-r--r-- 1 root root 3407 Aug 16 17:00 metrics.war
drwxr-xr-x 2 root root 4096 Aug 16 17:00 myapp/
-rw-r--r-- 1 root root 191 Aug 16 17:00 README.md
-rw-r--r-- 1 root root 7604 Aug 16 17:00 server.xml
[root@jenkins211 tomcat-exporter]#
[root@jenkins211 tomcat-exporter]# chmod +x build.sh
[root@jenkins211 tomcat-exporter]#
[root@jenkins211 tomcat-exporter]# ./build.sh 3 运行tomcat镜像
[root@jenkins211 ~]# docker run -dp 18080:8080 --name tomcat-server registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/tomcat9-app:v1
670fa3fa723687fbdd50a0731f5611b86bfecc9dc17045423ad6829a151ca95e
[root@jenkins211 ~]#
[root@jenkins211 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
670fa3fa7236 registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/tomcat9-app:v1 "/usr/local/tomcat/b…" 3 seconds ago Up 1 second 8009/tcp, 8443/tcp, 0.0.0.0:18080->8080/tcp, :::18080->8080/tcp tomcat-server
[root@jenkins211 ~]# 4.访问tomcat应用
http://10.0.0.211:18080/metrics/
http://10.0.0.211:18080/myapp/ 5.配置prometheus监控tomcat应用5.1 修改配置文件
[root@prometheus-server31 ~]# vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
...
scrape_configs:...- job_name: "zhiyong18-tomcat-exporter"static_configs:- targets: - "10.0.0.211:18080"[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# check
Checking /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.ymlSUCCESS: /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml is valid prometheus config file syntax[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# rr
[root@prometheus-server31 ~]# 5.2 导入grafana模板
由于官方的支持并不友好,可以在GitHub自行搜索相应的tomcat监控模板。参考链接:
https://github.com/nlighten/tomcat_exporter/blob/master/dashboard/example.json
docker
Container Advisor 是一个由 Google 开发的开源工具,主要用于容器资源监控和性能分析。
项目地址:https://github.com/google/cadvisor
1.在任意一个主机上部署,(过于老旧,参考:https://github.com/google/cadvisor/tree/v0.47.2)
VERSION=v0.36.0 docker run \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --volume=/dev/disk/:/dev/disk:ro \ --publish=8080:8080 \ --detach=true \ --name=cadvisor \ --privileged \ --device=/dev/kmsg \ gcr.io/cadvisor/cadvisor:$VERSION
docker run --volume=/:/rootfs:ro \--volume=/var/run:/var/run:rw \--volume=/sys:/sys:ro \--volume=/var/lib/docker/:/var/lib/docker:ro \--network host \--detach=true \--name=zhiyong18_cadvisor \registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/cadvisor:v0.47.2
也可以使用较新的版本(本次使用新版)
VERSION=v0.49.1
docker run \-v /:/rootfs:ro \-v /var/run:/var/run:ro \-v /sys:/sys:ro \-v /var/lib/docker/:/var/lib/docker:ro \-v /dev/disk/:/dev/disk:ro \-p 58080:8080 \-d \--name=cadvisor \--privileged \--device=/dev/kmsg \gcr.io/cadvisor/cadvisor-amd64:$VERSION
--privileged
将容器定义为特权容器,也就是说,让容器可以修改内核参数。当使用宿主机网络时,此选项慎用,因为可能直接将宿主机的内核参数修改掉--device
将宿主机的设备添加到容器中/dev/kmsg
特殊设备文件,提供了内核日志的访问接口。通过/dev/kmsg
,用户空间的进程可以读取到内核产生的日志消息:内核的错误、警告、调试信息和系统事件
2.prometheus采集cAdvisor容器,增加一个采集任务
- job_name: "prometheus-zhiyong18-cAdvisor"static_configs:- targets:- "10.0.0.211:28080"5 导入grafana模板
315
10619
142826 grafana的官方优化思路-对于容器出现小数的情况
针对10619模板,当容器数量增多时,如果容器出现小数点,微调即可。Value options ---> "Last*"
页面内容:
.47.2
也可以使用较新的版本(本次使用新版)```bash
VERSION=v0.49.1
docker run \-v /:/rootfs:ro \-v /var/run:/var/run:ro \-v /sys:/sys:ro \-v /var/lib/docker/:/var/lib/docker:ro \-v /dev/disk/:/dev/disk:ro \-p 58080:8080 \-d \--name=cadvisor \--privileged \--device=/dev/kmsg \gcr.io/cadvisor/cadvisor-amd64:$VERSION
--privileged
将容器定义为特权容器,也就是说,让容器可以修改内核参数。当使用宿主机网络时,此选项慎用,因为可能直接将宿主机的内核参数修改掉--device
将宿主机的设备添加到容器中/dev/kmsg
特殊设备文件,提供了内核日志的访问接口。通过/dev/kmsg
,用户空间的进程可以读取到内核产生的日志消息:内核的错误、警告、调试信息和系统事件
2.prometheus采集cAdvisor容器,增加一个采集任务
- job_name: "prometheus-zhiyong18-cAdvisor"static_configs:- targets:- "10.0.0.211:28080"5 导入grafana模板
315
10619
142826 grafana的官方优化思路-对于容器出现小数的情况
针对10619模板,当容器数量增多时,如果容器出现小数点,微调即可。Value options ---> "Last*"
页面内容:
相关文章:
PQL查询和监控各类中间件
1 prometheus的PQL查询 1.1 Metrics数据介绍 prometheus监控中采集过来的数据统一称为Metrics数据,其并不是代表具体的数据格式,而是一种统计度量计算单位当需要为某个系统或者某个服务做监控时,就需要使用到 metrics prometheus支持的met…...
uni_app实现下拉刷新
1. 在页面配置中启用下拉刷新 首先,你需要在页面的 pages.json 文件中启用下拉刷新功能。 {"pages": [{"path": "pages/index/index","style": {"navigationBarTitleText": "首页","enablePull…...
C#类型转换基本概念
一、基本定义 C# 类型转换是将数据从一种类型转换为另一种类型的过程,分为 隐式转换 和 显式转换 两类。 强类型语言特性:C# 要求变量类型在编译时确定,类型转换需满足兼容性或显式规则。目的:处理不同数据类…...
【学习笔记】【DeepSeek AI 医生】2-2 AI家庭医生课程内容介绍
【DeepSeek AI 医生】2-4 项目详细分析及DeepSeek适用场景 一、Ollama部署二、可视化UI三、构建项目环境四、搭建项目架构五、Spring Al六、SSE服务端推送事件七、数据持久化八、线上部署 一、Ollama部署 Mac部署windows 部署ollama脚本、常用命令DeepSeek 提示词、角色、适用…...
DeepSeek使用教程--让DeepSeek生成精准题库
想让DeepSeek出好题,关键在于提示词的设计。总结了一个基本模板: 请帮我生成一套关于[学科/知识点]的题目,包括[题型],难度为[简单/中等/困难],适合[年级/学习阶段]的学生,总共[数量]道题。每道题请提供详细…...
数学之约数个数定理-阶乘约数
题目: 定义阶乘 n!123⋅⋅⋅n。 请问 100!(100的阶乘)有多少个正约数。 们需要计算 100! 的正约数的个数。阶乘 100! 的定义是: 100!123⋯100 直接计算 100!的值是不现实的,因为它是一个非常大的数。因此…...
C语言学习笔记-进阶(7)字符串函数3
1. strstr的使用和模拟实现 char * strstr ( const char * str1, const char * str2); Returns a pointer to the first occurrence of str2 in str1, or a null pointer if str2 is not part of str1. (函数返回字符串str2在字符串str1中第⼀次出现的位置&#x…...
快乐数 力扣202
一、题目 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&…...
Cpu100%问题(包括-线上docker服务以及Arthas方式进行处理)
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
近三年图像超分辨率研究进展综述(轻量化方向)
一、图像超分辨率技术的近三年核心进展 1. 轻量化网络设计突破 轻量化模型是端侧部署的关键,近三年研究主要围绕参数压缩与计算效率提升展开: 11卷积与通道优化:SCNet提出全11卷积架构,通过逐点卷积替代传统33卷积,在保持重建质量的同时将模型参数减少60%以上。该设计通…...
成都亚恒云知教育咨询公司:绘画的风格如何学习与确定?
宝子们,好久不见! 最近收到好多同学发给我们成都亚恒云知教育咨询有限公司创作的作品,同时也收到了有很多乖乖的询问:关于绘画,老师我没有属于自己的风格,怎么才能画出属于自己的风格的作品啊,…...
数据结构篇——串(String)
一、引入 在计算机中的处理的数据内容大致可分为以整形、浮点型等的数值处理和字符、字符串等的非数值处理。 今天我们主要学习的就是字符串数据。本章主要围绕“串的定义、串的类型、串的结构及其运算”来进行串介绍与学习。 二、串的定义 2.1、串的基本定义 串(s…...
Qwen架构与Llama架构的核心区别
我们在讨论Deepseek不同版本之间的区别时了解到,DeepSeek-R1的蒸馏模型分为Qwen和Llama两个系列,包括Qwen系列的0.5B、1.5B、3B、7B、14B、32B、72B和Llama系列的8B、70B。Qwen系列以阿里通义千问(Qwen)为基础模型架构(具体是Qwen-2.5),Llama系列以Meta的Llama为基础模型…...
uniapp或者vue 使用serialport
参考https://blog.csdn.net/ykee126/article/details/90440499 版本是第一位:否则容易编译失败 node 版本 18.14.0 npm 版本 9.3.1 electron 版本 30.0.8 electron-rebuild 版本 3.2.9 serialport 版本 10.0.0 需要python环境 main.js // Modules to control app…...
Linux和gcc/g++常用命令总结
目录 Linux命令总结 文件操作相关命令 ls cd pwd cp mv rm cat mkdir rmdir touch 文本处理操作命令 grep awk sed 进程管理操作相关命令 ps top htop kill pkill killall chmod chown 网络操作相关命令 ping ifconfig netstat ss lsof curl …...
Vue3路由组件和一般组件 切换路由时组件挂载和卸载 路由的工作模式
路由组件和一般组件 路由组件 一般放到pages或view目录 一般组件 一般放到component目录 切换路由 切换路由时,组件和执行挂载和卸载 路由的工作模式 Hash模式 缺点 1.不美观,路径带#号 优点 1.兼容性好 一般适用于管理系统 History模式 缺点…...
MySQL如何给其他账号分配权限?
目录 基础权限分配流程 权限级别对照表 安全事项 MySQL数据库使用root账号为test账号分配权限的标准操作流程及注意事项: 基础权限分配 1、root用户登录, 输入root密码后进入MySQL命令行环境 mysql -u root -p2、用户存在性校验 SELECT user,host FROM …...
记录一些面试遇到的问题
重载和重写的区别 重载是overload,覆盖是override 重载属于编译时多态,覆盖属于运行时多态 运行时多态和编译时多态 运行时多态指的是在运行的时候才知道要调用哪一个函数,编译时多态是指在编译的时候就知道调用哪一个函数。 运行时多态…...
Windows 系统 Docker Desktop 入门教程:从零开始掌握容器化技术
文章目录 前言一、Docker 简介二、Docker Desktop 安装2.1 系统要求2.2 安装步骤 三、Docker 基本概念四、Docker 常用命令五、实战:运行你的第一个容器5.1 拉取并运行 Nginx 容器5.2 查看容器日志5.3 停止并删除容器 六、总结 前言 随着云计算和微服务架构的普及&…...
量子计算测试挑战:软件测试将如何迎接新纪元?
引言 在计算机技术的飞速发展中,量子计算(Quantum Computing)正成为下一个颠覆性的科技热点。随着谷歌、IBM、微软等科技巨头纷纷投入巨资研究量子计算,其应用场景正逐步扩展,从优化计算到密码安全,再到人工智能和材料科学。然而…...
Matlab实现车牌识别
车牌识别技术作为现代智能交通系统、安防监控以及诸多车辆管理应用场景中的关键环节,正发挥着日益重要的作用,它能够自动、快速且精准地从车辆图像或视频流中提取车牌信息,实现车辆身份的智能化识别。 技术原理 车牌识别主要依托于图像处理、…...
Autosar 诊断开发-CAN到CANFD的更改-基于ETAS软件
文章目录 前言CanIf配置CanTp配置EcuC配置生成代码差异总结 前言 从CAN切换到CANFD,如果不想重新进行cfggen的话,手动更改配置或许会更快一些,本文介绍诊断报文从CAN变为CANFD后,BSW模块中的更改。 注:本文不介绍MCAL…...
八、排序算法
一些简单的排序算法 8.1 冒泡排序 void Bubble_sort(int a[] , int len){int i,j,flag,tmp;for(i=0 ; i < len-1 ; i++){flag = 1;for(j=0 ; j < len-1-i ; j++){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;flag = 0;}}if(flag == 1){break;}}…...
TON基金会确认冠名赞助2025香港Web3嘉年华,并将于4月8日重磅呈现“TON生态日”
近日,由万向区块链实验室与HashKey Group联合推出的Web3年度盛典——2025香港Web3嘉年华正式宣布,TON基金会确认成为本届嘉年华的冠名赞助商,并将于4月8日在主会场特别举办“TON生态日”专题Side Event,集中展现TON生态的最新技术…...
《A++ 敏捷开发》- 18 软件需求
需求并不是关于需求 (Requirements are not really about requirements) 大家去公共图书馆寄存物品,以前都是扫二维码开箱,有些图书馆升级了使用指纹识别。 “是否新方法比以前好?”我问年轻的开发人员。 “当然用指纹识别好。新技术&#x…...
RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践
重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...
智谱AI-FunctionCall
智谱AI-FunctionCall 编写FuncationCall大模型的函数调用,先直观的感受一下的感受下FunctionCall的魅力 文章目录 智谱AI-FunctionCall[toc]1-参考网址2-思路整理3-代码拆件1-[非核心]两个业务函数2-[非核心]业务函数的JsonSchema定义3-[核心]FunctionCall的调用1-打…...
[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署
标题:[HTTP协议]应用层协议HTTP从入门到深刻理解并落地部署自己的云服务(2)实操部署 水墨不写bug 文章目录 一、无法拷贝类(class uncopyable)的设计解释:重要思想:使用示例 二、锁的RAII设计解释重要考虑使用示例 三、基于RAII模式和互斥锁…...
【玩转MySQL数据字典】MySQL数据字典与常用操作指令
MySQL数据字典简介与常用操作指令 一、数据字典简介 数据字典是MySQL 5.7中用于存储数据库对象元数据的系统表。在MySQL的早期版本中,元数据存储在.frm文件及其他文件里。这种存储方式存在诸多弊端,例如元数据不一致问题,不同文件间元数据的…...
C语言 —— 愿此世如黄金般辉煌 - 进制转换与操作符详解
目录 1. 操作符的分类 2. ⼆进制和进制转换 2.1 2进制转10进制 2.2 10进制转2进制 2.3 2进制转8进制 2.4 2进制转16进制 3. 原码、反码、补码 4. 移位操作符 4.1 左移操作符 4.2 右移操作符 5. 位操作符:&、|、^、~ 5.1 & 按位与 5.2 | 按位或 …...
基于粒子群算法的配电网重构
一、配电网重构原理 定义: 配电网重构是指在满足运行约束的前提下,通过改变开关状态优化配电网性能,提高系统的经济效益和运行效率。 拓扑约束: 配电网必须保持径向拓扑,避免环网或孤岛。采用算法控制开关状态的选择&…...
【云岚到家】-实战问题(上)
【云岚到家】-实战问题(上) 基础架构项目涉及那些角色云岚的业务流程?云岚家政包括那些模块项目采用什么架构如何开发一个接口?RESTful风格的去定义一个接口如何开发一个接口的service方法接口的异常处理怎么实现的?Sp…...
005-获取内存占用率
获取内存占用率 windows平台 在Windows环境下使用C获取内存占用率,可以通过以下两种方式实现,分别针对系统整体和特定进程的内存监控: 一、获取系统整体内存占用率 核心函数:GlobalMemoryStatusEx 步骤: 定义MEMOR…...
python从入门到精通(二十二):python文件操作之Excel全攻略(基于pandas)
Python处理表格数据 1.表格的基础知识1.1 xls与xlsx格式详解1.2 表格内部结构的认识 2.表格的基础操作2.1 认识表格的基本库2.1.1 csv内置的标准库2.1.2 xlrd 和 xlwt2.1.3 openpyxl2.1.4 pandas 2.2 安装和环境配置2.3 xlrd 和 xlwt2.3.1 库的说明2.3.2 安装xlrd库2.3.3 导入模…...
html常用标签
文章说明 本文旨在总结 HTML 中常见的标签,并提供简洁的解释,方便大家快速查找和复习。我们假设读者已经具备一定的 HTML 基础知识。本文将持续更新和完善,欢迎大家参与续写和补充 一、 HTML 标签 整个网页从 <html> 开始到 </html…...
ROS分布式部署通信
目录 一、概念 二、设置 ROS 分布式网络 1. 环境要求 2. 主机(Master)设置 3. 从机(节点设备)设置 4. 测试是否正常通信 三、进阶启动多从机节点(launch)。 一、概念 ROS 分布式通信用于在多台计算机…...
.Net 6 上传文件接口 文件大小报错整体配置
/// <summary>/// 上传文件/// </summary>/// <param name"file"></param>/// <returns></returns>[HttpPost("UploadifyFile")][RequestSizeLimit(2000 * 1024 * 1024)] // 设置最大请求体大小为 100MBpublic async …...
12.【线性代数】——图和网络
十二 图和网络(线性代数的应用) 图 g r a p h { n o d e s , e d g e s } graph\{nodes, edges\} graph{nodes,edges}1.关联矩阵2. A A A矩阵的零空间,求解 A x 0 Ax0 Ax0 电势3. A T A^T AT矩阵的零空间,电流总结电流图结论 …...
游戏引擎学习第145天
仓库:https://gitee.com/mrxiao_com/2d_game_3 今天的计划 目前,我们正在完成遗留的工作。当时我们已经将声音混合器(sound mixer)集成到了 SIMD 中,但由于一个小插曲,没有及时完成循环内部的部分。这个小插曲主要是…...
Linux(Centos 7.6)命令详解:zip
1.命令作用 打包和压缩(存档)文件(package and compress (archive) files);该程序用于打包一组文件进行分发;存档文件;通过临时压缩未使用的文件或目录来节省磁盘空间;且压缩文件可以在Linux、Windows 和 macOS中轻松提取。 2.命…...
23年以后版本pycharm找不到conda可执行文件解决办法
这个问题很痛苦,折磨了我半天。 就是链接远程服务器的时候 就一直以为这三个都要配置 就这个conda环境这里怎么都找不到服务器的虚拟环境的python可执行文件,非常痛苦。 后面查找了资料,找了好久,才发现,原来只需要配…...
AGI(Artificial General Intelligence,通用人工智能)技术介绍
文章目录 **AGI的关键特点**1. **泛化能力**:2. **自主性和适应性**:3. **自我意识与推理**: **与当前AI的区别****AGI的挑战**1. **技术难点**:2. **伦理与安全**:3. **资源与算力**: **AGI的实现路径**- …...
createrepo centos通过nginx搭建本地源
yum update 先安装一个nginx。 安装Nginx yum install gcc gcc-c pcre pcre-devel openssl openssl-devel libtool zlib zlib-devel -y cd /usr/local/src wget http://nginx.org/download/nginx-1.22.0.tar.gz tar -zxvf nginx-1.22.0.tar.gz cd nginx-1.22.0 ./configu…...
279.完全平方数
279.完全平方数 力扣题目链接(opens new window) 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 给你一个整数 n ,返回和为 n 的完全平方数的 最少数…...
Dify部署踩坑指南(Windows+Mac)
组件说明 Dify踩坑及解决方案 ⚠️ 除了修改镜像版本,nginx端口不要直接修改docker-compose.yaml !!!!!!! 1、更换镜像版本 这个文件是由.env自动生成的,在.env配置 …...
备赛蓝桥杯之第十五届职业院校组省赛第六题:简易JSX解析器
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...
深入解析ECDSA与RSA公钥算法:原理、对比及AWS最佳实践
一、公钥加密算法概述 在HTTPS通信和数字证书领域,ECDSA(椭圆曲线数字签名算法)和RSA(Rivest-Shamir-Adleman)是最主流的两种非对称加密算法。它们共同构成了现代网络安全的基础,但设计理念和技术实现存在显著差异。 © ivwdcwso (ID: u012172506) 二、RSA算法详解…...
单例设计模式---懒汉式--线程安全和不安全、枚举类
单例设计模式—懒汉式–线程安全和不安全 优点 资源利用率高:只有在真正需要使用单例实例时才进行创建,避免了在应用启动时就占用不必要的资源。 缺点 线程安全问题:在多线程环境下,如果多个线程同时调用获取实例的方法ÿ…...
c++: 容器vector
文章目录 介绍initializer_list与string的不同底层总代码 介绍 C 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。 vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。 与 C 数组相…...
肖恩的n次根
1.肖恩的n次根 - 蓝桥云课 问题描述 喜欢研究数学问题的肖恩注意到,在编程语言中通常内置函数只有开平方根和开立方根,但是肖思想知道开高次方根(大于3次方称为高次方),应该怎么做。请你设计一个程序来帮帮肖恩。 输…...