Zabbix监控k8s云原生环境

news2025/1/11 20:03:17

        传统监控的本质就是收集、分析和使用信息来观察一段时间内监控对象的运行进度,并且进行相应的决策管理的过程,监控侧重于观察特定指标。是随着云原生时代的到来,我们对监控的功能提出了更多的要求,要实现这些功能,就要实现的云原生的“可观测性”。可观测性是云原生时代必须具备的能力。目前,“可观测性”逐渐取代“监控”,成为云原生技术领域最热门的话题之一。

一、zabbix新版本功能介绍

1.zabbix新功能

        Zabbix 是一个基于 web 界面的分布式系统监控的企业级开源软件。可以监视各种系统与设备的参数保障服务器及设备的安全运营。Zabbix 6.8 LTS 新增 Kubernetes 监控功能,可以在 Kubernetes 系统从多个维度采集指标。我们今天就来实现 Zabbix6.0 对 K8S 的监控。

2.zabbix特点

(1)安装与配置简单。
(2)可视化 web 管理界面,
(3)免费开源。
(4)支持中文。
(5)自动发现。
(6)分布式监控。
(7)实时绘图。

3.zabbix的主要功能

(1)硬件监控。如交换机、路由器、打印机等。
(2)系统监控。如 CPU,内存,磁盘。硬盘 I0,系统负载等。
(3)服务监控。如 apache,nginx,tomcat,redis,TCP 连接数等
(4)性能监控。如网站性能,服务器性能,数据库性能。

(5)日志监控。如访问日志,错误日志。
(6)安全监控。如用户登录数,本地文件改动,passwd 文件变化
(7)网络监控。如端口,SMTP,网络使用率,网络入流量,网络出流量。

4.kubernetes 集群及组件监控模板

        在新版本的 zabbix 中,提供了专门针对 kubernetes 原生架构的监控模板,用户可以直接使用这些模板对 kubernetes 的原生组件进行监控。

                      模版名称                         备注
Kubernetes API server by HTTPK8S Apiserver 组件指标模板
Kubernetes cluster state by HTTPK8S 集群指标模板
Kubernetes Controller manager by HTTPK8S ControllerManager 组件指标模板
Kubernetes kubelet by HTTPK8S Kubelet 组件指标模板
Kubernetes nodes by HTTPK8S 集群节点发现以及状态指标模板
Kubernetes Scheduler by HTTPK8SScheduler 组件指标模板

5.K8s 节点基础信息指标模板

在对 kubernetes 的主机进行监控的时候,仍然可以使用 Linux by zabbix agent 模板对集群中的各个主机进行晚上的监控。

模版名称备注
Linux by Zabbix agent0S Linux 系统监控模板

6.监控指标

在云原生环境中,我们需要监控的指标很多,具体体现在如下列表中:

监控名称监控对象
节点基础信息CPU,内存,磁盘,I0,网络,system info 等
集群指标【组件】Api Server ,ControllerManage,SchedulerServer, kubelet等
资源对象指标Daemonset,Deployment,Replicaset,Endpoint,Pod等
Pod 容器指标Container:Menory max usage,Pod CPU:User seconds等

7.Agentless

        通过 Zabbix 内置的“HTTP agent”“script”两种类型的监控项,无需安装客户端,通过访问被监控端的 API 接口即可采集监控指标数据,主要用于K8S 集群、服务组件、pod 容器状态及性能指标的采集。

二、项目列表

1.设备列表

主机IP
k8s-master192.168.10.101
k8s-node01192.168.10.102
k8s-node02192.168.10.103
mariadb-10、NFS192.168.10.108
zabbix server192.168.10.103(将其 pod 部署在 k8s 集群中 k8s-node02 节点)

2.案例拓扑图

三、数据库配置

1.安装数据库

(1)关闭防火墙
[root@localhost ~]# hostnamectl set-hostname ZDB
[root@localhost ~l# bash
[root@zdb ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@zdb ~]# setenforce 0
[root@zdb ~]# systemctl disable firewalld
[root@zdb ~]# systemctl stop firewalld
 (2)如果系统中安装有mariadb,要写卸载

#查看是否存在 MariaDB

[root@zdb ~]# rpm -qa grep mariadb

#卸载 mariadb 

[root@zdb ~]# yum remove mariadb*
 (3)安装mysql
[root@zdb ~]# tar -xf mysql-8.0.31-linux-glibc2.12-x86 64.tar.xz
[root@zdb ~]# mv mysq1-8.0,31-linux-glibc2.12-x86 64 /usr/local/mysql
(4)初始化
[root@zdb ~]# mkdir /usr/local/mysql/data
[root@zdb ~]# useradd -M-s /sbin/nologin mysql
[root@zdb ~]# chown -R mysql.mysql /usr/local/mysql/data
[root@zdb ~]# /usr/local/mysql/bin/mysqld
--initialize
--user=mysql
-basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data

注意:记下这里的临时密码

(5)设置配置文件
[root@zdb ~]# cat<<EOF>/etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sockbind-address=0.0.0.0
skip-name-resolve
port = 3306
basedir=/usr/local/mysq1
datadir=/usr/local/mysql/data
max connections=2048
character-set-server=utf8
default-storage-engine=INNODB
max allowed packet=16M
default authentication plugin=mysql native password
[mysqld safe]
log-error=/usr/local/mysql/data/error.1og
EOF
(6)设置 mysql服务
[root@zdb ~]# ln-s -f /usr/local/mysql/bin/* /usr/local/bin/
[root@zdb ~]# cp /usr/local/mysql/support-files/mysql.server/etc/rc.d/init.d/mysqld
[root@zdb ~]# chmod +x /etc/rc.d/init.d/mysqld
[root@zdb ~]# cat<<E0F>/lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysqld startExecReload=/etc/rc.d/init.d/mysqld restartExecStop=/etc/rc.d/init.d/mysqld stopPrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
[root@zdb ~]# systemctl daemon-reload
[root@zdb ~]# systemctl enable mysqld
[root@zdb ~]# systemctl restart mysqld

2.创建 zabbix 数据库,定义 zabbix 用户

(1)登录数据库
[root@zdb ~]# mysql -uroot -p

注意:使用前面初始化得到的临时密码

(2)修改密码
mysql> alter user 'root'@'localhost' IDENTIFIED WITH mysql native password By 'zabbix';
Query OK,1 row affected(0.00 sec)
(3)创建 zabbix数据库
mySqI> CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4 bin;
Query Ok,1 row affected(0.0 sec)
(4)创建 zabbix用户
mysql> CREATE USER 'zabbix'@'%' IDENTIFIED BY 'zabbix';
Query OK,0 rows affected(0.01 sec)
(5)为用户授权
mySq1> GRANT ALL PRIVILEGES ON *.* To 'zabbix'@'%';
Query OK,0 rows affected(0.01 sec)
(6)刷新权限
mysql> flush privileges;
Query OK,0 rows affected(0.00 sec)

四、NFS 配置

1.创建 NFS 存储目录

[root@zdb ~]# mkdir -p /nfs

2.安装 nfs 服务

[root@zdb ~]# yum -y install nfs-utils rpcbind

3.修改配置文件

[root@zdb ~]# echo "/nfs *(rw,sync,no root squash)">>/etc/exports

4.启动服务

[root@zdb ~]# systemctlstart nfs && systemctl start rpcbind

5.设置开机启动

[root@zdb ~]# systemctl enable nfs-server&& systemctl enable rpcbind

6.在所有 k8s 节点安装 nfs

K8S 集群所有节点都要安装 nfs-utils

[root@zdb ~]# yum -y install nfs-utils

#注意,所有节点都要安装nfs-utils,否则无法使用pv

五、安装zabbix server和web

1.创建动态 PV

(1)编辑nfs 的 yaml 文件
[root@master ~]# vim storageclass-nfs.yaml 

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage
provisioner: fuseim.pri/ifs
parameters:
  archiveOnDelete: "true"

---
kind: ServiceAccount
apiVersion: v1
metadata:
  name: nfs-client-provisioner

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io


---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner


---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: arawak/nfs-client-provisioner
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.10.108   #指定nfs地址
            - name: NFS_PATH
              value: /nfs
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.10.108   #指定nfs地址
            path: /nfs
(2)生成动态 PV
[root@zdb ~]# kubectl apply -f storageclass-nfs.yaml

2.安装zabbix-server

(1)编写 zabbix_server.yaml 文件
[root@master ~]# vim zabbix-server.yaml 

apiVersion: v1
kind: Namespace
metadata:
  name: zabbix
---
apiVersion: v1
kind: Service
metadata:
  name: zabbix-server
  namespace: zabbix
  labels:
    app: zabbix-server
spec:
  selector:
    app: zabbix-server
  ports:
  - name: zabbix-server
    port: 10051
    nodePort: 30051
  type: NodePort

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zabbix-scripts
  namespace: zabbix
spec:
  storageClassName: "managed-nfs-storage"
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: zabbix-server
  name: zabbix-server
  namespace: zabbix
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zabbix-server
  template:
    metadata:
      labels:
        app: zabbix-server
    spec:
      nodeSelector:
        zabbix-server: "true"
      hostNetwork: true
    app: zabbix-server
  name: zabbix-server
  namespace: zabbix
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zabbix-server
  template:
    metadata:
      labels:
        app: zabbix-server
    spec:
      nodeSelector:
        zabbix-server: "true"
      hostNetwork: true
      containers:
      - image: zabbix/zabbix-server-mysql:6.4.8-centos
        imagePullPolicy: IfNotPresent
        name: zabbix-server-mysql
        volumeMounts:
        - mountPath: /usr/lib/zabbix/alertscripts
          name: zabbix-scripts
        env:
        - name: DB_SERVER_HOST
          value: 192.168.10.108
        - name: DB_SERVER_PORT
          value: "3306"
        - name: MYSQL_DATABASE
          value: zabbix
        - name: MYSQL_USER
          value: zabbix
        - name: MYSQL_PASSWORD
          value: zabbix
        - name: ZBX_CACHESIZE
          value: "512M"
        - name: ZBX_HISTORYCACHESIZE
          value: "128M"
        - name: ZBX_HISTORYINDEXCACHESIZE
          value: "128M"
        - name: ZBX_TRENDCACHESIZE
          value: "128M"
        - name: ZBX_VALUECACHESIZE
          value: "256M"
        - name: ZBX_TIMEOUT
          value: "30"
        resources:
          requests:
            cpu: 500m
            memory: 500Mi
          limits:
            cpu: 1000m
            memory: 1Gi
      volumes:
        - name: zabbix-scripts
          persistentVolumeClaim:
            claimName: zabbix-scripts
(2)为node02 节点设置标签并安装 zabbix-server
[root@zdb ~l# kubectl label node k8s-node02 zabbix-server=true
[root@zdb ~]# kubectl apply -f zabbix-server.yaml
(3)检查 pod 状态
[root@master ~]# ku get pods -n zabbix
NAME                             READY   STATUS    RESTARTS   AGE
zabbix-server-5c8f769c6b-wqf6z   1/1     Running   0          16s

5. 部署 zabbix-web

(1)编写zabbix web.yaml 文件
[root@master ~]# vim zabbix-web.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: zabbix-web
  name: zabbix-web
  namespace: zabbix
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zabbix-web
  template:
    metadata:
      labels:
        app: zabbix-web
    spec:
      containers:
      - image: zabbix/zabbix-web-nginx-mysql:6.4.8-centos
        imagePullPolicy: IfNotPresent
        name: zabbix-web-nginx-mysql
        env:
        - name: DB_SERVER_HOST
          value: 192.168.10.108
        - name: MYSQL_USER
          value: zabbix
        - name: MYSQL_PASSWORD
          value: zabbix
        - name: ZBX_SERVER_HOST
          value: zabbix-server
        - name: PHP_TZ
          value: Asia/shanghai
        resources:
          requests:
            cpu: 500m
            memory: 500Mi
          limits:
            cpu: 1000m
            memory: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: zabbix-web
  name: zabbix-web
  namespace: zabbix
spec:
  ports:
  - name: web
    port: 8080
    protocol: TCP
    targetPort: 8080
    nodePort: 30008
  selector:
    app: zabbix-web
  type: NodePort
 (2)安装zabbix-web
[root@zdb ~]# kubectl apply -f zabbix-web.yaml
(3)查看 pod 状态
[root@master ~]# ku get pod -n zabbix
NAME                             READY   STATUS    RESTARTS   AGE
zabbix-server-5c8f769c6b-wqf6z   1/1     Running   0          37m
zabbix-web-7556b995f8-7plbl      1/1     Running   0          14s

6.访问zabbix的web 

(1)查看svc
[root@master ~]# ku get svc -n zabbix
NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
zabbix-server   NodePort   10.101.229.163   <none>        10051:30051/TCP   37m
zabbix-web      NodePort   10.107.125.64    <none>        8080:30008/TCP    42s
 (2)登录web

等待片刻后访问网站
http://192.168.10.101:30008/

初始账号 Admin/zabbix

六、 安装zabbix proxy和agent

官方给我们提供了全套的容器化服务部署方式,这里采用官方提供的 Helm chart 来安装。

1.安装 helm 工具(如果有 helm,忽略此步)

[root@zdb ~]# wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz
[root@zdb ~]# tar zxvf helm-v3.9.4-linux-amd64.tar.gz
[root@zdb ~]# cp linux-amd64/helm /usr/local/bin/helm

2.添加仓库(已有离线包,此步可忽略)

[root@zdb ~]# helm repo add 
zabbix-chart-6.2 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.2/
[root@zdb ~]# helm repo list
NAME        URL
zabbix-chart-6,0 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.4

3.搜索仓库中的 helm 包(已有离线包,此步可忽略)

[root@zdb ~]# helm search repo zabbix-chart-6.2NAME
CHART         VERSION APP VERSIONDESCRIPTION
zabbix-chart-6.0/zabbix-helm-chrt    1.3 .4    6.0.21    A    Helm    chart    for
deploying Zabbix agent and proxy

4.拉取 helm 包(已有离线包,此步可忽略)

[root@zdb ~]# helm pull zabbix-chart-6.2/zabbix-helm-chrt

5.配置 values.yaml

(1)设置 zabbix-server 主机
[root@zdb ~]# tar xvf zabbix-helm-chrt-1.3.4.tgz
[root@zdb ~]# cd zabbix-helm-chrt
[root@k8s-master zabbix-helm-chrt]# vim values.yaml

备注:
        IP 地址为 zabbix server 主机的地址,我们是将 zabbix server 安装到了 node02 的节点上,此节点的 IP 地址为 192.168.10.103.

7.安装Zabbix chart

(1)创建 zabbix agent 和 proxy 的命名空间
[root@master zabbix-helm-chrt]# ku create namespace monitoring
namespace/monitoring created
(2)利用 helm 部署 agent 和 proxy 组件
[root@master zabbix-helm-chrt]# ku taint node master node-role.kubernetes.io/master:NoSchedule-
node/master untainted
[root@master zabbix-helm-chrt]# helm install zabbix . --dependency-update -n monitoring
NAME: zabbix
LAST DEPLOYED: Fri Sep 13 10:19:38 2024
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing zabbix-helm-chrt.

Your release is named zabbix.
Zabbix agent installed:  "zabbix/zabbix-agent2:6.4.8-centos"
Zabbix proxy installed:  "zabbix/zabbix-proxy-sqlite3:6.4.8-centos"

Annotations:
app.kubernetes.io/name: zabbix-zabbix-helm-chrt
helm.sh/chart: zabbix-helm-chrt-1.3.4
app.kubernetes.io/version: "6.4.6"
app.kubernetes.io/managed-by: Helm


Service account created: 
    zabbix-service-account

To learn more about the release, try:

  $ helm status zabbix -n monitoring
  $ helm get all zabbix -n monitoring
[root@master zabbix-helm-chrt]# ku taint node master node-role.kubernetes.io/master:NoSchedule
node/master tainted

注意:
        如果需要在 master 节点上安装 agent 程序,需要将 master 节点的污点去掉,本案例的 k8s 集群使用 kubeadm 安装,默认 master 节点为污点。部署好后还可以再将 master 设置为污点。

(3)查看安装结果
[root@master zabbix-helm-chrt]# ku get pod -n monitoring
NAME                                         READY   STATUS    RESTARTS   AGE
zabbix-agent-27qmz                           1/1     Running   0          96s
zabbix-agent-457mn                           1/1     Running   0          96s
zabbix-agent-9k5t5                           1/1     Running   0          96s
zabbix-kube-state-metrics-6b588697b8-vr689   1/1     Running   0          96s
zabbix-proxy-79f5dd784d-6l9wg                1/1     Running   0          96s

备注:
如果要卸载helm 安装的程序,可以使用下面的命令:

helm uninstall zabbix -n monitoring

(4)验证安装结果

如果 proxy 和 agnet 正常安装,则会看到 zabbix server 主机已经处于正常的监控状态。

(5)修改UI 界面语言

“Administration”-->“General”,找到“Default language”,在下拉菜单中选择“chinese(zh CN)”然后点击下方的“update”按钮,页面即可修改为中文界面。

七、在 web 管理界面添加 proxy

1.添加 zabbix-proxy

“管理”-->“Proxy”,在右上角点击“创建 Proxy”按钮,打开创建 proxy 的界面。填写信息,其中 agnet 代理程序名称是在 value.yam1 中设置的 ZBX HOSTNAME 的值,系统代理模式为主动式,代理地址不用填写。

 等待一会,刷新一下页面,观察 proxy 的状态,如果不正常,Last seen 的位置会显示成红色的 Never 字样。

2.创建主机群组

创建主机群组,群组命名为k8s server
“数据采集”-->“主机群组”,添加主机组。

3.节点状态监控

创建 k8s-node 主机,用于自动发现 K8S 各个节点主机

(1)添加主机模板

“数据采集”-->“主机”,创建主机 k8s-nodes,用于自动发现节点。

需要配置的信息如下所示:
主机名:k8s-nodes
模板:Templates 下的Kubernetes nodes by HTTP

主机群组:K8S Server

代理程序检测:zabbix-proxy
已启用:true

(2)为主机设置宏参数

配置信息宏变量如下表所示

宏变量
{$KUBE.API.ENDPOINT.URL}https://192.168.10.101:6443/api
{$KUBE.API.TOKEN}你的Token值
{$KUBE.NODES.ENDPOINT.NAME}zabbix-zabbix-helm-chrt-agent

备注:
获取 Token 值:

kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d

获取endpoint:

kubectl get ep -n monitoring
(3)验证添加结果

添加成功后,获得 k8s 集群主机列表相关数据

4.集群服务监控

(1)添加主机模板

“数据采集”-->“主机”,创建主机 k8s-cluster

关联模板“Kubernetes cluster state by HTTP”,用于自动发现服务组件。

(2)设置宏变量

需要填写的宏变量如下表所示:

宏变量
{$KUBE.API.HOST}192.168.10.101
{$KUBE.API.PORT}6443
{$KUBE.API.TOKEN}你的Token值
{$KUBE.API.URL}https://192.168.10.101:6443
{$KUBE.API_SERVER.PORT}6443
{$KUBE.API_SERVER.SCHEME}https
{$KUBE.CONTROLLER_MANAGER.PORT}10252
{$KUBE.CONTROLLER_MANAGER.SCHEME}http
{$KUBE.KUBELET.PORT}10250
{$KUBE.KUBELET.SCHEME}https
{$KUBE.SCHEDULER.PORT}10251
{$KUBE.SCHEDULER.SCHEME}http
{$KUBE.STATE.ENDPOINT.NAME}zabbix-zabbix-helm-chrt-agent

(2)验证监控主机

注意:
        因为没有使用Linux byZabbix agent 模板,所以集群服务相关的监控项,ZBx 为灰色的。只要能査看到监控信息就是成功的。如果想让其他的主机的zBx也显示为绿色,可以单独给他们添加一个Zabbixagent模板,结果如下图所示

(3)查看监控数据

“检测”-->“主机”,可以看到所有被检测的主机。

点击某一个主机或组件的“最新数据”,可以看到对应的具体监控到的信息。

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

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

相关文章

python画图|3D垂线标记

在前述学习过程中&#xff0c;我们学习了二维坐标上的垂线标记画图&#xff0c;链接如下&#xff1a; python画图|垂线标记系列_python画点相对x轴的垂线-CSDN博客 也学习了3D作图基本方法&#xff1a; python画图|3D图基础教程-CSDN博客 现在我们尝试将这二者结合&#x…

自定义WPF滑块样式-Slider

在Windows应用程序开发中&#xff0c;滑块&#xff08;Slider&#xff09;是一个非常常见且有用的控件。它可以让用户通过拖动滑块来选择一个范围内的值。然而&#xff0c;WPF或UWP应用程序中的默认滑块样式可能并不总是符合我们的设计需求。因此&#xff0c;我们需要自定义滑块…

华为OD机试 - 伐木工 - 动态规划(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

可以实时引入模块

缺点&#xff1a;循环会有点问题,不能死循环,最好在python脚本中起一个计时器 解释器在执行时时同步的,所以会见界面卡住,使用多个线程可以解决这个问题 或者使用 C的异步 一个完整的IDLE 麻烦,得把pyshell.py 弄能才能从tk 改到qt 内嵌到 dock

三维坐标变换

&#xff08;一些困惑梳理记录&#xff09; “坐标转换”的区分 1、坐标系基底变换 2、目标描述向量变换 总的来说&#xff0c; A属于1、坐标系基底变换&#xff0c; B中所述方法&#xff0c;可用于1、坐标系基底变换&#xff0c;也可用于2、目标描述向量变换&#xff0c…

文生视频算法

文生视频 Sora解决问题&#xff1a;解决思路&#xff1a; CogVideoX解决问题&#xff1a;解决思路&#xff1a; Stable Video Diffusion&#xff08;SVD&#xff09;解决问题&#xff1a;解决思路&#xff1a; 主流AI视频技术框架&#xff1a; Sora Sora: A Review on Backg…

SpringBoot项目请求返回json空字段过滤

接口返回的json中有的字段可能是为空的&#xff0c;我们不希望他为空的还返回&#xff0c;如下例子&#xff1a; 解决方案&#xff1a;只需要加一个配置类就行&#xff1a; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.Dese…

【每日刷题】Day120

【每日刷题】Day120 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 413. 等差数列划分 - 力扣&#xff08;LeetCode&#xff09; 2. 978. 最长湍流子数组 - 力扣&…

知识图谱增强在 360 文档知识问答及管理中的应用实践

主要内容包括以下几大部分&#xff1a; 360 文档云知识管理/问答应用场景 KG 在文档 RAG 问答中的应用 KG 在文档标准化、层次化、结构化应用 KG 与 LLM 在文档场景下的挑战及展望 问答环节 01 360 文档云知识管理/问答应用场景 首先来介绍一下 360 文档云知识管理问答的…

K1计划100%收购 MariaDB; TDSQL成为腾讯云核心战略产品; Oracle@AWS/Google/Azure发布

重要更新 1. 腾讯全球数字生态大会与9月5日-6日举行&#xff0c;发布“5T”战略&#xff0c;包括TDSQL、TencentOS、TCE&#xff08;专有云 &#xff09;、TBDS&#xff08;大数据&#xff09;、TI &#xff08;人工智能开发平台&#xff09;等 ( [2] ) ; 并正式向原子开源基金…

【无人机设计与控制】基于PID控制的四旋翼无人机系统Matlab仿真

摘要 本文基于PID控制设计了一种四旋翼无人机控制系统&#xff0c;并通过Matlab进行仿真验证。研究了姿态控制和位置控制的性能&#xff0c;仿真结果表明该系统在稳定性和响应速度方面具有良好的表现。本文的主要贡献是验证了PID控制器在多轴飞行器控制中的有效性&#xff0c;…

基于mongodb+flask(Python)+vue的实验室器材管理系统

实验室器材管理系统是一个现代化的、高度集成的软件解决方案&#xff0c;它结合了Flask作为后端框架&#xff0c;MongoDB作为数据库&#xff0c;以及Vue.js作为前端用户界面&#xff0c;专为优化和精简实验室设备及耗材的管理流程而设计。此系统旨在为实验室管理员、研究人员和…

3.C++入门(内联函数,c++11,auto,范围for,nullptr)

⭐本篇文章为C学习的第三篇&#xff1a;主要了解内联函数和部分c11新特性 ⭐本人c代码的Gitee仓库&#xff1a;c学习 橘子真甜/yzc的c学习 - 码云 - 开源中国 (gitee.com) 一. 内联函数 以inline修饰的函数称为内联函数&#xff0c;编译的时候c编译器会在内联函数的地方展开&a…

AI 平台 formulabot 介绍

AI 平台 formulabot 介绍 FormulaBot.com 是一个基于人工智能的数据分析平台&#xff0c;旨在简化数据处理和分析任务 主要功能 数据分析与可视化: Formula Bot 提供工具来分析、可视化和转换数据&#xff0c;使用户能够快速理解数据背后的信息。公式生成: 用户可以通过自然…

别再过度复杂化了,实体SEO其实就是SEO

“实体SEO”。听起来有点可怕&#xff0c;是不是&#xff1f;不仅“实体”这个词听起来有点陌生&#xff0c;还感觉又是要在你永无止境的SEO待办清单上再添加一项。你在SEO方面已经捉襟见肘了&#xff0c;但天啊&#xff0c;又有一个新事物需要你投入稀缺的资源。 不过我有好消…

springboot-创建连接池

操作数据库 代码开发步骤&#xff1a; pom.xml文件配置依赖properties文件配置连接数据库信息&#xff08;连接池用的是HikariDataSource&#xff09;数据库连接池开发 configurationproperties和value注解从properties文件中取值bean方法开发 service层代码操作数据库 步骤&am…

component 和slot -----vue3

前言: 辗转几个公司发现基本上有点规模的公司都会有自己的平台,无论是开发平台还是其他什么,都脱离不了一个功能点,那就是组件;无论你是自己从0到1建立的平台还是基于别的已有的平台,都是这样;无非是组件的套娃,只要你梳理清楚平台的主要枝干,熟悉一些前端基本知识,然后掌握组件…

2024年CAD图纸加密软件大盘点:10款高效CAD加密工具大揭秘!

在当今数字化时代&#xff0c;CAD图纸的安全性变得尤为重要。随着设计数据的不断增长&#xff0c;保护这些敏感信息免受未经授权的访问和泄露已成为企业必须面对的挑战。为了应对这一需求&#xff0c;市场上涌现了众多CAD图纸加密软件。本文将为您盘点2024年最值得关注的10款高…

OpenAI 的 o1 大模型在数学和编码方面有了几乎 10 倍的能力提升!

你有没有想过,有一天人工智能可以在数学和编程这两个领域里,真正成为人类的“得力助手”,甚至是超越我们?最近,OpenAI 发布的 o1大模型在这方面取得了几乎 10 倍的能力提升。10 倍!你没有看错。这样的进步让人不禁怀疑:AI 真的能做到“秒懂”数学和编程吗?今天,我们就…

骨传导耳机品牌排行榜前五名,有哪些好用的骨传导耳机品牌值得入手?

我是一名专业的数码产品测评博主&#xff0c;在多年的职业生涯中&#xff0c;发现很多人在使用骨传导耳机后都出现了佩戴不舒服的现象。对此&#xff0c;我希望大家能重视骨传导耳机款式的挑选&#xff0c;因为市面上不专业的产品数量众多&#xff0c;它们纷纷打着保护听力的旗…