使用New Relic的NerdGraph来获取APM的事务信息
首先
目前在执行NRQL时,我们曾经使用”Insights API”作为应用程序,但现在已经过时。
根据文件中的内容,目前建议使用“NerdGraph”。
请使用NerdGraph来查询New Relic数据,这是目前优先的方式,本API不再推荐使用。引用:https://docs.newrelic.com/jp/docs/apis/insights-apis/query-insights-event-data-api/
为了将其转换成使用NerdGraph的形式,本次总结了关于使用该NerdGraph执行NRQL的调查。
NerdGraph是什么
用于浏览New Relic数据和配置各种功能的GraphQL格式的API。
请参考以下链接:https://docs.newrelic.com/jp/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/
使用 NerdGraph 可以做的事情
- 执行从NRDB中获取信息的查询。进行New Relic各功能的设置(账户设置、警报、仪表板等)。
在NerdGraph中无法导入事件数据。请使用另一个API(用于数据摄取的API)。
参考链接:https://docs.newrelic.com/jp/docs/apis/intro-apis/introduction-new-relic-apis/#data-type-apis
本次我们发送了用于获取数据的NRQL执行请求。
查询
准备API密钥
在NerdGraph的认证过程中,会使用用户API密钥。请事先准备好这个API密钥。
https://docs.newrelic.com/jp/docs/apis/intro-apis/new-relic-api-keys/#user-api-key
请点击以上链接获取关于新雷克 API 密钥的详细信息。
本次的NRQL查询语句
本次, 我们将执行以下的NRQL语句作为获取APM事务信息的查询。
SELECT * FROM Transaction
请使用GraphiQL资源管理器执行查询。
可以利用已经准备好的GraphiQL浏览器探索器,在浏览器上执行。
https://api.newrelic.com/graphiql
查询
{
actor {
account(id: xxxxxxx) {
nrql(query: "SELECT * FROM Transaction") {
results
}
}
}
}
请参考以下链接: https://docs.newrelic.com/jp/docs/apis/nerdgraph/examples/nerdgraph-nrql-tutorial/
通过参考NerdGraph的每个字段信息和文档,可以轻松验证查询,因此可以创建查询。
参考画面 – : 画面供参考
使用cURL执行查询
向 https://api.newrelic.com/graphql 发送一个POST请求。
curl https://api.newrelic.com/graphql \
-H 'Content-Type: application/json' \
-H 'API-Key: NRAK-xxxx' \
--data-binary '{"query": "{\n actor {\n account(id: xxxxxxx) {\n nrql(query: \"SELECT * FROM Transaction\") {\n results\n }\n }\n }\n}\n"}'
指定API密钥和帐户ID。
用言語を使ってデータベースからデータを取得する。
※ 使用Python 3.8版本
使用 GraphQL 的客户端模块 gql
pip install gql==2.0.0
请用中文翻译以下内容,只需要一种选项: “コード”
from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport
api_key = "XXXX" # your nr user api key
nr_id = "xxxxxxx" # your nr account id
query_text = "SELECT * FROM Transaction"
url = "https://api.newrelic.com/graphql"
headers = {
"API-Key": api_key,
"Content-type": "application/json",
}
transport = RequestsHTTPTransport(url=url, headers=headers)
client = Client(transport=transport, fetch_schema_from_transport=True)
query = gql(
"""
{
actor {
account(id: %s) {
nrql(query: "%s") {
results
}
}
}
}
""" % (nr_id, query_text)
)
result = client.execute(query)
query_results = result["actor"]["account"]["nrql"]["results"]
print(query_results)
指定API密钥和账户ID。
执行
python app.py
总结
目前,推荐使用基于GraphQL的NerdGraph来访问NewRelic上的数据。由于其采用GraphQL格式,因此可以使用各种语言的GraphQL客户端发起请求。
这次主要关注了NRQL的执行,但还有很多其他用途,比如创建仪表盘和警报条件,生成嵌入URL等,NerdGraph为此提供了许多教程文档,我想继续利用它们。