解决方案:数据可视化(七)Graphite 体系结构详解
优采云 发布时间: 2022-11-20 12:19解决方案:数据可视化(七)Graphite 体系结构详解
2019年独角兽企业招聘Python工程师标准>>>
Graphite 是一个优秀的开源工具,用于处理可视化和指标数据。它具有强大的查询API和相当丰富的插件功能。事实上,Graphite 指标协议是许多指标采集
工具事实上的标准格式。然而,Graphite 并不总是易于部署和使用的工具。由于其设计和使用中涉及的大量小I/O操作,在大型应用中会出现一些问题,部署起来可能会有些麻烦。
Graphite 部署的部分痛苦在于它由三个不同的元素组成(当然,如果您包括指标采集
,则为四个),并且根据您的环境,只有一个或多个默认元素可能无法满足您的需求。
虽然 Graphite 收录
三个组件可能会导致一些实施问题,但会产生积极的结果。每个模块化块都是一个独立的单元,因此您可以根据实际需要混合搭配使用三种组件中的哪一种。这也意味着您可以为自己构建完全自定义的 Graphite 部署。
让我们一一了解您需要做什么。对于 Graphite 的每个组件,它可以是 Graphite 解决方案或非 Graphite 替代品。
1. 指标采集
器——Dropwizard Metrics、StatsD
Graphite 部署场景中的第一步根本不是 Graphite 的一部分。这是因为 Graphite 本身不支持采集
任何指标;Graphite 需要有人向它发送度量数据。这通常不是一个特别大的限制,因为大多数指标采集
器都支持以 Graphite 格式提供指标数据,但仍有一些事情需要注意。我们可以选择的不同指标采集
器的列表可能会很大,但基础 Graphite 中没有收录
任何工具。
选择您的指标采集
器——Graphite 文档提供了一个工具列表,包括流行的选择,如 CollectD 和 Diamond,但很少更新,因此您还可以考虑以下两个选项:
Dropwizard Metrics – [Metrics](Metrics 是一个 Java 库,可让您深入了解代码在生产中的作用。)是一个 Java 库,可通过一系列指标为您提供生产环境的可视化。它有一个 Graphite Reporter,可将所有指标数据发送到 Graphite 实例。对于需要在 Java 生态中使用 Graphite 的场景来说是一个不错的选择。
StatsD - StatsD 是来自 Etsy(互联网电子商务平台)的基于 Node.js 的 Web 守护程序. 它听取一系列统计数据、指标,并将它们聚合到像 Graphite 这样的工具中。StatsD 还可以与许多其他可视化和指标采集
工具一起使用。
简介:Graphite 没有与特定的指标采集
器捆绑在一起。但是,Graphite 指标协议非常常见,因此不难找到一个或多个适用于您的应用程序的协议。由于与 Graphite 配合良好的指标采集
器非常多,您不需要只选择一个,您可以选择从多个数据源发送指标。
2. Listeners - Carbon、graphite-ng 和 Riemann
Graphite 的另一部分是用于*敏*感*词*发送的指标数据并将其写入磁盘的组件——Carbon(本义:碳)。Carbon 由守护进程组成,并且在其工作方式上具有一些内置的灵活性。
在基本的小规模部署中,Carbon 守护进程*敏*感*词*指标数据并将它们报告给 Whisper 存储数据库。然而,随着规模的增长,可以添加一个聚合元素(聚合),它在将指标数据以一个块的形式发送到 Whisper 之前将其缓冲一段时间。您还可以使用 Carbon 将指标副本传递到多个 Carbon 后端。当您达到更高的规模并需要多个 Carbon 守护进程来处理传入的指标数据时,这尤其有用。
缺点和潜在问题——人们遇到的常见问题通常与规模有关。在规模化应用方面,Carbon 存在以下不足:
在标准 Graphite 部署的情况下,这些情况的解决方案是将工作划分为碳中继和碳缓存。尽管如此,您仍需要注意负载,因为超过 Carbon 的负载会导致数据丢失。如果您不能接受这种后果,请查看 Carbon 的替代解决方案。
Carbon Alternative Carbon 的另一个替代方案是 graphite-ng,它本质上是在 Go 语言的基础上对 Carbon 进行了重写,以解决上述几个问题。到目前为止,该项目的重点是提高 Carbon 的中继和聚合能力。如果您喜欢 Carbon 的特性,但又想解决一些性能限制,这是一个不错的选择。
另一个选择是 Reimann。基于Clojure语言实现(属于LISP编程语言家族),Reimann用于聚合和处理“事件流(event streams)”。事件和流是相当简单的概念,Riemann 可以将它们发送到 Graphite 实例而不是 Carbon。它为流程增加了一些额外的好处,例如警报。如果你想设计一个远离 Carbon 的架构,这是一个不错的选择,它还可以添加一些与警报相关的能力。
争议
蓝晶石不仅“与碳一起工作”。就像 influxdb 一样,它实现了 graphite line receiver 协议,从而取代了 carbon-cache。
黎曼无法将数据“代替碳”发送到您的石墨部署。它可以作为一个更强大的碳聚合器,但它不会取代碳缓存。
简介:Carbon 负责*敏*感*词*指标并将它们写入您的存储数据库,但经常会遇到*敏*感*词*的性能问题。有一些现成的替代方案可以解决这个问题。
3. 存储数据库——Whisper、InfluxDB、Cyanite
您需要选择的下一个组件是存储数据库。在 Graphite 架构中称为 Whisper。Whisper 是一个固定大小的数据库,用于存储时间序列数据,在保存和采样方面提供相当高的精度。在标准的 Graphite 部署中,Carbon 将度量值写入 Whisper 存储,以便在 Graphite-web 组件中进行可视化。
劣势及潜在问题:Whisper基于RRD(Round-Robin Database),但在写操作时有一些关键的区别,比如回填项目历史数据和处理不规则数据的能力。指标和可视化工具有一些有用的属性,但它们的实现是基于某种妥协。
Whisper 替代方案 您可以通过部署固态驱动器 (SSD) 或其他一些设计来解决 Whisper 的性能问题,但仅此而已。如果数据库部分是您所需要的,则有几个选项可供考虑。
当前的主要选项之一是 influxdata (InfluxDB)。influxdata是一个基于LevelDB用Go语言编写的时序数据库。Influxdata可以解决一些磁盘IO写优化问题,不需要一个metric = one file。
influxdata 支持 Carbon 使用的协议,使其能够悄悄地取代 Whisper 并实现类似 SQL 的查询语言。甚至还有一些项目旨在让influxdata的替换变得更容易,例如graphite-influxdb项目,它可以与Graphite的API无缝连接。influxdata 是一个非常有前途的新兴项目,可以在广泛的范围内与其他工具一起使用。
另一种选择是使用基于 Cassandra 的存储数据库。由于在石墨-*敏*感*词*项目上的工作,这可以通过基于 Cyanite 的数据库轻松实现。Cyanite 的开发规划目标是在 Graphite 架构中取代 Whisper,这意味着它可以与 Carbon 和 Graphite-web(需要少量依赖)一起工作。使用 Cyanite 有助于解决 Whisper 在*敏*感*词*部署场景下的性能和高可用问题。
总结:在Graphite架构中,数据存储组件是Whisper。在大型应用程序中,除非您在硬件上投入大量资金并将其分解为复杂的手动集群模式,否则您会悄悄地遇到一些性能和可用性问题。如果您需要关心这些问题,可以使用可以提高性能和可用性的数据库替代方案。
4.可视化组件——Graphite-Web和Grafana
采集
并存储指标数据后,下一步就是可视化它们。Graphite-web 的作用是提供可视化。Graphite-web 是一个基于 Django 的 Web 应用程序,提供指标数据可视化和交互功能。它在数据处理上提供了相当多的能力,但是可视化组件不是很漂亮(就是“土”、“丑”)。Graphite-web 是一个前端组件,我们会专注于用户体验。
Graphite-web 的替代品 由于出色的 Graphite API,目前有一系列支持 Graphite 的第三方仪表板工具。因为有太多的可视化选项,所以它们的优点实际上主要是个人品味问题,同样不会扩展太多,但我确实想特别指出一个。Grafana 可能是 Graphite 最有前途的视觉替代品,或者至少是最受关注的替代品。
Grafana 是一个兼容 Graphite 和 InfluxDB 的开源仪表板工具。Grafana 曾经只是一个基于 Elasticsearch 存储的前端仪表盘工具。从V2.0版本开始,拥有支持用户自定义的后端存储组件。Grafana 旨在支持 Graphite 以创建更美观的可视化组件,因此非常适合替代默认的 Graphite-web。Grafana功能丰富,性能稳定。Grafana 有一个后端组件,如果您也可以找到纯前端工具,Graphite 文档提供了一个工具列表。
" />
简介: 如果您发现 Graphite 提供的默认可视化效果过于基础和乏味,那么有很多可视化替代方案可供选择。其中一些是纯粹的客户端,还有一些包括一个后端组件,用于存储您构建的仪表板。无论您要寻找什么,都可以在这里找到。
5. 代码级别指标——趋势
OverOps 发布了一项新功能,让您可以将来自 JVM 应用程序错误的代码级指标连同变量状态一起发送到 Graphite。详细的:
{
backends: [ "./backends/graphite" ] // identify this backend as Graphite
graphitePort: 2003, // port of Graphite server
graphiteHost: "graphite.example.com", // hostname or IP of Graphite server
deleteCounters: true,
graphite: { // Graphite tweaks for Takipi
prefixCounter: "",
prefixGauge: "",
globalPrefix: "",
legacyNamespace: false
}
}
总结
所有关于 Graphite 的抱怨都是集中的(它不能始终如一地工作,仪表板很丑!缩放是一件很痛苦的事情!),但这并不妨碍它成为一种流行的工具。如果您想要一个支持许多企业工具的开源指标和可视化工具,Graphite 值得一试。最重要的一点是您可以自定义数据内容。Graphite 并不是由协同工作的完全特定的组件组成的,那么它的乐趣在哪里呢?通过反复试验,您可以在自己的环境中构建完全自定义的、非常有用的 Graphite(或类似 Graphite)部署。
随着网络技术的不断进步,人们管理公众号文章的小帮手也很多,公众号文章的采集器
就是其中之一,我们跟着图兔数据来了解公众号文章采集
者的相关信息。
公众号文章采集
流程公众号文章采集器
微信搜索门户搜索公众号,选择公众号进入公众号历史文章列表,通过文章
列表获取文章链接,通过文章获取文章内容
链接,并将文章内容解析到数据库中。
" />
公众号文章采集器
公众号文章采集
注意事项
1.如果采集过于频繁,验证码会出现在搜狗搜索和访问公众号历史文章列表中。无法使用常规脚本集合直接获取验证码。可以使用无头浏览器访问它,并通过对接编码平台识别验证码。
2.即使使用浏览器,也存在效率低下(实际上是运行一个完整的浏览器来模拟人工操作),Web资源浏览器的加载难以控制,脚本难以控制浏览器加载,验证码识别不能100%,很可能中途中断抓取过程。
" />
3.如果您坚持使用搜狗门户,想要做完美的采集
,则只能添加代理IP。顺便说一句,别想公开和免费的IP地址,它非常不稳定,基本上被微信屏蔽了。
公众号文章采集器
4、除了面对搜狗/微信的反爬虫机制外,采用这种方案还有其他弊端:无法获取用于评价文章质量的阅读量、点赞量等关键信息,无法及时获取公众号上已经发布的文章, 并且只能定期重复爬行,并且只能获得最后十篇海量文章。
以上是途兔数据为您整理的公众号文章采集
者的相关信息,希望能帮助您全面了解其用途。