Terraformを使用したNew Relic Agent Controlは、大規模なエージェントのフリートを管理するための強力で宣言的なソリューションを提供します。TerraformとAgent Controlを併用することで、特に複数のKubernetesクラスタを扱う場合に、インフラストラクチャ全体にNew Relicの計装をデプロイするための、一貫性があり、反復可能で、スケーラブルなアプローチを確保できます。
前提条件
始める前に、次のものがあることを確認してください。
必要なツール:
- マシンにTerraformがインストールされています。
- Helm 3がマシンにインストールされています。インストール手順については、 Helmのインストール」を参照してください。
- インストレーションを機能させるために、Terraform 設定スクリプトにTerraform Helm Providerが含まれています。
New Relic 認証情報:
- New Relicライセンスキー: New Relicアカウントにテレメトリーを報告するには、 New Relicライセンスキーが必要です。
- New Relic ユーザー キー:
clientIDキーとシークレットをまだ取得していない場合は、New Relic ユーザー キーが必要になります。
設定詳細:
- New Relic組織 ID: New Relic
OrgIdは、クライアント ID キーとシークレットを取得する組織を識別します。 - ユーザー権限:システムIDを作成するには、ユーザーに適切な権限が必要です。これには通常、認証ドメイン管理者またはNew Relic Controlロールが必要です。
- Kubernetesクラスタ名: Kubernetesクラスタの名前は、インストールプロセス中に参照されるため、準備しておきます。
- New Relic組織 ID: New Relic
ヒント
Terraformで新しいクラスタをセットアップする際は、Agent Controlのインストレーション時に必ず同じクラスタ名を使用してください。
Kubernetesの互換性
このソリューションと互換性のある Kubernetes バージョンを確認するには、概要の互換性セクションを参照してください。
インストール
clientIdとclientSecretがない場合は、次のNerdGraph API呼び出しを使用して生成します。 これにはNew Relicユーザー キーと組織 ID が必要です。
$curl -X POST \> https://api.newrelic.com/graphql \> -H 'Content-Type: application/json' \> -H 'x-api-key: [INSERT_USER_API_KEY]' \> --data-raw '{"query": "mutation SICreate { systemIdentityCreate(name: \"User Key for Agent Control\" organizationId: \"[INSERT_YOUR_ORG_ID]\") { clientId clientSecret } }"}' \> --compressedコマンドでは、プレースホルダーの値をorganizationIdとユーザー キーに置き換えます。これにより、設定ファイルで使用する必要な資格情報が返されます。
ステップ1: プロジェクトディレクトリを作成する
プロジェクト用のディレクトリを作成し、その中にmain.tfファイルを配置します。ここで、Terraform リソースを定義します。Helm プロバイダーが Terraform ファイルに追加されていることを確認します。
ステップ2: HelmリリースでTerraformを構成する
Agent ControlにNew Relicのチャートを使用するHelmリリースで Terraform スクリプトを構成します。 次の例は基本的な設定を示しています。
provider "helm" { kubernetes { config_paths = [ "~/.kube/config" ] }}
resource "helm_release" "newrelic" { name = "agent-control" repository = "https://newrelic.github.io/helm-charts/" chart = "agent-control" namespace = "newrelic" create_namespace = "true"
values = [ file("./values-newrelic.yaml") ]}Terraform スクリプトはvalues-newrelic.yamlファイルを参照することに注意してください。これは、New RelicAgent Control の設定に使用される 設定ファイルです。Agent ControlTerraform スクリプトと同じディレクトリに置く必要はありません。helm_releaseリソースの values 属性内のfile()関数に正しいパスを指定することで、任意の場所から参照できます。
または、 values-newrelic.yamlファイルを Terraform プロジェクト ディレクトリに直接配置すると、 main.tfスクリプトによって自動的に参照されます。
追加の設定が含まれていない基本的なvalues-newrelic.yamlファイルの例を次に示します。
global: cluster: [YOUR_CLUSTER_NAME] licenseKey: [YOUR_INGEST_LICENSE_KEY]
agentControlDeployment: chartValues: systemIdentity: organizationId: [ORG_ID] parentIdentity: clientId: [YOUR_IDENTITY_CLIENT_ID] clientSecret: [YOUR_IDENTITY_CLIENT_SECRET] config: fleet_control: # optional fleet_id: [YOUR_FLEET_ENTITY_GUID] log: level: trace利用可能なすべての構成設定を確認するには、 values-newrelic.yamlを参照してください。
ステップ3: Terraformコマンドを実行する
Terraform を初期化し、計画を確認して、変更を適用します。
$# Initialize Terraform$terraform init$# Review the changes before applying$terraform plan$# Apply the changes to your cluster$terraform applyステップ 5: インストレーションを確認する
Agent Controlと設定されたエージェントがそれぞれのネームスペースで正しく実行されていることを確認してください。
$# Check Agent Control pods$kubectl get pods -n newrelic$# Check pods in the agent namespace, e.g., 'newrelic-agents'$kubectl get pods -n newrelic-agents構成
values-newrelic.yamlファイルでは、複数の監視エージェントを展開するようにAgent Controlを構成できます。 以下に、いくつかのエージェントのデプロイメントを示す例を示します。
- インフラストラクチャ: New Relicのインフラストラクチャエージェント
- ログ: Fluent Bitエージェント
- OpenTelemetry: OpenTelemetry Collector の New Relic ディストリビューション
- ゲートウェイ: New Relic Pipeline Controlゲートウェイエージェント
agentControlDeployment: chartValues: systemIdentity: organizationId: "****" parentIdentity: clientId: [YOUR_IDENTITY_CLIENT_ID] clientSecret: [YOUR_IDENTITY_CLIENT_SECRET] config: agents: infrastructure: agent_type: newrelic/com.newrelic.infrastructure:0.1.0 logs: agent_type: newrelic/io.fluentbit:0.1.0 agent-operator: agent_type: com.newrelic.k8s_agent_operator:0.1.0 open-telemetry: agent_type: newrelic/com.newrelic.opentelemetry.collector:0.1.0 gateway: agent_type: newrelic/com.newrelic.pipeline_control_gateway:0.1.0 agentsConfig: infrastructure: chart_version: "*" chart_values: newrelic-infrastructure: enableProcessMetrics: true logs: # Ref: `https://github.com/newrelic/helm-charts/tree/master/charts/newrelic-logging` # Recommended: check and define an explicit chart version (latest stable) chart_version: "*" chart_values: newrelic-logging: sendMetrics: true agent-operator: chart_version: "*" open-telemetry: # Ref: `https://github.com/newrelic/helm-charts/blob/master/charts/nr-k8s-otel-collector/values.yaml` # Recommended: check and define an explicit chart version (latest stable) chart_version: "*" chart_values: nr-k8s-otel-collector: receivers.filelog.enabled: false gateway: chart_version: "*" chart_values: gateway: autoscaling: minReplicas: 2 maxReplicas: 10 targetCPUUtilizationPercentage: 70重要
重要:本番環境では、ワイルドカード ( * ) の代わりに、固定された特定のchart_versionを使用することを強くお勧めします。 これにより、一貫性があり予測可能な更新が保証され、予期しない動作や重大な変更を防ぐことができます。
アンインストール
重要
Terraform 設定からHelmリリース リソースを削除することは破壊的なアクションです。 この変更後にterraform apply実行すると、Terraform によってチャートがアンインストールされ、関連するすべてのリソースが破棄されるため、データが失われる可能性があります。続行する前に、環境に及ぼす潜在的な影響を十分に理解していることを確認してください。
- 影響を受ける可能性のあるすべての依存関係とサービスを確認します。
- リリースにリンクされている永続的なデータや設定をバックアップすることを検討してください。
- このリリースを削除することが必要であり、インフラストラクチャ管理戦略に適合していることを確認します。インフラストラクチャに大幅な変更を加えるときは常に注意を払い、問題が発生した場合に備えて適切なロールバック手順が確立されていることを確認してください。
Agent Controlをアンインストールするには:
main.tfファイルからnewrelic_agent_controlのhelm_releaseリソース ブロックを削除します。- 変更を確認するには
terraform plan実行します。計画の出力を慎重に調べて、意図したリソースのみが削除対象としてマークされていることを確認します。 terraform applyを実行し、実行を確認してリリースをアンインストールします。これにより、計画された変更が実装され、指定された Helm リリースが環境から実質的に削除されます。
アンインストール プロセスを完了するためのプロンプトが表示されたら、実行を確認します。