4 Promethues监控主机和容器

目录

目录

1. 监控节点

1.1 安装Node exporter

解压包

 拷贝至目标目录

查看版本

 1.2 配置Node exporter

 1.3 配置textfile收集器

 1.4 启动systemd收集器

1.5 基于Docker节点启动node_exporter

1.6 抓取Node Exporter

 1.7 过滤收集器

 2. 监控Docker容器

2.1 运行cAdvisor

 2.2  抓取cAdvisor

 2.3 Node Exporter和cAdvisor指标

 2.3.1 USE方法

CPU利用率

计算每种CPU模式的每秒使用率

计算每台主机的平均CPU使用率 

 计算每个主机5分钟范围内使用率的平均百分比

 CPU饱和度

计算mode模式为idle的主机上的CPU数量,使用count函数做聚合:

 计算CPU饱和度

内存使用率

计算可用内存的百分比

 内存饱和度

计算内存饱和度

磁盘使用率

 计算主机使用磁盘空间的百分比

 使用正则表达式匹配多个挂载点

 计算未来使用磁盘空间趋势(提前规避磁盘用尽的风险)

 2.3.2 服务状态

 查看docker服务状态

 查看已经active的docker

 2.3.3 可用性和up指标

 2.3.4 metadata指标

 2.4 查询持久性

2.4.1 记录规则

配置记录规则

添加记录配置

更新规则组为每10秒运行一次

 3. 可视化

3.1 安装Grafana

3.1.1 在Ubuntu上安装Grafana

3.1.2 启动和配置Grafana

3.1.3 配置Grafana Web界面

采用Prometheus作为数据源

点击Data sources

 add data source

 配置Promethues地址​编辑

保存并测试配置

 3.1.4 使用仪表板

Add  visualization

 选择data sources

选择指标查询,并保存

 仪表盘查看图表结果

 图标结果


这里将在1台运行docker守护进程的unbuntu主机上进行演示。我们将在主机上安装exporter,然后配置节点和Docker指标让Promethues来抓取。

基本的主机资源监控,包括:

  • CPU
  • 内存
  • 磁盘
  • 可用性

当然月可以使用Grafana,并对收集的数据进行基本的可视化。

1. 监控节点

 Promethues使用exporter工具来暴露主机和服务上的指标,目前有很多用于各种目的的exporter。Node exporter是Go语言编写的,提供了一个可用于收集各种主机指标数据(含CPU、内存和磁盘)的库。它还有个textfile收集器,允许导出静态指标。

在监控中有时候术语“节点”可以用来指代主机。

除了exporter,还有其他支持Promethues的主机监控客户端,如collectd。

在linux主机上,下载并安装Node exporter,同时选择一个Docker守护进程主机。

官方下载地址:Releases · prometheus/node_exporter · GitHub

1.1 安装Node exporter

解压包

tar -xzf node_exporter-1.6.0.linux-amd64.tar.gz

 拷贝至目标目录

sudo cp node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin/

查看版本

/usr/local/bin/

 1.2 配置Node exporter

可以通过参数来对node_exporter进行配置,使用--help查看完整的参数列表。

node_exporter --help

默认情况下,node_exporter在端口9100上运行,并在路径/metrics上暴露指标。可以通过--web.listen-address和-web.telemetry-path参数来设置端口和路径,如下所示:

node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics"

这会将node_exporter绑定到端口9600并在路径、node-metrics上暴露指标。

 通过浏览器访问,已经暴露以下指标

 可以看到以上有许多指标,也就是说许多收集器默认都是启用的。可以通过使用 no- 前缀来修改状态。如暴露/proc/net/arp 统计信息的arp收集器是默认启动的,可以通过参数 --collector.arp控制。禁止次收集器,需要运行如下指令:

node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics" --node-collector.arp

 1.3 配置textfile收集器

textfile收集器非常有用,它允许我们暴露自定义指标。这些自定义指标可能是批处理或cron作业等无法抓起的,可能是没有exporter的源,甚至可能是为主机提供上下文的静态指标。

收集器通过扫描指定目录中的文件,提取所有格式为Promethues指标的字符串,然后暴露它们以便抓取。

在设置收集器前,需要先创建一个目录来保存指标定义文件

sudo mkdir -p /var/lib/node_exporter/textfile_collector

现在在该目录中创建一个新指标,指标在以.prom结尾的文件内定义,并且使用Promethues的特定文本格式。

特定的文本格式允许指定Promethues支持的所有指标类型,即计数型、测量型、计时型等。

 我们使用此格式创建一个包含有关此主机的元数据指标。

metadata{role="docker_server",datacenter="CD"} 1

这里包含了一个指标名称(metadata)和两个标签。一个标签role定义节点的角色。在示例中,标签的值为docker_server。另一个标签datacenter定义主机的地理位置在成都。最后,指标的值为1,表示该指标不是计数型、测量型或计时型,而是提供上下文。

接着将指标添加到textfile_collector目录下的metadata.prom文件中。

echo 'metadata{role="docker_server",datacenter="CD"} 1'|sudo tee /var/lib/node_exporter/textfile_collector/metadata.prom

 当然在真实环境中,建议使用配置管理工具来编辑该文件。比如在配置新主机时,可以从模板创建元数据指标,这样可以自动对主机和服务进行分类。

Node exporter默认加载textfile收集器,不需要通过参数指定textfile收集器,但需要指定textfile_exporter目录,以便于Node exporter知道在哪里可以找到自定义指标。因此,需要指定--collector.textfile.directory参数。

node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics" --no-collector.arp  --collector.textfile.directory="/var/lib/node_exporter/textfile_collector"

以上配置指定了textfile收集器地址,能看到对应的结果如下:

 1.4 启动systemd收集器

systemd收集器记录systemd中的服务和系统状态。这个收集器收集了很多指标,当我们不想收集其所有指标时,可以指定指标进行收集。如下我们将特定的服务列入白名单,智手机以下服务的指标:

  • docker.service  ,Docker守护进程
  • ssh.service ,SSH守护进程
  • rsyslog.service ,RSyslog守护进程

使用--collerctor.systemd.unit-whitelist参数来进行配置,它会匹配systemd的正则表达式。

1.5 基于Docker节点启动node_exporter

node_exporter --web.listen-address=":9600" --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd --collector.systemd.unit-whitelist="(docker|ssh|rsyslog).service"

1.6 抓取Node Exporter

通过配置新作业来抓取Node Exporter导出的数据。查看当前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: ["localhost:9090"]
  - job_name: "node"
    static_configs:
      - targets: ["localhost:9600"]

可以看到有两个作业,名为node的新作业和已有的prometheus的旧作业。重启Prometheus后,配置将被重新加载且服务器会开始抓取,很快能看到时间序列数据开始流入Prometheus服务器中。

 1.7 过滤收集器

Node Exporter可以返回很多指标,除了通过本地配置来控制Node Exporter在本地运行哪些收集器外,Prometheus还提供了一种方式来限制收集器从服务器端实际抓取的数据,尤其是在你无法控制正抓取的主机的配置时,这种方式很有效。

Prometheus 通过添加特定收集器列表来实现作业配置。

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: ["localhost:9090"]
  - job_name: "node"
    static_configs:
      - targets: ["localhost:9600"]
    params:
      collect[]:
        - cpu
        - meminfo
        - diskstats
        - netdev
        - netstat
        - filefd
        - filesystem
        - xfs
        - systemd
~                            

指定CPU参数访问结果如下:

 2. 监控Docker容器

Prometheus提供了几种方法来监控Docker,包括一些自定义的exporter,但一般推荐使用Google的cAdvisor工具。在Docker守护进程上,cAdvisor作为Docker容器运行,单个cAdvisor容器返回针对Docker守护进程和所有正在运行的容器指标。Prometheus支持通过它导出指标,并将数据传输到其他各种存储系统,如InfluxDB、Elasticsearch和kafka。

2.1 运行cAdvisor

由于cAdvisor只是Docker主机上的另一个容器,因此可以使用docker run命令启动它。

docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --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 google/cadvisor:latest

 启动后结果如下:

通过浏览器访问,确认它是正常运行的。

 通过metrics可以看见指标数据。

 2.2  抓取cAdvisor

我们需要告诉 Prometheus cAdvisor 是在Docker守护进程上进行的,可以在配置中添加第三个作业。

 修改配置后重启Prometheus ,即可开始进行抓取。

 2.3 Node Exporter和cAdvisor指标

现在从主机中收集总共3组独立的指标:

  • Prometheus 服务器自己的指标
  • 主机Node Exporter指标
  • 主机cAdvisor指标

 2.3.1 USE方法

USE方法关注的是使用率、饱和度和错误指标,以帮助进行性能诊断,经常被用在CPU、内存和磁盘监控。

CPU利用率

为了获得USE中的使用率,我们将使用Node Exporter收集的名为node_cpu_seconds_total的指标。如下所示:

 可以看见指标列表如下格式:

node_cpu_seconds_total{cpu="0", instance="localhost:9600", job="node", mode="idle"}

node_cpu_seconds_total 指标包含许多标签,包括instance和job标签,分别标识它来自哪个主机以及被哪个作业抓取。

当然以上的指标列表作用并不大。对于性能分析需要使用PromQL将其转换成更有用的指标。

计算每种CPU模式的每秒使用率

计算每台主机的平均CPU使用率 

 计算每个主机5分钟范围内使用率的平均百分比

 CPU饱和度

在主机上获得CPU饱和的一种方法是跟踪平均负载,实际上它是将主机上的CPU数量考虑在内的一段时间内的平均运行队列长度。平均负载少于CPU的数量通常是正常的,长时间内超过该数字的平均值则表示CPU已经饱和。

查看主机的平均负载,可以通过 node_load*指标,它显示了1分钟、5分钟和15分钟的平均负载。我们将使用1分钟的平均负载:node_load1.

计算mode模式为idle的主机上的CPU数量,使用count函数做聚合:
count by (instance) (node_cpu_seconds_total{mode="idle"})

 可以看见主机上有三个CPU。

 计算CPU饱和度

查询mode为idle,1分钟的平均负载超过主机CPU数量的2倍的结果。

node_load1 >on (instance) 2*count by (instance) (node_cpu_seconds_total{mode="idle"})

 可以看见2倍没有数据,0.1倍有数据,CPU饱和度很低。

内存使用率

Node Exporter的内存指标按内存的类型和使用率进行细分,可以以node_memory为前缀的指标列表中找到它们,如下:

 虽然关于内存的指标很多,但这里我们主要以以下指标获得使用率。

  • node_memory_MemFree_bytes:主机上的可用内存。
  • node_memory_MemTotal_bytes: 主机上的总内存。
  • node_memory_Buffers_bytes:缓冲缓存中的内存。
  • node_memory_Cached_bytes:页面缓存中的内存。

所有这些指标都是以字节为单位来表示的。

计算可用内存的百分比
(node_memory_MemTotal_bytes-(node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes))/node_memory_MemTotal_bytes*100

 内存饱和度

可通过检查内存和磁盘的读写来监控内存饱和度。可以使用从/proc/vmstat收集的两个Node Exporter指标:

  • node_vmstat_pswpin:系统每秒从磁盘读到内存的字节数。
  • node_vmstat_pswpout:系统每秒从内存读到磁盘的字节数。

两者都是自上次启动以来的字节数,以KB为单位。

计算内存饱和度

为了获取饱和度指标,我们对每个指标计算一分钟的速率,将两个速率相加再乘以1024以获得字节数。 

1024 *sum by (instance) (rate(node_vmstat_pswpin[1m])+rate(node_vmstat_pswpout[1m]))

磁盘使用率

对于磁盘,我们只测量磁盘使用情况而不是使用率、饱和度或者错误情况。这是因为在大多数情况下,它是对可视化和警报最有用的数据。Node Exporter的磁盘使用指标位于以 node_filesystem为前缀的指标列表中。如下:

 计算主机使用磁盘空间的百分比

node_filesystem_size_bytes指标显示了被监控的每个文件系统挂载的大小。可以使用与内存指标类似的查询来生成在主机上使用的磁盘空间的百分比。

(node_filesystem_size_bytes{mountpoint="/"}-node_filesystem_free_bytes{mountpoint="/"})/node_filesystem_size_bytes{mountpoint="/"}*100

与内存指标不同,我们在主机的每个挂载点都有文件系统指标。所以我们添加了mountpoint标签。特别是根文件系统"/"挂载。

如果想要监控特定挂载点,可以添加查询。如监控/run挂载点,使用查询语句如下

(node_filesystem_size_bytes{mountpoint="/run"}-node_filesystem_free_bytes{mountpoint="/run"})/node_filesystem_size_bytes{mountpoint="/run"}*100

 使用正则表达式匹配多个挂载点

将操作符从 = 更改为 =~,告诉Prometheus右侧值是正则表达式,可以同时匹配/run和/根文件。

(node_filesystem_size_bytes{mountpoint=~"/|/run"}-node_filesystem_free_bytes{mountpoint=~"/|/run"})/node_filesystem_size_bytes{mountpoint=~"/|/run"}*100

 计算未来使用磁盘空间趋势(提前规避磁盘用尽的风险)

选择1小时的时间窗口[1h],并将此时间序列快照放在predict_linear函数中。该函数使用简单的线性回归,根据以前的增长情况来确定文件系统何时会耗尽空间。该函数包括一个范围向量(即1小时时间窗口),以及未来需要预测的时间点。这些都是以秒为单位的,因此这里使用4*3600秒,即4小时。

predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h],4*3600)<0

 2.3.2 服务状态

服务状态在 node_systemd_unit_state 指标中暴露出来。如下:

 查看docker服务状态

node_systemd_unit_state{name="docker.service"}

 查看已经active的docker

服务有failed、inactive、active等状态,其中表示当前服务状态的指标的值为1.

 2.3.3 可用性和up指标

还可以使用 up指标 来监控特定节点状态。

up

 2.3.4 metadata指标

使用Node Exporter的textfile收集器来查看我们创建的metadata指标,结合日志输出到对应的matadata或许是一种比较灵活的指标上报方式。

 2.4 查询持久性

截至当前,我们在浏览器中输入表达式进行查询,虽然查询输出结果很方便,但结果还是临时存储在Prometheus服务器上的。我们可以通过以下三种方式使查询持久化:

  • 记录规则:根据查询创建新指标
  • 警报规则:从查询生成警报
  • 可视化:使用Grafana等仪表板可视化查询。

2.4.1 记录规则

记录规则使一种根据已有时间序列计算新时间序列(特别使聚合时间序列)的方法,这样做是为了:

  • 跨多个时间序列生成聚合。
  • 预先计算消耗大的查询。
  • 产生可用于生成警报的时间序列。

配置记录规则

记录规则存储在Prometheus服务器上,位于Prometheus服务器加载的文件中。规则是自动计算的,频率则是由prometheus.yml配置文件中的global块中的evaluation_interval参数控制的。

global:
  scrape_interval: 15s 
  evaluation_interval: 15s 

规则文件在 Prometheus配置文件的rule_files块中指定

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
 

在Prometheus配置文件prometheus.yml的rule_files块中添加这个文件。

rule_files:
  - "rules/node_rules.yml"

添加记录配置

把CPU、内存和磁盘计算转换为记录规则。监控主机时,要对节点预先计算这三个指标的查询,这样就可以将这些计算作为指标,然后可以设置警报或者通过Grafana等仪表板进行可视化。

groups:
- name: node_rules
  rules:
  - record: instance:node_cpu:avg_rate5m
    expr: 100 -avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) *100

记录规则在规则组中定义,这里的规则组叫做node_rules。规则组名称在服务器中必须是唯一的。规则组内的规则以固定间隔顺序执行。默认情况下,通过全局evaluate_interval来控制的。

规则组内规则执行的顺序性质意味着你可以在后续规则中使用之前创建的规则。这允许你根据规则创建指标,然后在之后的规则中重用这些指标。这仅在规则组内适用,规则组是并行运行的,因此不建议跨组使用规则。

更新规则组为每10秒运行一次
groups:
- name: node_rules
  interval: 10s
  rules:
  - record: instance:node_cpu:avg_rate5m
    expr: 100 -avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) *100

其中record记录规则产生的新的时间序列命名一般的推荐格式为:

level:metric:operations

(1)level 表示聚合级别
(2)metric 是指标名称
(3)operations 是应用于指标的操作列表,一般最新的操作放在前面。

这里cpu查询命名将为:instance:node_cpu:avg_rate5m

 此外我们通过指定一个expr字段来保存生成新时间序列的查询。通过添加labels块向新时间序列添加新标签。根据规则创建的时间序列会继承用于创建它们的时间序列的相关标签,但你也可以添加或者覆盖标签。如下。

groups:
- name: node_rules
  interval: 10s
  rules:
  - record: instance:node_cpu:avg_rate5m
    expr: 100 -avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) *100
    labels:
      metric_type: aggregation                                 

让我们再创建一些查询,并添加它们。

groups:
- name: node_rules
  interval: 10s
  rules:
  - record: instance:node_cpu:avg_rate5m
    expr: 100 -avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) *100
    labels:
      metric_type: aggregation
  - record: instance:node_memory_usage:percentage
    expr: (node_memory_MemTotal_bytes-(node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes))/node_memory_MemTotal_bytes*100
  - record: instance:root:node_filesystem_usage:percentage
    expr: (node_filesystem_size_bytes{mountpoint="/"}-node_filesystem_free_bytes{mountpoint="/"})/node_filesystem_size_bytes{mountpoint="/"}*100

ps:需要重启Prometheus服务器或者进行SIGHUP才能激活新规则。

 3. 可视化

Prometheus虽然有内置的仪表板和图形界面,但非常简单,通常最适合查看指标和呈现单个图表。为了给Prometheus添加一个功能更全面的可视化界面,该平台选择与开源仪表板工具Grafana集成。Grafana接受来自不同数据源(如Graphite、Elasticsearch和Promethues)的数据,然后提供可视化仪表板。

3.1 安装Grafana

Grafana支持在Linux、windows、mac上进行安装部署,这里选择在Linux上部署。

3.1.1 在Ubuntu上安装Grafana

官方下载及安装教程见: https://grafana.com/grafana/download

单节点安装只需要下载 tar.gz包就好,如grafana-enterprise-10.0.3.linux-amd64.tar.gz,解压后启动脚本。

3.1.2 启动和配置Grafana

有两个地方可以配置Grafana: 本地配置文件和Grafana Web界面。本地配置文件主要用于配置服务器级的设置(如身份验证和网络),文件在不同系统的位置不一样,安装方式也会导致文件不一样。

笔者是通过tar.gz压缩包安装的,该文件在/usr/local/grafana/grafana-10.0.3/conf/defaults.ini

 启动指令:

sudo ./grafana-server

3.1.3 配置Grafana Web界面

Grafana是一个基于Go的Web应用服务,默认在端口3000上运行(注意访问Linux是需要开放该端口权限)。默认的登录账号和密码都为admin和admin,当然可以在上面提到的defaults.ini配置文件中的[security]部分进行控制。

 当然也可以配置用户身份验证,包括与Google验证、Github验证或者本地用户身份验证的集成。Grafana配置文档中包含用户管理和身份验证。针对我们的意图,我们将假设控制台位于内部环境中并继续使用本地身份验证。

采用Prometheus作为数据源

首先将Grafana与我们的Prometheus数据关联起来。

点击Data sources

 add data source

这里选择Promethues

 配置Promethues地址
保存并测试配置

滑动到该页面最下方,点击save&test,如果出现以下页面就算配置成功。

 3.1.4 使用仪表板

退回到主页,现在可以看见data sources已经配置成功,可以开始配置仪表盘了。

 下面以创建CPU核数为例子。

Add  visualization

 选择data sources

这里只能选择上面配置的promethues的datasources。

选择指标查询,并保存

 仪表盘查看图表结果

 图标结果

 具体的教程见:Get started | Grafana documentation

当然Mysql和Redis的监控比较模板化,可以预先构建Grafana仪表板以满足其监控需求。

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

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

相关文章

matplotlib绘制方波圆周分解动画

1 方波的圆周分解 在学习傅里叶变换的时候&#xff0c;有一个经典的示例是方波的分解。我们知道&#xff0c;方波可以分解为无数个正弦波的叠加。而正弦波&#xff0c;又可以看作是圆周运动在一条直线上的投影。当时为了理解这个事情&#xff0c;恐怕大家也花了不少时间。 学…

8.Winform界面打包成DLL提供给其他的项目使用

背景 希望集成一个Winform的框架&#xff0c;提供权限菜单&#xff0c;根据权限出现各个Winform子系统的菜单界面。不希望把所有的界面都放放在同一个解决方案下面。用各个子系统建立不同的解决方案&#xff0c;建立代码仓库&#xff0c;进行管理。 实现方式 将Winform的UI界…

HCIP OSPF+BGP综合实验

题目 1、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3、整张拓扑均使用私网地址进行配置。 4、整张网络中&#xff0c;运行OSPF协议或者BGP协议…

C++ 拷贝构造函数

拷贝构造函数是一种特殊的构造函数&#xff0c;具有一般构造函数的所有特性&#xff0c;其形参是本类的对象的引用。其作用是使用一个已经存在的对象&#xff08;由拷贝构造函数的参数指定&#xff09;&#xff0c;去初始化同类的一个新对象。 如果程序员没有定义类的拷贝构造函…

PySpark介绍与安装

Spark是什么 定义&#xff1a;Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算TB、…

SQL编译优化原理

最近在团队的OLAP引擎上做了一些SQL编译优化的工作&#xff0c;整理到了语雀上&#xff0c;也顺便发在博客上了。SQL编译优化理论并不复杂&#xff0c;只需要掌握一些关系代数的基础就比较好理解&#xff1b;比较困难的在于reorder算法部分。 文章目录 基础概念关系代数等价 j…

Delphi 开发的QR二维码生成工具,开箱即用

目录 一、基本功能&#xff1a; 二、使用说明&#xff1a; 三、操作演示gif 四、下载链接 在日常的开发中&#xff0c;经常需要将一个链接生成为二维码图片&#xff0c;特别是在进行支付开发的时候&#xff0c;因为我们支付后台获取了支付链接&#xff0c;需要变成二维码扫…

《ChatGPT原理最佳解释,从根上理解ChatGPT》

【热点】 2022年11月30日&#xff0c;OpenAI发布ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c; 即聊天机器人程序 &#xff0c;开启AIGC的研究热潮。 ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够…

Java之Map接口

文章目录 简述Map中key-value特点 Map接口的常用方法Map的主要实现类&#xff1a;HashMapHashMap概述 Map实现类之二&#xff1a;LinkedHashMapMap实现类之三&#xff1a;TreeMapMap实现类之四&#xff1a;Hashtable&#xff08;古老实现类&#xff09;Map实现类之五&#xff1…

结构思考力-有效提升你的工作效率20倍以上

结构思考力是一种帮助人们察觉并改善自身思考结构的思考艺术&#xff0c;它将人们的思维表达以一种逻辑结构的形式来表示&#xff0c;从而简化人与人之间的沟通成本&#xff0c;提高工作效率。每个人思考问题的方式不同&#xff0c;不同的思考结构使人们的注意力的方向也不同&a…

寻找丢失数字:数学与位运算的解密之旅

本篇博客会讲解力扣“268. 丢失的数字”的解题思路&#xff0c;这是题目链接。 注意进阶中的描述&#xff1a;你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题&#xff1f;这里我会讲解两种思路&#xff0c;它们的时间复杂度是O(N)&#xff0c;空间复杂度是O(1)…

3.playbook剧本二

文章目录 playbook二Roles模块roles模式安装LNMP创建nginxfiles目录handlers目录tasks目录templates目录vars目录 创建mysqltasks目录 创建phpfiles目录handlers目录tasks目录templates目录vars目录 创建LNMP剧本文件 playbook二 Roles模块 角色的作用&#xff1a;把playbook…

Linux CentOS系统怎么下载软件

Linux CenOS系统想要下载软件可以在Linux内置的应用商店&#xff0c;并通过Yum 包管理器来下载&#xff08;直接使用yum命令下载软件&#xff09; 在Linux系统中&#xff0c;Yum&#xff08;Yellowdog Updater, Modified&#xff09;是用于管理RPM软件包的一个包管理器。 安装…

golang自带的命令行解析库flag库实践

1. 简介 flag用于解析命令行选项。有过类 Unix 系统使用经验的童鞋对命令行选项应该不陌生。例如命令ls -al列出当前目录下所有文件和目录的详细信息&#xff0c;其中-al就是命令行选项。 命令行选项在实际开发中很常用&#xff0c;特别是在写工具的时候。 指定配置文件的路径…

windows编译新版本linphone

目录​​​​​​​ 环境 获取源码(使用5.0.0版本5.3.0-alpha有问题编译不过) 编译环境准备 编译&#xff08;使用ninja&#xff09; 编译&#xff08;不适用使用ninja&#xff09; 报错解决 linphone-desktop是一款基于SIP的标准开源网络电话系统&#xff0c;它使用了Qt…

Bug的严重等级和优先级别与分类

一、 Bug的严重等级定义&#xff1a; 1、 Blocker 即系统无法执行、崩溃或严重资源不足、应用模块无法启动或异常退出、无法测试、造成系统不稳定。 严重花屏内存泄漏 用户数据丢失或破坏系统崩溃/死机/冻结模块无法启动或异常退出严重的数值计算错误功能设计与需求严重不符其…

危化品行业防雷检测综合解决方案

危化品是指具有毒害、腐蚀、爆炸、燃烧、助燃等性质&#xff0c;能够对人体、设施或者环境造成危害的化学品。危化品的生产、储存、运输、使用等过程中&#xff0c;都存在着遭受雷击引发火灾或者爆炸事故的风险。因此&#xff0c;对危化品场所进行防雷检测&#xff0c;是保障危…

科研周报1

时间&#xff1a;2023-07-26至2023-08-02 overleaf (LaTex) 生成并排子图 查看以下这段与chatgpt的对话&#xff1a; https://chat.openai.com/share/e7fbdccd-2847-4dbb-b816-db2b7455c628 如果要生成上下排列的子图&#xff0c;将\hfill更换为\即可 其他 前馈控制 参考…

SpringBoot 实现数据加密脱敏(注解 + 反射 + AOP)

SpringBoot 实现数据加密脱敏&#xff08;注解 反射 AOP&#xff09; 场景&#xff1a;响应政府要求&#xff0c;商业软件应保证用户基本信息不被泄露&#xff0c;不能直接展示用户手机号&#xff0c;身份证&#xff0c;地址等敏感信息。 根据上面场景描述&#xff0c;我们…

简单工厂模式VS策略模式

简单工厂模式VS策略模式 今天复习设计模式&#xff0c;由于简单工厂模式和策略模式太像了&#xff0c;重新整理梳理一下 简单工厂模式MUL图&#xff1a; 策略模式UML图&#xff1a; 1、简单工厂模式中只管创建实例&#xff0c;具体怎么使用工厂实例由调用方决定&#xff0c…