本書では、 New Relic NerdGraph を使用して、 クラウド統合設定データ 、Amazon Web Services (AWS) や Microsoft Azure、Google Cloud Platform (GCP) などを照会・修正する方法を例として紹介します。 NerdGraph GraphiQL explorer を使用すると、 NRQL データ を照会することも可能です。
クラウド・インテグレーションの構成データを照会するためのこれらの例では、 GraphQL クエリとミューテーション を使用しています。
要件
NerdGraphでクラウドインテグレーションのデータを照会する前に、以下のことを確認してください。
- 指示に従い、 クラウド・インテグレーションとNew Relic を接続します。
- Created an API key.
NerdGraph GraphiQL エクスプローラーにアクセスします。
NerdGraph GraphiQL エクスプローラーにアクセスするには、以下の手順に従います。
- api.newrelic.com/graphiql にアクセスしてください。
- 以下の例のいずれかを追加します。
クエリの例
クエリとは、データを取得することだけを目的としたリクエストである(副作用はない)。NerdGraphのクエリは固定的なものではなく、必要に応じてより多くのデータを要求することも、より少ないデータを要求することも可能である。各クエリでは、スキーマでサポートされている限り、取得したいデータを正確に指定することができます。
このクエリは、インフラストラクチャ データで利用可能なすべてのプロバイダ アカウントのリストを返します。プロバイダによっては、追加のプロパティを要求できます。例えば、GCP の場合は、新しい GCP プロジェクトを New Relic にリンクする際に必要となる serviceAccountId
プロパティも要求できます。
アノニマスです。
{
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
providers {
id
name
slug
... on CloudGcpProvider {
serviceAccountId
}
}
}
}
}
}
名付けた。
query cloudProviders {
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
providers {
id
name
slug
}
}
}
}
}
このクエリは、AWS インテグレーションの特定のプロバイダーアカウントに関する情報を返します。プロパティ id
, name
, slug
が、監視可能な統合のリストとともに要求される。
{
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
provider(slug: "aws") {
id
slug
name
services {
id
slug
name
}
}
}
}
}
}
このクエリは、あるプロバイダの特定のクラウドサービスインテグレーションに関する情報を返します。この例では、統合は AWS ALB monitoring integration であり、プロバイダーは AWS である。 id
, name
, slug
, and isAllowed
のプロパティは、利用可能な設定パラメータで要求されます。
{
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
provider(slug: "aws") {
service(slug: "alb") {
id
name
slug
isEnabled
}
}
}
}
}
}
このクエリは、お客様の New Relic アカウントで有効になっているクラウドアカウントのリストを返します。(クラウドアカウントは、お客様のNew Relicアカウントと特定のプロバイダーのアカウントを関連付けて統合を行います)。同じNew Relicアカウントで複数のクラウドプロバイダーのアカウントを有効にすることができ、同じクラウドプロバイダーであっても有効にすることができます。
{
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
linkedAccounts {
id
name
createdAt
provider {
id
name
}
}
}
}
}
}
このクエリは、プロパティ name
, providerId
, および監視に有効なクラウドインテグレーションのリストを含む、リンクされたアカウントに関する情報を返します。
{
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
linkedAccount(id: <LINKED_CLOUD_ACCOUNT_ID>) {
name
provider {
id
name
}
integrations {
id
name
createdAt
updatedAt
}
}
}
}
}
}
このクエリは、すべてのプロバイダのクラウド・アカウントについて、監視されているすべての統合機能を返します。
{
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
linkedAccounts {
name
provider {
id
name
}
integrations {
id
name
service {
id
name
}
createdAt
updatedAt
}
}
}
}
}
}
このクエリは、特定のリンクされたアカウントから特定の統合に関する情報を返します。
{
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
linkedAccount(id: <LINKED_CLOUD_ACCOUNT_ID>) {
name
provider {
id
name
}
integration(id: <INTEGRATION_ID>) {
id
name
service {
id
name
}
createdAt
updatedAt
}
}
}
}
}
}
変異の例
ミューテーションとは、サーバー上にデータを作成したり更新したりするなど、副作用を意図したリクエストのことです。ミューテーションには、キーワード mutation
とミューテーションの名前が必要です。NerdGraphのミューテーションは、すべての可能なミューテーションのサブセットに制限されています。
この変異により、クラウドプロバイダーのアカウントを New Relic のアカウントにリンクさせ、1 つ以上のリンクされたアカウントを作成することができます。特定のクラウド提供者のアカウント(例えば aws
)をNew Relicアカウントにリンクさせることも、複数のクラウド提供者のアカウントを1つのNew Relicアカウントにリンクさせることもできます。
必要です。
パラメータ
< PROVIDER_ACCOUNT_NAME>
は必須であり、空にすることはできません。New Relic アカウントで一意である必要があります。その他のパラメーターは、プロバイダー(AWS、GCP、Azure)に固有のもので、これも必須です。以下のセクションでは、プロバイダのアカウントごとにどのパラメータが必要なのかを確認できます。アカウントをリンクすると、
createdAt
とupdatedAt
の値が等しくなります。mutation { cloudLinkAccount( accounts: { accountId: <NR_ACCOUNT_ID>, aws: [{ name: <PROVIDER_ACCOUNT_NAME>, <other_params> }] azure: [{ name: <PROVIDER_ACCOUNT_NAME>, <other_params> }] gcp: [{ name: <PROVIDER_ACCOUNT_NAME>, <other_params> }] } ) { linkedAccounts { id name authLabel createdAt updatedAt } } } }
この変異は、AWSプロバイダアカウントをNew Relicアカウントにリンクします。
mutation {
cloudLinkAccount(
accountId: <NR_ACCOUNT_ID>,
accounts: {
aws: [{
name: <PROVIDER_ACCOUNT_NAME>,
arn: <AWS_ROLE_ARN>
}]
}
) {
linkedAccounts {
id
name
authLabel
createdAt
updatedAt
}
}
}
}
この変異は、CloudWatch Metric Streamsを通じてデータを送信しているAWSアカウントをNew Relicアカウントにリンクします。
mutation {
cloudLinkAccount(
accountId: <NR_ACCOUNT_ID>,
accounts: {
aws: [{
name: <PROVIDER_ACCOUNT_NAME>,
arn: <AWS_ROLE_ARN>,
metricCollectionMode: PUSH
}]
}
) {
linkedAccounts {
id
name
authLabel
createdAt
updatedAt
}
}
}
}
この変異は、Microsoft Azure クラウドのサブスクリプションを New Relic アカウントにリンクします。
mutation {
cloudLinkAccount(
accountId: <NR_ACCOUNT_ID>,
accounts: {
azure: [{
name: <PROVIDER_ACCOUNT_NAME>,
applicationId: <azure_application_id>,
clientSecret: <azure_application_key>,
tenantId: <azure_tenant_id>,
subscriptionId: <azure_subscription_id>
}]
}
) {
linkedAccounts {
id
name
authLabel
createdAt
updatedAt
}
}
}
この変異は、GCPプロジェクトをNew Relicアカウントにリンクします。
mutation {
cloudLinkAccount(
accountId: <NR_ACCOUNT_ID>,
accounts: {
gcp: [{
name: <PROVIDER_ACCOUNT_NAME>,
projectId: <GCP_PROJECT_ID>
}]
}
) {
linkedAccounts {
id
name
authLabel
createdAt
updatedAt
}
}
}
この変異では、リンクされた 1 つ以上のプロバイダーアカウントの名前を変更することができます。 name
パラメータは必須で、空にすることはできず、New Relic アカウント内で一意である必要があります。
mutation {
cloudRenameAccount(
accountId: <NR_ACCOUNT_ID>,
accounts: [
{
id: <linked_cloud_account_id_1>,
name: <new_provider_account_name>
},
{
id: <linked_cloud_account_id_2>,
name: <new_provider_account_name>
}
]
) {
linkedAccounts {
id
name
}
}
}
この変異により、既存のクラウドアカウントで1つまたは複数の特定のクラウド統合のモニタリングを有効にすることができます。この変異により、New Relic はプロバイダアカウントから有効化された統合のデータを記録します。プロバイダーアカウントごとに、利用可能なサービスに合わせた異なる入力パラメータにアクセスできます。
mutation {
cloudConfigureIntegration (
accountId: <NR_ACCOUNT_ID>,
integrations: {
<provider_slug> : {
<integration_slug>: [{
linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID>,
<other_parameters>
}]
}
}
) {
integrations {
id
name
integration {
id
slug
}
... on SqsIntegration {
awsRegions
}
}
}
}
多くのプロバイダーのアカウントがリンクされている場合、多くのクラウドのアカウントで同時に同じ統合を有効にすることができます。
操作の出力には、 GraphQLフラグメント を使用して、統合に特化した設定パラメータを得ることができます。
mutation {
cloudConfigureIntegration (
accountId: <NR_ACCOUNT_ID>,
integrations: {
<provider_slug> : {
<integration_slug> : [
{ linkedAccountId: <linked_cloud_account_id_1> },
{ linkedAccountId: <linked_cloud_account_id_2> }
]
}
}
) {
integrations {
id
name
integration {
id
name
}
... on SqsIntegration {
awsRegions
}
}
}
}
複数のクラウドアカウントが連携している場合は、連携している複数のクラウドアカウントで同時に複数の統合を有効にすることもできます。
操作の出力には、 GraphQL フラグメント を使用して、インテグレーション固有の設定パラメータを求めることができます。
mutation {
cloudConfigureIntegration (
accountId: <NR_ACCOUNT_ID>,
integrations: {
<provider_slug_1>: {
<integration_slug_1>: [
{ linkedAccountId: <linked_cloud_account_id_1> }
]
<integration_slug_2>: [
{ linkedAccountId: <linked_cloud_account_id_2> }
]
},
<provider_slug_2>: {
<integration_slug_3>: [
{ linkedAccountId: <linked_cloud_account_id_3>},
{ linkedAccountId: <linked_cloud_account_id_4>}
]
}
}
) {
integrations {
id
name
service {
id
name
}
... on SqsIntegration {
awsRegions
}
}
}
}
この変異では、1つ以上のクラウド統合を修正したり、1つ以上の構成パラメータを変更したりすることもできます。各サービスには、変更可能な特定のパラメータがあります。
タイプ・リストのパラメータ(例えば、 awsRegion
)では、完全なリストを供給します。操作の出力については、 GraphQLフラグメント を使用して、統合に特化した設定パラメータを求めることができます。
mutation {
cloudConfigureIntegration (
accountId: <NR_ACCOUNT_ID>,
integrations: {
<provider_slug>: {
<integration_slug>: [{
linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID>,
metricsPollingInterval: <new_polling_interval>,
<parameter_1>: <value_1>,
<parameter_N>: <value_N>,
}]
}
}
) {
integrations {
id
name
service {
id
slug
}
... on SqsIntegration {
metricsPollingInterval,
<parameter_1>,
<parameter_N>
}
}
errors {
type
message
}
}
}
この変異により、統合を無効にして、特定のクラウド統合のデータ収集を停止することができます。
mutation {
cloudDisableIntegration (
accountId: <NR_ACCOUNT_ID>,
integrations: {
: {
: [
{ linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID> }
]
}
}
) {
disabledIntegrations {
id
name
authLabel
provider {
id
}
}
errors {
type
message
}
}
}
この変異により、クラウドプロバイダーのアカウントをNew Relicアカウントからリンク解除できるようになりました。
注意
この操作は元に戻すことはできません。ただし、再びアカウントをリンクさせることはできますが、アカウントの履歴は失われます。
mutation {
cloudUnlinkAccount (
accountId: <NR_ACCOUNT_ID>,
accounts: {
{ linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID> }
}
) {
unlinkedAccounts {
id
name
}
errors {
type
message
}
}
}
AWSとの統合を有効にする
この例では、 AWS SQS の統合を使用しており、 AWS アカウントを New Relic に接続していることを想定しています。
AWSとの連携を有効にするには
アカウントに関するデータ、特に利用可能なプロバイダや作成済みのプロバイダ・アカウントを取得するためのクエリを送信します。
{
actor {
account(id: <NR_ACCOUNT_ID>) {
cloud {
providers {
id
name
slug
}
linkedAccounts {
name
integrations {
id
name
}
}
}
}
}
}
AWSプロバイダーのアカウントをリンクします。まだリンクされていない場合や、別のAWSアカウントをリンクしたい場合に使用します。
< NR_ACCOUNT_ID>
パラメータには、New Relic のアカウント識別子を使用してください。プロバイダーアカウントの名前を
< PROVIDER_ACCOUNT_NAME>
に記入してください。AWSアカウントからデータを取得するために使用するAWSロールのARNを含めます。
mutation { cloudLinkAccount( accountId: <NR_ACCOUNT_ID>, accounts: { aws: [{ name: <PROVIDER_ACCOUNT_NAME>, arn: <AWS_ROLE_ARN> }] } ) { linkedAccounts { id name authLabel createdAt updatedAt } errors { type message } } }
< NR_ACCOUNT_ID>
パラメータにはNew RelicアカウントIDを、 < LINKED_CLOUD_ACCOUNT_ID>
パラメータ値にはプロバイダーアカウントのIDを使用します。
mutation {
cloudConfigureIntegration (
accountId: <NR_ACCOUNT_ID>,
integrations: {
aws: {
sqs: [
{ linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID> }
]
}
}
) {
integrations {
id
name
service {
id
name
}
}
errors {
type
message
}
}
}
同じプロバイダーアカウントで複数のアカウントを持っている場合、複数のプロバイダーアカウントで同じ統合を同時に有効にすることができます。 < NR_ACCOUNT_ID>
パラメータに自分のNew RelicアカウントIDを、 < LINKED_CLOUD_ACCOUNT_ID_n>
パラメータ値にプロバイダアカウントのIDを使用します。
mutation {
cloudConfigureIntegration (
accountId: <NR_ACCOUNT_ID>,
integrations: {
aws: {
sqs: [
{ linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID_1> },
{ linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID_2>, configuration_param_1: value_1, configuration_param_2: value_2 }
]
}
}
}) {
integrations {
id
name
service {
id
name
}
}
errors {
type
message
}
}
}
AWS統合のポーリング間隔を変更する
この例では、 AWS SQS 統合を使っており、 AWS アカウントを New Relic に接続していることを想定しています。AWS統合のポーリング間隔を変更するには。
AWS SQS統合のポーリング間隔を更新するには、 < NR_ACCOUNT_ID>
パラメータにNew RelicアカウントID、 < LINKED_ACCOUNT_ID>
パラメータ値にリンク先プロバイダーアカウントの id
を使用します。
mutation {
cloudConfigureIntegration(
accountId: <NR_ACCOUNT_ID>,
integrations: {
aws : {
sqs: [
{ linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID>, metricsPollingInterval: 300 }
]
}
}
) {
integrations {
id
name
service {
id
slug
}
... on SqsIntegration {
metricsPollingInterval
}
}
errors {
type
message
}
}
}
AWSとの連携を無効にする
この例では、 AWS SQS 統合を使っており、 AWS アカウントを New Relic に接続していることを想定しています。AWS統合を無効化するには
New Relic アカウントの識別子を < NR_ACCOUNT_ID>
パラメータに、リンクされたクラウドのアカウントの ID を < LINKED_ACCOUNT_ID>
パラメータの値に使用します。
mutation {
cloudDisableIntegration (
accountId: <NR_ACCOUNT_ID>,
integrations: {
aws: {
sqs: [
{ linkedAccountId: <LINKED_CLOUD_ACCOUNT_ID> }
]
}
}
) {
disabledIntegrations {
id
accountId
name
}
errors {
type
message
}
}
}