Linux —— 日志

简介

日志:  log : 某个程序记录所有的发生的事情到一个文件里,这个文件里的信息就是日志

什么是日志?
日记: diary  某个人将某天发生的事情记录下来,方便以后查看  --》记录某个人一天发生的事情

日志会记录哪些?
时间+服务器+进程+发生的事情

意义:1、方便查询以前的事情,可以审计 2、记录出错的信息,方便故障排查 3、大数据分析

缺点:消耗内存、cpu、磁盘等资源

相关服务

rsyslog

rsyslog是linux系统中用来实现日志功能的服务。默认已经安装,并且自动启用。

作用:主要用来采集日志,不生产日志

其特性包括:

    支持输出日志到各种数据库,如 MySQL,PostgreSQL,MongoDB ElasticSearch,等等;
    
    通过 RELP + TCP 实现数据的可靠传输(基于此结合丰富的过滤条件可以建立一种 可靠的数据传输通道供其他应用来使用);网络传输到别的机器
    
    精细的输出格式控制以及对消息的强大 过滤能力;

    高精度时间戳;队列操作(内存,磁盘以及混合模式等); 支持数据的加密和压缩传输等。

[root@web1 ~]# ps aux|grep rsyslog
root       1100  0.0  0.1 222740  5984 ?        Ssl  00:15   0:12 /usr/sbin/rsyslogd -n
root      13214  0.0  0.0 112824   988 pts/0    S+   20:23   0:00 grep --color=auto rsyslog

sshd 它自己没有日志记录功能,它外包给了rsyslogd 

[root@web1 ~]# service rsyslog stop
Redirecting to /bin/systemctl stop rsyslog.service
[root@web1 ~]# ps aux|grep rsyslog
root      13303  0.0  0.0 112824   984 pts/1    S+   21:16   0:00 grep --color=auto rsyslog
[root@web1 ~]#

[root@web1 ~]# service rsyslog status
Redirecting to /bin/systemctl status rsyslog.service
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since 二 2023-05-30 21:16:49 CST; 7s ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 13320 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           └─13320 /usr/sbin/rsyslogd -n

5月 30 21:16:49 web1 systemd[1]: Starting System Logging Service...
5月 30 21:16:49 web1 rsyslogd[13320]:  [origin software="rsyslogd" swVersion="8.24.0-55.el7" x-pid="13320" x-info="http://...] start
5月 30 21:16:49 web1 systemd[1]: Started System Logging Service.
Hint: Some lines were ellipsized, use -l to show in full.
[root@web1 ~]# 
rsyslog 没有对外监听某个端口
[root@web1 ~]# netstat -anplut|grep rsyslog

练习:修改ssh服务的日志类型为local1,记录info以上级别的日志,修改rsyslog.conf配置文件里的添加rule规则对应local1.info 记录到文件/var/log/sc.log里

[root@web1 ~]# vim /etc/rsyslog.conf   定义一个规则 rule
local1.info    /var/log/sc.log

[root@web1 ~]# service rsyslog restart
Redirecting to /bin/systemctl restart rsyslog.service
[root@web1 ~]# 
修改ssh服务对应的日志类别
[root@web1 ssh]# vim sshd_config 
SyslogFacility local1

[root@web1 ssh]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
[root@web1 ssh]# 

tail   -f  /var/log/sc.log 查看效果
[root@web1 log]# tail -f sc.log 
May 30 21:21:32 web1 sshd[13361]: Received signal 15; terminating.
May 30 21:21:32 web1 sshd[13402]: Server listening on 0.0.0.0 port 22.
May 30 21:21:32 web1 sshd[13402]: Server listening on :: port 22.


messages 是一个非常重要的日志文件
[root@web1 log]# tail -f messages
May 30 21:28:44 web1 systemd: Stopped OpenSSH server daemon.
May 30 21:28:44 web1 systemd: Starting OpenSSH server daemon...
May 30 21:28:44 web1 sshd: /etc/ssh/sshd_config: line 35: Bad configuration option: fengdeyong
May 30 21:28:44 web1 sshd: /etc/ssh/sshd_config: terminating, 1 bad configuration options
May 30 21:28:44 web1 systemd: sshd.service: main process exited, code=exited, status=255/n/a
May 30 21:28:44 web1 systemd: Failed to start OpenSSH server daemon.
May 30 21:28:44 web1 systemd: Unit sshd.service entered failed state.
May 30 21:28:44 web1 systemd: sshd.service failed.

logger 

shell里的帮忙记录日志的工具

参考:https://blog.csdn.net/Melgards/article/details/126720528

日志的类型

kern                               内核信息
user                               用户程序产生的相关信息
mail                                邮件系统信息
daemon                         守护进程产生的信息
auth                               pam认证系统信息
syslog                            日志系统自身信息
authpriv                          ssh、ftp等登录信息
cron                               系统执行定时任务产生的信息
lpr                                   打印相关信息
mark                               服务内部的信息,时间标识
uucp                               Unix-to-Unix Copy 两个unix之间的相关通信
local0-local7                   保留,本地使用
 

有哪些日志?

.var/log/*

secure

messages

cron

操作系统日志  rsyslog ssh

特定应用程序日志  nginx  cron

[root@web1 log]# tail messages
May 30 20:30:01 web1 systemd: Started Session 205 of user root.
May 30 20:40:01 web1 systemd: Started Session 206 of user root.
May 30 20:50:01 web1 systemd: Started Session 207 of user root.
[root@web1 log]# tail  secure
[root@web1 log]# tail  secure-20230319 
Mar 19 09:20:47 web1 polkitd[772]: Loading rules from directory /etc/polkit-1/rules.d
Mar 19 09:20:47 web1 polkitd[772]: Loading rules from directory /usr/share/polkit-1/rules.d

级别

日志级别,定义不同消息的级别 

日志等级说明(级别从低到高,记录信息越来越少)
none不记录日志
debug调试信息,系统进行调试时产生的日志,不属于错误日志,不需要过多关注
info 一般的通知信息,用来反馈系统的当前状态给当前用户
notice 提醒信息,需要检查一下程序了,不理会可能会出现错误
warning警告信息,当出现警告时,你的程序可能已经出现了问题,但不影响程序正常运行,尽快进行处理,以免导致服务宕掉
error/err错误信息,出现这一项时,已经挑明服务出现了问题,服务都无法确认是否能正常运行
critical比较严重的错误信息,服务已经宕了,可能已经无法修复
alert  警报信息,需要立即采取行动,不仅是服务宕了,还会影响系统的正常启动
emerg紧急信息,系统可能已经不能使用了,如果不能解决,就重新装机吧

操作符号

 *.info   任何的设施类型的日志info以上级别都记录
*.info;mail.none;authpriv.none;cron.none                /var/log/messages


# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
authpriv 设施类型的日志所有的级别都记录
authpriv.info                                             /var/log/secure
authpriv 设施类型的日志的info以上级别都记录

[root@web1 log]# tail messages
May 30 20:30:01 web1 systemd: Started Session 205 of user root.
May 30 20:40:01 web1 systemd: Started Session 206 of user root.
May 30 20:50:01 web1 systemd: Started Session 207 of user root.
[root@web1 log]# tail  secure
[root@web1 log]# tail  secure-20230319 
Mar 19 09:20:47 web1 polkitd[772]: Loading rules from directory /etc/polkit-1/rules.d
Mar 19 09:20:47 web1 polkitd[772]: Loading rules from directory /usr/share/polkit-1/rules.d
Mar 19 09:20:47 web1 polkitd[772]: Finished loading, compiling and executing 2 rules
Mar 19 09:20:47 web1 polkitd[772]: Acquired the name org.freedesktop.PolicyKit1 on the system bus
Mar 19 09:20:49 web1 sshd[1114]: Server listening on 0.0.0.0 port 22.
Mar 19 09:20:49 web1 sshd[1114]: Server listening on :: port 22.
Mar 19 09:20:57 web1 login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
Mar 19 09:20:57 web1 login: ROOT LOGIN ON tty1
Mar 19 09:21:22 web1 sshd[8267]: Accepted password for root from 192.168.2.126 port 61884 ssh2
Mar 19 09:21:22 web1 sshd[8267]: pam_unix(sshd:session): session opened for user root by (uid=0)

流程图

日志轮转

日志切割工具 logrotate 

专门帮忙其他的程序轮转日志的工具(程序) 

方便有效的管理日志,防止日志文件过大

参考:https://blog.csdn.net/PPlluuttoo/article/details/130131690

作用: 防止一个日志文件过大,需要对一个文件进行切割
    切割策略:
        1.根据日期  每隔30天产生一个新的日志文件
        2.根据文件的大小  文件大小达到100M产生一个新的文件

日志文件过大的坏处:
    1.不方便网络传输,到异地备份
    2.读取不方便,需要消耗大量的磁盘IO和内存

logrotate会通过计划任务,每天的计划任务去执行轮转脚本

案例-crond的日志轮转

给cron计划任务单独新建一个日志轮转的配置文件

[root@web1 logrotate.d]# cd /etc/logrotate.d/
[root@web1 logrotate.d]# cat bootlog 
/var/log/boot.log
{
    missingok
    dateext
    daily
    copytruncate
    rotate 7
    notifempty
}
 复制bootlog改名为cronlog,得到一个独立的配置文件
[root@web1 logrotate.d]# cp bootlog cronlog 
[root@web1 logrotate.d]# vim cronlog 
[root@web1 logrotate.d]# cat cronlog 
/var/log/cron
{
    missingok
    dateext
    weekly
    copytruncate
    rotate 7
    compress
    minsize 10M
    notifempty
}
[root@web1 logrotate.d]# 
使用logrotate去执行日志轮转,指定配置文件
[root@web1 log]# logrotate -f /etc/logrotate.d/cronlog 
error: destination /var/log/cron-20230603 already exists, renaming to /var/log/cron-20230603-2023060314.backup
[root@web1 log]# ls
anaconda                             dmesg.old              sc.log                vmware-network.6.log
audit                                firewalld              secure                vmware-network.7.log
boot.log                             firewalld-20230603.gz  secure-20230319       vmware-network.8.log
boot.log.1                           grubby_prune_debug     secure-20230514       vmware-network.9.log
boot.log-20220924                    lastlog                secure-20230521       vmware-network.log
boot.log-20230221                    maillog-20230319       secure-20230530       vmware-vgauthsvc.log.0
boot.log-20230319                    maillog-20230514       secure-20230603.gz    vmware-vmsvc-root.1.log
boot.log-20230514                    maillog-20230521       spooler-20230319      vmware-vmsvc-root.log
boot.log-20230601                    maillog-20230530       spooler-20230514      vmware-vmtoolsd-root.log
boot.log-20230603-2023060312.backup  maillog-20230603.gz    spooler-20230521      wtmp
boot.log-20230603.gz                 messages               spooler-20230530      wtmp-20230603.gz
btmp                                 messages-20230319      spooler-20230603.gz   xferlog
btmp-20230601                        messages-20230514      tallylog              xferlog-20230514
btmp-20230603.gz                     messages-20230521      tuned                 xferlog-20230521
chrony                               messages-20230530      vmware-network.1.log  xferlog-20230530
cron                                 messages-20230603.gz   vmware-network.2.log  xferlog-20230603
cron-20230603-2023060314.backup      redis                  vmware-network.3.log  yum.log
cron-20230603.gz                     rhsm                   vmware-network.4.log  yum.log-20230220
dmesg                                sa                     vmware-network.5.log  yum.log-20230603.gz
[root@web1 log]# date
2023年 06月 03日 星期六 14:50:34 CST
[root@web1 log]# date -s "2023-6-4 14:50:00"
2023年 06月 04日 星期日 14:50:00 CST
[root@web1 log]# 
root@web1 log]# service crond restart
Redirecting to /bin/systemctl restart crond.service
[root@web1 log]# cat cron
Jun  3 14:50:01 web1 CROND[4861]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jun  4 14:50:07 web1 CROND[4869]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Jun  4 14:51:01 web1 crond[4854]: (CRON) INFO (Shutting down)
Jun  4 14:51:01 web1 crond[4892]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 98% if used.)
Jun  4 14:51:01 web1 crond[4892]: (CRON) INFO (running with inotify support)
Jun  4 14:51:01 web1 crond[4892]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
[root@web1 log]# logrotate -f /etc/logrotate.d/cronlog 
[root@web1 log]# ls

案例-编译安装nginx,实现日志轮转

安装nginx软件,然后对nginx的日志进行日志切割(轮转)
1.yum
2.编译安装


1.安装nginx
[root@web1 log]# mkdir /nginx
[root@web1 log]# cd /nginx/
[root@web1 nginx]# 
[root@web1 nginx]# vim one_key_install_nginx.sh
[root@web1 nginx]# cat one_key_install_nginx.sh 
#!/bin/bash

# 新建一个文件夹用来存放下载的nginx源码包
cd /nginx

# 下载nginx
curl -O https://nginx.org/download/nginx-1.24.0.tar.gz

# 解压nginx源码包
tar xf nginx-1.24.0.tar.gz
cd nginx-1.24.0

# 解决软件的依赖关系,需要安装的软件包
yum -y install wget zlib zlib-devel openssl openssl-devel pcre pcre-devel gcc gcc-c++ autoconf automake make

# 生成编译前配置工作 --> Makefile
./configure --prefix=/usr/local/nginx8899 --with-threads --with-http_ssl_module --with-http_stub_status_module --with-stream

#编译,开启2个进程同时编译,速度会快些
# 其实就是安装Makefile的配置去编译程序成二进制文件,二进制文件就是执行可以运行的程序
make -j 2

# 编译安装 --> 将编译好的二进制程序安装指定目录/usr/local/nginx
# 就是将编译号的二进制文件复制到指定的安装路径目录下
make install

# 启动nginx
/usr/local/nginx8899/sbin/nginx

# 修改PATH配置
PATH=$PATH:/usr/local/nginx8899/sbin
echo "PATH=$PATH:/usr/local/nginx8899/sbin" >>/root/.bashrc

# 设置nginx的开机启动
echo "/usr/local/nginx8899/sbin/nginx" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local

# selinux和firewalld防火墙都关闭
# selinux
# 临时关闭selinux
setenforce 0
# 永久关闭selinux
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config

# firewalld
systemctl stop firewalld
systemctl disable firewalld
[root@web1 nginx]# 

确保你的虚拟机可以上网
[root@web1 nginx]# ping www.baidu.com
PING www.a.shifen.com (14.119.104.189) 56(84) bytes of data.
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=1 ttl=128 time=17.9 ms
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=2 ttl=128 time=16.8 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 16.861/17.428/17.996/0.582 ms
[root@web1 nginx]# 

执行脚本安装nginx
[root@web1 nginx]# bash one_key_install_nginx.sh 
最后的效果,就是nginx可以运行
[root@web1 nginx]# ps aux|grep nginx
root       5393  0.1  0.1 149828  5444 pts/2    S+   15:19   0:00 vim one_key_install_nginx.sh
root       8392  0.0  0.0  46116  1148 ?        Ss   15:23   0:00 nginx: master process /usr/local/nginx8899/sbin/nginx
nobody     8394  0.0  0.0  46572  1908 ?        S    15:23   0:00 nginx: worker process
root       8429  0.0  0.0 112824   988 pts/4    S+   15:23   0:00 grep --color=auto nginx
[root@web1 nginx]# 
[root@web1 nginx]# netstat -anplut|grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      8392/nginx: master  
tcp        0      0 192.168.223.205:22      192.168.223.1:61390     ESTABLISHED 4800/sshd: root@pts 
[root@web1 nginx]# 

休息20分钟


2.访问nginx产生日志
	2.1  使用curl访问
	2.2  使用浏览器访问

[root@web1 nginx]# ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:27:30:f9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.223.205/24 brd 192.168.223.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe27:30f9/64 scope link 
       valid_lft forever preferred_lft forever
[root@web1 nginx]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@web1 nginx]# curl 192.168.223.205

进入nginx的日志目录

[root@web1 nginx]# cd /usr/local/nginx8899/
[root@web1 nginx8899]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@web1 nginx8899]# cd logs/
[root@web1 logs]# ls
access.log  error.log  nginx.pid
[root@web1 logs]# 
access.log  正常的网站访问的日志
error.log   访问网站出错的日志会记录
3.对nginx的日志进行轮转
	使用logrotate 对nginx的访问日志 access.log进行切割轮转


[root@web1 logs]# cd /etc/logrotate.d/
[root@web1 logrotate.d]# 
[root@web1 logrotate.d]# vim nginx
[root@web1 logrotate.d]# cat nginx 
/usr/local/nginx8899/logs/*.log  {
	daily
    missingok
    rotate 31
    dateext
	compress
	notifempty
	minsize 100M
	sharedscripts
	postrotate
		if [ -f /usr/local/nginx8899/logs/nginx.pid ];then
			kill -USR1  `cat /usr/local/nginx8899/logs/nginx.pid`
		fi
	endscript
}
[root@web1 logrotate.d]# 

验证日志轮转功能

[root@web1 logrotate.d]# logrotate -f  /etc/logrotate.d/nginx

修改PATH变量,添加编译安装的nginx的可执行文件的路径
[root@web1 logs]# vim /root/.bashrc 
PATH=/usr/local/nginx8899/sbin:$PATH
[root@web1 logs]# bash
[root@web1 logs]# which nginx
/usr/local/nginx8899/sbin/nginx
[root@web1 logs]# 
[root@web1 logs]# /usr/local/nginx8899/sbin/nginx -s reload  重启nginx
[root@web1 logs]# ls
access.log  error.log  nginx.pid
[root@web1 logs]# nginx -s reload  重启nginx

[root@web1 logs]# rm -rf *.log
[root@web1 logs]# nginx -s reload
[root@web1 logs]# rm -rf *.log
[root@web1 logs]# ls
nginx.pid
[root@web1 logs]# nginx -s reload
[root@web1 logs]# ls
access.log  error.log  nginx.pid
[root@web1 logs]# 
[root@web1 logs]# cat access.log 
192.168.223.1 - - [04/Jun/2023:16:19:13 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57"
192.168.223.1 - - [04/Jun/2023:16:19:13 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57"
192.168.223.1 - - [04/Jun/2023:16:19:13 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57"
192.168.223.1 - - [04/Jun/2023:16:19:13 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57"
[root@web1 logs]# cat error.log 
2023/06/04 16:19:01 [notice] 8638#8638: signal process started
[root@web1 logs]# 
执行日志轮转
[root@web1 logrotate.d]# logrotate -fv  /etc/logrotate.d/nginx 
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /usr/local/nginx8899/logs/*.log   forced from command line (31 rotations)
empty log files are not rotated, only log files >= 104857600 bytes are rotated, old logs are removed
considering log /usr/local/nginx8899/logs/access.log
  log needs rotating
considering log /usr/local/nginx8899/logs/error.log
  log needs rotating
rotating log /usr/local/nginx8899/logs/access.log, log->rotateCount is 31
dateext suffix '-20230604'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
rotating log /usr/local/nginx8899/logs/error.log, log->rotateCount is 31
dateext suffix '-20230604'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /usr/local/nginx8899/logs/access.log to /usr/local/nginx8899/logs/access.log-20230604
renaming /usr/local/nginx8899/logs/error.log to /usr/local/nginx8899/logs/error.log-20230604
running postrotate script
compressing log with: /bin/gzip
compressing log with: /bin/gzip
[root@web1 logrotate.d]# 

效果
[root@web1 logs]# ls
access.log  access.log-20230604.gz  error.log  error.log-20230604.gz  nginx.pid
[root@web1 logs]# 

第2遍的效果
[root@web1 logs]# date -s '2023-6-5 16:31:00'
2023年 06月 05日 星期一 16:31:00 CST
[root@web1 logs]# 
[root@web1 logs]# nginx  -s reload
访问网站,产生access.log

[root@web1 logrotate.d]# logrotate -f  /etc/logrotate.d/nginx 

[root@web1 logs]# cat /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/usr/local/nginx8899/logs/error.log" 2023-6-5-16:33:28
"/usr/local/nginx8899/logs/access.log" 2023-6-5-16:33:28
[root@web1 logs]# ls
access.log  access.log-20230604.gz  access.log-20230605.gz  error.log  error.log-20230604.gz  error.log-20230605.gz  nginx.pid
[root@web1 logs]#

ntpdate是和互联网上的时间服务器同步时间的命令
network time protocol
[root@web1 logs]# yum install ntpdate -y

[root@web1 logs]# ntpdate  time.windows.com
 3 Jun 16:37:42 ntpdate[8761]: step time server 20.189.79.72 offset -172774.926610 sec
[root@web1 logs]# date
2023年 06月 03日 星期六 16:37:43 CST
[root@web1 logs]# 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值