在工作流程和流程中构建可观测性时,需要能够通过api快速检索、排序和处理各种遥测。有了新遗迹,你就可以收集了很多数据的,但是当你构建仪表盘和应用程序与数据的工作,要尽量减少多余的API操作。

与NerdGraph API资源管理器GraphQL- 你可以更方便地查询您所需要的数据,而不会过度或不足取,并减少你的数据分析工作流程手册辛劳。

更具体地说,在New Relic你可以使用NerdGraph来:

在这篇文章中,我将使用NerdGraph约查询信息,通过两个例子走路New Relic的基础设施云集成并更新他们的配置值。但首先一点历史。

在New Relic中使用GraphQL

与通常需要从多个端点加载的典型REST api不同,GraphQL提供了一个可以管理复杂查询的单一端点,因此开发人员可以在一个请求中从多个服务中获得他们应用程序所需的所有数据。

GraphQL是强类型的,它允许开发人员通过查询GraphQL服务显式声明可用的信息。这个声明是通过GraphQL模式。架构为开发人员提供他们需要表达对他们返回的数据信息的灵活性。例如,每个字段具有描述,开发人员可以使用以指示数据的正确使用。

模式还提供了开发人员构建工具所需的API蓝图,这些工具用于正确构造查询并指导正确使用任何返回数据。例如,开发人员可以使用模式来指示某个字段是否已被弃用,这样ide之类的工具就可以揭示这一事实并阻止对该数据的使用。

而“拼接模式”,从几个基本GraphQL -creating一个模式的API,允许开发者提供他们的所有API的统一接入体验,为我们在新的文物进行:

New Relic GraphQL实现包括几个底层的GraphQL api—包括帐户、基础设施和New Relic数据库(用于构造NRQL查询)。

有关GraphQL,查询云集成配置数据使用以下的实施例的更多信息GraphQL查询和突变

  • 查询GraphQL只请求获取数据
  • 突变:GraphQL请求修改和获取数据

NerdGraph有一个端点:https://api.newrelic.com/graphiql。这将启动(认证用户)之后的NerdGraph API接口,一个互动的,基于浏览器的IDE运行GraphQL请求。

在NerdGraph API浏览器中,你构建和运行在左侧的查询,并将结果在右边返回。

您可以点击进入领域钻到自己的定义。例如,如果你钻到演员,你会看到它包含了用户和帐户字段:

{{演员用户{名电子邮件} {帐户ID名称}}}

actor下的字段公开来自不同下游服务的数据,这些服务统一在GraphQL服务器交付的GrahQL模式中。当您发出查询时,GraphQL服务器将分离查询并为每个服务调用解析器。当查询完成(或超时或遇到错误)时,GraphQL服务器将组装结果并返回给您。在上面的示例中,我们获得了关于用户和他们能够访问的所有帐户的信息。

让我们通过示例来展示GraphQL数据收集功能的强大功能。

示例1:使用NerdGraph查询基础设施云集成

在第一个示例中,我将使用NerdGraph查询关于在我的New Relic帐户中运行的AWS集成的各种数据。在下一节中,我将使用在本例中收集的数据更新一些特定的设置。

小费:如果你打算继续下去,确保你生成API密钥您可以与New Relic的的GraphQL API使用。事实上,你可以直接从NerdGraph生成一个。

让我们从我在New Relic基础设施中提供的AWS集成列表开始:

安装在New Relic基础设施中的AWS集成。

安装在New Relic基础设施中的AWS集成。

接下来,让我们通过GraphQL查询检索有关这些AWS服务的一些信息。我将查询与我的帐户链接的云提供商(在这里是AWS)和我已经安装的AWS集成集。为此,我需要传递我想要查询的帐户的ID—这是帐户(ID:我的账户ID)查询的一部分。

请注意,我在“筑巢”的要求,以获取有关云提供商的信息我用的积分。如果使用REST API,这将需要多次调用,但是使用GraphQL API,只需一个查询就可以收集这些信息。

{演员{帐户(ID:我的账户ID){云{linkedAccounts {ID外部编号名称authLabel提供商{ID名称蛞蝓}集成{ID名称服务{ID蛞蝓名称createdAt updatedAt提供商{名称ID}}}}}}}}

当查询完成时,GraphQL服务器将组装我安装的AWS集成的结果,如下所示(注意,我已经截短了示例):

{ “数据”:{ “演员”:{ “账户”:{ “云”:{ “linkedAccounts”:[{ “authLabel”: “阿尔恩:AWS:IAM :: 8xxxxxxx7:角色/ NewRelicInfrastructure  - 集成 - 折纸”,“外部ID”: “8xxxxxxx7”, “标识”:3542, “集成”:[{ “ID”:75540, “姓名”: “RDS”, “服务”:{ “createdAt”:1470991744, “ID”:3, “名”: “RDS”, “商”:{ “ID”:1, “名”: “亚马逊网络服务”}, “弹头”: “RDS”, “updatedAt”:1534242454}},{“ID“:14233, ”姓名“: ”S3“, ”服务“:{ ”createdAt“:1470991745, ”ID“:4 ”名称为“: ”S3“, ”提供者“:{ ”ID“:1,” 名称“: “亚马逊网络服务”}, “弹头”: “S3”, “updatedAt”:1534242454}},{ “ID”:12223, “名”: “拉姆达”, “服务”:{ “createdAt”:1477910055, “ID”:14, “名”: “拉姆达”, “商”:{ “ID”:1, “名”: “亚马逊网络服务”}, “弹头”: “拉姆达”, “updatedAt”:1534242454}},{ “ID”:172534, “名”: “DynamoDB”, “服务”:{ “createdAt”:1470991758, “ID”:13, “名”: “DynamoDB”, “商”:{“ID“:1, “名”: “亚马逊网络服务”}, “弹头”: “dynamodb”, “updatedAt”:1534242454}},}}]}}}}}

但是如果我想要关于其中一个积分的更具体的信息呢?具体地说,我想知道我已经将哪些标签(用户定义的元数据)应用到一个特定的集成以及它指标的轮询间隔(New Relic查询集成数据的频率),以及这些设置最后更新的时间。

要做到这一点,我将需要使用的GraphQL-的更细致的功能之一接口,表示其他对象类型可以实现的公共字段集合的抽象类型。

因此,在我原来的查询,我将添加两个新的条款:

...在CloudDynamodbIntegration {metricsPollingInterval tagKey tagValue updatedAt} ...在CloudRedshiftIntegration {metricsPollingInterval tagKey tagValue updatedAt}

现在,如果我的查询命中结果,该结果类型CloudDynamodbIntegration或CloudReshiftIntegration,它也返回了场metricsPollingInterval,tagKey,tagValue和updatedAt。

这是我的(截)查询现在喜欢什么:

{{演员账号(ID:我的账户ID){{云{linkedAccounts ID外部ID名称authLabel提供商{...} {集成ID名称服务{...}} ...在CloudDynamodbIntegration {metricsPollingInterval tagKey tagValue updatedAt} ..。在CloudRedshiftIntegration {metricsPollingInterval tagKey tagValue updatedAt}}}}}}}

在结果中,请注意DynamoDb和Redshift配置信息包含了我使用它们的接口在查询中指定的额外字段。

{ “ID”:173397, “metricsPollingInterval”:900, “名”: “红移”, “服务”:{ “createdAt”:1497364366, “ID”:21, “名”: “红移”, “供应商”:{ “ID”:1, “名”: “亚马逊网络服务”}, “弹头”: “红移”, “updatedAt”:1534242454}, “tagKey”: “MDW测试”, “tagValue”:空“updatedAt “:1544435410},{ ”ID“:112183, ”metricsPollingInterval“:900, ”名“: ”DynamoDB“, ”服务“:{ ”createdAt“:1470991758, ”ID“:13, ”名“:” DynamoDB“ ”商“:{ ”ID“:1, ”名“: ”亚马逊网络服务“}, ”弹头“: ”dynamodb“, ”updatedAt“:1534242454}, ”tagKey“: ”MDW-测试“,”tagValue“:空, ”updatedAt“:1549499902},

好!我已经成功地查询信息,关于New Relic的基础架构AWS我的整合,我已经使用的接口来获取有关特定集成的附加信息。现在,我将使用GraphQL API在这些整合的一个更新指标数据轮询间隔。

实施例2:与NerdGraph修改集成配置

在GraphQL,当你与一个写操作修改数据时,它被称为突变

在这个例子中,我将建立一个突变更新AWS集成的轮询间隔。不过,首先,我将设置轮询间隔,这样当我NerdGraph改变它,我们会发现。

以下是配置选项我AWS DynamoDB集成

在New Relic的基础设施DynamoDB集成的配置选项。

如您所见,我已经将指标数据和库存数据轮询间隔设置为每5分钟一次,并且还进行了切换收集标签

现在,我将构建突变查询。

首先,我会以关键字开始突变和类似的任何GraphQL API请求,它括在一对大括号,{}

接下来,我想指定我配置云集成;所以我会添加cloudConfigureIntegration,其中有两个参数:帐户ID集成。对于帐户ID,我将使用相同的帐户ID从第一个例子,以获取有关基础设施连账户信息。第二个说法是,我想更新的集成。再次,整合是由云提供商指定的,所以在这里我想包括AWS。到目前为止,我的突变是这样的:

突变{cloudconfiguintegration (accountId:MY ACCOUNT ID integration:{aws

我想指定我更新了DynamoDB的配置,所以我会在传递一个对象dynamodb作为键和数组,其中包含我想要设置的值的对象。记住,对于我们的突变,我们想要更新metricsPollingInterval(有效值为300、900、1800和3600秒),并添加标记键(关于集成功能的元数据)。

突变的最后一部分添加了一组字段(如果请求成功)和一组字段(如果有任何错误)。

下面是完整的查询:

突变{cloudConfigureIntegration(帐户:630060个积分:{AWS:{dynamodb:[{linkedAccountId:4912 metricsPollingInterval:1800 tagKey: “MDW-测试”}]}}){{集成ID名称updatedAt ...上CloudDynamodbIntegration {metricsPollingInterval tagKey tagValueupdatedAt}} {错误消息linkedAccountId integrationSlug}}}

下面是结果,没有错误,说明DynamoDB的配置更新成功:

{ “数据”:{ “cloudConfigureIntegration”:{ “错误”:[], “集成”:[{ “ID”:177184 “metricsPollingInterval”:1800, “姓名”: “DynamoDB”, “tagKey”:“MDW-test”, “tagValue”:NULL, “updatedAt”:1551139957}]}}}

我现在可以回到New Relic的基础设施,并刷新DynamoDB配置页:

刷新New Relic基础设施中的DynamoDB配置。

我们的突变为300秒(5分钟)来改变所述度量轮询间隔为1800秒(30分钟),并进入MDW-测试的标记键值。

而已!我已经成功地使用更新一NerdGraph New Relic的基础设施一体化的配置。

Transfering NerdGraph数据到终端

那么,现在您知道了如何探索NerdGraph中可用的New Relic数据,也知道了如何创建查询和突变,但是如何将这些数据传输到代码中呢?

为了捕捉代码就绪查询和突变,选择工具在NerdGraph探险降了下来。

要复制与在范围内查询到剪贴板卷曲声明,选择复制是卷发。此代码段粘贴到终端,或者用它来填充代码中的一个HTTP请求。

如果你有工作New Relic的CLI, 选择作为复制New Relic的CLI从下拉生成一个命令行准备查询或突变。

New Relic和graphql简化了开发人员的路径

如这些示例所示,GraphQL非常灵活和轻量级,并且极大地减少了使用New Relic数据的开销。如果您想进一步挑战自己,可以在Query Builder中创建一些更复杂的查询。例如,您是否可以创建一个查询来获取所有报表实体的计数?提示:查看NerdGraph的实体搜索领域

我们即将使生活开发商尽可能容易激情。退房的资源developer.newrelic.com,并从事与其他开发人员的讨论Explorer的中心

Mark Weitzel是New Relic One的总经理。查看贴子

有兴趣为新遗迹博客写作吗?亚搏体育登入网给我们一个间距