云计算第二阶段:----监控与服务安全SECURITY

news2024/10/3 10:36:39

本模块内容,主要讲述 服务器的安全防护与配置软件相关知识。分为网络防护软件介绍、配置与使用用,网络安全相关知识浅度解析。

涉及软件有prometheus ,graphna,zabbix。

网络安全方面涉及基于debian linux系统的kali版本liunx的介绍与简单使用。


SECURITY DAY1

环境准备:

主机名地址
zabbixserver192.168.88.5/24
web1192.168.88.100/24
web2192.168.88.200/24

一、zabbix基础配置

监控概述

  • 对服务的管理,不能仅限于可用性。

  • 还需要服务可以安全、稳定、高效地运行。

  • 监控的目的:早发现、早治疗。

  • 被监控的资源类型:

    • 公开数据:对外开放的,不需要认证即可获取的数据
    • 私有数据:对外不开放,需要认证、权限才能获得的数据

zabbix

  • 实施监控的几个方面:

    • 数据采集:使用agent(可安装软件的系统上)、SNMP(简单网络管理协议,用于网络设备的数据采集)
    • 数据存储:使用mysql数据库
    • 数据展示:通过web页面
  • zabbix通过在远程主机上安装agent进行数据采集,存储到mysql数据库,通过web页面进行展示。

安装zabbix 6.0

  • 安装说明:https://www.zabbix.com/download?zabbix=6.0&os_distribution=rocky_linux&os_version=8&components=server_frontend_agent&db=mysql&ws=nginx
  • 中文手册:https://www.zabbix.com/documentation/6.0/zh

# 1. 拷贝zabbix软件包到pubserver 目录的 /var/ftp/rpms  位置
# 2. 更新yum仓库配置
[root@pubserver ~]# createrepo -v /var/ftp/rpms/
# 3. 在pubserver上创建ansible工作环境
[root@pubserver ~]# mkdir -p zabbix/files
[root@pubserver ~]# cd zabbix/
[root@pubserver zabbix]# vim ansible.cfg 
[defaults]
inventory = inventory
host_key_checking = false

[root@pubserver zabbix]# vim inventory 
[zabbix]
zabbixserver ansible_host=192.168.88.5

[webservers]
web1 ansible_host=192.168.88.100
web2 ansible_host=192.168.88.200

[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=a

# 4. 为各台主机配置yum
[root@pubserver zabbix]# vim files/local88.repo 
[BaseOS]
name = BaseOS
baseurl = ftp://192.168.88.240/dvd/BaseOS
enabled = 1
gpgcheck = 0

[AppStream]
name = AppStream
baseurl = ftp://192.168.88.240/dvd/AppStream
enabled = 1
gpgcheck = 0

[rpms]
name = rpms
baseurl = ftp://192.168.88.240/rpms
enabled = 1
gpgcheck = 0

[root@pubserver zabbix]# vim 01-upload-repo.yml 
---
- name: config repos.d
  hosts: all
  tasks:
    - name: delete repos.d
      file:
        path: /etc/yum.repos.d
        state: absent

    - name: create repos.d
      file:
        path: /etc/yum.repos.d
        state: directory
        mode: '0755'

    - name: upload local88
      copy:
        src: files/local88.repo
        dest: /etc/yum.repos.d/
[root@pubserver zabbix]# ansible-playbook 01-upload-repo.yml 

# 5. 在zabbixserver上安装相应软件包
[root@pubserver zabbix]# vim 02-inst-zabbix.yml
---
- name: install zabbix
  hosts: zabbix
  tasks:
    - name: install zabbix    # 安装软件包
      yum:
        name:
          - zabbix-server-mysql
          - zabbix-web-mysql
          - zabbix-nginx-conf
          - zabbix-sql-scripts
          - zabbix-selinux-policy
          - zabbix-agent
          - mysql-server
          - langpacks-zh_CN
        state: present
[root@pubserver zabbix]# ansible-playbook 02-inst-zabbix.yml

# 6. 启动mysqld服务
[root@pubserver zabbix]# vim 03-start-mysqld.yml
---
- name: config mysqld
  hosts: zabbix
  tasks:
    - name: start mysqld      # 启动mysqld服务
      service:
        name: mysqld
        state: started
        enabled: yes
[root@pubserver zabbix]# ansible-playbook 03-start-mysqld.yml 

# 7. 在zabbix上创建连接数据库的用户
[root@zabbixserver ~]# mysql
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
# 在binlog日志开启的情况下,打开函数生成器
mysql> set global log_bin_trust_function_creators = 1;
mysql> create user zabbix@localhost identified by 'zabbix';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;

# 8. 验证数据库配置,如果登陆不到数据库表示上一步配置不正确
[root@zabbixserver ~]# mysql -uzabbix -pzabbix -hlocalhost zabbix

# 9. 在数据库中创建表并导入数据
[root@zabbixserver ~]# cp /usr/share/zabbix-sql-scripts/mysql/server.sql.gz .
[root@zabbixserver ~]# gzip -d server.sql.gz 
[root@zabbixserver ~]# mysql -uzabbix -pzabbix zabbix < server.sql

# 10. 配置zabbix_server
[root@zabbixserver ~]# vim +129 /etc/zabbix/zabbix_server.conf
DBPassword=zabbix

# 11. 配置zabbix_agent
[root@zabbixserver ~]# vim /etc/zabbix/zabbix_agentd.conf 
182 Hostname=zabbixserver

# 12. 配置nginx展示zabbix
[root@zabbixserver ~]# vim /etc/nginx/conf.d/zabbix.conf
# 打开第2、3行的注释,结果如下所示:
server {
        listen          8080;
        server_name     example.com;
...以下省略...

# 13. 启动相关服务
[root@pubserver zabbix]# vim 04-start-zabbix.yml 
---
- name: config zabbix
  hosts: zabbix
  tasks:
    - name: start service    # 循环启动多个服务
      service:
        name: "{{item}}"
        state: started
        enabled: yes
      loop:
        - zabbix-server
        - zabbix-agent
        - nginx
        - php-fpm
[root@pubserver zabbix]# ansible-playbook 04-start-zabbix.yml 
访问zabbixserver的8080端口,进行初始化

密码也是:zabbix

这个用户和密码是zabbix网页的。

二、zabbix 监控服务使用

在web1上安装agent
# 1. 安装agent
[root@pubserver zabbix]# vim 05-inst-agent.yml
--- 
- name: install agent
  hosts: webservers
  tasks:
    - name: install agent    # 安装agent
      yum:
        name: zabbix-agent
        state: present
[root@pubserver zabbix]# ansible-playbook 05-inst-agent.yml 

# 2. 修改web1配置文件
[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.conf 
117 Server=127.0.0.1,192.168.88.5
182 Hostname=web1

# 3. 起动服务
[root@pubserver zabbix]# vim 06-start-agent.yml 
---
- name: config agent
  hosts: web1
  tasks:
    - name: start agent      # 启动服务
      service:
        name: zabbix-agent
        state: started
        enabled: yes
[root@pubserver zabbix]# ansible-playbook 06-start-agent.yml 
在web页面中添加对web1的监控
主机:安装了agent,被监控的主机
主机组:根据需求,将多台主机加入到一个主机组中,方便管理。系统默认已经创建了一些主机组。
模板:是监控项的集合。将模板应用到主机,主机就可以直接拥有模板中的所有监控项。系统中默认已经创建了一些模板。

常用监控指标
Space utilization:以百分比显示的磁盘利用率
Used space:已用磁盘空间
Available memory:可用内存
CPU idle time:CPU空闲时间。不宜过低。
Load average (1m avg)、Load average (5m avg)、Load average (15m avg):CPU1分钟、5分钟、15分钟的平均负载。这个值不应长期大于核心数。
Interface eth0: Bits received:网卡接收到的数据量
Interface eth0: Bits sent:网卡发送的数据量
Number of processes:系统运行的进程数
Number of logged in users:已登陆的用户数
自定义监控项
实现监控web1用户数量的监控项
在被控端创建key。被控端被监控的内容叫作key,可以理解为它就是一个变量名,具体的名字自己决定。
在web页面中创建监控项。监控项对应key值。

在被控端创建key

语法
UserParameter=自定义key值,命令
# 命令的执行结果,是key的value
创建自定义配置文件。文件名自定义。
[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/usercnt.conf
UserParameter=usercnt,sed -n '$=' /etc/passwd
[root@web1 ~]# systemctl restart zabbix-agent.service 
验证自定义监控项
# 1. 安装zabbix-get
[root@zabbixserver ~]# yum install -y zabbix-get
[root@web1 ~]# yum install -y zabbix-get

# 2. 获取监控项的值
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k usercnt
46
[root@zabbixserver ~]# zabbix_get -s 192.168.88.100 -k usercnt

创建模版

  • 创建监控项
  • 应用模板到主机
  • 查看结果

三、总结

zabbix配置时,需要注意配置主机的监控项和触发器。

新建动作时,类型分为Trigger 触发器类型,autoregistration 自动注册,internal 内部触发。

抽象来说:好比一个3D动画捕捉演员。


SECURITY DAY2

一、zabbix报警机制

配置告警

  • 默认情况下,监控项不会自动发送告警消息
  • 需要配置触发器与告警,并且通过通知方式发送信息给联系人
  • 触发器:设置条件,当条件达到时,将会执行某个动作
  • 动作:触发器条件达到之后要采取的行为,比如发邮件或执行命令

用户数超过50,发送告警邮件

  • 当web1的用户数超过50时,认为这是一个问题(Problem)
  • 当出现问题时,将会执行动作。
  • 执行的动作是给管理员发邮件。
  • 给管理员发邮件,还要配置邮件服务器的地址,以及管理员的email地址
实施
  • 创建触发器规则

  • 创建邮件类型的报警媒介

验证告警配置
在zabbixserver上配置邮件服务
# 配置postfix邮件服务和mailx邮件客户端
[root@pubserver zabbix]# vim 07-config-mail.yml
---
- name: config mail
  hosts: zabbix
  tasks:
    - name: install mail     # 安装postfix和mailx
      yum:
        name: postfix,mailx
        state: present
        
    - name: start postfix    # 启动邮件服务postfix
      service:
        name: postfix
        state: started
        enabled: yes
[root@pubserver zabbix]# ansible-playbook 07-config-mail.yml
在web1创建用户,使总用户数超过50
[root@web1 ~]# for user in user{1..5}
> do
> useradd $user
> done
在zabbix web页面中查看

在zabbixserver上查看邮件
[root@zabbixserver ~]# mail   # 查看邮件
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 2 messages 2 new
>N  1 zzg@tedu.cn           Sat Dec 31 16:47  21/932   "Problem: usercnt_gt_50"
 N  2 zzg@tedu.cn           Sat Dec 31 16:48  21/932   "Problem: usercnt_gt_50"
& 1   # 查看1号邮件
Message  1:
From zzg@tedu.cn  Sat Dec 31 16:47:59 2022
Return-Path: <zzg@xixi.cn>
X-Original-To: root@localhost.localdomain
Delivered-To: root@localhost.localdomain
From: <zzg@xixi.cn>
To: <root@localhost.localdomain>
Date: Sat, 31 Dec 2022 16:47:59 +0800
Subject: Problem: usercnt_gt_50
Content-Type: text/plain; charset="UTF-8"
Status: R

Problem started at 16:47:56 on 2022.12.31
Problem name: usercnt_gt_50
Host: web1
Severity: Warning
Operational data: 51
Original problem ID: 102
& q   # 输入q退出

二、zabbix 进阶操作

配置自动发现

  • 在web2上配置agent
[root@web2 ~]# vim /etc/zabbix/zabbix_agentd.conf 
117 Server=127.0.0.1,192.168.88.5
182 Hostname=web2
[root@web2 ~]# systemctl enable zabbix-agent.service --now

主动监控


默认zabbix使用的是被动监控,主被动监控都是针对被监控主机而言的。
被动监控:Server向Agent发起请求,索取监控数据。此种模式常用
主动监控:Agent向Server发起连接,向Server汇报

配置web2使用主动监控
修改配置文件,只使用主动监控
[root@web2 ~]# vim /etc/zabbix/zabbix_agentd.conf 
117 # Server=127.0.0.1,192.168.88.5
142 StartAgents=0
171 ServerActive=192.168.88.5
242 RefreshActiveChecks=120

# 重启服务
[root@web2 ~]# systemctl restart zabbix-agent.service 
[root@web2 ~]# ss -tlnp | grep :10050  # 端口号消失

三、监控案例解析

配置钉钉机器人告警

创建钉钉机器人
  • 登陆钉钉网页版:阿里巴巴-钉钉,是一个工作方式!超过1000w家企业正在使用钉钉! (或者在windows系统上下载电脑版钉钉)
  • 下面以钉钉电脑版为例,配置钉钉群聊机器人
  • 在群聊中点击设置,以新建机器人
  •   自己创建一个公司企业群测试。

机器人名称自己写一个,提示关键词为warn  

注意上面的Webhook地址,不要泄露,谁拥有此地址,谁就可以控制机器人说话。

编写脚本并测试
# 安装钉钉机器人脚本需要用到的模块
[root@zabbixserver ~]# yum install -y python3-requests

#windows运行不了,直接就下 python-3。说明依赖软件不太够。

# 编写钉钉机器人脚本
[root@zabbixserver ~]# vim /usr/lib/zabbix/alertscripts/dingalert.py 
#!/usr/bin/env python3   

import json
import requests
import sys

def send_msg(url, remiders, msg):
    headers = {'Content-Type': 'application/json; charset=utf-8'}
    data = {
        "msgtype": "text",
        "at": {
            "atMobiles": remiders,
            "isAtAll": False,
        },
        "text": {
            "content": msg,
        }
    }
    r = requests.post(url, data=json.dumps(data), headers=headers)
    return r.text

if __name__ == '__main__':
    msg = sys.argv[1]
    remiders = []
    url = '钉钉机器人Webhook地址'  # 注意此处需输入机器人的webhook地址
    print(send_msg(url, remiders, msg))
    
[root@zabbixserver ~]# chmod +x /usr/lib/zabbix/alertscripts/dingalert.py

[root@zabbixserver ~]# /usr/lib/zabbix/alertscripts/dingalert.py 'warn: 测试消息'    # 注意消息中要包含关键字warn
{"errcode":0,"errmsg":"ok"}

验证

创建用户,使用户数超过55 ,太大了就把条件设小点。
[root@web1 ~]# for user in user{6..10}; do useradd $user; done
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k usercnt
56

添加报警媒介类型

监控Nginx


stub_status模块
用于实时监控nginx的网络连接,这个模块是nginx官方提供的一个模块。
配置nginx
[root@pubserver zabbix]# vim 08-config-nginx.yml
---
- name: config nginx
  hosts: webservers
  tasks:
    - name: install nginx   # 安装nginx
      yum:
        name: nginx
        state: present

    - name: start nginx     # 启动nginx
      service:
        name: nginx
        state: started
        enabled: yes
[root@pubserver zabbix]# ansible-playbook 08-config-nginx.yml 

# 修改配置文件,启用stub_status功能
[root@web1 ~]# vim /etc/nginx/nginx.conf
...略...
 47         location / {
 48         }
 49 
 50         location /status {   # 在此处添加3行
 51             stub_status on;
 52         }   
 53         
 54         error_page 404 /404.html;
 55             location = /40x.html {
 56         }
 ...略...
[root@web1 ~]# systemctl restart nginx
 
# 访问监控页面
[root@zabbixserver ~]# curl http://192.168.88.100/status
Active connections: 1 
server accepts handled requests
 2 2 2 
Reading: 0 Writing: 1 Waiting: 0 
# Active connections:当前客户端与nginx之间的连接数。它等于下面Reading / Writing / Waiting之和
# accepts:自nginx启动之后,客户端访问的总量
# handled:自nginx启动之后,处理过的客户端连接总数,通常等于accepts的值。
# requests:自nginx启动之后,处理过的客户端请求总数。
# Reading:正在读取客户端的连接总数。
# Writing:正在向客户端发送响应的连接总数。
# Waiting:空闲连接。

# 使用工具向服务器发起多个请求
[root@zabbixserver ~]# yum install -y httpd-tools
# 一共发1000个请求,每次并发数200
[root@zabbixserver ~]# ab -n1000 -c200 http://192.168.88.100/
[root@zabbixserver ~]# curl http://192.168.88.100/status
Active connections: 1 
server accepts handled requests
 1097 1097 1003 
Reading: 0 Writing: 1 Waiting: 0 
编写脚本,用于获取各项数据
[root@web1 ~]# vim /usr/local/bin/nginx_status.sh
#!/bin/bash

case $1 in
active)
    curl -s http://192.168.88.100/status | awk '/Active/{print $NF}';;
waiting)
    curl -s http://192.168.88.100/status | awk '/Waiting/{print $NF}';;
accepts)
    curl -s http://192.168.88.100/status | awk 'NR==3{print $1}';;
esac

[root@web1 ~]# chmod +x /usr/local/bin/nginx_status.sh
[root@web1 ~]# nginx_status.sh active
1
[root@web1 ~]# nginx_status.sh accepts
1099
[root@web1 ~]# nginx_status.sh waiting
0
创建zabbix用到的key,获取各项数据
# key的语法格式
UserParameter=key[*],<command> $1
# key[*]中的*是参数,将会传给后面的位置变量$1

# 创建声明key的文件
[root@web1 ~]# vim /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx_status[*],/usr/local/bin/nginx_status.sh $1

# 测试
[root@web1 ~]# systemctl restart zabbix-agent.service 
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[active]
1
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[waiting]
0
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k nginx_status[accepts]
1103

四、总结

监控的目的是:报告系统的运行情况,提前发现问题。O(∩_∩)O

监控类别:

公有:FTP,WEB,数据库,SSH远程连接服务等

私有:机器的CPU、内存、磁盘、网卡流量、用户、进程运行信息等

zabbix基于分布式监控。cacti 基于snmp协议。 nagios 基于agent。


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

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

相关文章

c++----内存管理

okk&#xff0c;大家好。我们大家学习了鄙人的前面前面几篇博客&#xff0c;并且还稍微使用了一些c的基础知识。并且我们前面都说过&#xff0c;我们前面学习的知识都说过。我们前面的几篇博客都是我们以后使用c基础。但是我们大家都知道现在代码都关注什么时间啊&#xff0c;内…

强光照射对半导体材料在紫外线下稳定性的影响

引言 半导体材料在光电器件中的应用日益广泛&#xff0c;其稳定性直接影响到器件的性能和寿命。特别是对于那些需要在户外或强光环境下工作的半导体器件&#xff0c;紫外线的照射会对材料的稳定性带来严峻挑战。因此&#xff0c;对半导体材料在紫外线照射下的稳定性进行深入研究…

模型实战(25)之 基于LoFTR深度学习匹配算法实现图像拼接

模型实战(25)之 基于LoFTR深度学习匹配算法实现图像拼接 图像拼接在全景图、大图或者多目场景下经常会被使用,常用的方法有传统图像处理算法和深度学习直接获取对应点的算法传统图像处理算法过程繁琐,阈值少且整体算法结果对调参比较敏感,其主要通过形状、特征点等描述子对…

【解决error】安装torch 1.1.0

第一步 当云服务器上没有指定版本的torch可以选择 先确定指定torch符合的python版本号 例如这里&#xff0c;我需要安装torch1.1.0&#xff0c;所以需要python>3.6 且 python<3.7 根据python版本&#xff0c;确定服务器安装torch的版本配置 第二步 新建conda虚拟环境…

搞DDR必懂的关键技术笔记:Initialization, Training , Calibration

初始化、训练和校准 引言 当一个带有DRAM子系统的设备上电时,DRAM达到可操作状态之前会发生一系列事件。以下是根据JEDEC规范中的状态机所显示的DRAM从上电到可操作状态所经历的各种状态。 这可不是我们平时就一句Training阶段就能概述。 本质上,初始化过程包括四个不同的阶…

【Redis】全局命令/内部编码/浅谈单线程模型

目录 前言 两个核心命令 GET和SET 全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 数据结构的内部编码 Redis的5中数据类型 Redis数据结构和内部编码 单线程架构 前言 Redis 提供了 5 种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维⾮常重要&a…

easyrecovery和diskgenius哪个好 easyrecovery好用吗 diskgenius值得买吗

随着数据存储重要性的不断增加&#xff0c;数据丢失问题变得让人越来越担忧。当文件因为操作不慎、存储文件的介质损坏或其他原因导致数据丢失时&#xff0c;人们迫切需要一种强大的数据恢复工具来帮助他们找回丢失的文件。在这篇文章中&#xff0c;我们将比较两款知名的数据恢…

[Bugku] web-CTF靶场系列系列详解④!!!

平台为“山东安信安全技术有限公司”自研CTF/AWD一体化平台&#xff0c;部分赛题采用动态FLAG形式&#xff0c;避免直接抄袭答案。 平台有题库、赛事预告、工具库、Writeup库等模块。 --------------------------------- eval 开启环境&#xff1a; 进入页面发现是一道php题&…

axios请求响应拦截器

目录 axios-拦截器 拦截器的作用 请求拦截器-基本写法: axios请求拦截器-统一设置token 需求: 核心步骤: 关键代码: 响应拦截器-基本写法: axios响应拦截器-统一处理token失效 需求: 核心步骤: 关键代码: axios响应拦截器-数据剥离 需求: 核心步骤: 关键代码: ax…

试用AWS全新神器:Amazon Bedrock的「Open Artifacts」版Claude.ai Artifacts

Claude.ai的Artifacts真是太方便了。 GitHub上的AWS Samples仓库中有一个仿制Artifacts的应用程序。 Open Artifacts for Amazon Bedrock https://github.com/aws-samples/open_artifacts_for_bedrockhttps://github.com/aws-samples/open_artifacts_for_bedrock本文将介绍「…

【Java算法专场】前缀和(下)

目录 和为 K 的子数组 算法分析 算法步骤 算法代码 算法示例 和可被 K 整除的子数组 算法分析 同余定理 负数取余 算法步骤 算法代码 算法示例 连续数组 算法分析 算法步骤 算法代码 算法示例 矩阵区域和 算法分析 算法步骤 算法代码 算法示例 算法分析 …

1008 Elevator(Java)

题目 解释 输入数字N&#xff0c;数字N后面跟着N个数字代表着目的楼层&#xff0c;起始点是0层&#xff0c;每上升一层花费6秒&#xff0c;每下降一层花费4秒&#xff0c;每达到一个目的楼层&#xff0c;电梯会停5秒。问你一共花费多少秒&#xff1f; 解题思路 这道题不难&a…

【论文笔记】Matching Anything by Segmenting Anything

【引用格式】&#xff1a;Li S, Ke L, Danelljan M, et al. Matching Anything by Segmenting Anything[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2024: 18963-18973. 【网址】&#xff1a;https://openaccess.thecvf.com/co…

【Python】把list转换成json文件(list中为字典,元素按行写入)

0.前言 数据需要处理成与大模型输入相同类型的数据&#xff0c;从csv文件读出后&#xff0c;想要转换成json文件&#xff0c;看了好多资料都是把整个list写入了json&#xff0c;并不是我想要的格式&#xff0c;这里记录一下最后的按行写入的格式。 1.list转json import json …

Camtasia怎么自动加字幕 Camtasia怎么设置字幕

为了防止观众听不清楚视频中的解说声音&#xff0c;在进行视频编辑时&#xff0c;往往需要添加字幕。但是&#xff0c;你是否觉得一个一个添加字幕有些麻烦&#xff1f;使用Camtasia时&#xff0c;有没有什么能够快速、方便添加字幕的方法呢&#xff1f;添加字幕后&#xff0c;…

Docker 环境下使用 Traefik 3 的最佳实践:快速上手

Traefik 最近终于发布了大版本升级后的第一个修正版本&#xff0c;或许是时候正式迁移程序到新版本了。 写在前面 最近 Traefik 发布了 3.1 版本。作为从 Traefik 1.x 开始使用的用户&#xff0c;Traefik 每个大版本升级都会出现一些配置不兼容的情况&#xff0c;这次 3.x 的正…

DC-DC芯片:MT2492说明

文章目录 一. MT2492介绍1. 特点2. 应用3. 额定值4. 电气特性5. 引脚说明6. 典型应用电路 二. 功能说明内部调节器过电流保护和打嗝模式误差放大器启动和关闭内部软启动设置输出电压电感器的选择输入电容器的选择输入电容器的选择PCB布局建议 一. MT2492介绍 MT2492是一款完全…

LaneATT推理详解及部署实现(下)

目录 前言一、LaneATT推理(Python)1. LaneATT预测2. LaneATT预处理3. LaneATT后处理4. LaneATT推理 二、LaneATT推理(C)1. ONNX导出2. LaneATT预处理3. LaneATT后处理4. LaneATT推理 三、LaneATT部署1. 源码下载2. 环境配置2.1 配置CMakeLists.txt2.2 配置Makefile 3. ONNX导出…

平衡二叉树 - 力扣(LeetCode) C语言

110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09;&#xff08;点击前面链接即可查看题目&#xff09; 一、题目 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。 示例 1&#xff1a; 输入&#xff1a;root […

计量经济学(十六)--一文读懂和学会医学统计学中的四种检验方法

1. 统计学是什么? 统计学是应用数学的一个分支,主要通过利用概率论建立数学模型,收集所观察系统的数据,进行量化的分析、总结,并进而进行推断和预测,为相关决策提供依据和参考。它被广泛的应用在各门学科之上,从物理和社会科学到人文科学,甚至被用来工商业及政府的情报…