博客/工程

与Grafana Loki走标签外:如何建立低成本的Twitter分析

2022年2月7日4分钟

“标签外”这个术语是用来描述一种产品成功地用于其预期用途以外的用途。这种情况在制药行业很常见,但在软件行业也可能发生。

Grafana洛基被写成——并且被推销为——一个简单的,普罗米修斯-友好的日志后端,拥有非常低的总成本。它的预期目的很好,但它的体系结构使它成为标签外用法的丰富来源。

原因如下:Loki不索引日志的内容。相反,它只索引附加到日志上的标签——就像Prometheus一样。因此,它接受所有的日志格式。事实上,Loki真正做的是存储纯文本的片段,并为伴随的元数据建立索引。因此,考虑到所有这些,很容易就会意识到Grafana Loki根本不需要用于原木。

当我意识到洛基是如此的灵活时,我想找到一些好的数据流到洛基中来证明这个想法。十多年来,Twitter一直是一个有趣的地方,人们也一直在分析推文流。该API非常简单,而且非常可定制。

如果您想要分析任何时间段的tweet,那么您需要将它们存储在一个可以查询的后端中。您可能还希望能够跟踪关于tweet的数值指标,例如某个单词使用了多少次。由于推文从来没有停止过,你需要能够扩展。当然,格拉芙娜·洛基可以轻松应对所有这些。

开始

我为这个项目使用的示例代码是在这里.它使用Twitter API,通过一个承载令牌访问,流推文到任何Loki后端你想要的(Grafana云日志Grafana企业日志,或开源洛基).

要开始,你只需要打开Grafana并点击左边的“Explore”图标(这是指南针)。从页面顶部的下拉菜单中选择Loki数据源,然后可以开始使用LogQL分析tweet。

所有LogQL查询都由两部分组成:日志流选择器和日志管道。当将数据推入Loki时,还必须推入元数据来描述数据。该元数据被定义为称为标签的键-值对。本文中使用的Python代码只使用了一个标签,源=推特.任何查询都会使用相同的标签选择器:=“twitter”}{来源

带有分析tweet所需的日志流选择器的探索模式

接下来,需要日志管道。这定义了您希望在日志中搜索的内容。例如,如果你想搜索你所有的推文“@elonmusk”,你可以这样做:

{source="twitter"} |= "@elonmusk"

提示:当在Grafana中使用Explore模式时,在查询框中点击“Enter”会增加一个换行符。您可以按Shift+Enter来触发查询,而不是添加换行符。

您还可以使用完整的RE2正则表达式引擎(请参阅规则在这里).对于需要特殊规则的查询,可以使用“标志”。“i”标志使查询不区分大小写。如果你想做一个不区分大小写的搜索比特币比特币比特币,等等,你可以使用:

{source="twitter"} |~ "(?i)比特币"

对单词“bitcoin”不区分大小写的查询

Grafana Loki允许您从LogQL查询创建指标。例如,我们可以计算特定内容出现的次数,而不是只查找推文中的特定内容。

您可以使用count_over_time函数计算某一时间段内一个单词的实例数。如果你好奇人们在一分钟内说“非货币”的频率(剧透:比“比特币”的频率高得多),那么你可以用:

count_over_time((=“twitter”}{来源| ~”?我非功能性测试”)[1])

在一分钟间隔内发现不区分大小写短语“nft”的次数

大多数时候,了解某件事发生的速度比了解某件事发生的绝对次数更有趣。格拉夫娜·洛基让这一切变得简单。如果你想知道" interest rate "这个短语在一小时内的出现率,你可以用下面的方法快速找到:

率({源=“twitter”}| ~”(?我)利率”(60米))

人们在60分钟内说“利率”的频率有多高

无尽的可能性

我可以花一整天的时间创建LogQL查询来探索数据,但我将保持这篇博客文章的简单性。

你可以对任何其他流数据来源遵循同样的过程:Reddit评论、stocktwits、Mastodon、Salesforce Chatter、JIRA更新,应有尽有。任何可以用纯文本捕获的内容,都可以轻松地存储在Loki中进行分析。在文档中探索LogQL在这里然后看看这个世界在想什么。查询快乐!

Grafana Cloud是开始使用度量、日志、跟踪和仪表板的最简单的方法。我们对每个用例都有一个慷慨的免费永久层bob体育手机二维码和计划。现在就免费注册