Kubernetes Prometheus 系列|Prometheus介绍和使用|Prometheus+Grafana集成

目录

    • 第1章Prometheus 入门
      • 1.1 Prometheus 的特点
        • 1.1.1 易于管理
        • 1.1.2 监控服务的内部运行状态
        • 1.1.3 强大的数据模型
        • 1.1.4 强大的查询语言 PromQL
        • 1.1.5 高效
        • 1.1.6 可扩展
        • 1.1.7 易于集成
        • 1.1.8 可视化
        • 1.1.9 开放性
      • 1.2 Prometheus 的架构
        • 1.2.1 Prometheus 生态圈组件
        • 1.2.2 架构理解
    • 第2章Prometheus 的安装
      • 2.1 安装 Prometheus Server
        • 2.1.1 上传安装包
        • 2.1.2 解压安装包
        • 2.1.3 修改配置文件 prometheus.yml
      • 2.2 安装 Pushgateway
        • 2.2.1 上传安装包
        • 2.2.2 解压安装包
      • 2.3 安装 Alertmanager(选择性安装)
        • 2.3.1 上传安装包
        • 2.3.2 解压安装包
      • 2.4 安装 Node Exporter(选择性安装)
        • 2.4.1 上传安装包
        • 2.4.2 解压安装包
        • 2.4.3 节点分发
        • 2.4.4 设置为开机自启
      • 2.5 启 动 Prometheus Server 、 Pushgateway 和Alertmanager
        • 2.5.1 Prometheus Server 目录下执行启动命令
        • 2.5.2 Pushgateway 目录下执行启动命令
        • 2.5.3 在 Alertmanager 目录下启动
        • 2.5.4 打开 web 页面查看
    • 第3章 PromQL的介绍使用

第1章Prometheus 入门

Prometheus 受启发于 Google 的 Brogmon 监控系统(相似的 Kubernetes 是从 Google的 Brog 系统演变而来),从 2012 年开始由前 Google 工程师在 Soundcloud 以开源软件的形式进行研发,并且于 2015 年早期对外发布早期版本。
2016 年 5 月继 Kubernetes 之后成为第二个正式加入 CNCF 基金会的项目,同年 6 月正式发布 1.0 版本。2017 年底发布了基于全新存储层的 2.0 版本,能更好地与容器平台、云平台配合。
Prometheus 作为新一代的云原生监控系统,目前已经有超过 650+位贡献者参与到Prometheus 的研发工作上,并且超过 120+项的第三方集成。

1.1 Prometheus 的特点

Prometheus 是一个开源的完整监控解决方案,其对传统监控系统的测试和告警模型进行了彻底的颠覆,形成了基于中央化的规则计算、统一分析和告警的新模型。 相比于传统监控系统,Prometheus 具有以下优点:

1.1.1 易于管理

➢ Prometheus 核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等)。唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。
➢ Prometheus 基于 Pull 模型的架构方式,可以在任何地方(本地电脑,开发环境,测试环境)搭建我们的监控系统。
➢ 对于一些复杂的情况,还可以使用 Prometheus 服务发现(Service Discovery)的能力动态管理监控目标。

1.1.2 监控服务的内部运行状态

Pometheus 鼓励用户监控服务的内部状态,基于 Prometheus 丰富的 Client 库,用户可以轻松的在应用程序中添加对 Prometheus 的支持,从而让用户可以获取服务和应用内部真正的运行状态。
在这里插入图片描述

1.1.3 强大的数据模型

所有采集的监控数据均以指标(metric)的形式保存在内置的时间序列数据库当中(TSDB)。所有的样本除了基本的指标名称以外,还包含一组用于描述该样本特征的标签。
如下所示:

http_request_status{code='200',content_path='/api/path',environment='produment'} => 
[value1@timestamp1,value2@timestamp2...]
http_request_status{code='200',content_path='/api/path2',environment='produment'} => 
[value1@timestamp1,value2@timestamp2...]

每一条时间序列由指标名称(Metrics Name)以及一组标签(Labels)唯一标识。每条时间序列按照时间的先后顺序存储一系列的样本值。
➢ http_request_status:指标名称(Metrics Name)
➢ {code=‘200’,content_path=‘/api/path’,environment=‘produment’}:表示维度的标签,基于这些 Labels 我们可以方便地对监控数据进行聚合,过滤,裁剪。
➢ [value1@timestamp1,value2@timestamp2…]:按照时间的先后顺序 存储的样本值。

1.1.4 强大的查询语言 PromQL

Prometheus 内置了一个强大的数据查询语言 PromQL。 通过 PromQL 可以实现对监控数据的查询、聚合。同时 PromQL 也被应用于数据可视化(如 Grafana)以及告警当中。
通过 PromQL 可以轻松回答类似于以下问题:
➢ 在过去一段时间中 95%应用延迟时间的分布范围?
➢ 预测在 4 小时后,磁盘空间占用大致会是什么情况?
➢ CPU 占用率前 5 位的服务有哪些?(过滤)

1.1.5 高效

对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而 Prometheus 可以高效地处理这些数据,对于单一 Prometheus Server 实例而言它可以处理:
➢ 数以百万的监控指标
➢ 每秒处理数十万的数据点

1.1.6 可扩展

可以在每个数据中心、每个团队运行独立的 Prometheus Sevrer。Prometheus 对于联邦集群的支持,可以让多个 Prometheus 实例产生一个逻辑集群,当单实例 Prometheus Server 处理的任务量过大时,通过使用功能分区(sharding)+联邦集群(federation)可以对其进行扩展。

1.1.7 易于集成

使用 Prometheus 可以快速搭建监控服务,并且可以非常方便地在应用程序中进行集成。目前支持:Java,JMX,Python,Go,Ruby,.Net,Node.js 等等语言的客户端 SDK,基于这些 SDK 可以快速让应用程序纳入到 Prometheus 的监控当中,或者开发自己的监控数据收集程序。
同时这些客户端收集的监控数据,不仅仅支持 Prometheus,还能支持 Graphite 这些其他的监控工具。
同时 Prometheus 还支持与其他的监控系统进行集成:Graphite,Statsd,Collected,Scollector, muini, Nagios 等。 Prometheus 社区还提供了大量第三方实现的监控数据采集支持:JMX,CloudWatch,EC2,MySQL,PostgresSQL,Haskell,Bash,SNMP,Consul,Haproxy,Mesos,Bind,CouchDB,Django,Memcached,RabbitMQ,Redis,RethinkDB,Rsyslog 等等。

1.1.8 可视化

➢ Prometheus Server 中自带的 Prometheus UI,可以方便地直接对数据进行查询,并且支持直接以图形化的形式展示数据。同时 Prometheus 还提供了一个独立的基于Ruby On Rails 的 Dashboard 解决方案 Promdash。
➢ 最新的 Grafana 可视化工具也已经提供了完整的 Prometheus 支持,基于 Grafana 可以创建更加精美的监控图标。
➢ 基于 Prometheus 提供的 API 还可以实现自己的监控可视化 UI。

1.1.9 开放性

通常来说当我们需要监控一个应用程序时,一般需要该应用程序提供对相应监控系统协议的支持,因此应用程序会与所选择的监控系统进行绑定。为了减少这种绑定所带来的限制,
对于决策者而言要么你就直接在应用中集成该监控系统的支持,要么就在外部创建单独的服
务来适配不同的监控系统。
而对于 Prometheus 来说,使用 Prometheus 的 client library 的输出格式不止支持Prometheus 的格式化数据,也可以输出支持其它监控系统的格式化数据,比如 Graphite。
因此你甚至可以在不使用 Prometheus 的情况下,采用 Prometheus 的 client library 来让
你的应用程序支持监控数据采集。

1.2 Prometheus 的架构

在这里插入图片描述

1.2.1 Prometheus 生态圈组件

➢ Prometheus Server:主服务器,负责收集和存储时间序列数据
➢ client libraies:应用程序代码插桩,将监控指标嵌入到被监控应用程序中
➢ Pushgateway:推送网关,为支持 short-lived 作业提供一个推送网关
➢ exporter:专门为一些应用开发的数据摄取组件—exporter,例如:HAProxy、StatsD、
Graphite 等等。
➢ Alertmanager:专门用于处理 alert 的组件

1.2.2 架构理解

Prometheus 既然设计为一个维度存储模型,可以把它理解为一个 OLAP 系统。
1、存储计算层
➢ Prometheus Server,里面包含了存储引擎和计算引擎。
➢ Retrieval 组件为取数组件,它会主动从 Pushgateway 或者 Exporter 拉取指标数据。
➢ Service discovery,可以动态发现要监控的目标。
➢ TSDB,数据核心存储与查询。
➢ HTTP server,对外提供 HTTP 服务。
2、采集层
采集层分为两类,一类是生命周期较短的作业,还有一类是生命周期较长的作业。
➢ 短作业:直接通过 API,在退出时间指标推送给 Pushgateway。
➢ 长作业:Retrieval 组件直接从 Job 或者 Exporter 拉取数据。
3、应用层
应用层主要分为两种,一种是 AlertManager,另一种是数据可视化。
➢ AlertManager
对接 Pagerduty,是一套付费的监控报警系统。可实现短信报警、5 分钟无人 ack 打
电话通知、仍然无人 ack,通知值班人员 Manager…
Emial,发送邮件
… …
➢ 数据可视化
Prometheus build-in WebUI
Grafana
其他基于 API 开发的客户端

第2章Prometheus 的安装

官网:https://prometheus.io/
下载地址:https://prometheus.io/download/
部署资源包链接

2.1 安装 Prometheus Server

Prometheus 基于 Golang 编写,编译后的软件包,不依赖于任何的第三方依赖。只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动 Prometheus Server。

2.1.1 上传安装包
mkdir /opt/software

上传 prometheus-2.29.1.linux-amd64.tar.gz 到虚拟机的/opt/software 目录

2.1.2 解压安装包

➢ 解压到/opt/module 目录下

cd /opt/software 
mkdir /opt/module
tar -zxvf prometheus-2.29.1.linux-amd64.tar.gz -C /opt/module

➢ 修改目录名

cd /opt/module
mv prometheus-2.29.1.linux-amd64 prometheus-2.29.1
2.1.3 修改配置文件 prometheus.yml
cd prometheus-2.29.1
vim prometheus.yml

在 scrape_configs 配置项下添加配置:

scrape_configs:
 # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
 - job_name: "prometheus"
   # metrics_path defaults to '/metrics'
   # scheme defaults to 'http'.
   static_configs:
     - targets: ["10.10.101.114:9090"]
# 添加 PushGateway 监控配置
 - job_name: 'pushgateway'
   static_configs:
     - targets: ['10.10.101.114:9091']
       labels:
         instance: pushgateway
# 添加 Node Exporter 监控配置
 - job_name: 'node exporter'
   static_configs:
     - targets: ['10.10.101.114:9100','10.10.101.115:9100','10.10.101.116:9100']

配置说明:
1、global 配置块:控制 Prometheus 服务器的全局配置
➢ scrape_interval:配置拉取数据的时间间隔,默认为 1 分钟。
➢ evaluation_interval:规则验证(生成 alert)的时间间隔,默认为 1 分钟。
2、rule_files 配置块:规则配置文件
3、scrape_configs 配置块:配置采集目标相关, prometheus 监视的目标。Prometheus
自身的运行信息可以通过 HTTP 访问,所以 Prometheus 可以监控自己的运行数据。
➢ job_name:监控作业的名称
➢ static_configs:表示静态目标配置,就是固定从某个 target 拉取数据
➢ targets : 指 定 监 控 的 目 标 , 其 实 就 是 从 哪 儿 拉 取 数 据 。 Prometheus 会 从
http://10.10.101.114:9090/metrics 上拉取数据。
Prometheus 是可以在运行时自动加载配置的。启动时需要添加:–web.enable-lifecycle

2.2 安装 Pushgateway

Prometheus 在正常情况下是采用拉模式从产生 metric 的作业或者 exporter(比如专门监控主机的 NodeExporter)拉取监控数据。但是我们要监控的是 Flink on YARN 作业,想要让 Prometheus 自动发现作业的提交、结束以及自动拉取数据显然是比较困难的。
PushGateway 就是一个中转组件,通过配置 Flink on YARN 作业将 metric 推到
PushGateway,Prometheus 再从 PushGateway 拉取就可以了。

2.2.1 上传安装包

上传 pushgateway-1.4.1.linux-amd64.tar.gz 到虚拟机的/opt/software 目录

2.2.2 解压安装包

➢ 解压到/opt/module 目录下
tar -zxvf pushgateway-1.4.1.linux-amd64.tar.gz -C
/opt/module
➢ 修改目录名
mv pushgateway-1.4.1.linux-amd64 pushgateway-1.4.1

2.3 安装 Alertmanager(选择性安装)

2.3.1 上传安装包

上传 alertmanager-0.23.0.linux-amd64.tar.gz 到虚拟机的/opt/software 目录

2.3.2 解压安装包

➢ 解压到/opt/module 目录下
tar -zxvf alertmanager-0.23.0.linux-amd64.tar.gz -C
/opt/module
➢ 修改目录名
mv alertmanager-0.23.0.linux-amd64 alertmanager-0.23.0

2.4 安装 Node Exporter(选择性安装)

在 Prometheus 的架构设计中,Prometheus Server 主要负责数据的收集,存储并且对外提供数据查询支持,而实际的监控样本数据的收集则是由 Exporter 完成。因此为了能够监控到某些东西,如主机的 CPU 使用率,我们需要使用到 Exporter。Prometheus 周期性的从 Exporter 暴露的 HTTP 服务地址(通常是/metrics)拉取监控样本数据。
Exporter 可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接内置在监控目标中。只要能够向 Prometheus 提供标准格式的监控样
本数据即可。
为了能够采集到主机的运行指标如 CPU, 内存,磁盘等信息。我们可以使用 Node Exporter。Node Exporter 同样采用 Golang 编写,并且不存在任何的第三方依赖,只需要下载,解压即可运行。可以从 https://prometheus.io/download/ 获取最新的 node
exporter 版本的二进制包。

2.4.1 上传安装包

上传 node_exporter-1.2.2.linux-amd64.tar.gz 到虚拟机的/opt/software 目录

2.4.2 解压安装包

➢ 解压到/opt/module 目录下
tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /opt/module
➢ 修改目录名
mv node_exporter-1.2.2.linux-amd64 node_exporter-1.2.2
➢ 启动并通过页面查看是否成功
执行./node_exporter
浏览器输入:http://hadoop202:9100/metrics,可以看到当前 node exporter 获取
到的当前主机的所有监控数据。
在这里插入图片描述

2.4.3 节点分发

➢ 将解压后的目录分发到要监控的节点

xsync node_exporter-1.2.2

xsync同步脚本直通车
➢ 修改 Prometheus 配置文件 prometheus.yml,在 2.1.3 的时候已经添加过配置

- targets: ['10.10.101.114:9100','10.10.101.115:9100','10.10.101.116:9100']
2.4.4 设置为开机自启

➢ 创建 service 文件

sudo vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_export
Documentation=https://github.com/prometheus/node_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart= /opt/module/node_exporter-1.2.2/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

➢ 分发文件
sudo xsync /usr/lib/systemd/system/node_exporter.service
➢ 设为开机自启动(所有机器都执行)
sudo systemctl enable node_exporter.service
➢ 启动服务(所有机器都执行)
sudo systemctl start node_exporter.service

2.5 启 动 Prometheus Server 、 Pushgateway 和Alertmanager

2.5.1 Prometheus Server 目录下执行启动命令
nohup ./prometheus --config.file=prometheus.yml > ./prometheus.log 2>&1 &
ps -ef |grep prometheus
2.5.2 Pushgateway 目录下执行启动命令
nohup ./pushgateway --web.listen-address :9091 > ./pushgateway.log 2>&1 &
ps -ef |grep pushgateway
2.5.3 在 Alertmanager 目录下启动
nohup ./alertmanager --config.file=alertmanager.yml > ./alertmanager.log 2>&1 &
ps -ef |grep alertmanager
2.5.4 打开 web 页面查看

➢ 浏览器输入:http://10.10.101.114:9090/
➢ 点击 Status,选中 Targets:
在这里插入图片描述
➢ prometheus、pushgateway 和 node exporter 都是 up 状态,表示安装启动成功:
在这里插入图片描述
至此Prometheus主服务部署完成。

第3章 PromQL的介绍使用

PromQL直通车
持续更新中,关注不迷糊

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LangChain原理学习笔记

最新越发觉得AI的发展&#xff0c;对未来是一场革命&#xff0c;LangChain已经在工程设计上有了最佳实践&#xff0c;类似于AI时代的编程模型或编程框架&#xff0c;有点Spring框架的意思。之前在LangChain上也有些最佳实践&#xff0c;所以在这里分享记录下。 LangChain解决什…

有趣且重要的JS知识合集(19)前端实现图片的本地上传/截取/导出

input[file]太丑了&#xff0c;又不想去改button样式&#xff0c;那就自己实现一个上传按钮的div&#xff0c;然后点击此按钮时&#xff0c;去触发file上传的事件, 以下就是 原生js实现图片前端上传 并且按照最佳宽高比例展示图片&#xff0c;然后可以自定义截取图片&#xff0…

Unity中URP实现水效果(水的深度)

文章目录 前言一、搭建预备场景1、新建一个面片&#xff0c;使其倾斜一个角度&#xff0c;来模拟水底和岸边的效果2、随便创建几个物体&#xff0c;作为与水面接触的物体3、再新建一个面片&#xff0c;作为水面 二、开始编写水体的Shader效果1、新建一个URP基础Shader2、把水体…

redis GEO 类型原理及命令详解

目录 前言 一、GeoHash 的编码方法 二、Redis 操作GEO类型 前言 我们有一个需求是用户搜索附近的店铺&#xff0c;就是所谓的位置信息服务&#xff08;Location-Based Service&#xff0c;LBS&#xff09;的应用。这样的相关服务我们每天都在接触&#xff0c;用滴滴打车&am…

2.23通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试

驱动代码 #include <linux/init.h> #include <linux/module.h> #include <linux/of_gpio.h> #include <linux/gpio.h> #include <linux/platform_device.h> #include <linux/mod_devicetable.h>#define LED_ON _IOW(l, 1, int) #define L…

nginx的功能以及运用(编译、平滑升级、提高服务器设置、location alias 等)

nginx与apache的对比 nginx优点 nginx中INPUT OUTPUT模型 零拷贝技术 原理&#xff1a;减少内核空间和用户空间的拷贝次数&#xff0c;增加INPUT OUTPUT的效率 网络I/O 模型 同步&#xff0c;异步 &#xff1a; 消息反馈机制 阻塞和非阻塞 阻塞型I/O模型&#xff1a;不利于…

第3.3章:StarRocks数据导入——Stream Load

一、概述 Stream Load是StarRocks最为核心的导入方式&#xff0c;用户通过发送HTTP请求将本地文件或数据流导入至StarRocks中&#xff0c;其本身不依赖其他组件。 Stream Load支持csv和json两种数据文件格式&#xff0c;适用于数据文件数量较少且单个文件的大小不超过10GB 的场…

[yolov9]使用python部署yolov9的onnx模型

【框架地址】 https://github.com/WongKinYiu/yolov9 【yolov9简介】 在目标检测领域&#xff0c;YOLOv9 实现了一代更比一代强&#xff0c;利用新架构和方法让传统卷积在参数利用率方面胜过了深度卷积。 继 2023 年 1 月 正式发布一年多以后&#xff0c;YOLOv9 终于来了&a…

基于Java SSM框架实现高校失物招领管理平台系统项目【项目源码】

基于java的SSM框架实现高校失物招领管理平台系统演示 B/S结构 在B/S的结构中&#xff0c;学生可以在任何可以上网的地方访问和使用系统网站的功能&#xff0c;没有地域和时间等方面的限制&#xff0c;B/S结构是把程序完整放置到计算机网络的服务器上&#xff0c;通过计算机互联…

module ‘json‘ has no attribute ‘dumps‘

如果在使用Python的json模块时遇到AttributeError: module json has no attribute dumps错误&#xff0c;通常是因为在Python环境中json模块不支持dumps方法。这种情况可能是因为Python的json模块被重命名或修改过导致的。 解决方法可以尝试以下几种&#xff1a; 1.检查Pytho…

SpringBoot:自定义starter

点击查看&#xff1a;LearnSpringBoot08starter 点击查看&#xff1a;LearnSpringBoot08starterTest 点击查看更多的SpringBoot教程 一、主要流程 1. 先创建空的project 2. 打开空的project 结构 图选中model 点击 3. 创建 model&#xff08;Maven&#xff09;启动器 提…

【C语言】内存操作,内存函数篇---memcpy,memmove,memset和memcmp内存函数的使用和模拟实现【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为​【C语言】内存操作&#xff0c;内存函数篇---memcpy&#xff0c;memmove&#xff0c;memset和memcmp内存函数的使用和模拟实现【图文详解】&#xff0c;图文讲解四种内存函数&#xff0c;带大家更深刻理解C语言中内存函数的操作&…

Jmeter基础(3) 发起一次请求

目录 Jmeter 一次请求添加线程组添加HTTP请求添加监听器 Jmeter 一次请求 用Jmeter进行一次请求的过程&#xff0c;需要几个步骤呢&#xff1f; 1、添加线程组2、添加HTTP请求3、添加监听器&#xff0c;查看结果树 现在就打开jmeter看下如何创建一个请求吧 添加线程组 用来…

自定义股票池策略周报告---收益1.8,回撤0.7,提供实盘设置

综合交易模型已经交易了1个月了目前收益10&#xff0c;回测0.8&#xff0c;策略追求稳稳的幸福&#xff0c;细水流长&#xff0c;回测年化20&#xff0c;最大回撤8 链接自定义股票池策略周报告---收益1.8&#xff0c;回撤0.7&#xff0c;提供实盘设置 (qq.com) 实盘稳定运行2…

ctx.drawImage的canvas绘图不清晰解决方案,以及canvas高清导出

ctx.drawImage的canvas绘图不清晰 原因&#xff1a; 查资料是这么说的&#xff1a;canvas 绘图时&#xff0c;会从两个物理像素的中间位置开始绘制并向两边扩散 0.5 个物理像素。当设备像素比为 1 时&#xff0c;一个 1px 的线条实际上占据了两个物理像素&#xff08;每个像素…

Redis篇之Redis持久化的实现

持久化即把数据保存到可以永久保存的存储设备当中&#xff08;磁盘&#xff09;。因为Redis是基于内存存储数据的&#xff0c;一旦redis实例当即数据将会全部丢失&#xff0c;所以需要有某些机制将内存中的数据持久化到磁盘以备发生宕机时能够进行恢复&#xff0c;这一过程就称…

如何将建筑白模叠加到三维地球上?

​ 通过以下方法可以将建筑白模叠加到三维地球上。 方法/步骤 下载三维地图浏览器 http://www.geosaas.com/download/map3dbrowser.exe&#xff0c;安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、点击“建筑白模”菜单&…

Ubuntu20.04开启/禁用ipv6

文章目录 Ubuntu20.04开启/禁用ipv61.ipv62. 开启ipv6step1. 编辑sysctl.confstep2. 编辑网络接口配置文件 3. 禁用ipv6&#xff08;sysctl&#xff09;4. 禁用ipv6&#xff08;grub&#xff09;附&#xff1a;总结linux网络配置 Ubuntu20.04开启/禁用ipv6 1.ipv6 IP 是互联网…

面试经典150题 -- 二叉树 (总结)

总的地址 : 面试经典 150 题 - 学习计划 - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 104 . 二叉树的最大深度 104 . 二叉树的最大深度 递归 : 直接用递归访问 &#xff0c; 访问左孩子 和 右孩子 &#xff0c; 如果 存在 &#xff0c; 深度就1 &…

利用R语言进行典型相关分析实战

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…