当您将可易操作性构建到您的工作流程和流程中时,您需要能够通过API快速检索,排序和处理各种遥测。与新的遗物,你可以收集很多,但在构建用于处理数据的仪表板和应用程序时,您希望尽量减少多余的API操作。
用NerdGraph API资源管理器构建GraphQL—您可以更容易地查询您需要的数据,而不会过度抓取或抓取不足,并减少数据分析工作流程中的人工操作。
更具体地说,在新的遗物中,您可以使用书籍:
- 查询所有实体与您的帐户相关联的
- 查询、创建和更新工作负载与您的帐户相关联的
- 创建,管理和添加标记实体
- 查询分布式跟踪数据
- 获取数据当构建一个新的遗留应用程序时
- 了解上游和下游关系与你的服务
- 配置您的新Relic基础设施云集成
- 查询事件数据和自定义事件数据用nrql.
在这篇文章中,我将通过两个示例使用NerdGraph来查询关于新的遗物基础架构云集成并更新其配置值。但首先有点历史。
在新遗物中使用graphql
与通常需要从多个端点加载的典型REST api不同,GraphQL提供了一个可以管理复杂查询的单一端点,因此开发人员可以在一个请求中从多个服务获得应用程序所需的所有数据。
GraphQL是强类型的,它允许开发人员通过对GraphQL服务的查询显式声明哪些信息可用。这个声明是通过a完成的GraphQL架构。模式为开发人员提供了他们需要表达有关他们返回的数据信息的灵活性。例如,每个字段具有描述,开发人员可以用于指示数据的正确使用情况。
模式还提供了开发人员构建工具所需的API蓝图,以正确构造查询和指导正确使用任何返回数据。例如,开发人员可以使用模式来指示某个字段是否已被弃用,这样ide等工具就可以表明这一事实,并阻止使用该数据。
和“架构拼接” - 从几个基础的GraphQL APIS中创建一个架构 - 允许开发人员在所有API中提供统一的访问体验,正如我们在新遗物所做的那样:
有关GraphQL的更多信息,请参阅以下查询云集成配置数据使用的示例GraphQL查询和突变:
NerdGraph只有一个端点:https://api.newrelic.com/graphiql。这将启动(在对用户进行身份验证之后)NerdGraph API接口——一个用于运行GraphQL请求的交互式、基于浏览器的IDE。
在Nerdgraph API Explorer中,您在左侧构建并运行您的查询,结果返回右侧。
您可以单击分为字段以钻取其定义。例如,如果您进入演员,您将看到它包含用户和帐户的字段:
{actor {user {name email} accounts {id name}}}
演员下的字段从GraphQL Server传递的GrahQL模式中统一的不同下游服务中公开了数据。发出查询时,GraphQL Server会将查询拉开并调用每个服务的解析器。当查询完成(或超时或遇到错误)时,GraphQL服务器组装结果并将其返回给您。在上面的示例中,我们获取有关用户的信息和他们可以访问的所有帐户。
让我们走过我们的示例以显示GraphQL数据收集功能的全部功能。
示例1:查询基础架构云与书呆子的集成
在我的第一个示例中,我将使用nerdgraph查询关于在我的新遗物帐户中运行的AWS集成的各种数据。我将使用我收集的数据在此示例中更新下一节中的某些特定设置。
小费:如果你打算跟着我,确保你生成API键可以与New Relic的GraphQL API一起使用。事实上,您可以直接从NerdGraph生成一个。
让我们从新的遗物架构中提供的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:我::8 xxxxxxx7:角色/ NewRelicInfrastructure-Integrations-Origami”、“externalId”:“8 xxxxxxx7”、“id”:3542年,“集成”:[{" id ": 75540年,“名字”:“RDS”、“服务”:{“createdAt”:1470991744,“id”:3,“名字”:“RDS”、“提供者”:{" id ": 1、“名称”:}, "slug": "rds", "updatedAt": 1534242454}}, {"id": 14233, "name": "S3", "service": {"createdAt": 1470991745, "id": 4, "name": "S3", "provider": {"id": 1, "name": "Amazon Web Services"}, "slug": "S3", "updatedAt": 1534242454}}, {"id": 12223, "name": "Lambda", "service": {"createdAt": 1477910055, "id": 14, "name": 14: "name":“λ”、“提供者”:{" id ": 1、“名称”:“Amazon Web Services”},“鼻涕虫”:“λ”、“updatedAt”:1534242454}},{" id ": 172534年,“名字”:“DynamoDB”、“服务”:{“createdAt”:1470991758,“id”:13日,“名字”:“DynamoDB”、“提供者”:{" id ": 1、“名称”:“Amazon Web Services”},“鼻涕虫”:“DynamoDB”、“updatedAt”:1534242454 } }, } } ] } } } } }
但是如果我想要关于其中一个积分的更具体的信息呢?具体来说,我想看看我把哪些标记(用户定义的元数据)应用到特定的集成以及它的指标的轮询间隔(新的遗物对数据集成的频率如何),并且当上次更新这些设置时。
为此,我需要使用GraphQL的更细微的细节之一 -界面,它是一个抽象类型,表示其他对象类型可以实现的公共字段的集合。
所以在我原来的查询中,我将添加两个新的条款:
…on CloudDynamodbIntegration{metricsPollingInterval tagKey tagValue updatedAt}…on cloudshiftintegration {metricsPollingInterval tagKey tagValue updatedAt}
现在,如果我的查询击中了CloudDyAlamodBintogration或CloudreshiftIndocation类型的结果,它也会返回Fields MetricsPollingInterval,Tagkey,TagValue和UpdateDat。
这是我的(被截断的)查询现在的查询:
{Actor {帐户(ID:我的帐户ID){Cloud {linkedAccounts {id ofternateId name authlabel提供者{...}集成{id name service {s ...} ...在clouddynamodbintogration {metricspollinginterval tagkey tagkvalue updatedat} ..。在CloudRedshiftIntegration {metricsPollingInterval tagKey tagValue updatedAt}}}}}}}
在结果中,注意DynamoDb和Redshift配置信息包含了我在查询中使用它们的接口指定的额外字段。
{“ID”:173397,“MetricsPollingInterval”:900,“名称”:“Redshift”,“服务”:{“创造”:1497364366,“ID”:21,“名称”:“Redshift”,“提供商”:{“ID”:1,“姓名”:“亚马逊Web服务”},“SLUG”:“Redshift”,“更新”:1534242454},“Tagkey”:“MDW-Test”,“TagValue”:null,“mdw-test”:null,“mdw-test”:null,“Updatedat“:1544435410},{ID”:112183,“MetricsPollingInterval”:900,“名称”:“DynamoDB”,“服务”:{“创造”:1470991758,“ID”:13,“名称”:“DynamoDB“,”提供者“:{”ID“:1,”名称“:”Amazon Web Services“},”SLUG“:”DynamoDB“,”UpdateTAT“:1534242454},”Tagkey“:”MDW-Test“,”MDW-Test“,”tagvalue“:null,”更新“:1549499902},
好的!我已经成功地在New Relic基础设施中查询了关于我的AWS集成的信息,并且我已经使用了一个接口来获得关于特定集成的额外信息。现在,我将使用GraphQL API在其中一个集成中更新度量数据轮询间隔。
示例2:使用书呆子图修改集成配置
在GraphQL中,当您使用写操作修改数据时,它被称为a突变。
在此示例中,我将建立一个突变以更新AWS集成的轮询间隔。首先,我将设置一个轮询间隔,以便我们在使用书呆子图更改它时会注意到。
下面是my的配置选项AWS DynamoDB集成:
如您所见,我将指标数据和库存数据的轮询间隔设置为每5分钟一次,并且还进行了切换收集标签来上。
现在,我将构建突变查询。
首先,我将从关键字开始突变
,并像任何GraphQL API请求一样,将它括在一对花括号中,{}
。
接下来,我想指定我配置云集成;所以我会添加cloudConfigureIntegration
,这需要两个参数:帐户ID
和集成
。为了帐户ID
,我将使用第一个示例中的相同的帐户ID来获取有关基础结构链接帐户的信息。第二个论点是我要更新的集成。同样,集成由云提供商指定,所以我想包括AWS。到目前为止,我的突变看起来像这样:
突变{cloudconfigure inegration(AccountID:我的帐户ID集成:{AWS
我想指定我正在更新DynamoDB的配置,因此我将传入一个对象DynamoDB.
作为包含我想要设置值的对象的键和数组。请记住,对于我们的突变,我们想要更新metricsPollingInterval
(有效值为300、900、1800和3600秒),并添加tagKey(关于集成功能的元数据)。
突变的最后一部分添加了一组字段,如果我的请求成功将返回该字段,如果有任何错误将返回该字段。
这是完整的查询:
突变{cloudconfigure inegration(AccountID:630060集成:{AWS:{DynamoDB:[{linkedAccountID:4912 MetricspollingInterval:1800 Tagkey:“MDW-Test”}“)}){Integrations {id name updateDat ...在ClouddyAmodbintogration {MetricsPollingInterval Tagkey TarkkegArteupdatedat}}错误{linkedaccountid mession集成llug}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
这是结果,显示没有错误,并表明DynamoDB的配置已成功更新:
{"data": {"cloudConfigureIntegration": {"errors": [], "integrations": [{"id": 177184, "metricsPollingInterval": 1800, "name": "DynamoDB", "tagKey": "mdw-test", "tagValue": null, "updatedAt": 1551139957}]}}}
我现在可以返回到New Relic基础设施并刷新DynamoDB配置页面:
我们的变化将度量轮询间隔从300秒(5分钟)更改为1800秒(30分钟),并输入mdw-test的标记键值。
就是这样!我已经使用Nerdgraph成功更新了新的遗物基础架构集成的配置。
将NerdGraph数据传输到终端
现在,您知道了如何探索NerdGraph中可用的新Relic数据,也知道了如何创建查询和突变,但是如何将这些数据传输到代码中呢?
要捕获代码准备好的查询和更改,请选择工具在NerdGraph explorer中下拉。
将CURL语句复制到剪贴板的范围内查询,选择复制是卷发。将此代码片段粘贴到您的终端中,或使用它填充代码中的HTTP请求。
如果你正在使用New Relic CLI中,选择复制为New Relic CLI从下拉列表生成一个命令行就绪查询或突变。
New Relic和graphql为开发人员铺平了道路
正如这些示例所示,GraphQL非常灵活和轻量级,并极大地减少了处理新遗留数据的开销。如果您想进一步挑战自己,可以在Query Builder中创建一些更复杂的查询。例如,您可以创建一个查询来获取所有报表实体的计数吗?提示:查看NerdGraph的实体搜索字段。
我们热衷于让开发者的生活尽可能轻松。请在下面查看可用的资源developer.newrelic.com,并与其他开发人员一起讨论Explorer的中心。