ELK(elasticsearch,logstash,kibana)实战安装部署

ELK(elasticsearch,logstash,kibana)实战安装部署

  • logstash安装
  • ElasticSearch安装
  • elasticsearch-head安装
  • kibana安装
  • filebeat安装
  • X-pack安全插件安装

安装

安装。 —— [ 官网下载 ]

去官网下载相关的包,,例如:

1)	使用root用户创建一个elk用户
	[root@centos ~]# useradd –d /usr/elk -m elk
2)  下载相关的安装包:
	[root@centos ~]# wget "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz"
	[root@centos ~]# wget "https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz"
	[root@centos ~]# wget "https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz"
	[root@centos ~]# wget "https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz"
3)  解压所有的相关的安装包:这里我就不写解压的命令了

安装

按装包下载好,接下来我们就来开始安装

###A–》ElasticSearch 安装:

[root@host elk]# tar -zxvf elasticsearch-6.2.4.tar.gz
[root@host elk]# cd elasticsearch-6.2.4/config
[root@host config]# vi elasticsearch.yml
修改elasticsearch中配置文件elasticsearch.yml的一些参数:
cluster.name: my-application
path.data: /usr/elk/logs
network.host: "0.0.0.0"
http.port: 9200
配置好以上参数

注意由于elk6.0过后,加入了一下安全机制,所有我们在启动的时候不可以使用root用户启动,否则启动会报错,
在上面 我们之前创建过一个elk的用户,现在正好用的,接下来,我们要给elk的用户做授权:
使用root用户给elk用户授权

chown -R elk.elk /usr/elk/

注意,我这里是直接授权了整个elk,是为了方便后续操作
切换用户

[root@host elasticsearch-6.2.4]# su elk
[elk@host elasticsearch-6.2.4]$ 

注意看,现在就切换上elk的用户,现在我们就可以去启动elasticsearch了

[elk@host elasticsearch-6.2.4]$ ./bin/elasticsearch

错误:
ERROR: [1] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:
切换到root用户修改配置sysctl.conf

[root@host]#  sudo vi /etc/sysctl.conf

修改下面配置:
vm.max_map_count=655360
并执行命令:
$ sudo sysctl -p
解决之后再次切换elk用户重新启动elasticsearch
启动之后,打开浏览器 反问 http://192.168.10.191:9200

{
  "name" : "z7IHRSv",
  "cluster_name" : "my-application",
  "cluster_uuid" : "KWoZUNfjTEiEeVAL3qdNRg",
  "version" : {
    "number" : "6.2.4",
    "build_hash" : "ccec39f",
    "build_date" : "2018-04-12T20:37:28.497551Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

当出现了这个的时候,就证明启动成功了,elasticsearch就安装完成了

###B–》ElasticSearch-head 安装
安装elasticsearch-head前需先安装nodejs,主要安装步骤如下
node.js的安装

 命令行:wget https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz
 命令行:xz -d node-v8.9.1-linux-x64.tar.xz(这样解压后还会有tar的文件)
  解 压: tar -zxvf  node-v8.9.1-linux-x64.tar
  切换到目录下的bin目录
	命令行:cd node-v8.9.1-linux-x64/bin/    (可以看到node和npm)
	执行目录查看node版本:  ./node -v
 添加环境变量(/etc/profile)
	 命令行:vi  /etc/profile (执行这条数据前必须是root用户才可以)
	 加入:
	 #set node 
	 export NODE_HOME=/usr/elk/node-v4.4.7
	 export PATH=$PATH:$NODE_HOME/bin
	 export NODE_PATH=$NODE_HOME/bin/node_modules
	 保存之后再执行一条命令:source /etc/profile  环境变量就修改好了

安装完成node.js之后,我们的elasticsearch-head是用grunt命令来执行,所有还需要安装grunt
 安装grunt所需插件

$ npm install -g grunt-cli
$ npm install grunt-contrib-clean
$ npm install grunt-contrib-concat
$ npm install grunt-contrib-watch
$ npm install grunt-contrib-connect
$ npm install grunt-contrib-copy
$ npm install grunt-contrib-jasmine

 安装grunt

$ npm install grunt --save-dev
$ npm install
查看grunt是否安装成功
$ grunt -version

这些插件全部安装完成之后,现在我们就可以真真的开始elastic-head的安装了
首先我们去wget https://github.com/mobz/elasticsearch-head/archive/master.zip
注意这里下载的是zip的包,因为官方提供的就是zip的,zip就zip反正不影响,

#解压zip的包
$ unzip elasticsearch-head-master.zip
#进入elasticsearch-head-master目录,修改Gruntfile.js文件
$ cd elasticsearch-head-master
$ vim Gruntfile.js
#找到下面的 connect 属性,新增hostname:‘*’:
connect: {
    server: {
        options: {
            hostname: '*',
            port: 9100,
            base: '.',
            keepalive: true
            }
        }
    }
#修改_site/app.js 文件,修改head的连接地址 
app.App = ui.AbstractWidget.extend({
	defaults: {
		base_uri: null
	},
	init: function(parent) {
		this._super();
		this.prefs = services.Preferences.instance();
		this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.10.129:9200";
		if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) {
			// XHR request fails if the URL is not ending with a "/"
			this.base_uri += "/";
		}
    .....
	}
})
这个找起来比较花时间,在文件的最下面,可能需要花点时间去找,如果你早点怎么收索,那就快很多了

启动ElasticSerach-head

nohup grunt server &

启动之后,现在我们去就浏览器里反问head–> http://192.168.10.191:8100
效果就是这样的,告诉大家一下,为什么健康值为黄色,是因为我们没有部署集群,所有为黄色
这里写图片描述

###C–》logstash 安装

之前我们已经下载了相关的包,现在我们就可以直接去看是安装了,以为logstash中也是可以集群的,
我们这里为了节约时间,就暂时只安装一台,
logstash安装的过程中,我们需要对他进行一些配置文件的修改,但是其中我们的收集日志的工具其实是filebeat,
所有这里我就直接结合filebeat和logstash两个一起来安装
在结合kibana的可视化做一下说明
事先告诉大家,我用的日志收集器是filebeat,logstash是用来做连接ElasticSerach输入输出的中间枢纽
接下来我们就来安装logstash和filebeat

 安装logstash

[root@host elk]# tar -zxvf logstash-6.2.4.tar.gz
[root@host elk]# cd logstash-6.2.4/config
注意:我们队logstash.yml文件不需要做任何的修改,默认配置就ok了
[root@host elk]# cd logstash-6.2.4/config
[root@host elk]# touch ./config/logstash.conf #创建一个logstash.conf文件
[root@host elk]# vi ./config/logstash.conf

在logstash.conf文件中加入下面的环境,这里我用的是redis,有些人用的kafka,我用redis是应为安装简单,方便
这里根据个人情况选择

input {
    redis {
        data_type => "list"           #logstash redis插件工作方式
        host => "192.168.10.191"      #redis地址
        port => "6379"                #redis端口
        key => "shopweb"              #监听的键值
    }
}

output {
    elasticsearch {
        hosts => ["192.168.10.191:9200"]  #ElasticSerach地址
        index => "shopweb-%{+YYYY.MM.dd}" #这个是索引值 
    }
}

配置好这些之后,我们就可以启动logstash了
记得切换用户

[root@host elk]# su elk
[elk@host elk]#
[elk@host elk]# ./bin/logstash -f ./config/logstash.conf
这样启动之后就可以看到日志,但是不可以关闭窗口,一旦关闭创建,logstash就停了
所有之前为什么需要安装nohup呢,现在就可以用nohup面板来后台启动了
如果你启动了记得查杀一下进程
[elk@host elk]# ps -ef | grep logstash
[elk@host elk]# kill -9 6548
[elk@host elk]# nohup ./bin/logstash -f ./config/logstash.conf & 

启动之后 我们先不管,接下来我们再来安装filebeat,安装完filebeat之后,我们回来结合ElasticSerach
做进一步的配置
tar -zxvf filebeat-6.0.1-linux-x86_64.tar.gz

[root@host elk]# tar -zxvf filebeat-6.0.1-linux-x86_64.tar.gz
[root@host elk]# cd filebeat-6.0.1-linux-x86_64
[root@host elk]# vi filebeat.yml

修改的配置文件如下

 - type: log
  # Change to true to enable this prospector configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  #指定要监控的日志,可以指定具体得文件或者目录
  paths:
- /usr/local/nlp/logs/shopweb/*.log
    #- c:\programdata\elasticsearch\logs\*
 tags: ["shopweb"]
  document_type: "shopweb"
#================================ redis output ======================
#收集日志输出到redis集群
output.redis:
  enabled: true
  hosts: ["192.168.10.191:6500"]
  #hosts: ["192.168.10.191:6500","192.168.10.192:7600","192.168.10.191:7601"] #redis集群配置
  key: "shopweb"
  db: 0
  timeout: 5
#----------------------------- Logstash output --------------------------------

filebeath还指出同事监控多个配置文件,下面是一个filebeath监控两个的配置

#=========================== Filebeat prospectors =============================
filebeat.prospectors:
# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.
- type: log
  # Change to true to enable this prospector configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /usr/local/src/development/logs/*.log
  tags: ["demo1"]
  
- type: log
  enabled: true
  paths:
    - /usr/local/src/development/logs/demo/*.log
  tags: ["demo2"]
  
#================================ redis output ======================
#output.file:     #输出到文件
#  path: "/usr/elk/date/logs"
#  filename: "filebeat.txt" 

output.redis:
  hosts: ["192.168.10.191"]
#  db: "1"
  port: "6379"
#  password: "123456"
  key: "shopweb"

两种配置选择一个就OK了
配置完成之后,我们就开始启动filebeat吧
在启动的时候我们可以查看一下filebeat中的配置文件

[elk@host filebeat]# grep -v "#" /usr/elk/filebeat-6.0.1/filebeat.yml |grep -v "^$"
=============查看到的结果=====================
filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /usr/local/src/development/logs/*.log
  tags: ["demo1"]
- type: log
  enabled: true 
  paths:
    - /usr/local/src/development/logs/demo/*.log
  tags: ["demo2"]
  exclude_lines: ['^DBG',"^$"]
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3
setup.kibana:
 
output.redis:
  hosts: ["192.168.10.191"]
  port: "6379"
  key: "shopweb"
=======================
启动测试
[elk@host filebeat]# ./filebeat -e -c filebeat.yml -d "Publish"
后台启动
[elk@host filebeat]# nohup ./filebeat -e -c filebeat.yml &
查看进程
[elk@host filebeat]# ps aux | grep filebeat

好了,最后我们就来安装一下Kibana的服务
Kibana安装就比较简单了

[root@host kibana]# tar -zxvf kibana-6.2.4.tar.gz
[root@host kibana]# cd kibana-6.2.4/config
[root@host config]# vi kibana.yml

kibana.yml配置

server.port: 5601
server.host: "0.0.0.0"
server.name: "your-hostname"
elasticsearch.url: "http://192.168.10.191:9200" 
elasticsearch.preserveHost: true 
kibana.index: ".kibana"

下面我们就来启动kibana,我们还是以后台启动的方式来启动kibana,一样的要注意切换elk用户哦

[elk@host elk]# nohup bin/kibana & #kibana 启动的非常慢,我们可能要等待一段时间
[elk@host elk]# tail -f nohup.out #查看日志

启动完成之后,接下来我们就来反问一下kibana–》http://192.168.10.191:5601/app/kibana

由于图片上传不了,所有我只能暂时到这里了
下面我们就直接来转一下x-pack插件吧
###D–》x-pack 安装

  1. Elasticsearchk中安装x-pack插件
    手动下载X-Pack zip文件:https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.2.4.zip
    自动下载#: bin/elasticsearch-plugin install x-pack
    建议自动下载,可以自动匹配版本型号
    A. 安装:# bin/elasticsearch-plugin install x-pack

    Continue with installation? [y/N] # y
    Continue with installation? [y/N] # y

参数说明:
xpack.graph.enabled 设置为false禁用X-Pack图形功能。
xpack.ml.enabled 设置为false禁用X-Pack机器学习功能。
xpack.monitoring.enabled 设置为false禁用X-Pack监视功能。
xpack.reporting.enabled 设置为false禁用X-Pack报告功能。
xpack.security.enabled 设置为false禁用X-Pack安全功能。
xpack.watcher.enabled 设置false为禁用Watcher。

启动报错时
Exception in thread “main” org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /usr/elk/elasticsearch-6.2.4/config/elasticsearch.keystore
报错需要从新授权

chown -R elk.elk /usr/local/elasticsearch/

在从新启动elasticsearch

B. 给elasticsearch设置密码 注意:设置密码的时候需要保持elasticsearch是启动状态
$ bin/x-pack/setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,kibana,logstash_system.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
passwords must be at least [6] characters long
Try again.
Enter password for [elastic]:
passwords must be at least [6] characters long
Try again.
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [elastic]
安装成功之后 修改 elasticsearch.yml配置文件
加入:

[elk@host elk]# vi elasticsearch.yml
加入下面的参数
#xpack.security.enabled: true
#xpack.graph.enabled: true
xpack.ml.enabled: false
#xpack.reporting.enabled: true
#xpack.monitoring.enabled: true

xpack.watcher.enabled: false
在x-pack配置文件中,默认属性是为true的,所有配置时为可以只设置为false的属性

打开浏览器查询所有用户:http://localhost:9200/_xpack/security/user?pretty
查询所有Roles:http://localhost:9200/_xpack/security/role
###重点

监控方便部署了X-Pack之后,因为验证的问题,head无法正确连接
使用这个链接 http://localhost:9100/?auth_user=elastic&auth_password=admins-1
下面是elasticsearch的配置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type 
#特别注意:有些版本和安装http.cors.allow-headers的东西不一样
#在我的机器中需要配置的是http.cors.allow-headers: Authorization,Content-Type 
#不然head是连接不上,head无法正常连接时 
#在elasticsearch.yml中需要加上
#http.cors.enabled: true
#http.cors.allow-origin: "*"
#http.cors.allow-headers: Authorization,Content-Typ

在浏览器中打开时加入两个参数:auth_user=elastic&auth_password=admins-1
head输入url时:也就是http://localhost:9100/?auth_user=elastic&auth_password=admins-1
这样就可以直接连接上elastic了

查询用户组的角色:http://10.168.12.138:8200/_xpack/security/role
2) Kibana 安装 x-pack
你可能会等待不知道多久才成功kibana-plugin安装中时间会比较长

安装命令:bin/kibana-plugin install x-pack

如果安装失败‘Plugin x-pack already exists, please remove before installing a new version’

删除命令bin/kibana-plugin remove x-pack

删除完之后再从新安装
安装成功的样子

Found previous install attempt. Deleting...
Attempting to transfer from x-pack
Attempting to transfer from https://xxx.elastic.co/downloads/kibana-plugins/x-pack/x-pack-5.5.2.zip
Transferring 119363535 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete
安装完成之后,在kibana.yml中配置上用户密码
elasticsearch.username: "elastic"
elasticsearch.password: "admins-1"
配置属性:
xpack.security.enabled: true
xpack.graph.enabled: true
xpack.ml.enabled: false
xpack.reporting.enabled: true
xpack.monitoring.enabled: true
xpack.watcher.enabled: false

配置完成之后 启动kibana

3)Logstash 安装 x-pack

安装命令:#:bin/logstash-plugin install x-pack
logstash配置:
input { stdin { } }
output {
  elasticsearch {
    hosts => ["ip:9200"]
    user => elastic #加入
    password => admins-1 #加入
  }
}

和elasticsearch一样,这里也需要配置对应的logstash.yml文件:

xpack.monitoring.elasticsearch.username: logstash_system/
xpack.monitoring.elasticsearch.password: logstash_password  #对应用户的密码

注意:在logstash中logstash.yml的配置用户为logstash_system或elastic
当logstash连接elasticsearch连接不上或者连接失败时需要配置指定elastic路径

xpack.monitoring.elasticsearch.url: http://X.X.X.X:9200

然后在启动就可以了

###扩展部分
X-pack是收费的,只能使用一个月,所有我们需要破解
1: 破解并安装
下载x-pack-6.0.0.zip,
解压并找到x-pack-6.0.0.jar。这里使用JD-GUI是无法反编译的,
我使用的是Luyten(下载地址:https://github.com/deathmarine/Luyten/releases/tag/v0.5.0)进行反编译。
将org.elasticsearch/license/LicenseVerifier.class反编译并保存出来。这个类是检查license完整性的类,我们使其始终返回true,就可以任意修改license并导入。将其改为:

package org.elasticsearch.license;
import java.nio.*;
import java.util.*;
import java.security.*;
import org.elasticsearch.common.xcontent.*;
import org.apache.lucene.util.*;
import org.elasticsearch.common.io.*;
import java.io.*;
public class LicenseVerifier
{
public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) {
return true;
}
public static boolean verifyLicense(final License license) {
return true;
}
}

注:红色的部分可以都不要
然后需要重新编译class文件。注意这里我们无需编译整个工程,将原来的x-pack-5.2.0.jar和依赖包加入CLASSPATH,即可完成单个文件的编译。实际上只用到了3个依赖包,如果是用RPM或DEB安装的,直接运行:

javac -cp "e:/tools/linux/elasticsearch/5.0/elasticsearch-5.0.0.jar;e:/tools/linux/elasticsearch/5.0/lucene-core-6.2.0.jar;E:/tools/linux/elasticsearch/5.0/x-pack-5.0.0/elasticsearch/x-pack-5.0.0.jar" LicenseVerifier.java

注:javac执行时的参数cp 表示classpath 路径,如果多个在windows环境中用 ; 隔开,linux中用 : 隔开;
把x-pack-5.2.0.jar用压缩文件管理器打开,将里面的LicenseVerifier.class替换掉。再把破解了的jar包部署到各节点上,
将破解的.zip文件安装到服务器,启动 elasticsearch,kibana,并重启集群。安装新的之前要现将已经安装的删除。

申请一个免费license(https://license.elastic.co/registration) 注册后可以下载文件,下载后修改,例如:
主要修改:type改为platinum表示可以使用所有功能 ; expiry_date_in_millis 我这里改了10年 _

{"license":{"uid":"10cf8263-4d23-4e81-b10b-95abfb14b599","type":"platinum","issue_date_in_millis":1490832000000,"expiry_date_in_millis":1806237751991,"max_nodes":100,"issued_to":"www bbb (baiye)","issuer":"Web Form","signature":"AAAAAwAAAA33g9abHznVovDNSXRpAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01VMFRjNDZpZEVXeUtUMXIyMlIveFpJUkk2WUdveEZaME9XWitGUi9WNTZVQW1FMG1DenhZU0ZmeXlZakVEMjZFT2NvOWxpZGlqVmlHNC8rWVVUYzMwRGVySHpIdURzKzFiRDl4TmM1TUp2VTBOUlJZUlAyV0ZVL2kvVk10L0NsbXNFYVZwT3NSU082dFNNa2prQ0ZsclZ4NTltbU1CVE5lR09Bck93V2J1Y3c9PQAAAQBj3vZvK4B2T0MWE3hZSxnMEFANBR5g1bNGDrWUqADXLFVAvtkNqPqsOblFnAtr1o/LLkxe/pDxUFS0zPNDIu3FkQct4OP9jTpxhvB7ukMNSK4SGVv2QfDFEkUkGgVIQoZ4mOaL3JPr3WYhX68uuKgzBSwem7oG0k+dbllbDmEFmo1+yd8uxBSFTiSAaLoA2YedFON5x1tzsBZU6miwrnaFpC7KC2ezTl/0BlRPb7tKsS6cUuj8s2Xrn+yu7h6929L9QU1q3fTqk38EySIPkn+LjJKi7d8NwnbbhNdkj4f3uykBmEE1MtCaHsrZFM2Ry1tdDymWuyaGkz0h+2yc0QcB","start_date_in_millis":1490832000000}}

问题1:启动elasticsearch是出现: elasticsearch[21253]: which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin)
解决方法:在 /etc/sysconfig/elasticsearch文件中加入以下配置
JAVA_HOME=/usr/local/jdk1.8
问题2:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:

  • soft nproc 1024
    修改为
  • soft nproc 2048

问题3(这个只是一个warn而已,在elasticsearch的日志中看到的):
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
修改: vim /etc/sysctl.conf
添加下面配置: vm.max_map_count=655360
并执行命令:sysctl -p

【安装license】
查看当前的license
[root@localhost Downloads]# curl -XGET -u elastic:changeme ‘http://192.168.100.50:9200/_license’
将编辑好的license.json文件放到服务器,在文件目录下执行:
[root@localhost Downloads]#curl -XPUT -u elastic:changeme ‘http://192.168.100.50:9200/_xpack/license’ -d @license.json
或者下面:
[root@localhost Downloads]#curl -XPUT -u elastic:changeme ‘http://192.168.100.50:9200/_xpack/license?acknowledge=true’ -d @license.json
重启elasticsearch和kibana .
打开:http://192.168.100.50:5601/login 可正常登录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值