【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(下)

news2024/12/23 16:26:55

目录

一、promethues 采集 tomcat 监控数据

1.1 制作 tomcat 镜像

1.2 基于上面的镜像创建一个 tomcat 实例

1.3 采集数据

二、promethues 采集 redis 监控数据

2.1 配置一个 Redis 的 exporter

2.2 查看 Prometheus

2.3 grafana 导入模板

三、Prometheus 监控 mysql

3.1 安装 mysql

3.2 安装 mysql_exporter

3.3 登陆 mysql 为 mysql_exporter 创建账号并授权

3.4 创建 mysql 配置文件,运行时可免密码连接数据库

3.5 启动 mysql_exporter 客户端

3.6 修改 prometheus-alertmanager-cfg.yaml 文件

3.7 访问 Prometheus

四、Prometheus 监控 Nginx

4.1 下载 nginx-module-vts 编译模块

4.2 安装 nginx

4.3 安装 nginx-vts-exporter

4.4 修改 prometheus-alertmanager-cfg.yaml 文件

4.5 grafana 界面导入 nginx 监控模板

五、prometheus 监控 mongodb

5.1 下载 mongodb 和 mongodb_exporter 镜像

5.2 启动 mongodb

5.3 启动 mongo_exporter

5.4 修改 prometheus-alertmanager-cfg.yaml 文件

六、Pushgateway

6.1 Pushgateway 简介

6.2 Pushgateway 优点

6.3 Pushgateway 缺点

6.4 安装 Pushgateway

6.5 修改 prometheus-alertmanager-cfg.yaml 文件

6.6 测试推送数据到 pushgateway

6.7 把数据上报到 pushgateway 


本篇文章所用到的资料文件下载地址:Prometheus常规服务-kubernetes文档类资源-CSDN下载

一、promethues 采集 tomcat 监控数据

tomcat_exporter 项目地址:GitHub - nlighten/tomcat_exporter: A Prometheus exporter for Apache Tomcat

把上面这几个文件上传到控制节点 master

[root@k8s-master1 tomcat]# pwd
/root/prometheus/tomcat
[root@k8s-master1 tomcat]# ls
metrics.war             simpleclient_common-0.8.0.jar   simpleclient_servlet-0.8.0.jar     tomcat_exporter_servlet-0.0.12.war
simpleclient-0.8.0.jar  simpleclient_hotspot-0.8.0.jar  tomcat_exporter_client-0.0.12.jar

1.1 制作 tomcat 镜像

[root@k8s-master1 tomcat]# vim Dockerfile
FROM tomcat:8.5-jdk8-corretto
ADD metrics.war /usr/local/tomcat/webapps/
ADD simpleclient-0.8.0.jar  /usr/local/tomcat/lib/
ADD simpleclient_common-0.8.0.jar /usr/local/tomcat/lib/
ADD simpleclient_hotspot-0.8.0.jar /usr/local/tomcat/lib/
ADD simpleclient_servlet-0.8.0.jar /usr/local/tomcat/lib/
ADD tomcat_exporter_client-0.0.12.jar /usr/local/tomcat/lib/

# 构建镜像
[root@k8s-master1 tomcat]# docker build -t='k8s/tomcat_prometheus:v1' .

# 打包镜像
[root@k8s-master1 tomcat]# docker save -o tomcat_exporter.tar.gz k8s/tomcat_prometheus:v1 

# 传输到 node1、node2 节点
[root@k8s-master1 tomcat]# scp tomcat_exporter.tar.gz root@192.168.78.144:/root
[root@k8s-master1 tomcat]# scp tomcat_exporter.tar.gz root@192.168.78.145:/root

# 在工作节点解压
[root@k8s-node1 ~]# docker load -i tomcat_exporter.tar.gz 
[root@k8s-node2 ~]# docker load -i tomcat_exporter.tar.gz 

1.2 基于上面的镜像创建一个 tomcat 实例

[root@k8s-master1 tomcat]# vim deploy-tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: default
spec:
  selector: 
    matchLabels: 
     app: tomcat
  replicas: 2 
  template: 
    metadata:
      labels:
        app: tomcat
      annotations:
        prometheus.io/scrape: 'true'
    spec:
      containers:
      - name: tomcat
        image: k8s/tomcat_prometheus:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
        securityContext: 
          privileged: true

[root@k8s-master1 tomcat]# kubectl apply -f deploy-tomcat.yaml 
[root@k8s-master1 tomcat]# kubectl get pods -o wide 
NAME                                READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
tomcat-deployment-b8cdddf47-828fg   1/1     Running   0          12s   10.244.169.147   k8s-node2   <none>           <none>
tomcat-deployment-b8cdddf47-g5485   1/1     Running   0          12s   10.244.36.86     k8s-node1   <none>           <none>

1.3 采集数据

[root@k8s-master1 tomcat]# kubectl get pods -n monitor-sa 
NAME                                READY   STATUS    RESTARTS      AGE
node-exporter-98zvk                 1/1     Running   6 (22h ago)   2d23h
node-exporter-9qb2g                 1/1     Running   6 (22h ago)   2d23h
node-exporter-t7q4g                 1/1     Running   6 (22h ago)   2d23h
prometheus-server-bf4569646-plh6p   2/2     Running   2 (22h ago)   24h

# 动态修改 Prometheus
[root@k8s-master1 tomcat]# kubectl edit pods -n monitor-sa prometheus-server-bf4569646-plh6p 
······
apiVersion: v1
kind: Pod
metadata:
  annotations:
    cni.projectcalico.org/podIP: 10.244.36.82/32
    cni.projectcalico.org/podIPs: 10.244.36.82/32
    prometheus.io/scrape: "true"        # 把 false 改为 true,表示允许被 Prometheus 抓取数据
······

在 promethues 上可以看到监控到的 tomcat 的两个 pod:

二、promethues 采集 redis 监控数据

2.1 配置一个 Redis 的 exporter

我们通过 redis 进行暴露监控:

[root@k8s-master1 redis]# pwd
/root/prometheus/redis
[root@k8s-master1 redis]# vim redis.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:4
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379
      - name: redis-exporter
        image: oliver006/redis_exporter:latest
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 9121
---
kind: Service
apiVersion: v1
metadata: 
  name: redis 
  namespace: kube-system
  annotations:
    prometheus.io/scrape: "true"
    prometheus.io/port: "9121"
spec:
  selector:
   app: redis
  ports:
  - name: redis
    port: 6379
    targetPort: 6379
  - name: prom
    port: 9121
    targetPort: 9121

[root@k8s-master1 redis]# kubectl apply -f redis.yaml 

[root@k8s-master1 redis]# kubectl get pods -n kube-system | grep redis
redis-bd78c4cb5-6gbqb                      2/2     Running   0             70s

        redis 这个 Pod 中包含了两个容器,一个就是 redis 本身的主应用,另外一个容器就是redis_exporter;由于 Redis 服务的 metrics 接口在 redis-exporter 9121 上,所以我们添加了prometheus.io/port=9121 这样的 annotation 在 prometheus 就会自动发现 redis 了。

2.2 查看 Prometheus

已经监控到 redis:

2.3 grafana 导入模板

在 grafana 导入 redis 的 json 文件:Redis Cluster-1571393212519.json,监控界面如下:

三、Prometheus 监控 mysql

3.1 安装 mysql

方式一:

[root@k8s-master1 mysql]# pwd
/root/prometheus/mysql
[root@k8s-master1 mysql]# yum install -y mysql mariadb
[root@k8s-master1 mysql]# systemctl start mariadb

我 yum 安装 mysql 不成功,启动不起来,故使用方式二!

方式二:

可以查看我的这篇文章:CentOS 7 安装&卸载 MySQL 8 详细图文教程_Stars.Sky的博客-CSDN博客_centos7卸载mysql8

3.2 安装 mysql_exporter

# 上传 mysqld_exporter-0.10.0.linux-amd64.tar.gz 文件
[root@k8s-master1 mysql]# ls
mysqld_exporter-0.10.0.linux-amd64.tar.gz

[root@k8s-master1 mysql]# tar -zxvf mysqld_exporter-0.10.0.linux-amd64.tar.gz 

[root@k8s-master1 mysql]# cd mysqld_exporter-0.10.0.linux-amd64/

[root@k8s-master1 mysqld_exporter-0.10.0.linux-amd64]# cp -ar mysqld_exporter /usr/local/bin/

[root@k8s-master1 mysqld_exporter-0.10.0.linux-amd64]# chmod +x /usr/local/bin/mysqld_exporter

3.3 登陆 mysql 为 mysql_exporter 创建账号并授权

[root@k8s-master1 mysql]# mysql -uroot -p
# 创建数据库用户
mysql> CREATE USER 'mysql_exporter'@'localhost' IDENTIFIED BY 'Abcdef123!.';
Query OK, 0 rows affected (0.01 sec)

# 对 mysql_exporter 用户授权
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'localhost';
Query OK, 0 rows affected (0.01 sec)

# exit 退出mysql
mysql> exit
Bye

3.4 创建 mysql 配置文件,运行时可免密码连接数据库

[root@k8s-master1 mysqld_exporter-0.10.0.linux-amd64]# pwd
/root/prometheus/mysql/mysqld_exporter-0.10.0.linux-amd64
[root@k8s-master1 mysqld_exporter-0.10.0.linux-amd64]# vim my.cnf
[client]
user=mysql_exporter
password=Abcdef123!.

3.5 启动 mysql_exporter 客户端

[root@k8s-master1 mysqld_exporter-0.10.0.linux-amd64]# nohup ./mysqld_exporter --config.my-cnf=./my.cnf &

# mysqld_exporter 的监听端口是 9104
[root@k8s-master1 mysqld_exporter-0.10.0.linux-amd64]# tail nohup.out 
time="2023-01-16T11:09:07+08:00" level=info msg="Starting mysqld_exporter (version=0.10.0, branch=master, revision=80680068f15474f87847c8ee8f18a2939a26196a)" source="mysqld_exporter.go:460" 
time="2023-01-16T11:09:07+08:00" level=info msg="Build context (go=go1.8.1, user=root@3b0154cd9e8e, date=20170425-11:24:12)" source="mysqld_exporter.go:461" 
time="2023-01-16T11:09:07+08:00" level=error msg="Error pinging mysqld: this authentication plugin is not supported" source="mysqld_exporter.go:268" 
time="2023-01-16T11:09:07+08:00" level=info msg="Listening on :9104" source="mysqld_exporter.go:479"

3.6 修改 prometheus-alertmanager-cfg.yaml 文件

[root@k8s-master1 prometheus]# pwd
/root/prometheus

# 添加如下内容
[root@k8s-master1 prometheus]# vim prometheus-alertmanager-cfg.yaml 
······
    - job_name: 'mysql'
      static_configs:
      - targets: ['192.168.78.143:9104']    # 安装 mysql 的 节点 ip
  rules.yml: |
    groups:
    - name: example
······

[root@k8s-master1 prometheus]# kubectl apply -f prometheus-alertmanager-cfg.yaml 

[root@k8s-master1 prometheus]# kubectl delete -f prometheus-alertmanager-deploy.yaml 

[root@k8s-master1 prometheus]# kubectl apply -f prometheus-alertmanager-deploy.yaml 

3.7 访问 Prometheus

四、Prometheus 监控 Nginx

4.1 下载 nginx-module-vts 编译模块

# 把 nginx-module-vts-master.zip 上传到 master 节点
[root@k8s-master1 nginx]# pwd
/root/prometheus/nginx
[root@k8s-master1 nginx]# ls
nginx-module-vts-master.zip

[root@k8s-master1 nginx]# unzip nginx-module-vts-master.zip 
[root@k8s-master1 nginx]# mv nginx-module-vts-master /usr/local/

4.2 安装 nginx

# 上传 nginx-1.15.7.tar.gz 安装包
[root@k8s-master1 nginx]# tar -zxvf nginx-1.15.7.tar.gz 

[root@k8s-master1 nginx]# cd nginx-1.15.7/

[root@k8s-master1 nginx-1.15.7]# ./configure  --prefix=/usr/local/nginx --with-http_gzip_static_module --with-http_stub_status_module --with-http_ssl_module --with-pcre --with-file-aio --with-http_realip_module --add-module=/usr/local/nginx-module-vts-master

[root@k8s-master1 nginx-1.15.7]# make && make install

# 修改 nginx 配置文件
[root@k8s-master1 nginx-1.15.7]# vim /usr/local/nginx/conf/nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    vhost_traffic_status_zone;

    sendfile        on;

    keepalive_timeout  65;


    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;
            index  index.html index.htm;
        }

        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;
        }

    }


}

# 测试 nginx 配置文件是否正确
[root@k8s-master1 nginx-1.15.7]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

# 启动 nginx
[root@k8s-master1 nginx-1.15.7]# /usr/local/nginx/sbin/nginx

访问 http://192.168.78.143/status 可以看到 nginx 监控数据:

4.3 安装 nginx-vts-exporter

GitHub 项目地址:GitHub - hnlq715/nginx-vts-exporter: Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption

# 上传 nginx-module-vts-master.zip 文件
[root@k8s-master1 nginx]# pwd
/root/prometheus/nginx
[root@k8s-master1 nginx]# ls
nginx-1.15.7  nginx-1.15.7.tar.gz  nginx-module-vts-master.zip  nginx-vts-exporter-0.5.zip

[root@k8s-master1 nginx]# unzip nginx-vts-exporter-0.5.zip 
[root@k8s-master1 nginx]# mv nginx-vts-exporter-0.5 /usr/local/
[root@k8s-master1 nginx]# chmod +x /usr/local/nginx-vts-exporter-0.5/bin/nginx-vts-exporter
[root@k8s-master1 nginx]# cd /usr/local/nginx-vts-exporter-0.5/bin/
[root@k8s-master1 bin]# nohup ./nginx-vts-exporter -nginx.scrape_uri http://192.168.78.143/status/format/json &

注意:http://192.168.78.143/status/format/json 这个地方的 ip 地址是 nginx 的 IP 地址;nginx-vts-exporter 的监听端口是 9913。

4.4 修改 prometheus-alertmanager-cfg.yaml 文件

# 添加如下 job
[root@k8s-master1 prometheus]# vim prometheus-alertmanager-cfg.yaml 
······
    - job_name: 'nginx'
      scrape_interval: 5s
      static_configs:
      - targets: ['192.168.78.143:9913']
······

[root@k8s-master1 prometheus]# kubectl apply -f prometheus-alertmanager-cfg.yaml 

[root@k8s-master1 prometheus]# kubectl delete -f prometheus-alertmanager-deploy.yaml 

[root@k8s-master1 prometheus]# kubectl apply -f prometheus-alertmanager-deploy.yaml 

注意: - targets: ['192.168.124.16:9913'] 这个 ip 地址是 nginx-vts-exporter 程序所在机器的 ip 地址。

4.5 grafana 界面导入 nginx 监控模板

查看 Prometheus

在 grafana 导入 nginx-vts-stats_rev2.json 模板

五、prometheus 监控 mongodb

5.1 下载 mongodb 和 mongodb_exporter 镜像

[root@k8s-master1 mongodb]# docker pull mongo
[root@k8s-master1 mongodb]# docker pull percona/mongodb_exporter:0.34.0

5.2 启动 mongodb

[root@k8s-master1 mongodb]# pwd
/root/prometheus/mongodb
[root@k8s-master1 mongodb]# docker run -d --name mongodb -p 27017:27017 -v /root/prometheus/mongodb:/data/db mongo

# 创建 mongo 账号密码,给 mongodb_exporter 连接 mongo 用
# 登录到容器
[root@k8s-master1 mongodb]# docker exec -it 6c1168199b09 mongo admin

# 设置密码
> use admin
> db.createUser({ user: 'admin', pwd: 'admin111111', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
> exit

5.3 启动 mongo_exporter

[root@k8s-master1 mongodb]# docker run -d --name mongodb_exporter -p 30056:9216 percona/mongodb_exporter:0.34.0 --mongodb.uri mongodb://admin:admin111111@192.168.78.143:27017

注:admin:admin111111 这个就是上面启动 mongodb 后设置的密码,@ 后面接 mongodb 的 ip 和端口。

5.4 修改 prometheus-alertmanager-cfg.yaml 文件

# 添加一个 job_name
[root@k8s-master1 prometheus]# vim prometheus-alertmanager-cfg.yaml 
······
    - job_name: 'mongodb'
      scrape_interval: 5s
      static_configs:
      - targets: ['192.168.78.143:30056']
······

[root@k8s-master1 prometheus]# kubectl apply -f prometheus-alertmanager-cfg.yaml 

[root@k8s-master1 prometheus]# kubectl delete -f prometheus-alertmanager-deploy.yaml 

[root@k8s-master1 prometheus]# kubectl apply -f prometheus-alertmanager-deploy.yaml 

访问 Prometheus:

六、Pushgateway

6.1 Pushgateway 简介

        Pushgateway 是 prometheus 的一个组件,prometheus server 默认是通过 exporter 主动获取数据(默认采取 pull 拉取数据),pushgateway 则是通过被动方式推送数据到 prometheus server,用户可以写一些自定义的监控脚本把需要监控的数据发送给 pushgateway, 然后pushgateway 再把数据发送给 Prometheus server。

6.2 Pushgateway 优点

        Prometheus 默认采用定时 pull 模式拉取 targets 数据,但是如果不在一个子网或者防火墙,prometheus 就拉取不到 targets 数据,所以可以采用各个 target 往 pushgateway 上 push 数据,然后 prometheus 去 pushgateway 上定时 pull 数据。

        在监控业务数据的时候,需要将不同数据汇总, 汇总之后的数据可以由 pushgateway 统一收集,然后由 Prometheus 统一拉取。

6.3 Pushgateway 缺点

  • Prometheus 拉取状态只针对 pushgateway,不能对每个节点都有效;
  • Pushgateway 出现问题,整个采集到的数据都会出现问题;
  • 监控下线,prometheus 还会拉取到旧的监控数据,需要手动清理 pushgateway不要的数据。

6.4 安装 Pushgateway

# 安装 pushgateway
[root@k8s-master1 prometheus]# docker pull prom/pushgateway

# 启动容器
[root@k8s-master1 prometheus]# docker run -d --name pushgateway -p 9091:9091 prom/pushgateway

在浏览器访问 192.168.78.143:9091 出现如下 ui 界面:

6.5 修改 prometheus-alertmanager-cfg.yaml 文件

# 添加如下 job
[root@k8s-master1 prometheus]# vim prometheus-alertmanager-cfg.yaml 
······
    - job_name: 'pushgateway'
      scrape_interval: 5s
      static_configs:
      - targets: ['192.168.78.143:9091']
      honor_labels: true
······

[root@k8s-master1 prometheus]# kubectl apply -f prometheus-alertmanager-cfg.yaml 

[root@k8s-master1 prometheus]# kubectl delete -f prometheus-alertmanager-deploy.yaml 

[root@k8s-master1 prometheus]# kubectl apply -f prometheus-alertmanager-deploy.yaml

在 prometheus 的 targets 列表可以看到 pushgateway:

6.6 测试推送数据到 pushgateway

# 向 {job="test_job"} 添加单条数据
[root@k8s-master1 prometheus]# echo "metric 3.6" | curl --data-binary @- http://192.168.78.143:9091/metrics/job/test_job

注:--data-binary 表示发送二进制数据,它是使用 POST 方式发送的!

查看 pushgateway,这三个指标都可以在 Prometheus 看到:

# 添加复杂数据
cat <<EOF | curl --data-binary @- http://192.168.78.143:9091/metrics/job/test_job/instance/test_instance
#TYPE node_memory_usage gauge
node_memory_usage 36
# TYPE memory_total gauge
node_memory_total 36000
EOF

# 删除某个组下某个实例的所有数据
curl -X DELETE http://192.168.78.143:9091/metrics/job/test_job/instance/test_instance

# 删除某个组下的所有数据
curl -X DELETE http://192.168.78.143:9091/metrics/job/test_job

 

6.7 把数据上报到 pushgateway 

        在被监控服务所在的机器配置数据上报,想要把 192.168.78.143 这个机器的内存数据上报到pushgateway,下面步骤需要在 192.168.78.143 操作:

# 编写脚本
[root@k8s-master1 prometheus]# vim push.sh
#!/bin/bash
node_memory_usages=$(free -m | grep Mem | awk '{print $3/$2*100}')
job_name="memory"
instance_name="192.168.78.143"
cat <<EOF | curl --data-binary @- http://192.168.78.143:9091/metrics/job/$job_name/instance/$instance_name
#TYPE node_memory_usages  gauge
node_memory_usages $node_memory_usages
EOF

# 设置计划任务,定时上报数据
[root@k8s-master1 prometheus]# chmod +x push.sh 
[root@k8s-master1 prometheus]# crontab -e
*/1 * * * * /usr/bin/bash /root/prometheus/push.sh

打开 pushgateway web ui 界面,可看到如下:

        注意:从上面配置可以看到,我们上传到 pushgateway 中的数据有 job 也有 instance,而prometheus 配置 pushgateway 这个 job_name 中也有 job 和 instance。这个 job 和 instance 是指pushgateway 实例本身,添加 honor_labels: true 参数,可以避免 promethues 的 targets 列表中的 job_name 是 pushgateway 的 job 、instance 和上报到 pushgateway 数据的 job 和 instance 冲突。 

上一篇文章:【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(上)_Stars.Sky的博客-CSDN博客

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

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

相关文章

【微服务】Nacos 前端设计

目录 一、背景 二、选型 React 1、Vue vs React vs Angular 1.1、npm trends 2、GitHub Stats 3、根据自身情况选型 4、现状 5、小结 6、React/Vue ⽣态 三、方案 &#x1f496;微服务实战 &#x1f496; Spring家族及微服务系列文章 一、背景 我们需要提供⼀个简单…

Xilinx关于Aurora IP核仿真和使用

平台&#xff1a;vivado2017.4芯片&#xff1a;xc7k325tfbg676-2 (active)关于Aurora的开发学习。使用xilinx官方提供的IP核。官方资料&#xff0c;pg046-aurora-8b10b.pdf和pg074-aurora-64b66b-en-us-12.0.pdf。IP核的生成步骤首先在IP Catalog中搜索Aurora IP核关于此IP有两…

SpringBoot指标监控

目录 一、SpringBoot Actuator 1、简介 2、1.x与2.x的不同 3、如何使用 二、Actuator Endpoint 1、最常使用的端点 2、Health Endpoint 3、Metrics Endpoint 4、管理Endpoints 1、开启与禁用Endpoints 2、暴露Endpoints 三、定制 Endpoint 1、定制 Health 信息 2…

RepPoints原理与代码解析

paper&#xff1a;RepPoints: Point Set Representation for Object Detectioncode&#xff1a;https://github.com/microsoft/RepPoints背景在目标检测中&#xff0c;包含图像矩形区域的边界框bounding box作为处理的基本元素&#xff0c;贯穿整个检测流程&#xff0c;从ancho…

DevOps利器之一Docker

一、背景本篇文章主要阐述Docker在DevOps中的应用与价值&#xff0c;Docker部署与安装&#xff1b;因为搭建DevOps流程中所应用的工具及框架都部署到Docker&#xff0c;所以首先介绍Docker为后续做准备。Docker的主要目标是Build&#xff0c;Ship and Run Any App,Anywhere&…

Jitpack使用指南:maven-publish如虎,jitpack如翼 【安卓Java组件化模块化】【更多gradle技巧】

上文总结了三种多模块开发的方法。 第一种&#xff1a;在setting.gradle中定义子模块然后 api Project(:...)&#xff0c;直接引用 。第二种&#xff0c;使用 maven-publish 部署至本地仓库第三种&#xff0c;使用 jitpack.io 等部署至远程服务器 我的第一个开源项目就依次用…

Mysql之增强查询

增强查询主要是对之前一些指令的补充 查询增强 主要针对单表查询的增强操作&#xff0c;也是上面一些细节的补充 -- 使用where语句 -- 查找1991.1.1后入职的员工 -- 主要是介绍在mysql中日期类型可以直接比较&#xff0c;需要注意格式 SELECT * FROM empWHERE hiredate &g…

【异常】记一次因修复漏洞扫描导致SpringSecurity出现的循环依赖问题

一、循环依赖问题 APPLICATION FAILED TO START Description: The dependencies of some of the beans in the application context form a cycle: ┌─────┐ | springSecurityConfig (field private XXXX.config.MyauthenticationProvider XXXX.config.SpringSecurityC…

十五天学会Autodesk Inventor,看完这一系列就够了(十),凸雕、贴图

众所周知&#xff0c;Autocad是一款用于二维绘图、详细绘制、设计文档和基本三维设计&#xff0c;现已经成为国际上广为流行的绘图工具。Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体模拟软件。因为很多人都熟悉Autocad&#xff0c;所以再学习Inventor&…

springcloud alibaba -- seata原理和使用

文章目录一、认识Seata1.1 Seata 是什么?1.2 了解AT、TCC、SAGA事务模式?AT 模式前提整体机制如何实现写隔离如何实现读隔离TCC 模式Saga 模式Saga 模式适用场景Saga 模式优势Saga 模式缺点二、Seata安装2.1 下载2.2 创建所需数据表2.2.1 创建 分支表、全局表、锁表2.2.2 创建…

内存一致性模型概念

phrase-20230117184107 内存一致性模型(Memory Consistency Models)提供内存一致性保证&#xff0c;一致性结果体现在程序内存操作是可预测的。例如在多核或多处理器硬件上&#xff0c;在编写并行的程序时&#xff0c;如果理解当前系统所使用的一致性模型&#xff0c;有助于使…

OpenStack GPU直通服务器

layout: post title: OpenStack GPU直通服务器 catalog: true tag: [OpenStack, GPU] 1. 概述2. 直通GPU特性3. 功能说明 3.1. 操作系统支持3.2. 设备支持 4. 实现方案5. 部署方案 5.1. 示例环境说明5.2. 上线步骤 5.2.1. 硬件安装5.2.2. GPU计算节点主机配置 5.2.2.1. IOMMU设…

【数据结构与算法学习8】二叉查找树的基本介绍与添加数据的过程

程序员语录&#xff1a; 把时髦的技术挂在嘴边&#xff0c;还不如把过时的技术记在心里。 1 二叉查找树是什么&#xff1f; 二叉查找树是一种数据结构&#xff0c;又叫作二叉搜索树或二叉排序树,采用了图的树形结构&#xff0c;数据存储于二叉查找树的各个结点中&#xff0c;每…

GEE 9:Earth Engine Reducers 的基本操作

目录1.Image 、ImageCollection and Regions Reducers&#xff08;图层和区域的相关操作&#xff09;1.1 Image Reductions&#xff08;处理单个图层&#xff09;1.2 ImageCollection Reductions&#xff08;处理图层集&#xff09;1.3 Greenest pixel (maximum NDVI) composit…

01背包——二维动态规划【c++】代码实现

今天学了01背包&#xff0c;就想来讲一讲&#xff0c;正好回顾一下&#xff08;BZOJ上的题目&#xff09;。 01背包 所谓01背包&#xff0c;也就是背包的一种&#xff0c;01背包和完全背包的区别就在于&#xff0c;01背包一件物品只能选择一次&#xff0c;而完全背包可以重复…

架构运维篇(七):Centos7/Linux中安装Zookeeper

版本说明 JDK &#xff1a;1.8&#xff08;已安装&#xff09;ZK : 3.8.0 安装部署Zookeeper 第一步&#xff1a;下载最新版本 官网地址&#xff1a;Apache DownloadsHome page of The Apache Software Foundationhttps://www.apache.org/dyn/closer.lua/zookeeper/zookeep…

libvirt零知识学习1 —— libvirt简介

本文内容部分取自《KVM实战 —— 原理、进阶与性能调优》&#xff0c;非常好的一本书。 1. 概述 提到KVM的管理工具&#xff0c;首先必须要介绍的无疑是大名鼎鼎的libvirt。libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和应用程序接口。并且&#xff0c;一些常用的虚…

Oracle VM VirtualBox 安装 CentOS Linux

Virtual Box VirtualBox是一个强大的、面向个人用户或者企业用户的虚拟机产品&#xff0c;其支持x86以及AMD64/Intel64的计算架构&#xff0c;功能特性丰富、性能强劲&#xff0c;支持GPL开源协议&#xff0c;其官方网址是www.virtualbox.org&#xff0c;由Oracle开源&#xf…

Spring自动装配

自动装配的三种方式一、xml方式自动装配二、 按类型自动装配三、使用注解一、xml方式自动装配 byName: 会自动在容器上下文查找&#xff0c;和自己对象set方法后面的值对应的bean id&#xff08;通过id匹配&#xff09; //实体类 Data public class Pepole {private String n…

GameFrameWork框架(Unity3D)使用笔记(八) 实现场景加载进度条

前言&#xff1a; 游戏在转换场景的时候&#xff0c;需要花费时间来加载相关的资源。而这个过程往往因为游戏场景的规模和复杂度以及玩家电脑配置的原因花费一小段时间&#xff08;虽然这个项目里用不到&#xff09;。 所以&#xff0c;如果这一小段时间&#xff0c;画面就卡在…