Zabbix监控接收SNMPTrap消息与SNMPTT结合

一.SNMP 协议

1.协议介绍

snmp 协议是日常使用的较多的一种协议,绝大多数网络设备/存储等都支持 snmp 协议,通过此协议可以实现设备状态的监控及管理。

2.主要组成

SNMP 协议包括以下三个部分:

SNMP Agent:负责处理 snmp 请求,主要包括 get,set 等操作。可通过此接口查询设备的运行状态(使用较多),或者变更配置(使用较少),默认使用 UDP 161 端口
SNMP Trap: snmp 通知消息,主动发送消息到管理端。如设备故障,端口 down 等都会实时发送消息到接收端。默认使用 UDP 162 端口
SNMP MIB:MIB 代表管理信息库,是按层次结构组织的信息的集合,定义了设备内被管理对象的属性。

3.基本操作

经常使用的终端命令有以下几个:
snmpwalk:遍历整个 snmp mib 树,通常用来检测 snmp 是否配置成功,一般完整 walk 到一个 MIB,在 MIB 末尾,都会输出“End Of Mib”的字样。否则可能为 Response timeout 等错误,以此来判断 snmp agent 是否配置成功
snmpget:获取某个 oid 的具体数值,通常用来检测 oid 是否正确
遇到很多使用 snmpwalk 来获取 oid 数据的,这是错误的用法,这样是不能测试 oid 的正确性。只有通过 snmpget+oid 能获取的数据的 oid,才能配置成独立的监控项,作为监控指标采集数据。
使用 zabbix 监控 snmp 设备状态,一般按照以下步骤进行操作:

  1. 通过 snmpwalk 确定 snmp agent 配置是否正确
  2. 通过 snmpget 获取具体的某个 oid 的数据,记录 oid
  3. 在 zabbix 上建立对应的 item,interface 选择设备 snmp 接口,Key 可随意,SNMP OID 输入 oid,SNMP community 输入 snmp community Type of information 选择对应类型即可。

二.SNMPTrap 监控

1.SNMPTT 介绍

SNMPTT (SNMP Trap Translator) 是一个 perl 语言编写的用来处理 snmptrap 消息的程序,可与 Net-SNMP / UCD-SNMP snmptrapd 程序(www.net-snmp.org)一起使用,基本流程如下

snmptt 负责处理 net-snmp 接收到的 trap 消息,通过 snmptt 命令或 snmptthandler 进行处理,解析消息之后可将消息写入文件或数据库。

2.安装 SNMPTT

操作系统为 centos 7.7 1908 x64,使用 yum 方式安装 snmptt,snmptt 不在默认的官方源,属于 epel 源,因此需要首先安装 epel 源。 添加 epel 源

yum install epel-release -y

安装 snmptt 及相关组件

yum install snmptt perl-Sys-Syslog perl-DBD-MySQL -y

 即可完成安装。

3.转换 MIB 文件

snmp trap 消息如果不翻译,原始内容可能是这样的

{"Version": 2,"TrapType": 0,"OID": null,"Other": null,"Community": "public","Username": "","Address": "172.16.1.64:49692","VarBinds": {".1.3.6.1.2.1.1.3.0": 7908527690000000,".1.3.6.1.2.1.2.2.1.1.18": 18,".1.3.6.1.2.1.2.2.1.2.18": "Vlanif103",".1.3.6.1.2.1.2.2.1.7.18": 2,".1.3.6.1.2.1.2.2.1.8.18": 2,".1.3.6.1.6.3.1.1.4.1.0": [1, 3, 6, 1, 6, 3, 1, 1, 5, 3]},"VarBindOIDs": [".1.3.6.1.2.1.1.3.0",".1.3.6.1.6.3.1.1.4.1.0",".1.3.6.1.2.1.2.2.1.1.18",".1.3.6.1.2.1.2.2.1.7.18",".1.3.6.1.2.1.2.2.1.8.18",".1.3.6.1.2.1.2.2.1.2.18"]
}

如果需要知道上述 oid 的具体内容及数值意义就需要对照 MIB 文件对消息进行“翻译”。snmptt 需要加载对应配置文件,对 trap 消息进行翻译。 snmptt 提供了 snmpttconvertmib 工具,snmpttconvertmib 是一个 Perl 脚本,它将读取 MIB 文件并将 TRAP-TYPE(v1)或 NOTIFICATIONATION-TYPE(v2)定义转换为 SNMPTT 可读的配置文件,从而实现对 trap 消息的翻译,基本命令如下:

/usr/bin/snmpttconvertmib --in=/usr/share/snmp/mibs/CPQHOST.mib --out=/etc/snmp/snmptt.conf.compaq --net_snmp_perl
  • /usr/share/snmp/mibs/ 为 centos7 默认的 mibs 文件路径,上传设备 mib 文件到此目录。
  • /etc/snmp/snmptt.cong.compaq 转换完输出的配置文件

由于一般情况设备 mib 可能有多个,建议转换为一个配置文件中,便于管理,可使用以下命令进行批量转换

for i in HUAWEI*
do
/usr/bin/snmpttconvertmib --in=$i --out=/etc/snmp/snmptt.conf.huawei --net_snmp_perl
done

 以 HUAWEI 开头的 mib 文件都转换为 snmptt.conf.huawei,基本都是一些私有的 MIB。snmptt 自带的 snmptt.conf 配置文件里已经包括了一些常用的配置如端口 up/down。实际过程中,只转换需要关注的 MIB 文件即可。 这里以配置华为 USG 6320 登录 trap 告警为例,从华为官网下载 MIB 文件,并上传到系统/usr/share/snmp/mibs 目录下,从 MIB 说明文件得知,用户登录 MIB 文件属于 HUAWEI-SECURITY-LOGIN-MIB.mib 文件,对 mib 文件进行转换

/usr/bin/snmpttconvertmib --in=/usr/share/snmp/mibs/HUAWEI-SECURITY-LOGIN-MIB.mib --out=/etc/snmp/snmptt.conf.HUAWEI-SECURITY-LOGIN --net_snmp_perl

输入如下

表示转换成功,已经生成 snmptt.conf.HUAWEI-SECURITY-LOGIN,这里转换出来的为标准的文件,不符合 zabbix snmptrap 文件格式,因此还需要执行以下命令对配置文件进行稍加修改。

sed -i 's/FORMAT/FORMAT ZBXTRAP $aA/g' /etc/snmp/snmptt.conf.HUAWEI-SECURITY-LOGIN

其实就是添加一个 ZBXTRAP 字符。很多文档遗漏此项,导致后续配置后 zabbix server 日志出现以下错误:

28391:20190923:150150.572 invalid trap data found "2019/09/23 15:01:49 .1.3.6.1.6.3.1.1.5.4 Normal "Status Events" 172.16.1.64 - Link up on interface 18.  Admin state: up.  Operational state: up
2019/09/23 15:01:49 .1.3.6.1.6.3.1.1.5.4 Normal "Status Events" 172.16.1.64 - A linkUp trap signifies that the SNMPv2 entity, 18 up up Vlanif103

无法识别 trap 文件格式。

4.配置 snmptt

snmptt 配置文件有 2 个

  • /etc/snmp/snmptt.ini snmptt 主要配置文件
  • /etc/snmp/snmptt.conf 系统默认的策略文件,包括一些基本的端口 up/down 的配置 修改默认的 snmptt.ini 配置文件,主要修改一下几个地方
mode = standalone
multiple_event = 0
net_snmp_perl_enable = 1
translate_log_trap_oid = 1
date_time_format = %Y/%m/%d %H:%M:%S
syslog_enable = 0

在这里需要加载刚才转换完成的 snmptt.conf.HUAWEI-SECURITY-LOGIN 配置文件 在 snmptt.ini 文件末尾如下添加 snmptt.conf.HUAWEI-SECURITY-LOGIN

[TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file).  The COMPLETE path
# and filename.  Ex: '/etc/snmp/snmptt.conf'
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
/etc/snmp/snmptt.conf.HUAWEI-SECURITY-LOGIN
END

snmptt 有二种模式,分别为

  • standalone 每次收到 trap 消息时读取 snmptt.ini 配置文件调用 snmptthandler 来处理 trap 消息
  • daemon 顾名思义守护进程方式,启动 snmptrap 时,初始化时一次性读取 snmptt.ini 二种方式各有区别,选择使用即可,具体区别可查看官方说明snmptt mode

 由于这里测试使用,经常修改 snmptt.ini 配置文件,如果使用 daemon 模式,那么每次修改 snmptt.ini 配置文件就需要重启 snmptt,因此这里我使用 standalone 模式。

5.配置 snmptrap

snmp trap 消息为主动通知,因此需要配置服务器来接收设备发送过来的 snmp trap 消息。net snmp 接收 trap 消息后,通过 traphandle 调用 snmptt 来对 trap 消息进行处理。 安装 net snmp,建议安装 net-snmp 的所有关联包

yum install net-snmp* -y

 即可完成 snmp 安装。 修改/etc/sysconfig/snmptrapd 为以下内容

OPTIONS="-m +ALL -On"

 修改/etc/snmp/snmptrapd.conf 配置文件,添加如下

authCommunity execute public
traphandle default /usr/sbin/snmptt

 authCommunity 可以配置多个 启动 snmptrap 服务

systemctl start snmptrapd
systemctl enable snmptrapd

在 usg 6320 上配置 trap 消息,并指向 snmp trap server,配置 Community 为 public

 配置之后,通过 web 登录 USG 和退出 USG,都会收到 trap 消息。snmptt 日志文件为/var/log/snmptt/snmptt.log 可看到相关信息,则表示配置处理 trap 成功,原始内容都为变量内容,不太友好, 可以通过调整 snmptt.conf.HUAWEI-SECURITY-LOGIN,配置 trap 消息输出格式。 snmptt.conf.HUAWEI-SECURITY-LOGIN 配置文件内容大致如下:

...
EVENT hwSecLOGINSucced .1.3.6.1.4.1.2011.6.122.62.2.1 "Status Events" Normal
FORMAT ZBXTRAP $aA $*
SDESCThe user login succeeded.
Variables:1: hwSecLOGINUserSyntax="OCTETSTR"Descr="The user name."2: hwSecLOGINIPSyntax="OCTETSTR"Descr="The User IP address."3: hwSecLOGINTimeSyntax="OCTETSTR"Descr="The User login time."4: hwSecLOGINTypeSyntax="OCTETSTR"Descr="The User access type."5: hwSecLOGINLevelSyntax="INTEGER32"Descr="The User login level."
EDESC
......

其中 FROMAT 就是需要修改定义的,其中包括很多变量,具体可在SNMPTT.CONF-FORMAT 常用的几个如下:

  • $aA snmp trap 的代理 IP,即源 IP
  • $* 所有变量
  • $n n 为数字,表示变量次序 Variables 为 trap 变量,基本可以看懂
  • hwSecLOGINUser 登录用户名
  • hwSecLOGINIP 登录 IP
  • hwSecLOGINTime 登录时间
  • hwSecLOGINType 登录类型
  • hwSecLOGINLevel 登录级别 按照变量,可以对 trap 消息进行定制化,还支持中文!将 FORMAT 一行修改为
FORMAT ZBXTRAP $aA User login succeed!userName = $1, loginIP = $2, loginTime = $3, accessType = $4, userLevel = $5

 修改后,登录 USG,查看 snmptt.log 日志,日志已经被格式成需要的格式,已经可以看懂了!

2019/09/27 15:08:49 hwSecLOGINSucced Normal "Status Events" 172.16.1.64 - ZBXTRAP 172.16.1.64 User login succeed!userName = admin, loginIP = 10.128.23.19, loginTime = 2019/09/27 16:54:08, accessType = web, userLevel = 15

至此完成了 snmp trap 消息的接收及翻译工作。

三.配置 Zabbix

1.zabbix 安装注意事项

zabbix 可以配置读取接收到的 trap 文件,从而实现对对 trap 消息的告警,如过 zabbix 是编译安装,系统需要安装 net-snmp-devel 包,编译时需要添加以下参数

–with-net-snmp

2.修改 zabbix server 配置文件

SNMPTrapperFile=/var/log/snmptt/snmptt.log
StartSNMPTrapper=1

 制定 trap 文件为 snmptt 日志文件,并开启 strap 处理的 poller,修改之后重启 zabbix server。

3.配置 snmptrap item

1.添加一个主机

SNMP interfaces 添加机器 Ip,添加之后创建 item

  • Type 为 SNMP trap
  • snmptrap 为 zabbix 内置的 key,用来获取 trap 文件内容
  • Type of information 选择 log
  • Log time format 和 snmptt 配置一致,配置为 yyyy/MM/dd hh:mm:ss 直接配置 Key 为 snmptrap,表示获取 snmptt 日志里的所有消息。配置之后登录设备,退出设备,可在 Last data 看到数据已经采集。(此截图为为进行翻译之前截取,翻译之后可显示中文,英文)

4.配置 Trigger

目前已经采集了 trap 日志,需要配置对应的 trigger 对 trap 消息进行告警。以 usg 设备登录错误为例,登录错误时间类型为:hwSecLOGINFailed,因此配置如下 trigger

配置之后,用错误的用户登录 USG就可以产生告警。可以在问题中查看告警信息即可。

告警内容有点模糊,同样修改下 snmptt.conf.HUAWEI-SECURITY-LOGIN,将登录失败的内容修改为容易理解的中文,即修改 FORMAT 为中文

EVENT hwSecLOGINFailed .1.3.6.1.4.1.2011.6.122.62.2.2 "Status Events" Normal
FORMAT ZBXTRAP $aA 用户登录设备失败!用户名 = $1,登录ip = $2, 登录时间 = $3, 接入类型 = $4, 用户级别 = $5
SDESCThe user login failed.
Variables:1: hwSecLOGINUserSyntax="OCTETSTR"Descr="The user name."2: hwSecLOGINIPSyntax="OCTETSTR"Descr="The User IP address."3: hwSecLOGINTimeSyntax="OCTETSTR"Descr="The User login time."4: hwSecLOGINTypeSyntax="OCTETSTR"Descr="The User access type."
EDESC

配置后告警内容

5 分钟后故障自动恢复,至此配置完成。

5.一般用法

以上只是简单测试,生产环境中应该注意以下事项

  • 分析需要告警的 trap event 类型 如:hwSecLOGINFailed/warmStart/linkDown/coldStart/authenticationFailure 根据类型,配置对应的 triger 即可
  • 可直接配置对应的 key 来采集对应的指标,只要收到消息就告警。如下图配置只采集 hwSecLOGINSucced 的指标。

配置对应的 trigger,进行告警

  • 如只配置了采集对应的 item,而没有配置 snmptrapkey,建议配置一个 snmptrap.fallback 的 item,配有匹配的 item 消息,都会保存到此 item 里
  • 更多配置及用法参考 zabbix 官网配置zabbix trap

四.注意事项

1.MIB 文件

一定要确保 MIb 文件的准确性,设备版本与 MIB 文件版本必须一致,包括大小版本。如不一致会看到解析文件出现以类似错误

2019/09/27 08:34:23 .1.3.6.1.4.1.2011.6.122.62.2.2 Normal "Status Events" 172.16.1.64 - the user 123 login with web on 10.128.23.19 in 2019/09/27 08:34:22 by time on 2019/09/27 08:34:22 ,status is Wrong Type (should be OCTET STRING): 0

 说明 mib 文件里定义的 trap 变量类型和实际收到的 trap 消息变量类型不一致,解析错误。

2.zabbix 配置

建议对同一类型设备配置统一的 snmp trap 模版,相同型号直接关联模版即可使用。

3.snmptt 日志

随之 snmp trap 消息的增多,snmptt 会逐渐变大,建议配置 logrotate 对日志进行切分,使用 yum 安装的 snmptt 已经自动配置了,使用编译安装的,可以参考 /etc/logrotate.d/snmptt

/var/log/snmptt/snmptt*.log /var/log/snmptt/snm ptthandler.debug {weeklynotifemptymissingok
}
/var/log/snmptt/snmptt.debug {weeklynotifemptymissingokpostrotate/etc/init.d/snmptt reload >/dev/null 2>/dev/null || trueendscript
}

snmptt 可开启 debug 日志,建议在测试阶段开启 debug 日志,以便进行排错。

参考文档
1.http://snmptt.sourceforge.net/docs/snmptt.shtml
2.https://www.miraclelinux.com/product-service/zabbix/tech-lounge/zbx-tl-001

探索技术无限可能,博主具有丰富监控模板资源及开发能力和项目管理经验,欢迎添加交流一起探讨,解决你的技术难题!

微信号:king_songax

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

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

相关文章

Android11适配已安装应用列表

Android11适配已安装应用列表 之前做过已安装应用列表的适配&#xff0c;最近国内版SDK升级到33和隐私合规遇到很多问题&#xff0c;于是把已安装应用列表记录一下&#xff1a; 1、在Android11及以上的适配&#xff1a; package com.example.requestinsttallapplistdemoimpo…

POSTGRESQL中如何利用SQL语句快速的进行同环比?

目录 1. 引言2. 数据准备3. 时间序列数据处理4. 同比分析4.1 对两年的数据进行对比4.2 计算两年的差额和同比4.3 细分后的同比计算 5. 环比分析5.1 简单的日期环比计算5.2 先聚合再进行环比计算5.3 考虑日期不连续的环比计算 6. 性能优化技巧7. 注意事项与常见问题8. 结语 1. 引…

在Excel中,只需点击几下,就能只复制和粘贴可见单元格

你可以在Excel中隐藏列、行或单元格&#xff0c;以使数据输入或分析更容易。但是&#xff0c;当你复制并粘贴一个包含隐藏单元格的单元格区域时&#xff0c;它们会突然重新出现。 你可能没有意识到&#xff0c;但有一种方法可以只复制和粘贴Microsoft Excel中的可见单元格。只…

sql中group by和having的使用

group by&#xff1a;按照某个字段或者某些字段进行分组。 having&#xff1a;对分组之后的数据进行再次过滤&#xff0c;having必须和group by一起用&#xff0c;且在group by后面。 比如person表如下&#xff08;以下查询均基于此表&#xff09;&#xff1a; 1.group by 用法…

用Java写一个王者荣耀游戏

目录 sxt包 Background Bullet Champion ChampionDaji GameFrame GameObject Minion MinionBlue MinionRed Turret TurretBlue TurretRed beast包 Bear Beast Bird BlueBuff RedBuff Wolf Xiyi 打开Eclipse创建图片中的几个包 sxt包 Background package sxt;…

04-配置远程仓库的SSH免密登陆

配置SSH免密登录 配置步骤 创建好的远程仓库也可以使用SSH的方式进行访问,但如果没有配置公钥会有警告 第一步: 删除用户家目录下的.ssh目录,如果没有该目录或者该目录下已经有密钥了就不用执行该操作 #进入当前用户的家目录,删除.ssh 目录 LayneLAPTOP-Layne MINGW64 ~ $ r…

进行主从复制时出现的异常FATAL CONFIG FILE ERROR (Redis 6.2.6)Reading the configuration file

错误如下所示&#xff1a; FATAL CONFIG FILE ERROR (Redis 6.2.6) Reading the configuration file, at line 1 >>> include/myredis/redis.conf Bad directive or wrong number of arguments出现错误的原因是.conf文件中命令之间缺少空格&#xff0c;如下所示&…

豆粕期权 MVIX 指数构建及策略回测

1. VIX指数 VIX 最初被设计出来的目的是为了预警市场的潜在风险&#xff0c;一般来说&#xff0c;当 VIX 指数小于 15 时&#xff0c;表示市场出现非理性繁荣&#xff1b;当 VIX 指数大于 40 时&#xff0c;表示市场对 未来的非理性恐慌&#xff0c;短期内可以出现反弹。VIX 指…

非标设计之气缸概述

气缸的组成&#xff1a; 气缸的分类 单作用气缸&#xff1a; 活塞仅一侧供气&#xff0c;气压推动活塞产生推力伸出&#xff0c;靠弹簧或自重返回。 双作用气缸&#xff1a; 气缸活塞两侧都有气压力&#xff0c;来实现前进或后退动作。 气缸的缓冲 但是&#xff0c;气缸也…

matlab 基于卡尔曼滤波的GPS-INS的数据融合的导航

1、内容简介 略 25-可以交流、咨询、答疑 2、内容说明 基于卡尔曼滤波的GPS-INS的数据融合的导航 "基于卡尔曼滤波的GPS-INS的数据融合的导航 基于卡尔曼滤波实现GPS-INS组合导航系统" 卡尔曼滤波、GPS、INS、数据融合、导航 3、仿真分析 4、参考论文 略 …

2_企业级Nginx使用-day1

#企业级Nginx使用-day1 学习目标和内容 1、能够了解Nginx的信号参数 2、能够进行平滑升级Nginx 3、能够配置server虚拟机 4、能够部署上线项目到LNMP架构中 5、能够了解Nginx的常用官方模块 6、能够了解日志相关使用 一、重装和升级 在实际业务场景中&#xff0c;需要使用软件…

C++函数模板,类模板

C函数模板&#xff0c;类模板 1.函数模板1.1函数模板的概念1.2函数模板的格式1.3函数模板的原理1.4函数模板的实例化1.5模板参数的匹配原则 2.类模板2.1类模板的定义格式2.2类模板的实例化 1.函数模板 1.1函数模板的概念 在C中&#xff0c;函数模板是一种通用的函数定义&…

C语言--求一个十进制整数中1的个数

一.题目描述⭐ 求一个十进制整数中1的个数 比如&#xff1a; 输入:10201 输出&#xff1a;2 &#xff08;这个数字中1的个数是2&#xff09; 二.思路分析⭐ 数字类的问题我们可以用取模&#xff0c;或者取余运算。 首先定义一个计数器&#xff0c;用来统计1的个数。 输入数字…

Python练习题(三)

&#x1f4d1;前言 本文主要是【Python】——Python练习题的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

正则表达式及文本三剑客grep,awk,sed

目录 正则表达式 前瞻 代表字符 表示次数 位置锚定 分组或其他 grep 选项 范例 awk 前瞻 awk常见的内置变量 范例 sed 前瞻 sed格式 范例 搜索替代 格式 范例 分组后项引用 格式 范例 正则表达式 前瞻 通配符&#xff1a;匹配的是文件名 正则表达式&a…

U盘不仅能在电脑上使用,在手机上也可使用,包括安卓和苹果手机,但苹果的较特殊

许多最好的安卓手机都使用USB-C端口在电脑上充电和来回传输文件,但如果你需要给老板发电子邮件的文件放在闪存驱动器或全尺寸SD卡上呢? 幸运的是,使用廉价的适配器电缆,你可以将USB加密狗或读卡器直接连接到手机上。你甚至可以直接使用USB-C闪存驱动器,以实现更轻松的过程…

IDEA如何配置Git 遇到问题的解决

新建项目 点击 会变红 会生成.git隐藏文件 配置远程仓库路径&#xff1a;点击Manage Remotes&#xff1a;将远程仓库的链接放到这里&#xff1a; 得到如下样式&#xff1a; 此时提交到本地仓库 点击add&#xff0c;添加到暂存文件&#xff1a; 此时文件变绿&#xf…

JavaEE 多线程

JavaEE 多线程 文章目录 JavaEE 多线程引子多线程1. 特性2. Thread类2.1 概念2.2 Thread的常见构造方法2.3 Thread的几个常见属性2.4 启动一个线程2.5 中断一个线程2.6 等待一个线程2.7 获取当前线程引用2.8 休眠当前线程 3. 线程状态 引子 当进入多线程这一块内容时&#xff…

ArrayList 与 顺序表 (附洗牌算法)!

曾经我也是一枚学霸&#xff0c;直到有一天想去学渣的世界看看&#xff0c;结果就找不到回去的路了。 目录 1. 线性表 2.顺序表 2.1 接口的实现 3. ArrayList简介 4. ArrayList使用 4.1 ArrayList的构造 4.2 ArrayList常见操作 4.3 ArrayList的遍历 4.4 ArrayList的扩…

掌握视频剪辑技巧:批量置入视频封面,提升视频品质

在当今数字化时代&#xff0c;视频已成为生活的重要组成部分。无论是观看电影、电视剧、综艺节目&#xff0c;还是分享个人生活、工作成果&#xff0c;视频都以其独特的魅力吸引着大众的视线。视频封面是视频内容的缩影&#xff0c;是观众对视频的第一印象。一个好的封面能吸引…