88: 日志分析平台构建 、 总结和答疑

Top

NSD PROJECT3 DAY05

1 案例1:ES集群安装

1.1 问题

本案例要求部署ES集群,用于ELK日志分析平台的构建。

  • 购买华为云服务器更新ecs-proxy主机配置文件
  • 部署ES集群
  • 查看ES集群信息
  • 安装head插件

1.2 方案

准备如表-1所示的实验环境,配置主机名称、IP地址。

表-1 主机列表

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一、购买华为云服务,并更新ecs-proxy主机配置文件

1)、购买华为云服务器

运行JAVA程序对内存占用较大,故购买2G内存的云主机。如图-1所示。

图-1

基础配置:规格 s6.mediume.2 2G内存
网络配置:手动分配IP地址 192.168.1.71
高级配置:云服务器名称 es
确认配置:3台
基础配置:规格 s6.mediume.2 2G内存
网络配置:手动分配IP地址 192.168.1.74
高级配置:云服务器名称 kibana 
确认配置:1台
基础配置:规格 s6.mediume.2 2G内存
网络配置:手动分配IP地址 192.168.1.75
高级配置:云服务器名称 logstash
确认配置:1台

2)、更新/etc/hosts

[root@ecs-proxy ~]# cat >> /etc/hosts <<EOF
192.168.1.71 es-0001
192.168.1.72 es-0002
192.168.1.73 es-0003
192.168.1.74 kibana
192.168.1.75 logstash
EOF
将最新的/etc/hosts配置文件更新到所有的云主机上
[root@ecs-proxy ansible]# ansible all -m copy -a 'src=/etc/hosts dest=/etc'

3)、更新/root/ansible/hosts配置文件

[root@ecs-proxy ~]# cat >> /root/ansible/hosts <<EOF
[es]
192.168.1.7[1:3]
[kinbana]
192.168.1.74
[logstash]
192.168.1.75
EOF

4)、将相关软件包做好YUM仓库

[root@ecs-proxy ansible]# rm -rf  /var/ftp/localrepo/elk
[root@ecs-proxy ansible]# mkdir /var/ftp/localrepo/elk
[root@ecs-proxy ansible]# cp /root/project3/DAY05/*.rpm /var/ftp/localrepo/elk
[root@ecs-proxy ansible]# createrepo --update /var/ftp/localrepo/

步骤二、集群安装配置

1)安装基础环境软件

[root@ecs-proxy ansible]# ansible es -m yum -a "name=java-1.8.0-openjdk-devel"
#检测JDK环境安装是否成功
[root@ecs-proxy ansible]# ansible es -m shell -a "java -version" 
192.168.1.72 | SUCCESS | rc=0 >>
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
.....

[root@ecs-proxy ansible]# ansible es -m yum -a “name=elasticsearch”

2)、配置es-0001


[root@es-0001 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: es #第17行,集群的名称。
node.name: es-0001 #第23行,该节点主机名。
network.host: 192.168.1.71 #第55行,该节点主机的IP地址。
http.port: 9200 #第59行,对外服务的http端口。
discovery.zen.ping.unicast.hosts: [“es-0001”, “es-0002”, “es-0003”] #第68行,集群节点主机列表。
discovery.zen.minimum_master_nodes: 2 #第72行,最少主节点数。
[root@es-0001 ~]# systemctl enable --now elasticsearch
[root@es-0001 ~]# systemctl status elasticsearch

3)、配置es-0002


[root@es-0002 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: es #第17行,集群的名称。
node.name: es-0002 #第23行,该节点主机名。
network.host: 192.168.1.72 #第54行,该节点主机的IP地址。
http.port: 9200 #第58行,对外服务的http端口。
discovery.zen.ping.unicast.hosts: [“es-0001”, “es-0002”, “es-0003”] #第68行,集群节点主机列表。
discovery.zen.minimum_master_nodes: 2 #第72行,最少主节点数。
[root@es-0002 ~]# systemctl enable --now elasticsearch

4)、配置es-0003


[root@es-0003 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: es #第17行,集群的名称。
node.name: es-0003 #第23行,该节点主机名。
network.host: 192.168.1.73 #第54行,绑定的IP地址。
http.port: 9200 #第58行,对外服务的http端口。
discovery.zen.ping.unicast.hosts: [“es-0001”, “es-0002”, “es-0003”] #第68行,集群节点主机列表。
discovery.zen.minimum_master_nodes: 2 #第72行,最少主节点数。
[root@es-0003 ~]# systemctl enable --now elasticsearch

5)、查看ES集群信息


[root@ecs-proxy ansible]# curl -XGET http://192.168.1.71:9200/_cluster/health?pretty
{
“cluster_name” : “my-es”,
“status” : “green”,
“timed_out” : false,
“number_of_nodes” : 3,
“number_of_data_nodes” : 3,
“active_primary_shards” : 0,
“active_shards” : 0,
“relocating_shards” : 0,
“initializing_shards” : 0,
“unassigned_shards” : 0,
“delayed_unassigned_shards” : 0,
“number_of_pending_tasks” : 0,
“number_of_in_flight_fetch” : 0,
“task_max_waiting_in_queue_millis” : 0,
“active_shards_percent_as_number” : 100.0
}

步骤三、安装head插件


ES官方没有为ES提供界面管理工具,仅仅提供了后台服务。elasticsearch-head是一个为ES开发的web页面客户端工具。


head提供了以下安装方式:


A、源码安装,通过npm run start 启动


B、通过docker安装(推荐)


C、通过chrome插件安装


1)、部署插件


由于前后端分离开发,所以会存在跨域问题,需要在服务端做CORS的配置。


(前后端分离:前端所有用到的数据都是后端通过异步接口的方式提供的,前端只管页面的展示及效果。)


在配置文件末尾手动添加以下内容即可。
[root@es-0001 ~]# tail -2 /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: “*”
[root@es-0001 ~]# systemctl restart elasticsearch

[root@es-0001 ~]# scp 192.168.1.252:/root/project3/DAY05/elasticsearch-head.tar /root
[root@es-0001 ~]# yum -y install docker-ce
[root@es-0001 ~]# systemctl enable --now docker
[root@es-0001 ~]# docker load -i elasticsearch-head.tar
[root@es-0001 ~]# docker run --name es-head -td -p 9100:9100 elasticsearch-head:5
914e41f15e9de8873a57e2a53e250231592ed18e635fdd227733e99542f42218
[root@es-0001 ~]# netstat -antpu | grep :9100
tcp6 0 0 :::9100 ::😗 LISTEN 12971/docker-proxy

2)、创建监听器(9200),添加后端服务器群组。


【服务器列表】—>【弹性负载均衡ELB】—>【(自定义ELB名称)】—>【监听器】—>【添加监听器】。


更改监听器名称,并且配置前端协议端口为9200,如图-2所示。




图-2



配置后端服务器组,更改名称,点击完成。如图-3所示




图-3



点击【后端服务器群组】,找到我们刚才添加的【server_group-es】,并单击。【添加】后端真实服务器。如图-4所示。




图-4



添加es-0001为后端服务器成员,点击下一步。如图-5所示。




图-5



配置后端服务器提供服务的端口9200,点击完成。如图-6所示。




图-6



2)、创建监听器(9100),添加后端服务器群组。


参照创建监听器(9200)的步骤。


3)、访问head插件,如图-7所示。


http://公网IP:9100


默认打开是未连接状态。将http://localhost:9200/改为http://公网IP:9200,并点击连接。







图-7





2 案例2:部署kibana


2.1 问题


本案例要求在华为云服务器上安装kibana



  • 安装kibana
  • 通过web页面访问kibana
  • Kibana是一款开源的数据分析和可视化平台,它是Elastic Stack成员之一。可以使用Kibana对Elasticsearch索引中的数据进行搜索、查看、交互操作。可利用图表、表格等对数据进行多元化的分析和显现。

    2.2 步骤

    实现此案例需要按照如下步骤进行。

    步骤一、部署kibana

    1)安装kibana软件包

    [root@kibana ~]# yum -y install kibana 
    

    2)更改kibana服务配置文件

    ot@kibana ~]# vim /etc/kibana/kibana.yml 
    server.port: 5601                     #第2行,提供服务的端口。 
    server.host: "192.168.1.74"             #第7行,服务器监听地址。
    elasticsearch.hosts: ["http://192.168.1.71:9200"] #第28行,用于查询的es实例的主机地址,集群里面任选一个即可。
    

    3)启动服务器并查看端口是否启用

    [root@knbana ~]# systemctl enable --now kibana
    [root@kibana ~]# netstat -antpu | grep 5601
    tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 8840/node
    

    步骤二、通过浏览器访问kibana

    1)按照案例1步骤二的方法,创建监听器,并添加后端服务器。

    【服务器列表】—>【弹性负载均衡ELB】—>【(自定义ELB名称)】—>【监听器】—>【添加监听器】

    此次监听端口为5601

    2)访问kibana界面,如图-8所示。

    http://公网IP:5601

    图-8

    3)、用head插件访问es集群,会查看到.kibana的索引信息,如图-9所示。

    图-9

    3 案例3、部署logstash

    3.1 问题

    本案例要求在华为云上部署Logstash。

    3.2 步骤

    实现此案例需要按照如下步骤进行。

    步骤一、安装软件

    [root@logstash ~]# yum -y install java-1.8.0-openjdk-devel
    [root@logstash ~]# yum -y install logstash
    [root@logstash ~]# /opt/logstash/bin/logstash --version
    OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
    logstash 2.3.4
    [root@logstash ~]# /usr/share/logstash/bin/logstash-plugin list #查看插件
    

    4 案例4、使用Filebeat收集Nginx访问日志

    4.1 问题

    本案例要求在Nginx集群上安装Filebeat,并收集Nginx访问日志。

    • 安装Filebeat软件,使用Filebeat读取文件
    • 使用Filebeat输出到Elasticsearch
    • 使用Filebeat读取Nginx日志文件
    • 使用Filebeat的Nginx Module

    4.2 方案

    Beats平台集合了多种单一用途的数据采集器,他们从成百上千台机器和系统向Logstash或Elasticsearch发送数据。

    (官方网址: https://www.elastic.co/cn/downloads/beats)

    Filebeat是一个轻量型日志采集器,用于转发和汇总日志文件。占用资源少,配置简单。

    在nginx-0001、nginx-0002、nginx-0003上部署Filebeat,收集访问日志。

    4.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一、部署Filebeat软件。

    1)、在Nginx主机上安装Filebeat软件

    [root@ecs-proxy ansible]# ansible web -m yum -a  "name=filebeat"
    

    2)、编写配置文件。

    为了防止原始配置文件中其他内容干扰,新建文件编写。

    #cold_bold[root@nginx-0001 ~]# cat  /etc/filebeat/tedu_log.yml 
    #cold_boldfilebeat.inputs:
    #cold_bold- type: stdin
    #cold_bold  enabled: true
    #cold_boldsetup.template.settings:
    #cold_bold  index.number_of_shards: 3
    #cold_boldoutput.console:
    #cold_bold  pretty: true
    #cold_bold  enable: true
    #cold_bold[root@nginx-0001 ~]# filebeat  -e -c /etc/filebeat/tedu_log.yml
    #cold_bold(输入一些测试的内容,会以JSON格式输出在屏幕中)
    #cold_bold
    #cold_bold-e:输出到标准输出
    #cold_bold-c:指定文配置文件
    

    步骤二:使用Filebeat输出数据到Elasticsearch

    1)、编写配置文件

    [root@nginx-0001 ~]# cat /etc/filebeat/tedu_log.yml 
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /root/*.log
    setup.template.settings:
      index.number_of_shards: 3
    output.elasticsearch:
      hosts: ["192.168.1.71:9200","192.168.1.72:9200"]
    [root@nginx-0001 ~]# filebeat -e -c  /etc/filebeat/tedu_log.yml
    

    2)、另开一个终端,向日志文件中写入数据。

    [root@nginx-0001 ~]# echo aaa >> /root/a.log
    [root@nginx-0001 ~]# echo bbb >> /root/a.log
    

    3)、刷新es-head界面,如图-10所示。

    索引通常都会分解成不同部分, 而这些分布在不同节点的数据就是分片(shards),而副本是这个分片的备份。

    图-10

    4)、点击数据浏览,查看新添加的索引数据。如图-11所示。

    图-11

    步骤三、使用Filebeat读取Nginx日志文件

    1)、编写配置文件

    [root@nginx-0001 ~]# cat /etc/filebeat/tedu_log.yml
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /root/*.log
    setup.template.settings:
      index.number_of_shards: 3
    output.elasticsearch:
      hosts: ["192.168.1.71:9200","192.168.1.72:9200"]
    

    [root@nginx-0001 ~]# filebeat -e -c /etc/filebeat/tedu_log.yml

    2)、另开启一个终端,向a.log文本文件中插入日志文件。


    [root@nginx-0001 ~]# tail -2  /usr/local/nginx/logs/access.log >> /root/a.log

    3)、查看索引数据,如图-12所示。




    图-12



    步骤四、使用Filebeat的Nginx Module


    在Filebeat中,有大量的Module,可以简化配置。


    1)、查看有哪些模块可以使用,并开启nginx模块。


    #cold_bold[root@nginx-0001 filebeat]# filebeat modules list           //查看模块信息
    #cold_boldEnabled:
    #cold_bold
    #cold_boldDisabled:
    #cold_boldapache2
    #cold_boldauditd
    #cold_boldelasticsearch
    #cold_boldhaproxy
    #cold_bold……

    内置了很多Modules,但是都没有启用,如果需要启用,可执行以下操作。


    [root@nginx-0001 filebeat]# filebeat  modules  enable nginx  //开启nginx模块
    [root@nginx-0001 filebeat]# filebeat modules list
    Enabled:
    nginx

    Disabled:
    apache2
    ……

    2)、修改模块的配置文件。(模块配置文件路径:/etc/filebeat/modules.d/,如果模块没有开启,是以disabled后缀结尾。)


    [root@nginx-0001 ~]# sed -n ‘8p’  /etc/filebeat/modules.d/nginx.yml
    var.paths: ["/usr/local/nginx/logs/access.log"]
    [root@nginx-0001 ~]# sed -n ‘19p’ /etc/filebeat/modules.d/nginx.yml
    var.paths: ["/usr/local/nginx/logs/error.log"]

    改为之后的配置如下:
    [root@nginx-0001 ~]# grep -Ev “^$|#” /etc/filebeat/modules.d/nginx.yml

    • module: nginx
      access:
      enabled: true
      var.paths: ["/usr/local/nginx/logs/access*.log"]
      error:
      enabled: true
      var.paths: ["/usr/local/nginx/logs/error.log"]

      3)、修改配置文件


      [root@nginx-0001 filebeat]# cat /etc/filebeat/tedu_log.yml
      setup.template.settings:
      index.number_of_shards: 3
      output.elasticsearch:
      hosts: [“192.168.1.71:9200”,“192.168.1.72:9200”]
      indices:
      • index: “filebeat-nginx_log-%{+yyyy.MM.dd}”
        filebeat.config.modules:
        path: ${path.config}/modules.d/*.yml
        reload.enabled: false

      4)、删除之前记录的偏移量,读取整个日志文件内容。

      [root@nginx-0001 ~]# rm  -rf  /var/lib/filebeat/registry
      

    [root@nginx-0001 ~]# filebeat -e -c /etc/filebeat/tedu_log.yml

    5)、查看es中收集日志信息。如图-13、图-14所示。




    图-13







    图-14



    6)、按照如上方案,收集nginx-0001 nginx-0002和nginx-0003日志。


    [root@ecs-proxy ansible]# ansible web -m shell  -a “filebeat modules enable nginx”
    [root@ecs-proxy ansible]# ansible web -m copy -a “src=/root/project3/DAY05/nginx.yml dest=/etc/filebeat/modules.d/”
    [root@ecs-proxy ansible]# ansible web -m copy -a “src=/root/project3/DAY05/filebeat.yml dest=/etc/filebeat/”
    [root@ecs-proxy ansible]# ansible web -m service -a “name=filebeat state=restarted”



    5 案例5、TOA插件配置


    5.1 问题


    本案例要求收集访问Nginx集群的真实IP。


    5.2 方案


    获取客户端真实IP地址方式:


    参考文档https://support.huaweicloud.com/elb_faq/elb_faq_0090.html


    TOA内核模块主要用来获取ELB转化过的访问者真实IP地址(仅支持IPv4),该插件安装在ELB后端服务器。


    5.3 步骤


    实现此案例需要按照如下步骤进行。


    步骤一、准备编译环境。


    1)、确保安装过编译器和make工具。


    [root@nginx-0001 ~]# yum -y install gcc make

    2)、查看内核版本。安装内核模块开发包,开发包头文件与库的版本需要与内核版本一致。


    [root@nginx-0001 ~]# uname -r
    3.10.0-1062.12.1.el7.x86_64

    如果自带源里没有对应的内核开发包,可以到如下地址中去下载对应的rpm包。


    地址:https://mirror.netcologne.de/oracle-linux-repos/ol7_latest/getPackage/


    2、编译内核模块。


    1)、给所有的Web主机,发送TOA内核模块源代码。


    [root@ecs-proxy ansible]# ansible web -m copy -a “src=/root/elk/TCP_option_address-master.zip dest=/root”
    

    [root@nginx-0001 ~]# unzip TCP_option_address-master.zip
    [root@nginx-0001 ~]# cd /root/TCP_option_address-master/src/
    [root@nginx-0001 src]# ls
    Makefile toa.c toa.h
    [root@nginx-0001 src]# make

    3、加载内核模块


    1)、执行如下命令,加载内核模块。


    [root@nginx-0001 src]#insmod toa.ko

    2)执行如下命令,验证模块加载情况,查看内核输出信息。


    [root@nginx-0001 src]#dmesg | grep TOA

    #若提示信息包含“TOA: toa loaded”,说明内核模块加载成功。


    4、自动加载内核模块


    为了使TOA内核模块在系统启动时生效,可以将加载TOA内核模块的命令加到客户的启动脚本中。


    参考以下操作步骤配置启动脚本。


    1)在“/etc/sysconfig/modules/”目录下新建toa.modules文件。该文件包含了TOA内核模块的加载脚本。toa.modules文件内容。


    [root@nginx-0001 src]# cat >> /etc/sysconfig/modules/toa.modules <<EOF
    #!/bin/sh
    /sbin/modinfo -F filename /root/TCP_option_address-master/src/toa.ko > /dev/null 2>&1
    if [ $? -eq 0 ]; then
    /sbin/insmod /root/TCP_option_address-master/src/toa.ko
    fi
    EOF

    #其中“/root/toa/toa.ko”为TOA内核模块文件的路径,需要将其替换为自己编译的TOA内核模块路径。


    2)、执行以下命令,为toa.modules启动脚本添加可执行权限。


    [root@nginx-0001 src]# chmod +x /etc/sysconfig/modules/toa.modules



    6 案例6、Metricbeat收集系统指标


    6.1 问题


    本案例要求使用Metricbeat收集系统指标,使用Metricbeat的Nginx Module收集Nginx相关指标。


    6.2 方案


    Metricbeat是轻量型指标采集器,用于定期从系统和服务收集指标(CPU、内存),可存储到Elasticsearch中,进行实时分析。


    6.3 步骤


    实现此案例需要按照如下步骤进行。


    步骤一:部署Metricbeat软件


    1)、在nginx-0001上安装Metricbeat软件


    [root@ecs-proxy ansible]# ansible web -m copy -a “src=/root/project3/DAY05/metricbeat-6.8.8-x86_64.rpm  dest=/root”
    

    [root@nginx-0001 ~]# yum -y install metricbeat-6.8.8-x86_64.rpm

    [root@nginx-0001 ~]# sed -n ‘94p’ /etc/metricbeat/metricbeat.yml
    hosts: [“192.168.1.71:9200”,“192.168.1.72:9200”,“192.168.1.73:9200”]
    [root@nginx-0001 ~]# systemctl restart metricbeat

    2)、查看es中的数据,如图-15、图-16所示。


    在图-16中,可以看出到nginx-0001系统CPU相关性能指标。




    图-15





    图-16



    步骤二:部署Metricbeat软件


    1)、列出nginx-0001上已开启Metricbeat的模块。


    [root@nginx-0001 metricbeat]# metricbeat modules list
    Enabled:
    system

    Disabled:
    aerospike
    apache
    ceph
    ……

    2)更改Nginx配置文件,可查看Nginx的一些状态信息。


    [root@nginx-0001 ~]# sed -n ‘42,44p’ /usr/local/nginx/conf/nginx.conf
    location /nginx-status {
    stub_status on;
    }
    [root@nginx-0001 ~]# /usr/local/nginx/sbin/nginx -s reload
    [root@nginx-0001 ~]# curl http://192.168.1.11/nginx-status
    Active connections: 1
    server accepts handled requests
    3 3 1
    Reading: 0 Writing: 1 Waiting: 0

    3)、启用Metricbeat的Nginx模块


    [root@nginx-0001 metricbeat]# metricbeat  modules enable nginx
    Enabled nginx
    [root@nginx-0001 metricbeat]# metricbeat modules list
    Enabled:
    nginx
    system

    Disabled:
    aerospike
    apache
    ……

    4)、更改Metricbeat的Nginx模块的配置文件。


    [root@nginx-0001 ~]# grep -Ev “^$|#” /etc/metricbeat/modules.d/nginx.yml
    
    • module: nginx
      period: 10s
      hosts: [“http://192.168.1.11”]
      server_status_path: “nginx-status”

    [root@nginx-0001 ~]# systemctl restart metricbeat

    5)、查看es中的数据。如图-17所示。




    图-17





    7 案例7: Kibana数据展现


    7.1 问题


    将前面案例收集的数据,进行可视化展示。并使用Metricbeat自带的仪表盘进行数据展示。


    7.2 步骤


    实现此案例需要按照如下步骤进行。


    步骤一: 图表展示


    1)、设置索引。


    点击Management,单击”Index Patterns”,如图-18所示。




    图-18



    2)、设置Index name,可以采用通配符。如图-19所示。




    图-19



    3)、时间字段选择@timestamp,选择完成后单击“Create Index pattern ”。如图-20所示。




    图-20



    4)、单击Discover等待Searching完成后,可以看到数据。


    有时候只想关注一些指定的字段,那么可以将鼠标移动到索引下面的字段上,然后选add即可。同样的移动上面已经选择的字段选择remove进行移除。如图-21所示。




    图-21



    按照同样的方法,添加host.name、nginx.stubstatus.active两个字段,选择后,结果就会以表格的形式进行展示。


    同时可选择什么时间段内的数据,以及数据刷新时间。如图-22所示。




    图-22



    5)、点击最上方的save按钮,保存当前表格。如图-23所示。




    图-23



    步骤二: Metricbeat仪表盘安装以及展现


    1)、修改metricbeat配置文件


    [root@nginx-0001 ~]# sed -n ‘67p’ /etc/metricbeat/metricbeat.yml
    host: “192.168.1.74:5601”


    1. 加载仪表盘到Kibana(确保Kibana是开启的并且可连接)
    [root@nginx-0001 ~]# metricbeat  setup –dashboards
    Loading dashboards (Kibana must be running and reachable)
    Loaded dashboards
    [root@nginx-0001 ~]# systemctl restart metricbeat
    

    2)、点击Dashboard,会有很多仪表盘。在搜索框里写入关键词host,会出现和搜索关键词相关的表盘。点击“Host overview”。如图-24、图-25所示。

    图-24

    图-25

    3)、点击Dashboard,在搜索框里写入关键词Nginx,会出现相关的仪表盘。点击“[Metricbeat Nginx]Overview”。如图-26、图-27所示。

    图-26

    图-27

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹汇川

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值