Linux云计算 |【第二阶段】SECURITY-DAY2

主要内容:

Zabbix报警机制(创建触发器、设置邮箱、执行动作),Zabbix进阶操作(主动发现、主被动监控模式、拓扑图、聚合图形)、监控案例(监控Nginx服务状态、监控TCP连接状态)

一、Zabbix报警机制概念

- 自定义的监控项默认不会自动报警,首页也不显示报警错误提示,需要配置触发器与报警动作才可实现自动报警,如图所示:

1)触发器(Trigger)

创建触发器时,需要定义表达式(Expression)

当触发条件发生后,会导致一个触发事件,触发事件会执行某个动作;(例如:内存不足300M、用户超过30个等)

触发器表达式格式:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

解释:{主机: key.函数(参数)}常数

Expression表达式示例:

① {web1:system.cpu.load[all,avg1].last(0)}>5 //0为最新数据

解释:如果web1主机最新的CPU平均负载值大于5,则触发器状态Problem

② {vfs.fs.size[/,free].max(5m)}

解释:根分区,最近5分钟的最大容量小于10G,则状态进入Problem

③ {vfs.file.cksum[/etc/passwd].diff(0)}>0    //0为最新数据

解释:最新一次校验/etc/passwd如果与上一次有变化,则状态进入Problem

补充:大多数函数使用秒作为参数,可以使用#来表示其他含义

avg, count, last, min and max 等函数支持额外的第二个参数time_shift(时间偏移量),这个参数允许从过去一段时间内引用数据;

2)动作(Action)

触发器的条件被触发后的行为(执行动作)(例如:发送邮件、重启某个服务等)


案例1:实现Zabbix报警功能

案例要求:沿用前面的Zabbix练习环境,使用Zabbix实现报警功能,实现以下目标:

  • 1)监控Linux服务器系统账户数量
  • 2)创建Media,设置邮件服务器及收件人邮箱
  • 3)当系统账户数量超过21人时发送报警邮件

整体思路:

  • 1)创建触发器并定义表达式
  • 2)设置Media报警媒介-邮箱(发件人,收件人)
  • 3)创建并设置Action动作

步骤1:创建触发器规则

1)创建触发器(当系统账户数量超过21人,发送报警)

注意:创建触发器时,建议使用英文语言环境;

通过【Configuration配置】—>【Templates模板】,找到创建的<count.line.passwd模板>,点击模板后面的<triggers触发器>,打开触发器的页面

点击<Create triggers创建触发器>按钮,创建触发器;

2)触发器表达式

填写【name触发器名称】(可任意),定义【serverity触发器报警级别】;

  • 触发器名称:passwd_line-gt-21
  • 触发器报警级别:Warning

触发器报警级别:

  • ① 未分类Not classified
  • ② 一般信息Information
  • ③ 一般告警Warning
  • ④ 危险告警Average
  • ⑤ 高危告警High
  • ⑥ 灾难告警Disaster

定义【表达式Expression】,表达式是触发异常的条件,点击<add添加>自动定义表达式(填写表达式:监控项、功能、账户数量大于21),当自定义完成后,点击<iburst插入>;

  • item监控项:count_line_passwd_item  //监控项
  • Function功能:Last (most recent) T value is > N   //最新数据>N
  • N:21   //N为21

生成表达式:{count.line.passwd:count.line.passwd.last()}>21

解释:当系统的用户数量(监控项)的最新数据大于21,则触发条件;执行Action动作;

步骤2:设置邮件

1)创建Media报警媒介(设置发件人信息)

通过【Administration管理】—>【Media Type报警媒体类型】—>【选择Email邮件】

设置邮件服务器信息,设置邮件服务器及发件人邮件账户信息;

  • SMTP服务器:localhost     //Localhost指192.168.2.5
  • SMTP电邮:root@localhost    //以什么身份发送邮件

在Zabbis服务器检查postfix发邮件服务,保证postfix服务安装并开启(端口25)

[root@zabbixserver ~]# yum -y install postfix
[root@zabbixserver ~]# systemctl enable postfix --now
[root@zabbixserver ~]# ss -nlptu | grep :25
tcp    LISTEN     0      100    127.0.0.1:25                    *:*                   users:(("master",pid=12643,fd=13))

2)为用户添加Media报警媒介(设置收件人信息)

在【Administration管理】—>【Users用户】中找到并选择【Admin】账户

在弹出的界面中选择【Media报警媒介】—>点击【Add添加】报警媒介

点击【Add添加】后,在【Meida Type类型】中填写报警媒介类型,收件人,时间等信息

  • 类型:Email
  • 收件人:root@localhost     //实验中收件人为本机的root
  • 当启时间:1-7,00:00-24:00      //周一至周日的0小时-24小时
  • 如果存在严重性则使用:全部勾选    //针对哪些警告进行邮件通知

步骤3:创建Action动作

1)Action动作

Action(动作)是定义当触发器被触发时,执行的行为;

通过【Configuration配置】—>【Actions动作】—>【Actions Event source事件源:触发器】—>【Create action创建动作】

注意:事件源选择触发器

2)配置Action动作的触发条件

填写Action动作的名称(可任意);配置什么触发器被触发会执行本Action动作

  • - 动作名称:report_problem
  • - 新的触发条件:触发器 = passwd_line-gt-21   //系统账户数量大于21

<选择>并<添加>触发器 = passwd_line-gt-21;

3)配置Action动作的具体行为

配置动作的具体操作行为(发送信息或执行远程命令),当触发条件,无限次数发送邮件,60秒1次,发送给Admin用户;点击<新的>,在操作细节里填写步骤(发送信息多少次)、持续时间、操作类型、发送邮件到用户Admin、报警媒介类型,最后完成<添加>;

  • - 步骤:1 - 0        //1 - 1表示只发一封,0表示无穷大
  • - 操作类型:发送消息
  • - 步骤持续时间:60    //单位秒
  • - 发送到用户:Admin   //发送信息的用户
  • - 仅送到:Email    //报警媒介类型

最终效果:

4)测试效果

在被监控主机创建账户(让账户数量大于21),然后登录监控端Web页面,在仪表盘中查看问题报警(需要等待一段时间)

[root@web1 ~]# useradd aa
[root@web1 ~]# cat /etc/passwd | wc -l
22

在监控服务器上使用mail命令查收报警邮件

[root@zabbixserver ~]# yum -y install mailx    //安装mail收邮件服务
[root@zabbixserver ~]# mail      //查看报警邮件
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 3 messages 3 new
>N  1 root@localhost.local  Fri May  7 16:52  20/836   "Problem: passwd_line_g"
 N  2 root@localhost.local  Fri May  7 16:53  20/836   "Problem: passwd_line_g"
 N  3 root@localhost.local  Fri May  7 16:54  20/836   "Problem: passwd_line_g"
&

补充:如果没有mail命令,则需要安装mailx软件包

二、自动发现(Discovery)

当Zabbix需要监控的设备越来越多,手动添加监控设备麻烦,此时可考虑使用自动发现功能,自动添加被监控主机,实现自动批量添加一组监控主机。

自动发现实现功能:

  • ① 自动发现主机、添加主机、自动添加主机到组;
  • ② 自动链接模板到主机,自动创建监控项目与图形等。

自动发现流程:

  • 1)创建自动发现规则;
  • 2)创建Action动作,发现主机后自动执行的动作;
  • 3)通过动作,执行添加主机,链接模板到主机等操作;


案例:Zabbix自动发现

案例要求:沿用案例,配置Zabbix的自动发现机制,实现以下目标:

  • 1)创建自动发现的规则(发现192.168.4.1-254网段的主机)
  • 2)创建自动发现的动作(添加主机、为主机链接模板)

步骤1:自动发现规则

1)创建自动发现规则

通过【Configuration配置】—>【Discovery自动发现】—>【Create discovery rule创建发现规则】,创建发现规则;

2)配置自动发现规则

填写自动发现的规则名称(可任意)、IP范围(使用逗号隔开,可写多个IP)、更新间隔为多久做一次自动发现(默认为1小时)、点击,配置检查的方式:Ping、HTTP、FTP、Agent的自定义key等检查;

  • 规则名称:web_discovery_rule
  • IP范围:192.168.2.150-254
  • 更新间隔:1m    //1分钟扫描IP范围(生产环境不建议设置间隔太短,浪费计算机资源)
  • 检查:SSH(发现条件是ssh,端口22能连接上 1分钟做一次扫描)

步骤2:创建动作

1)创建Action动作

通过【Configuration配置】—>【Actions动作】—>【Actions Event source事件源:自动发现Discovery】—>【Create action创建动作】

注意:事件源选择自动发现

2)配置Action动作具体行为

配置动作,填写动作名称,添加触发动作的条件;

  • - 动作名称:add_web
  • - 新的触发条件:主机IP地址 = 192.168.2.150-254

触发条件后要执行的操作指令,点击【操作】,在操作细节中选择操作类型:添加主机到组,主机群组:Linux servers与模板链接(HTTP模板),完成后进行

步骤3:验证结果

登陆Zabbix服务器的Web页面,等待1分钟,查看主机列表,确认新添加的主机是否被自动加入监控主机列表;

补充:当Zabbix服务器配置了域名解析,则自动发现的主机以域名的形式显示在主机列表

三、主被动监控模式

主动和被动都是对被监控端主机而言(默认zabbix采用的是被动监控)

  • ① 被动监控:Server向Agent发起连接,索取监控数据;
  • ② 主动监控:Agent向Server发起连接,Agent周期性地收集数据发送给Server;

区别:Server不用每次需要数据都连接Agent,Agent会自己收集数据并处理数据,Server仅需要保存数据即可;

补充:由于监控数据为实时监控,相对的被动监控数据流量大(“请求、回复”)、主动监控数据流量小(“回复”),当监控主机达到一定量级后,Zabbix服务器的资源占用也会逐步增大,导致效率变慢,所以可考虑主动监控来释放服务器的压力;(Zabbix也可支持分布式监控)


案例:Zabbix主动监控

案例要求:沿用前面案例,配置Zabbix主动监控,实现以下目标:

  • 1)修改被监控主机agent为主动监控模式
  • 2)克隆模板,修改模板为主动监控模板
  • 3)添加监控主机,并链接主动监控模板

步骤1:部署被监控主机Zabbix Agent(web2)

1)设置防火墙与SELinux限制

[root@web1 ~]# firewall-cmd --set-default-zone=trusted
[root@web1 ~]# setenforce 0
[root@web1 ~]# sed -i  '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2)源码安装部署Zabbix agent

[root@web1 ~]# useradd -s /sbin/nologin zabbix   //创建zabbix用户
[root@web1 ~]# id zabbix
uid=1000(zabbix) gid=1000(zabbix) 组=1000(zabbix)
[root@web2 ~]# yum -y install gcc make pcre-devel autoconf    //安装依赖包
[root@web2 ~]# tar -xf zabbix-3.4.4.tar.gz
[root@web2 ~]# cd zabbix-3.4.4/
[root@web2 zabbix-3.4.4]# ./configure --enable-agent   //配置,加载agent模块
[root@web2 zabbix-3.4.4]# make && make install      //编译安装
[root@web2 zabbix-3.4.4]# ls /usr/local/sbin/

3)修改Zabbix_agent配置文件,启动Zabbix_agent服务

将agent监控模式修改为:主动模式(注释被动监控模式、关闭10050端口)

补充:主动监控模式要求关闭10050端口(开启端口是为了提供Server连接并获取监控信息,属于被被动监控模式);且发送监控数据必须指定server监控服务器IP,不能有127.0.0.1

[root@web2 ~]# vim /usr/local/etc/zabbix_agentd.conf
 93 # Server=127.0.0.1     //注释(不注释,默认使用被动监控模式)
118 StartAgents=0       //禁止被动监控,不启动Zabbix_agent服务和10050端口
134 ServerActive=192.168.2.5    //监控服务器IP,注意:一定要取消127.0.0.1
145 Hostname=web2    //被监控服务器主机名
183 RefreshActiveChecks=120   //默认120秒检测一次
280 UnsafeUserParameters=1   //允许自定义监控传参
264 Include=/usr/local/etc/zabbix_agentd.conf.d/   //存放自定义key的目录

解释说明:

# Server=监控服务器IP地址  //被动监控模式,允许哪些主机监控本机及获取监控信息

# StartAgents=0   //被动监控时启动几个Agent进程监听10050端口;设置为0则禁止被动监控,不启动服务和端口;

# ServerActive=监控服务器IP地址  //主动监控模式,允许哪些主机监控本机及获取监控信息

# Hostname=被监控服务器主机名   //告诉监控服务器是谁发的数据信息(一定要与Zabbix服务器配置的监控主机名称一致)

# RefreshActiveChecks=120   //监控数据默认120秒检测一次

# UnsafeUserParameters=1    //允许自定义监控传参

# Include=/usr/local/etc/zabbix_agentd.conf.d/    //存放自定义key的目录

编写zabbix_agentd的service文件,通过systemd管理服务

[root@web2 ~]# vim /usr/lib/systemd/system/zabbix_agentd.service
[Unit]
Description=zabbix agent
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/tmp/zabbix_agentd.pid
ExecStart=/usr/local/sbin/zabbix_agentd
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
[root@web2 ~]# systemctl enable zabbix_agentd.service --now    //重启服务
[root@web2 ~]# ss -nlptu | grep zabbix_agentd  //查看不到任何端口信息(已关闭10050端口)

常见报错:启动服务失败,没有zabbix用户

步骤2:创建主动监控的监控模板

1)克隆Zabbix的监控模板(全克隆)

Zabbxi自带模板都是被动模式,通过克隆系统自带模板(在此基础上修改为主动模式)

通过【Configuration配置】—>【Templates模板】—>选择<Template OS Linux>模板,点击<全克隆>,克隆该模板并进行配置修改;

新模板名称:Template OS Linux Server Active

2)修改克隆模板的监控模式

克隆的模板的所有监控项目默认是被动监控模式,需全部修改为主动监控模式

通过【Configuration配置】—>【Templates模板】—>选择新克隆的模板,点击【items监控项】—>勾选所有监控项目,点击<批量更新>,将类型修改为:Zabbix Agent(主动模式)

类型:Zabbix Agent(主动模式)

3)禁用部分监控项目

批量修改监控项的监控模式后,并非所有监控项都支持主动模式;需要将不支持主动模式的监控项目状态关闭(点击类型可排序)

步骤3:添加监控主机(web2)

1)手动添加监控主机(主动模式监控)

在Zabbix监控服务器,添加被监控的主机,设置主机名称为web2 (必须与被监控端的zabbix_agentd.conf配置文件中的Hostname一致),将主机添加到Linux servers组,IP地址修改为0.0.0.0,端口设置为0;

  • 主机名称:web2    //必须与被监控端的zabbix_agentd.conf配置文件中的Hostname一致
  • 主机组:Linux servers
  • IP地址:0.0.0.0   //因Agent采用主动监控模式,主动上传监控数据给Server,所以Server不需要指定被监控服务器的IP和端口
  • 端口:0

步骤4:为主机添加监控模板

选择克隆的模板(主动监控模式),添加链接的模板到web2主机

验证:

通过【Monitoring监控中】—>【Latest最新数据】菜单,选择需要查看的主机组、主机以及图形,查看监控效果(需要等待120秒主动监控数据监测)

四、拓扑图与聚合图形

熟悉zabbix拓扑图与聚合图形,实现以下目标:

  • 1)创建修改拓扑图
  • 2)创建聚合图形

步骤1:创建拓扑图

1)创建拓扑

绘制拓扑图可以快速了解服务器架构,通过【Monitoring监控中】—>【Maps拓扑图】,默认有【Local network拓扑图】,点击<创建拓扑图>,新建拓扑图

可设置拓扑图的名称、拓扑图的宽高(显示页大小)

2)编辑拓扑图

选择创建的拓扑图,点击,进入编辑界面;

拓扑图图表说明:

- Icon(图标),添加设备图标(可以点击图标修改属性)

- Shape(形状),方形、椭圆、线

- Link(连线),使用Ctrl选择两个图标,进行连线

完成后,点击Update(更新)

创建完拓扑图,效果如图所示:

步骤2:创建聚合图形

1)创建聚合图形

聚合图形可以在一个页面显示多个数据图表,方便了解多组数据。

通过【Monitoring监控中】-->【Screens聚合图形】-->【Create screen创建聚合图形】,创建聚合图形;

创建聚合图形参数如下:

  • - Owner所有者:使用默认的Admin用户
  • - Name名称:JUHE
  • - Columns列:列数设置为2列
  • - Rows行:行数设置为2行

2)编辑聚合图形

选择创建的聚合图形,点击【编辑聚合图形】-->点击<更改>,添加监控图形;

添加的监控图形信息内容:图形(监控项)、宽高比例

完成聚合图形,效果如图所示:

五、自定义监控案例

案例要求:沿用前面的练习,使用自定义key监控常用监控项目,实现以下目标:

  • 1)监控Nginx状态(实时并发量、总连接数、等待连接数)
  • 2)监控TCP连接状态

案例1:监控Nginx服务状态

1)源码安装nginx

[root@web1 ~]# yum -y install gcc make pcre-devel openssl-devel
[root@web1 ~]# tar -xf nginx-1.12.2.tar.gz
[root@web1 ~]# cd nginx-1.12.2/
[root@web1 nginx-1.12.2]# ./configure --with-http_stub_status_module
[root@web1 nginx-1.12.2]# make && make install

2)修改配置文件(开启status模块)

[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
...
        location /status {
                stub_status on;
        }
...
[root@web1 ~]# /usr/local/nginx/sbin/nginx   //启动服务

测试:

[root@web1 ~]# curl http://192.168.2.100/status
Active connections: 2
server accepts handled requests
 2 2 3
Reading: 0 Writing: 1 Waiting: 1

3)编写监控脚本(实时并发量、总连接数、等待连接数)

[root@web1 ~]# vim /usr/local/bin/nginx_status.sh
#!/bin/bash
case $1 in
active)
   curl -s http://192.168.2.100/status | awk '/Active/{print $NF}';;  //实时并发量
accepts)
   curl -s http://192.168.2.100/status | awk 'NR==3{print $2}';;  //总连接数
waiting)
   curl -s http://192.168.2.100/status | awk '/Waiting/{print $NF}';; //等待连接数
esac
[root@web1 ~]# chmod +x /usr/local/bin/nginx_status.sh    //赋予执行权限

4)创建自定义key

  • 格式:UserParameter=key,command
  • 格式:UserParameter=key[*],command $1

[*]和$1为固定格式,将key的[所有参数],传递给后面命令作为位置变量

注意:配置文件需允许自定义监控传参:Include=/usr/local/etc/zabbix_agentd.conf.d/

[root@web1 ~]# cd /usr/local/etc/zabbix_agentd.conf.d/
[root@web1 zabbix_agentd.conf.d]# vim nginx.status
UserParameter=nginx.status[*],/usr/local/bin/nginx_status.sh $1
[root@web1 ~]# systemctl restart zabbix_agentd.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[accepts]'
4
[root@web1 ~]# zabbix_get -s 127.0.0.1 -k 'nginx.status[waiting]'
0
[root@web1 ~]# curl http://192.168.2.100/status
Active connections: 1 
server accepts handled requests
 2 4 3
Reading: 0 Writing: 1 Waiting: 0 

[-s]指定被监控的服务器,[-k]调用自定义key(调用该案例key时,需添加参数)

常见报错:未有赋予监控脚本执行权限

[root@web1 ~]# zabbix_get  -s 127.0.0.1 -k 'net.status[waiting]'
sh: /usr/local/bin/net_status.sh: Permission denied

5)创建监控项目item,监控自定义key(nginx.status)

通过【Configuration配置】—>【Hosts主机】,选择web1(使用被动监控模式),点击主机后面的【items监控项】,点击;

  • 监控项名称:nginx_status_item
  • 类型:Zabbix_客户端(被动监控模式)
  • 键值:nginx.status[accpets]
  • 信息类型:数字(无正负)

6)查看监控数据

查看监控数据,通过首页栏【Monitoring监控中】—>【Latest data最新数据】,在过滤器中填写过滤条件,根据监控【主机群组】和监控【主机】选择需要查看哪些监控数据;例如:nginx_status_item自定义key的监控项;

找到需要监控的数据后,可以点击后面的【Graph图形】查看监控图形;

案例2:监控TCP连接状态

参考:https://www.cnblogs.com/jessezeng/p/5617105.html

- TCP三次握手

- TCP连接的四次断开

- ESTABLISHED:表示两台机器正在传输数据

- CLOSE-WAIT:客户端发来的连接中断请求,服务端TCP接到FIN后,就发出ACK回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT;

- TIME-WAIT:客户端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态,等待足够的时间以确保远程TCP接收到连接中断请求的确认。

1)通过ss命令查看网络连接状态

模拟多人并发连接(如果没有ab命令,则安装httpd-tools软件包)

[root@web1 ~]# ab -c 100 -n 1000 http://192.168.2.100/
[root@web1 ~]# ss -antp
ESTAB      0      0      192.168.2.100:22                 192.168.2.254:49946               users:(("sshd",pid=7969,fd=3))
TIME-WAIT  0      0      192.168.2.100:10050              192.168.2.5:53516   

解释说明:

#-a显示所有

#-t显示TCP连接状态

#-u显示UDP连接状态

#-n以数字形式显示端口号和IP地址

#-p显示连接对应的进程名称

2)编写监控脚本

[root@web1 ~]# vim /usr/local/bin/net_status.sh
#!/bin/bash
case $1 in
estab)
   ss -antp | awk 'BEGIN{x=0} /^ESTAB/{x++} END{print x}';;
close_wait)
   ss -antp | awk 'BEGIN{x=0} /^CLOSE-WAIT/{x++} END{print x}';;
time_wait)
   ss -antp | awk 'BEGIN{x=0} /^TIME-WAIT/{x++} END{print x}';;
esac
[root@web1 ~]# chmod +x /usr/local/bin/net_status.sh   //赋予执行权限

3)创建自定义key

  • 注意:被监控端修改配置文件,需要允许自定义key并设置Include参数
[root@web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/net.status
UserParameter=net.status[*],/usr/local/bin/net_status.sh $1
[root@web1 ~]# systemctl restart zabbix_agentd.service    //重启服务

测试:

[root@web1 ~]# zabbix_get  -s 127.0.0.1 -k 'net.status[time_wait]'
40

常见报错:未有赋予监控脚本执行权限

[root@web1 ~]# zabbix_get  -s 127.0.0.1 -k 'net.status[time_wait]'
sh: /usr/local/bin/net_status.sh: Permission denied

4)创建监控项目item,监控自定义key(net_status)

通过【Configuration配置】—>【Hosts主机】,选择web1(使用被动监控模式),点击主机后面的【items监控项】,点击<Create item创建监控项>;

  • 监控项名称:net_status
  • 类型:Zabbix_客户端(被动监控模式)
  • 键值:net.status[time_wait]
  • 信息类型:数字(无正负)

5)查看监控数据

查看监控数据,通过首页栏【Monitoring监控中】—>【Latest data最新数据】,在过滤器中填写过滤条件,根据监控【主机群组】和监控【主机】选择需要查看哪些监控数据;例如:net_status_自定义key的监控项;

找到需要监控的数据后,可以点击后面的【Graph图形】查看监控图形;

 思维导图:

小结:

本篇章节为 的学习【第二阶段】SECURITY-DAY2 笔记,这篇笔记可以初步了解到 Zabbix报警机制,Zabbix进阶操作、监控案例。除此之外推荐参考相关学习网址:


Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值