如何利用Graphite、StatsD与CollectD实现数据追踪与统计

Mtail日志监控输出prometheus mtail是一种工具,用于从要导出的应用程序日志中提取指标 放入时间序列数据库或时间序列计算器中,用于警报和仪表板。简单来说,就是实时读取应用程序的日志,并且通过自己编写的脚本实时分析,最终生成时间序列指标的工具。 阅读详情

如何利用Graphite、StatsD与CollectD实现数据追踪与统计

提供:ZStack社区

系列教程

本教程为《在服务器上追踪统计结果》系列四篇中的第一篇。

内容简介

出于各种理由,我们经常需要收集与服务器、应用程序以及流量相关的状态数据。收集并整理这些数据能够帮助我们制定出更加行之有效的规模伸缩及故障排查决策,同时对现有配置中的痛点进行追踪。

我们可以利用多种工具对设备上的各项指标加以追踪,而且其通常只需要占用特定进程中的一小部分资源。我们也可以将这些工具加以结合,从而创建出一套对结果进行收集、记录与显示的完整系统。

在本次教程中,我们将了解几种能够切实对服务器及应用程序数据进行收集、存储与可视化处理的技术方案。

具体来讲,此次了解的对象包括Graphite——一套由多种组件构建的图形库,可用于对特定时间段内的数据进行视觉渲染与显示。另外还有CollectD,其属于系统统计守护进程,能够以近实时方式收集与当前服务器相关之信息。最后是StatsD,一款灵活的数据聚合器,能够收集并整理任意数据。

在接下来的内容中,我们将共同了解如何立足于Ubuntu 14.04服务器安装并配置这些功能组件。

为什么要追踪数据?

首先需要明确的是,我们为什么要对服务器或者应用程序环境下的数据进行追踪。

其核心理由非常简单:我们掌握的数据越多,那么了解特定时间段内整套业务体系的运作状态也就越简单。通过这种方式,我们能够轻松利用客观数据支撑自己的决策,并在实际结果出现之前预测某项变更是否指向正确的组件。对状态的追踪还能帮助我们了解更多应用程序日志无法提供的重要信息。

大部分(但并非全部)日志记录系统都无法对来自多种应用的数据进行关联,或者将事件与特定系统状态联系起来,这是因为它们往往只能代表独立的应用运行输出结果。有鉴于此,我们将很难围绕单一事件构建面向整体系统的完整审视结论。

可以想见,假设我们遭遇数据库服务器的意外宕机。在阅读日志记录时,大家可能会发现在15:35:28时间点上,MySQL服务由于OOM(内存不足)错误而被关闭。现在我们意识到内存使用量正是问题的根源,但对于一台始终运行稳定的服务器,我们很难快速发现造成这种内存使用峰值的理由所在。

如果对服务器以及应用程序数据进行追踪,我们就能够将系统数据片段整合起来,从而了解问题发生时运行环境的整体状态。我们可能会发现当时的内存使用量激增源自内存泄漏。如果拥有应用层级的内存使用量信息,我们亦能够判断哪款程序是导致问题的元凶。另外,我们可能还会发现一些不同寻常的资源需求峰值,这意味着问题也许存在其它可能性。

再设想另一种场景,我们可以查看系统在部署前与部署后的具体状态。如果新代码会引发某些意外状态,我们能够确切掌握其对其它组件的影响,并将其性能与上版本代码进行比对。我们还可以了解新代码在哪些方面实现了改进,并对其中可能存在问题的部分加以修复。

有了这种良好的数据收集能力,我们可以将系统真正视为一套完整体系,而不再是过去那种松散且缺乏关联性的组件集合。

Graphite组件

这里我们首先关注Graphite,随后介绍几款能够帮助Graphite获取数据的软件。

Graphite是一套图形库,负责对数据进行保存以及视觉显示渲染。这意味着Graphite需要借助其它应用进行数据点收集与转换。

Graphite项目本身亦由多个组件构建而成,其中每个组件都有独特的作用取向。

Graphite Web应用

Graphite安装包中最具可视性与动态性的组件当数Graphite Web应用。

我们也将在这里对收集到的数据进行图形设计:

Graphite为我们提供一套灵活的界面以进行图形设计。大家可以在这里结合多种不同指标类型、控制标签、字体、颜色以及线条属性,并根据需要对数据进行大小调整及修改。

这里的核心思路在于,Graphite基于接收到及指向的数据点渲染图形。其不会输出图形并同时释放数据内容。大家可以随时根据需要进行数据渲染。

这款Web应用还允许大家保存图形属性与布局,这意味着我们可以生成包含全部所需设定的监控界面。大家还可以根据喜好设计仪表板视图,从而为每台设备或者每款应用构建独立的仪表板。如果大家需要跨设备或应用进行数据关联,将各图形直接拖拽并结合即可。

不过其灵活性还不仅如此。Graphite允许大家将图形渲染为裸URL,并将其嵌入至其它界面当中。大家也可以利用JSON或者CSV等非图形化格式进行数据导出,或者利用SCG格式以嵌入数据信息。

现在大家已经了解了收集数据的意义所在,接下来要探讨的为Graphite中的各具体组件。

Carbon

Carbon是一套面向Graphite配置的存储后端。单一Graphite配置中将包含一个或者多个Carbon守护进程,其负责由其它进程收集并传输的统计数据(Graphite当中并不包含收集器)。

Carbon守护进程的类型多种多样,每一种都以独特的方式实现数据处理。其中最基本的一种名为carbon-cache.py。该守护进程非常直观,能够监听特定端口之数据并将其高效写入至目标磁盘。

它会在数据输入时加以保存,而后根据预定时间周期将其更新至磁盘。更重要的是,该Carbon组件能够处理数据接收与更新流程。它并不处理具体存储机制,这部分工作由whisper组件负责承担,我们将在稍后提到。

carbon-cache.py守护进程需要了解需要处理的具体格式、协议以及端口。另外,我们还需要告知其用于实现数据存储的数据保留策略。这些都由whisper负责实现。对于大多数基本配置,单一carbon-cache.py实例即可顺利完成数据复制。

随着设置规模的提升,其亦可同时运行多个实例,而具体负载均衡工作则由carbon-relay.py或者carbon-aggregator.py处理。

carbon-relay.py守护进程可被用于向全部后端守护进程发送请求以实现冗余。其也能够在多个不同carbon-cache.py实例之间进行数据共享,从而跨越多个存储位置分散读取负载。

carbon-aggregator.py守护进程则能够缓冲数据,并在一段时间后将其传输至carbon-cache.py。通过这种方式,我们能够削减状态处理给系统性能带来的影响。

Whisper

Whisper是一套数据库库,Graphite利用它存储其发送的信息。

它具备出色的灵活性,且能够以非常详尽的方式存储时间序列数据。它能够立足于不同细节层级创建不同归档副本,从而满足特定使用需求,并在特定信息超出保留时间阈值后降低其详尽程度。

举例来说,大家可以针对特定指标进行每秒一次数据点存储,同时将whisper的详尽数据存储周期设定为5小时。与此同时,我们需要保留的归档数据在详尽程度上应该相对较低。其可能只需要每分钟保存一次,但保留周期则延长至6个月。

低详尽度归档点会根据以高详尽度方式存储的数据进行计算。大家可以同时利用多种详尽度水平保存不同的归档副本,且详尽度指标可随意设定。我们亦能够根据所追踪的指标为whisper设置不同详尽度的具体计算方式。

举例来说,某项指标可能代表短时间帧内某事件的发生次数总和。要创建一个详尽度较低但时间段更长的保存点,大家可以引入高详尽度数据点以汇总更长时间段内的数据值。

Whisper还能够根据指标的不同特性采用其它低详尽度计算方式。例如,部分数据属于平均取值,另一些则需要追踪其最大值。对于平均值数据,whisper会根据高详尽度数据点计算低详尽度值。而对于最大值数据,whisper则保留其最大值并舍弃其余值,从而保持平均计算结果的正确性。

Whisper会在其接收到数据的同时计算并记录低详尽度数据(在收集到必要值后立即进行)。它能够对收集到的数据点执行必要数据聚集操作(包括取平均值、取最大值等等),而后进行写入。

Graphite将使用包含有所需时间帧信息的高详尽度归档作为数据基础,从而实现进一步图形渲染。

状态收集与交付

正如之前所提到,Graphite本身并不具备数据收集功能。相反,它依赖于其它服务实现数据供应。这不仅使得该项目的关注范围更加集中,同时也使其以模块化方式同其它多种输入服务进行交互。

接下来,我们将探讨Graphite所使用的各类协议,之后则是两款主流收集选项——CollectD与StatsD,大家可以利用其将数据传递至Carbon以完成处理。

协议

大家可以利用三种不同协议向Graphite发送数据。

首先,Graphite能够接收并识别普通文本。这种格式最为灵活,因为几乎每一种应用或者服务都能够生成文本输出结果,且这种结果能够供Graphite以及其它中间工具使用。

纯文本消息中包含的信息有指标名称、所赋值以及该值时间戳等。这些消息可通过指定的纯文本端口被直接发送至Carbon,而无需额外的格式化处理。

由于Craphite由Python编写而成,因此其同时也能够接收“pickle”数据序列格式。这种Python标准允许我们对单一事务内的多时间值进行缓冲与发送。

Graphite还能够接收AMQP消息格式。这样我们就可以更为细致地处理大型数据负载。大家能够供应大量状态数据并应对远程主机之间的网络连接中断状况,而不必担心此类配置方式产生数据丢失问题。

CollectD

收集服务器详尽信息的最便携方案之一正是使用CollectD守护进程。

CollectD能够收集与服务器环境下大量不同组件相关的统计信息。它允许我们轻松追踪各类常见指标,包括内存使用量、CPU负载以及网络流量等等。在此基础上,大家将能够轻松将事件同系统状态关联起来。

除了收集标准系统信息之外,CollectD还具备一套插件系统以扩展自身功能。这意味着大家可以轻松追踪Apache、Nginx、iptables、memcache、MySQL、PostgreSQL、OpenVPN以及其它常见软件。

CollectD还提供一种简便方式,能够从服务器上的内置应用与其它常见服务处获取数据。大家可以借此对基础设施以及相关服务的行为进行追踪。

StatsD

StatsD是一款非常简单的守护进程,大家可以利用它将其它数据发送至Graphite。这种方式的优势在于,我们能够轻松将状态追踪机制纳入正在构建的应用程序及系统当中。

StatsD会监听某一接口的简单UDP数据包,并将其作为单一数据点。这意味着它能够以无连接方式接收大量信息。在此之后,它会将接收到的值进行汇聚并发送至Graphite。

这套系统允许我们大量发送状态,而不必担心因此增加应用程序延迟。StatsD服务将对全部输入数据进行收集、汇聚而后作为经过汇总的数据点根据预设时间帧发送至Graphite。

由于具备上述优势,StatsD成为将任意类型数据发送至Graphite的理想中继选项。不过其主要用途仍是监控我们的应用程序及所创建的工具。

StatsD之所以精于处理这类任务,是因为其核心作用就是接收UDP流量。目前有多种利用不同编程语言编写的客户端库能够将数据直接发送至StatsD实例。这意味着我们正在构建的应用程序通常可以轻松发送数据并实现追踪。

总结

到这里,大家应该已经了解了这些统计与图形工具集,相信它们会在未来的工作中帮助各位更全面地了解自己的业务环境。

在下一篇教程中,我们将探讨 如何在Ubuntu 14.04服务器上安装Graphite。在此之后,我们将把 collectd and StatsD与Graphite对接以实现状态监控。

本文来源自DigitalOcean Community。英文原文:An Introduction to Tracking Statistics with Graphite, StatsD, and CollectD By Justin Ellingwood

翻译:diradw

grafana 使用graphite metrics 来统计数据量采样 之前配置的ELK进行了日志的监控,并且对elasticsearch了解了一些。这次配置grafana进行访问统计的时候,发现数据源也可以进行elasticsearch的配置,所以就使用了一下,但是发现不能按照metrics进行分类选取。后来发现原来如果要使用这种选择度量的方式的查询要使用graphite。 说明 如果要是为了达到统计某个接... 阅读详情

相关推荐

collectd-graphite-docker:运行 mackerelgraphite docker 容器,在本地安装并配置 collectd 以监控网络

监控 该项目的目的是在渗透测试期间监控网络连接和网络服务的可用性。 这个想法是为每个 pentest 有一个工作区,其中将有自己的容器、配置文件和记录的数据。 依赖关系 (来自自定义构建) 命令 初始化依赖 $ ./grmwl init 创建新工作区 $ ./grmwl build new_project 启动容器 这将从项目new_project启动容器,并自动配置new_project以监控eth0接口。 可以通过提供以逗号分隔的接口来提供要监视的接口列表。 $ ./grmwl start new_project eth0[,eth1,wlan0] 停止容器 $ ./grmwl stop new_project 删除工作区 $ ./grmwl delete new_project 列出工作区 $ ./grmwl list [+] new_project - running [+

推荐开源项目:Graphite-API - 简洁高效的图形渲染API服务器

推荐开源项目:Graphite-API - 简洁高效的图形渲染API服务器 项目介绍 Graphite-API 是一个精简版的Graphite-web服务,专注于提供渲染HTTP API,而不包括图形界面。它的设计目标是简单、无状态,并且易于安装和配置,为监控系统的数据可视化提供了强大的支持。 项目技术分析 Graphite-API实现了核心的API调用,如: /metrics/find:查找特...

gitblog_00041的博客 611

statsd 安装 配置 部署 使用文档

statsd监控工具 安装、配置 部署、使用文档。可以通过TCP/UDP 向statsd服务发送数据,statsd自动整合数据并展示

使用Graphite、StatsD和CollectD进行统计数据跟踪简介

有很多理由可以解释为什么收集关于服务器、应用程序和流量的统计数据是一个好主意。收集和组织数据可以让您对扩展、故障排除和跟踪配置中的痛点做出自信的决策。有各种工具可以用来跟踪我们的机器上的指标,它们通常被委托给某个过程的一小部分。我们可以将这些工具连接在一起,创建一个用于收集、记录和显示结果的系统。在本指南中,我们将讨论一些技术,这些技术将允许您收集、存储和可视化服务器和应用程序生成的数据。我们将讨论Graphite,这是一个由几个组件组成的图形库,可用于随时间呈现数据的可视表示。我们还将研究。

rubys007的博客 1433

华大HC32F460 TCP Server实验

华大HC32F460 TCP Server实验

ZhuoWuKeJi的博客 1272

西门子 G120 变频器报文

G120报文

mmxxoo_xxmmp的博客 8092

Collectd-Graphite:强大的监控与可视化工具

Collectd-Graphite:强大的监控与可视化工具 去发现同类优质开源项目:https://gitcode.com/ 如果你在寻找一款高效、可靠且易于使用的系统监控工具,那么可能是你的理想之选。 项目简介 Collectd-Graphite是一个开源的监控系统,它能够收集多种数据源(如CPU利用率、内存使用率、磁盘I/O等)并将其存储到一个时序数据库中,然后通过Graphite进行可视化展...

gitblog_00012的博客 544

Axure RP 10表单数据提交制作

本文介绍了如何使用Axure RP 10实现表单数据提交。

Peppaaa的博客 990

聊聊 Statsd 和 Collectd 那点事!

StatsD 是由 Etsy 开发并发布的汇总和总结应用指标的一个简单的守护进程,近些年来发展迅速,已经变成了一个用于收集应用性能指标的统一的协议。 关于 Statsd 的使用已经有很多文章介绍过,所以本文也不再赘述,本文主要来聊一聊它的来源原理以及和它类似的一个工具 Collectd 。 Etsy 使用 Statsd 监控系统应用 Et...

weixin_33868027的博客 360

MacTeX+TeXstudio:Macbook配置本地Latex看这一篇就够了

这个博客记录本人在MacBook上配置本地Latex的流程,其中选择的编译环境为MacTeX,编辑器为TeXstudio。采用的原因主要两点:一个是本人配置的原因主要是用来撰写毕业论文,希望能够尽可能简化设置流程,专注内容表达;第二是由于本人还有一个windows系统的笔记本,想要编辑器在专注写作体验的同时在两个系统上能够都适配,从而减少切换效率,故选择此组合。这篇文章介绍并详细记录了本人的安装流程,有相同需求的同志也可借鉴。

Katherine-XY的博客 6987

方差迭代计算公式

方差迭代计算过程推导术语约定递推公式过程推导 术语约定 (1)En=1n∑i=1nxi E_n =\frac{1}{n} \sum_{i=1}^{n}x_i \tag{1} En​=n1​i=1∑n​xi​(1) (2)F(n)=∑i=1n(x2−En) F(n) = \sum_{i=1}^{n}{(x^2-E_n)} \tag{2} F(n)=i=1∑n​(x2−En​)(2) (3)V(n)...

weixin_44479136的博客 7921

Graphite介绍

Graphite监控系统我的github pages 地址:https://alexanderwangsgithub.github.io/ Vine的监控使用Graphite,工具包提供埋点工具,在FrameWork中埋点。结合Grafana实现丰富的图形监控。前端:渲染图表后端:存储时间序列数据组件:​ Load Balancer|​ Carbon|​ Whisper|​ Fil

Alex-wang的专栏 1522

TC8:IPv4_HEADER_01-04

IPv4_HEADER_01: Ensure that the DUT generates an IPv4 Packet with a Total Length greater than or equal to 20 目的 确保DUT生成的IPv4报文的IP头部中的Total Length字段值大于等于20 IPv4协议头部中的Total Length字段表示整个IP数据包的长度,包括IP Header和payload之和,IP首部的长度最少就有20个字节,所以Total Length值肯定大于等于20

jasonj333 3967

StatsD!次世代系统监控的核心

在互联网业务蒸蒸日上的今时今日,系统架构日渐复杂,随着软件产品和工程团队的变革,许多开源的监控工具应运而生,其中有一些相当出名,比如 Zabbix、Nagios 还有 StatsD。也有一些问题被大家不断讨论,例如,监控领域的开源工具 Zabbix 和 Nagios 哪个更好?StatsD 是否有可能取代 Zabbix 或 Nagios 成为系统监控的新标准?StatsD 的诞生作为一个大型的手工艺

wangpeng198688的专栏 646

基于MATLAB的鲁棒主成分分析(Robust PCA)图像去噪

鲁棒主成分分析(Robust PCA)是一种有效的图像去噪方法,它能够在保持图像细节的同时去除噪声。本文将介绍如何使用MATLAB实现基于鲁棒PCA的图像去噪,并提供相应的源代码。它假设噪声是随机的、高斯分布的,并将图像分解为一个低秩矩阵和一个稀疏矩阵的和。低秩矩阵表示图像的结构和纹理信息,稀疏矩阵表示图像中的噪声和细节信息。接下来,我们将图像矩阵减去均值,得到规范化的图像矩阵。然后,我们将灰度图像转换为矩阵形式,并计算图像的均值。通过分离出低秩矩阵和稀疏矩阵,我们就得到了去噪后的图像和残差图像。

DevRevolt的博客 1125

Linux安装Docker(图文解说详细版)

第一步,下载docker 下载地址: https://download.docker.com/linux/static/stable/x86_64/ 这次的演示我们使用docker-18.06.3-ce.tgz 这个版本 第二步,上传到云服务器上面 使用rz命令上传或者fltp工具进行上传 第三步,解压文件 第四步,将解压出来的docker文件复制到 /usr/bin/ 目录下 这么做的目的是将docker交给linux自己去管理,类似spring中的ioc(猜测,非正经知识) cp docker

编码人生 1万+

collectd+graphite使用

collectd和graphite是用来做什么的 collectd: 是一个守护(daemon)进程,用来收集系统性能和提供各种存储方式来存储不同值的机制。比如基本的系统性能的收集(CPU、memory、process等) graphite:是一个企业级的监控工具,可以在廉价机硬件上运行;Graphite仅是一个画图工具,不主动地收集数据,而是将接收到的数据以图形的方式展现出来。 这里结合colle

hsx1612727380的专栏 1555

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

StatsD,collected,fluentd和其他守护程序

最受欢迎的守护程序是什么?它们可以做什么? 监视是每个系统中的关键元素,尽管我们的用户可以很好地了解系统的运行状况,但我们应该能够为他们提供最佳,流畅的体验。 那时,守护程序将派上用场,收集我们可能需要的所有数据,或者甚至是我们没有想到的数据。 在下面的文章中,我们将解释为什么这些守护程序如此重要,以及我们可以选择哪些选项。 一探究竟。 认识守护进程 收集器守护程序是一个在后台运...

danpob13624的博客 431

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Graphite详解

Graphite详解Graphite是一个开源实时的、显示时间序列度量数据的图形系统。Graphite并不收集度量数据本身,而是像一个数据库,通过其后端接收度量数据,然后以实时方式查询、转换、组合这些度量数据。Graphite支持内建的Web界面,它允许用户浏览度量数据和图。Graphite有三个主要组件组成: 1)Graphite-Web 这是一个基于Django的Web应用,可以呈现图形和仪表板

chszs的专栏 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

centos7 搭建 collectd + influxdb + statsd + grafana

搭建 collectd + influxdb + statsd + grafana 1.安装 collectd Yum install eprl-release Yum install collectd   2.安装 influxdb 和 grafana  参照如下文档 http://blog.youkuaiyun.com/qq_21398167/article/details/529202

yang.zhou欢迎各位 6038

在Centos7安装Collectd并与graphite集成

下载RPM相关 sudo yum install -y make automake gcc gcc-c++ kernel-devel perl-devel 安装Collectd5.10.0 wgethttps://storage.googleapis.com/collectd-tarballs/collectd-5.10.0.tar.bz2 ./configure make all i...

CandyCrusher的博客 510

StatsD学习

这4个文章是一个系列的,关于如何配置 StatsD,Graphite以及如何使用两者来显示访问信息: StatsD学习:http://blog.youkuaiyun.com/puncha/article/details/9083061在Ubuntu Server 12.04 x64下安装Graphite: http://blog.youkuaiyun.com/puncha/article/details/9

PunCha (PCH) 1万+

如何在Ubuntu 14.04上配置Collectd为Graphite收集系统指标

提供:ZStack云计算 系列教程本教程为如何在服务器上进行统计追踪四篇中的第三篇。内容介绍通过收集数据并进行可视化处理,我们能够对服务器与项目拥有更为深入的了解。在上一篇教程,我们探讨了如何安装并配置Graphite,从而对服务器上的数据进行可视化。然而,我们还不具备收集数据并将其发送至Graphite的方案。在本教程中,我们将探讨如何安装并使用collectd,一套负责收集并整理服务器与运行中服

zstack_org的博客 1461

WEB监控系列第一篇:web监控搭建——graphite+statsd(单机搭建)

转贴请注明:http://blog.youkuaiyun.com/crazyhacking/article/details/8363235 这篇写的太凌乱了,没有逻辑性,不过内容稍多。请参考第二篇文章:WEB监控系列第二篇:web监控搭建——graphite+statsd(服务器上搭建) 一 graphite 1 简介 参考自:http://www.jsxubar.info/graphit...

weixin_30673715的博客 382

如何深入理解 StatsD 与 Graphite ?

众所周知,StatsD 负责收集并聚合测量值。之后,它会将数据传给 Graphite,后者以时间序列为依据存储数据,并绘制图表。但是,我们不知道,基于 http 访问的图表在展示时,是基于每秒钟的请求数,每次留存的平均请求数还是其它。让我们就以此为目标,来一探究竟吧!本文系 OneAPM 工程师编译整理。 StatsD 为了全面了解 S...

weixin_33691700的博客 273

collectd调研

功能分析 监控信息采集系统。 功能就是根据配置,采集系统的多种信息,然后写入指定的多种格式媒质。 除了信息采集外,还支持监控发送告警,数据过滤。 丰富的监控插件,跟我们目标相关的有 如curl,根据正则表达式或者json抽取网页上提取某值 监控PC:网络,内存,CPU,磁盘 监控常用软件:memcached,mysql 日志分析:tail 系统集成相关功能分析

ang639 1467
上一篇: 理解SSH的加密与连接过程
下一篇: Elasticsearch、Fluentd与Kibana:开源的日志搜索与可视化方案
普通网友
博客等级 码龄10年 769粉丝 269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值