docker compose方式部署Zabbix 7.0 LTS

docker compose方式部署 Zabbix 7.0 LTS

Zabbix 由几个主要的功能组件组成
  • zabbix-server 是 Zabbix agent 向其报告可用性、系统完整性信息和统计信息的核心组件。
  • zabbix-agent 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
  • zabbix-web 提供基于 web 的界面(Apache 或 Nginx)。
  • Zabbix-Web-Service 在Zabbix5.4版中首次出现,基于Go编写。主要作用是定期发送巡检报告到指定邮件账户。
  • zabbix-java-gateway
  • zabbix-snmptraps
  • zabbix-proxy

可以根据不同组合,搭配不同的docker镜像,如下

Zabbix server 收集数据存储(可选MySQL、PostgreSQL等)

  • MySQL 数据库支持的 Zabbix server - zabbix/zabbix-server-mysql
  • PostgreSQL 数据库支持的 Zabbix server - zabbix/zabbix-server-pgsql

Zabbix web-interface

  • 基于 Apache2 Web 服务器以及支持 MySQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-apache-mysql
  • 基于 Apache2 Web 服务器以及支持 PostgreSQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-apache-pgsql
  • 基于 Nginx Web 服务器以及支持 MySQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-nginx-mysql
  • 基于 Nginx Web 服务器以及支持 PostgreSQL 数据库的 Zabbix web 接口 - - zabbix/zabbix-web-nginx-pgsql
安装环境版本

单机安装以下服务。不使用docker安装zabbix agent,安装在容器中的agent监控的是容器的状态,而不是宿主机的状态。

OS: Rocky Linux 9.2 x86_64
docker compose组合: zabbix 7.0 LTS + MySQL 8.0 + Nginx
docker宿主机IP: 10.10.88.2 (这里选择宿主机安装zabbix agent2)

1、前期准备工作

省略docker安装步骤。

2、zabbix docker compose 配置文件

从 Zabbix github官网 获取7.0 LTS 版本 docker compose.yaml
Zabbix 为 Docker 提供了定义和运行复杂 Zabbix 组件的 compose 文件。这些 compose 文件可以在 Zabbix docker 官方镜像仓库 中找到。

官方提供的 docker compose 文件很多,都是根据组件搭配命名

  • v3 为 docker compose 版本,具体对应关系在这里查看https://docs.docker.com/compose/compose-file/compose-versioning/
  • 基础镜像类型,有 alpine/ubuntu/Oracle linux 可选。
  • MySQL 为 zabbix server 所使用的数据库类型,目前有 MySQL/PostgreSQL 二种。
  • latest 表示为使用官方的最新镜像,local 是下载本地进行 build 镜像。

这里使用基于 docker-compose_v3_alpine_mysql_latest.yaml 模板,调整适合公司使用。

基于alpine Linux镜像,Zabbix server 后端使用MySQL数据库, Zabbix web使用Nginx展示

也可以通过git方式获取基于 zabbix7.0 LTS配置(可选,非必须)

git clone https://github.com/zabbix/zabbix-docker.git如果之前已经clone过了,重现拉取服务器最新配置,如:
git pullgit切换分支为7.0,也就是长期支持版本(LTS)
git checkout 7.0[root@VM8802 zabbix-docker]# ll -tha
已省略部分……
-rw-r--r--  1 root root 2.8K Jun  6 11:20 .env
drwxr-xr-x  3 root root 4.0K Jun  6 11:20 env_vars
-rw-r--r--  1 root root  44K Jun  6 11:20 kubernetes.yaml
-rw-r--r--  1 root root  338 Jun  6 11:20 compose_additional_components.yaml
-rw-r--r--  1 root root 2.6K Jun  6 11:20 compose_databases.yaml
lrwxrwxrwx  1 root root   42 Jun  6 11:20 compose.yaml -> docker-compose_v3_alpine_mysql_latest.yaml
-rw-r--r--  1 root root  14K Jun  6 11:20 compose_zabbix_components.yaml
-rw-r--r--  1 root root 4.1K Jun  6 11:20 docker-compose_v3_ubuntu_mysql_latest.yaml
-rw-r--r--  1 root root 7.4K Jun  6 11:20 docker-compose_v3_ubuntu_mysql_local.yaml
-rw-r--r--  1 root root 4.1K Jun  6 11:20 docker-compose_v3_ubuntu_pgsql_latest.yaml
-rw-r--r--  1 root root 7.7K Jun  6 11:20 docker-compose_v3_ubuntu_pgsql_local.yaml
-rw-r--r--  1 root root 4.4K Jun  6 11:20 docker-compose_v3_alpine_mysql_latest.yaml
-rw-r--r--  1 root root 7.6K Jun  6 11:20 docker-compose_v3_alpine_mysql_local.yaml
-rw-r--r--  1 root root 4.4K Jun  6 11:20 docker-compose_v3_alpine_pgsql_latest.yaml
-rw-r--r--  1 root root 8.0K Jun  6 11:20 docker-compose_v3_alpine_pgsql_local.yaml
-rw-r--r--  1 root root 4.3K Jun  6 11:20 docker-compose_v3_ol_mysql_latest.yaml
-rw-r--r--  1 root root 7.4K Jun  6 11:20 docker-compose_v3_ol_mysql_local.yaml
-rw-r--r--  1 root root 4.3K Jun  6 11:20 docker-compose_v3_ol_pgsql_latest.yaml
-rw-r--r--  1 root root 7.7K Jun  6 11:20 docker-compose_v3_ol_pgsql_local.yaml可以看到当前 compose.yaml 是链接指向 docker-compose_v3_alpine_mysql_latest.yaml
# docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d
2.1 docker compose配置

官网提供的docker compose文件把所有组件都写上了。可根据自己需求,删除一些不需要的组件配置部分。

当前配置如下组件
zabbix-server
zabbix-server-mysql
zabbix-web-nginx-mysql
zabbix-java-gateway
zabbix-snmptraps

配置文件列表
# tree -a /data/zabbix/
/data/zabbix/
├── compose.yaml
└── zbx_env├── .env_db_mysql├── .env_java├── .env_srv└── .env_web

官网默认配置了两个网段,其中zabbix-server和zabbix-java-gateway在不同的网段,导致互通有些干扰,这里就仅保留一个网段配置。

compose.yaml 完整配置(基于 docker-compose_v3_alpine_mysql_latest.yaml 修改)

services:zabbix-server:image: zabbix/zabbix-server-mysql:alpine-7.0-latestports:- 10051:10051volumes:- /etc/localtime:/etc/localtime:ro- /etc/timezone:/etc/timezone:ro- /data/zabbix/zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro- /data/zabbix/zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro- /data/zabbix/zbx_env/var/lib/zabbix/dbscripts:/var/lib/zabbix/dbscripts:ro- /data/zabbix/zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw- /data/zabbix/zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro- /data/zabbix/zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro- /data/zabbix/zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro- /data/zabbix/zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro- snmptraps:/var/lib/zabbix/snmptraps:rwulimits:nproc: 65535nofile:soft: 20000hard: 40000deploy:resources:limits:cpus: '0.70'memory: 2Greservations:memory: 512Menv_file:- /data/zabbix/zbx_env/.env_db_mysql- /data/zabbix/zbx_env/.env_srvdepends_on:- mysql-servernetworks:zbx_net:aliases:- zabbix-server- zabbix-server-mysqlstop_grace_period: 30ssysctls:- net.ipv4.ip_local_port_range=1024 64999- net.ipv4.conf.all.accept_redirects=0- net.ipv4.conf.all.secure_redirects=0- net.ipv4.conf.all.send_redirects=0labels:com.zabbix.description: Zabbix server with MySQL database supportcom.zabbix.company: "Zabbix LLC"com.zabbix.component: zabbix-servercom.zabbix.dbtype: mysqlcom.zabbix.os: "Alpine"zabbix-web-nginx-mysql:image: zabbix/zabbix-web-nginx-mysql:alpine-7.0-latestports:- 80:8080- 443:8443volumes:- /etc/localtime:/etc/localtime:ro- /etc/timezone:/etc/timezone:ro- /data/zabbix/zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro- /data/zabbix/zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:rodeploy:resources:limits:cpus: '0.70'memory: 1024Mreservations:memory: 256Menv_file:- /data/zabbix/zbx_env/.env_db_mysql- /data/zabbix/zbx_env/.env_webdepends_on:- mysql-serverhealthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080/ping"]interval: 10stimeout: 5sretries: 3start_period: 30snetworks:zbx_net:aliases:- zabbix-web-nginx-mysqlstop_grace_period: 10ssysctls:- net.core.somaxconn=65535labels:com.zabbix.description: "Zabbix frontend on Nginx web-server with MySQL database support"com.zabbix.company: "Zabbix LLC"com.zabbix.component: zabbix-frontendcom.zabbix.webserver: nginxcom.zabbix.dbtype: mysqlcom.zabbix.os: "Alpine"zabbix-java-gateway:image: zabbix/zabbix-java-gateway:alpine-7.0-latestports:- 10052:10052deploy:resources:limits:cpus: '0.5'memory: 512Mreservations:memory: 256Menv_file:- /data/zabbix/zbx_env/.env_javanetworks:zbx_net:aliases:- zabbix-java-gatewaystop_grace_period: 5slabels:com.zabbix.description: "Zabbix Java Gateway"com.zabbix.company: "Zabbix LLC"com.zabbix.component: "java-gateway"com.zabbix.os: "Alpine"zabbix-snmptraps:image: zabbix/zabbix-snmptraps:alpine-7.0-latestprofiles:- full- allports:- 162:1162/udpvolumes:- snmptraps:/var/lib/zabbix/snmptraps:rwdeploy:resources:limits:cpus: '0.5'memory: 256Mreservations:memory: 128Mnetworks:zbx_net:aliases:- zabbix-snmptrapsstop_grace_period: 5slabels:com.zabbix.description: "Zabbix snmptraps"com.zabbix.company: "Zabbix LLC"com.zabbix.component: snmptrapscom.zabbix.os: "Alpine"mysql-server:image: mysql:8.0-oraclesecurity_opt:- seccomp:unconfinedcommand:- mysqld- --skip-mysqlx- --character-set-server=utf8mb4- --collation-server=utf8mb4_bin# Only during upgrade from versions prior 6.4 and new installations (schema deployment)#- --log_bin_trust_function_creators=1- --log_timestamps=SYSTEM- --binlog_expire_logs_seconds=3600- --innodb_buffer_pool_size=2G- --max_connections=500- --wait_timeout=1200- --interactive_timeout=1200volumes:- /etc/localtime:/etc/localtime:ro- /data/zabbix/zbx_env/var/lib/mysql:/var/lib/mysql:rw- /data/backup/mysql:/data/backup/mysql:rwenv_file:- /data/zabbix/zbx_env/.env_db_mysqlstop_grace_period: 1mnetworks:zbx_net:aliases:- mysql-server- zabbix-database- mysql-databasedb_data_mysql:image: busyboxvolumes:- /data/zabbix/zbx_env/var/lib/mysql:/var/lib/mysql:rw
networks:zbx_net:driver: bridgedriver_opts:com.docker.network.enable_ipv6: "false"ipam:driver: defaultconfig:- subnet: 172.16.238.0/24
volumes:snmptraps: 
2.2 环境变量文件

在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件名类似 .env_<type of component>

  1. 配置mysql:.env_db_mysql
# DB_SERVER_HOST=mysql-server
# DB_SERVER_PORT=3306
# DB_SERVER_SOCKET=/var/run/mysqld/mysqld.sock
# MYSQL_USER_FILE=/run/secrets/MYSQL_USER
# MYSQL_PASSWORD_FILE=/run/secrets/MYSQL_PASSWORD
MYSQL_USER=zabbix
MYSQL_PASSWORD=yourzabbix
MYSQL_ROOT_PASSWORD=yourmysql
# MYSQL_ROOT_PASSWORD_FILE=/run/secrets/MYSQL_ROOT_PASSWORD
# MYSQL_ALLOW_EMPTY_PASSWORD=false
# MYSQL_DATABASE=zabbix
MYSQL_DATABASE=zabbix
  1. 配置zabbix-java-gateway:.env_java
ZBX_START_POLLERS=5
ZBX_TIMEOUT=3
  1. 配置Zabbix server:.env_srv
ZBX_STARTPOLLERS=7
ZBX_STARTPOLLERSUNREACHABLE=7
ZBX_STARTTRAPPERS=20
ZBX_STARTPINGERS=7
ZBX_STARTDISCOVERERS=7
ZBX_JAVAGATEWAY_ENABLE=true
ZBX_JAVAGATEWAY=zabbix-java-gateway
ZBX_JAVAGATEWAYPORT=10052
ZBX_STARTJAVAPOLLERS=5
ZBX_ENABLE_SNMP_TRAPS=true
ZBX_CACHESIZE=1024M
ZBX_HISTORYCACHESIZE=128M
ZBX_TIMEOUT=15
  1. 配置Nginx:.env_web
ZBX_SERVER_HOST=zabbix-server
ZBX_SERVER_NAME=Your Corp. IT
PHP_TZ=Asia/Shanghai

docker compose 配置说明

  1. 修改时区(web页面显示中文)
    修改 .env_web 配置相关项 PHP_TZ=Asia/Shanghai
  2. 解决zebbix web图片中文显示乱码(zabbix7.0下不指定也可以正常显示中文)
3、部署服务
cd /data/zabbix/
docker compose up -d

浏览 zabbix web界面

启动之后即可使用 <http://ip> 直接访问 zabbix web界面
默认用户名:Admin ,密码:zabbix (注意区分大小写)

配置已经设置了持久化数据目录映射到本地。

4、独立安装Zabbix agent2

安装Zabbix仓库(这里选择国内的腾讯源),然后安装Zabbix agent2

# rpm -Uvh https://mirrors.tencent.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-latest.el9.noarch.rpm
# dnf clean all# dnf install zabbix-agent2

如果是 Rocky Linux 9.x 版本,则需要注意:
EL9 的 EPEL 存储库也提供了 Zabbix 包。 如果同时安装了官方 Zabbix 存储库和 EPEL 存储库,那么 EPEL 中的 Zabbix 包必须通过在 /etc/yum.repos.d/ 下的 EPEL 存储库配置文件中添加以下子句来排除,更详细说明可访问官网安装文档。

[epel]
...
excludepkgs=zabbix*然后安装即可
rpm -ivh https://mirrors.tencent.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-2.el9.noarch.rpm
yum install zabbix-agent2

修改 /etc/zabbix/zabbix_agent2.conf ,指定 zabbix server 地址,如:

Server=127.0.0.1,172.16.238.4       # 172.16.238.4 为zabbix server容器IP
ServerActive=127.0.0.1,172.16.238.4
Hostname=10.10.88.2   # 这里为Linux主机IP

查看zabbix server容器(容器名为 zabbix-zabbix-server-1 )IP方法

# docker inspect zabbix-zabbix-server-1 |grep IPAddress |tail -1 |awk '{print $2}' |tr '"' " " |tr ',' ' ' 172.16.238.4   进入zabbix server容器
# docker exec -it zabbix-zabbix-server-1 bash测试访问 zabbix agent2 的端口是否可以正常连通(端口不通,提示:wget: can't connect to remote host (10.10.88.2): Connection refused)
78d0d09dfa31:/var/lib/zabbix$ wget 10.10.88.2:10050
Connecting to 10.10.88.2:10050 (10.10.88.2:10050)
wget: error getting response

如果zabbix-server 服务器ip地址有更改,这里配置也需要修改,然后重启agent2服务
systemctl restart zabbix-agent2.service

5、设置允许docker容器访问宿主机

默认情况下宿主机内docker容器是禁止访问宿主机IP

防火墙firewalld开放zabbix server容器IP段(172.16.238.0/24)访问zabbix agent端口(tcp 10050)

# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=172.16.238.0/24 port port=10050 protocol=tcp accept' --permanent
# firewall-cmd --reload

上面的命令等同于修改配置 /etc/firewalld/zones/public.xml ,在 <zone> 区域内添加如下:

  <rule family="ipv4"><source address="172.16.238.0/24"/><port protocol="tcp" port="10050"/><accept/></rule>

然后重启防火墙服务 systemctl restart firewalld.service 即可。

zabbix web页面里配置 zabbix server 主机接口 Agent(类型)地址由默认的 127.0.0.1:10050 改为 your-zabbix-server-ip:10050

日常维护

先切换到 compose.yaml 目录
cd /data/zabbix停止 zabbix 所有服务   
docker compose down启动 zabbix 所有服务   
docker compose up -d停止mysql服务  
docker compose stop mysql-server查看指定容器IP
docker inspect zabbix-zabbix-server-1 |grep IPAddress |tail -1 |awk '{print $2}' |tr '"' " " |tr ',' ' '更新配置缓存
/usr/local/sbin/zabbix_server -R config_cache_reload

zabbix server日志默认位置(容器内): /var/log/zabbix/zabbix_server.log

MySQL持久化目录 /data/zabbix/zbx_env/var/lib/mysql
MySQL备份目录 /data/backup/mysql

zabbix官方监控模板

由于使用的zabbix是从低版本升级上来的,需要使用新版本只能手动从 Zabbix Git 存储库下载,然后zabbix web页面的 ConfigurationTemplates(配置 → 模板)手动导入。

升级

Only during upgrade from versions prior 6.4 and new installations (schema deployment)
mysql> set global log_bin_trust_function_creators = 1;

从 zabbix6.0.x 升级为 zabbix7.0.0

停止服务,修改配置 docker.yaml 把指定镜像alpine-6.0所有替换为alpine-7.0即可,
如:image: zabbix/zabbix-server-mysql:alpine-6.0-latest 替换为 image: zabbix/zabbix-server-mysql:alpine-7.0-latest

然后启动服务就可以看到日志里有升级信息提示。

zabbix6.0 迁移至新机器并升级为zabbix7.0 步骤

升级前 zabbix6.0.23 LTS (MySQL 8.0.35)
升级后 zabbix7.0.0 LTS (MySQL 8.0.37)

zabbix server初次启动时,会自动升级MySQL数据库结构。

启动服务
docker compose up -d除了msyql服务,其它服务都停止
docker compose stop zabbix-web-nginx-mysql
docker compose stop zabbix-java-gateway 
docker compose stop zabbix-server进入msyql容器,删除原zabbix数据库。
docker exec -it zabbix-mysql-server-1 bash
mysqlsh -p因为mysql账号zabbix都在,所以重建库后,就可以开始导入库了
mysql> drop database zabbix;
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;导入前临时更改,导入后改回默认值 0
mysql> set global log_bin_trust_function_creators = 1;导入备份(视情况选择)
方式1(sql备份文件):
mysql> use zabbix;
mysql> source /var/lib/mysql/zabbix_backup.sql;方式2(mysql shell备份文件):
MySQL JS > \sql SET GLOBAL local_infile = 'ON';
MySQL JS > \sql show global variables like 'local_infile';
MySQL JS > \sql ALTER INSTANCE DISABLE INNODB REDO_LOG;
MySQL JS > \sql SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled';
MySQL JS > util.loadDump("/data/backup/mysql/zabbix_20240605", {"threads": 4,"ignoreVersion": true})Disable log_bin_trust_function_creators option after importing database schema.
mysql> set global log_bin_trust_function_creators = 0;导入完成后,再次停止服务
docker compose down然后启动(这是启动zabbix server会自动进行升级数据库)
docker compose up -d
参考文档
  1. https://www.zabbix.com/documentation/7.0/en/manual/installation/containers

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

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

相关文章

Pinia:Vue 2 和 Vue 3 中更好用的状态管理框架

前言 还在用Vuex? 在Vue应用程序的开发过程中&#xff0c;高效且易于维护的状态管理一直是开发者关注的核心问题之一。随着Vue 3的发布&#xff0c;状态管理领域迎来了一位新星——Pinia&#xff0c;它不仅为Vue 3量身打造&#xff0c;同时也向下兼容Vue 2&#xff0c;以其简…

PostgreSQL 在Windows下保姆级图文安装教程

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

The Plant Cell:DAP-seq技术助力揭示MdWRKY75调控苹果耐热性的分子机制

2024年6月12日&#xff0c;西北农林科技大学作物抗逆与高效生产全国重点实验室/园艺学院苹果抗逆与品质改良创新团队马锋旺教授/李超课题组在植物学知名期刊The Plant Cell&#xff08;影响因子10&#xff09;在线发表了题为“The MdHSC70-MdWRKY75 module mediates basal appl…

微信小程序 调色板

注意&#xff1a;是在uniapp中直接使用的一个color-picker插件&#xff0c;改一下格式即可在微信小程序的原生代码中使用 https://github.com/KirisakiAria/we-color-picker 这是插件的地址&#xff0c;使用的话先把这个插件下载下来&#xff0c;找到src&#xff0c;在项目创…

九、函数的声明和定义

函数声明&#xff1a; 1. 告诉编译器有一个函数叫什么&#xff0c;参数是什么&#xff0c;返回类型是什么。但是具体是不是存在&#xff0c;函数 声明决定不了。 2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。 3. 函数的声明一般要放在头文件中的。 定义的函…

股价持续低迷,业绩颓势不减,冀光恒难救平安银行?

文&#xff5c;新熔财经 作者&#xff5c;宏一 周一一上班&#xff0c;就听到旁边的同事感慨今年股市行情很不错&#xff0c;尤其是银行股&#xff0c;上半年累计上涨了17.02%&#xff0c;是涨幅最大的板块。 听到这里&#xff0c;我美滋滋地打开自己的账户&#xff0c;结…

spdlog一个非常好用的C++日志库(四): 源码分析之logger类

目录 1.简介 2.类图关系 3.logger数据成员 4.logger函数成员 4.1.构造与析构 4.1.1.构造函数 4.1.2.拷贝构造、移动构造 4.2.交换操作 4.3.log()记录日志消息 4.3.1.格式串 4.3.2.普通字符串 4.3.3.日志级别 4.3.4.宽字符支持 4.4.sink_it_&#xff1a;将log消息…

PLC工作原理

PLC&#xff08;可编程逻辑控制器&#xff09;的工作原理简述为&#xff1a;集中采样、集中输出、周期性循环扫描。 西门子PLC 一、集中采样 顺序读取所有输入端子的通断状态&#xff0c;并将所读取的信息存到输入映像寄存器中&#xff0c;此时输入映像寄存器被刷新&#xff…

三坐标测量机:柔性生产制造中的高精度测量解决方案

柔性生产制造是制造业的核心竞争力之一。它强调生产线的灵活性和适应性&#xff0c;以满足市场对产品多样化和个性化的需求。在当今快速变化的工业环境中&#xff0c;随着消费者对产品个性化和定制化需求的增加&#xff0c;柔性生产制造和三坐标测量机的结合&#xff0c;为智能…

尽量不写一行if...elseif...写出高质量可持续迭代的项目代码

背景 无论是前端代码还是后端代码&#xff0c;都存在着定位困难&#xff0c;不好抽离&#xff0c;改造困难的问题&#xff0c;造成代码开发越来越慢&#xff0c;此外因为代码耦合较高&#xff0c;总是出现改了一处地方&#xff0c;然后影响其他地方&#xff0c;要么就是要修改…

通讯录(C语言详细版)

1. 前言 通讯录是在动态顺序表的基础上实现的&#xff0c;其实就是顺序表的每个元素存储的不再是数字&#xff0c;而是存储一个联系人的结构体&#xff0c;所以如果有些小伙伴看不懂的话&#xff0c;可以移步参考一下动态顺序表的实现&#xff1a;顺序表&#xff08;C语言详细…

【C语言】auto 关键字

在C语言中&#xff0c;auto关键字用于声明局部变量&#xff0c;但它的使用已经变得很少见。事实上&#xff0c;从C99标准开始&#xff0c;auto关键字的默认行为就是隐含的&#xff0c;因此在大多数情况下无需显式使用它。 基本用法 在C语言中&#xff0c;auto关键字用于指定变…

SpringBoot应用配置桥接Prometheus入门

SpringBoot应用配置Prometheus步骤 SpringBoot应用依赖要求PrometheusGrafanaGrafana监控界面模板 SpringBoot应用依赖要求 <!-- 监控系统健康情况的工具 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

【3分钟准备前端面试】vue3

目录 Vue3比vue2有什么优势vue3升级了哪些重要功能生命周期变化Options APIComposition APIreftoRef和toRefstoReftoRefsHooks (代码复用)Vue3 script setupsetupdefineProps和defineEmitsdefineExposeVue3比vue2有什么优势 性能更好体积更小更好的TS支持更好的代码组织更好的逻…

104.二叉树的最大深度——二叉树专题复习

深度优先搜索&#xff08;DFS&#xff09;是一种常用的递归算法&#xff0c;用于解决树形结构的问题。在计算二叉树的最大深度时&#xff0c;DFS方法会从根节点开始&#xff0c;递归地计算左右子树的最大深度&#xff0c;然后在返回时更新当前节点所在路径的最大深度。 如果我…

每日复盘-20240704

今日关注&#xff1a; 20240704 六日涨幅最大: ------1--------300391--------- 长药控股 五日涨幅最大: ------1--------300391--------- 长药控股 四日涨幅最大: ------1--------300391--------- 长药控股 三日涨幅最大: ------1--------300391--------- 长药控股 二日涨幅最…

文心一言 VS 讯飞星火 VS chatgpt (295)-- 算法导论21.4 4题

四、利用练习 21.4-2 &#xff0c;请给出一个简单的证明&#xff0c;证明在一个不相交集合森林上使用按秩合并策略而不使用路径压缩策略的运行时间为 O(m lgn) 。21.4-2 的内容是&#xff1a;“证明&#xff1a;每个结点的秩最多为 ⌊lgn⌋ 。”。如果要写代码&#xff0c;请用…

vue模板语法v-html

模板语法v-html vue使用一种基于HTML的模板语法&#xff0c;使我们能够声明式的将其组件实例的数据绑定到呈现的DOM上&#xff0c;所有的vue模板都是语法层面的HTML&#xff0c;可以被符合规范的浏览器和HTML解释器解析。 一.文本插值 最基本的数据绑定形式是文本插值&#…

Kafka 为何如此之快?深度解析其背后的秘密

目录 前言 一、生产者 1. 异步发送 2. 多分区并行 3. 消息批量发送 4.支持消息压缩 二、存储端 1. 分区和副本 2. 页缓存 3. 磁盘顺序写入 4. 零拷贝技术 5. 稀疏索引 三、消费端 1. 消费者群组 2. 批量拉取 3. 高效的偏移量管理 4. 并行消费 总结 前言 Kafk…

CS算法(二)—— 斜视SAR点目标仿真

SAR成像专栏目录 我们按照Cumming教授所著的《合成孔径雷达成像——算法与实现》7.6节的点目标参数进行仿真,斜视角设置为8,中心斜距改为1000km。先放最终的仿真结果: 1. 参数配置 在中心点和中心的的上下左右方向设置5个点目标 : function para=config_sar_para_cumming(…