Terraform est un outil logiciel d'infrastructure en tant que code populaire développé par HashiCorp. Vous l'utilisez pour provisionner toutes sortes d' infrastructure et de services, y compris New Relic et les alertes. Dans ce guide, vous apprendrez à configurer New Relic avec Terraform, mais vous pouvez consulter la documentation du fournisseur New Relic Terraform pour savoir comment configurer d'autres ressources New Relic.
Conseil
Simplifiez votre workflow en intégrant la documentation Terraform directement dans votre IDE avec l'extension IDE CodeStream de New Relic. Ajoutez des modèles pour n’importe quel type de ressource New Relic en un seul clic.
Installez CodeStream pour VS Code, Visual Studio ou tout autre IDE JetBrains, puis recherchez l’icône de clé en haut du volet CodeStream.
Vous commencerez par fournir une règle d'alerte, quatre conditions d'alerte et un canal de notification. Les quatre conditions d'alerte sont basées sur les quatre signaux dorés de monitoring introduits dans le livre Site Reliability Engineering de Google:
- Latency: Le temps nécessaire à votre application pour traiter une demande.
- Traffic: Le nombre de requests que votre système reçoit.
- Errors: Le taux de requests qui échouent.
- Saturation: La pression sur les ressources pour répondre aux exigences de votre application.
Avant de commencer
Pour utiliser ce guide, vous devez avoir des connaissances de base sur New Relic et Terraform. Si vous n'avez pas encore déployé d'agent open source New Relic, installez New Relic pour votre application. Installez également la CLI Terraform.
Bootstrap Terraform et le fournisseur New Relic
Commencez par initialiser un répertoire de travail et créer un fichier de configuration Terraform :
$mkdir terraform-project && cd terraform-project$touch main.tf
Ensuite, demandez à Terraform d’installer et d’utiliser le fournisseur New Relic, en définissant les blocs terraform
et required_providers
dans main.tf:
terraform { # Require Terraform version 1.0 (recommended) required_version = "~> 1.0"
# Require the latest 2.x version of the New Relic provider required_providers { newrelic = { source = "newrelic/newrelic" } }}
Dans ce bloc de code, vous définissez la version requise de Terraform sur 1.0 et définissez le fournisseur New Relic sur la dernière version 2.x. L'utilisation des contraintes de version adaptées à votre configuration offrira une meilleure stabilité à vos exécutions Terraform.
Maintenant que vous avez défini vos versions de fournisseur Terraform et New Relic, vous devez configurer le fournisseur New Relic.
Configurer le fournisseur New Relic
Avec terraform
entièrement défini, configurez New Relic provider
avec les éléments suivants :
Votre New Relic . La plupart des clés utilisateur commencent par le préfixe
NRAK-
.Votre région New Relic. Votre région est
US
si votre URL New Relic estone.newrelic.com
etEU
si votre URL estone.eu.newrelic.com
.Dans main.tf, définissez ces valeurs sur le fournisseur :
provider "newrelic" {account_id = 12345 # Your New Relic account IDapi_key = "NRAK-***" # Your New Relic user keyregion = "US" # US or EU (defaults to US)}En définissant ces valeurs sur le fournisseur New Relic, vous configurez ce fournisseur pour apporter des modifications au nom de votre compte via les API New Relic.
Conseil
Vous pouvez également configurer le fournisseur New Relic à l’aide de variables d’environnement. Il s’agit d’un moyen utile de définir des valeurs par défaut pour la configuration de votre fournisseur.
Pour plus d'informations sur la configuration du fournisseur New Relic, n'hésitez pas à consulter notre documentation officielle du fournisseur.
Une fois votre fournisseur New Relic configuré, initialisez Terraform :
bash$terraform initUne fois que Terraform a terminé d'installer et d'enregistrer le fournisseur New Relic, vous recevrez un message de réussite et quelques étapes pratiques, telles que l'exécution de
terraform plan
. Cependant, avant de pouvoir exécuterterraform plan
, vous devez créer vos ressources.
Créer une règle d'alerte New Relic avec les alertes signaux dorés
Avec le fournisseur New Relic configuré et initialisé, vous pouvez définir une stratégie d'alerte pour votre application.
Étant donné que vous ciblez une application spécifique, utilisez un newrelic_entity
pour récupérer les informations de l'application à partir de New Relic et nous permettre de référencer ces données ailleurs dans la configuration :
data "newrelic_entity" "example_app" { name = "Your App Name" # Must be an exact match to your application name in New Relic domain = "APM" # or BROWSER, INFRA, MOBILE, SYNTH, depending on your entity's domain type = "APPLICATION"}
Ensuite, créez un newrelic_alert_policy
. Donnez à la politique un nom dynamique basé sur le nom de votre application. Cela permet de préciser la portée de la politique :
resource "newrelic_alert_policy" "golden_signal_policy" { name = "Golden Signals - ${data.newrelic_entity.example_app.name}"}
À ce stade, vous devriez pouvoir tester votre configuration avec un essai à sec :
$terraform plan
Vous devriez voir une sortie qui affiche le plan d’exécution de Terraform. Le plan contient les actions que Terraform exécute lorsque vous exécutez terraform apply
:
# Example output------------------------------------------------------------------------An execution plan has been generated and is shown below.Resource actions are indicated with the following symbols: + createTerraform will perform the following actions: # newrelic_alert_policy.golden_signal_policy will be created + resource "newrelic_alert_policy" "golden_signal_policy" { + account_id = (known after apply) + id = (known after apply) + incident_preference = "PER_POLICY" + name = "Golden Signals - Your App Name" }Plan: 1 to add, 0 to change, 0 to destroy.------------------------------------------------------------------------
Dans ce cas, le plan vous montre que Terraform créera une nouvelle règle d'alerte lorsque vous exécuterez terraform apply
. Après avoir vérifié les détails, exécutez le plan pour provisionner la ressource règle d'alerte dans votre compte New Relic :
$terraform apply
Chaque fois que vous modifiez apply
, Terraform vous demande de confirmer les actions que vous lui avez demandé d'exécuter. Tapez « oui ».
Pendant son exécution, Terraform envoie le log à votre console :
# Example output of `terraform apply`newrelic_alert_policy.golden_signal_policy: Creating...newrelic_alert_policy.golden_signal_policy: Creation complete after 1s [id=111222333]Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Connectez-vous à New Relic et accédez à Alert Policies pour confirmer que Terraform a créé votre nouvelle politique.
Au fur et à mesure que vous avancez dans les étapes suivantes de création d'une condition d'alerte, vous pouvez exécuter terraform apply
après avoir configuré chaque ressource. Actualisez votre page Web de règle d'alerte pour voir les nouvelles ressources.
Mise à disposition de la condition d'alerte basée sur les quatre signaux dorés
Ensuite, ajoutez une condition d'alerte pour votre application en fonction des quatre signaux dorés : latence, trafic, erreurs et saturation. Appliquez ces conditions d’alerte à la règle d’alerte que vous avez créée à l’étape précédente.
Latency
La plupart des gens souhaitent éviter les temps de réponse lents. Vous pouvez créer un newrelic_alert_condition
qui se déclenche si le temps de réponse global de votre application dépasse cinq secondes pendant cinq minutes :
# Response timeresource "newrelic_alert_condition" "response_time_web" { policy_id = newrelic_alert_policy.golden_signal_policy.id name = "High Response Time (Web) - ${data.newrelic_entity.example_app.name}" type = "apm_app_metric" entities = [data.newrelic_entity.example_app.application_id] metric = "response_time_web" runbook_url = "https://www.example.com" condition_scope = "application"
term { duration = 5 operator = "above" priority = "critical" threshold = "5" time_function = "all" }}
Notez que vous liez cette condition d'alerte à la règle d'alerte précédemment configurée avec policy_id
.
Le newrelic_alert_condition
est obsolète et vous souhaiterez utiliser les alertes NRQL à l'avenir. Vous pouvez utiliser la configuration suivante pour créer une alerte NRQL qui exécute la même fonction que ci-dessus :
# Response time - Create Alert Conditionresource "newrelic_nrql_alert_condition" "response_time_alert" { policy_id = newrelic_alert_policy.golden_signal_policy.id type = "static" name = "Response Time - ${data.newrelic_entity.example_app.name}" description = "High Transaction Response Time" runbook_url = "https://www.example.com" enabled = true violation_time_limit_seconds = 3600
nrql { query = "SELECT filter(average(newrelic.timeslice.value), WHERE metricTimesliceName = 'HttpDispatcher') OR 0 FROM Metric WHERE appId IN (${data.newrelic_entity.example_app.application_id}) AND metricTimesliceName IN ('HttpDispatcher', 'Agent/MetricsReported/count')" }
critical { operator = "above" threshold = 5 threshold_duration = 300 threshold_occurrences = "ALL" }}
Traffic
Traffic représente la quantité de demande placée sur votre système à un moment donné. le débit est une métrique qui mesure la quantité de trafic vers votre application. Créez un newrelic_alert_condition
qui se déclenche si le taux de réponse global de votre application tombe en dessous de cinq requests par minute pendant cinq minutes :
# Low throughputresource "newrelic_alert_condition" "throughput_web" { policy_id = newrelic_alert_policy.golden_signal_policy.id name = "Low Throughput (Web)" type = "apm_app_metric" entities = [data.newrelic_entity.example_app.application_id] metric = "throughput_web" condition_scope = "application"
# Define a critical alert threshold that will # trigger after 5 minutes below 5 requests per minute. term { priority = "critical" duration = 5 operator = "below" threshold = "5" time_function = "all" }}
Ce type d'alerte est utile lorsque vous vous attendez à une base de référence de trafic constante tout au long de la journée : une baisse du trafic peut indiquer un problème.
Errors
Si le taux d'erreur de votre application augmente, vous devez le savoir. Créez un newrelic_alert_condition
qui se déclenche si le taux d'erreur de votre application dépasse 5 % pendant cinq minutes :
# Error percentageresource "newrelic_alert_condition" "error_percentage" { policy_id = newrelic_alert_policy.golden_signal_policy.id name = "High Error Percentage" type = "apm_app_metric" entities = [data.newrelic_entity.example_app.application_id] metric = "error_percentage" runbook_url = "https://www.example.com" condition_scope = "application"
# Define a critical alert threshold that will trigger after 5 minutes above a 5% error rate. term { duration = 5 operator = "above" threshold = "5" time_function = "all" }}
Saturation
La saturation représente le degré de « remplissage » de votre service et peut prendre de nombreuses formes, telles que le temps CPU, l'allocation de mémoire ou la profondeur de la file d'attente. Dans cet exemple, supposons que vous disposez déjà d'un agent New Relic Infrastructure installé sur les hôtes servant votre application et que vous souhaitez configurer une alerte lorsque l'utilisation du processeur dépasse un certain seuil :
# High CPU usageresource "newrelic_infra_alert_condition" "high_cpu" { policy_id = newrelic_alert_policy.golden_signal_policy.id name = "High CPU usage" type = "infra_metric" event = "SystemSample" select = "cpuPercent" comparison = "above" runbook_url = "https://www.example.com" where = "(`applicationId` = '${data.newrelic_entity.example_app.application_id}')"
# Define a critical alert threshold that will trigger after 5 minutes above 90% CPU utilization. critical { duration = 5 value = 90 time_function = "all" }}
Pour l'alerte d'infrastructure, vous avez créé un newrelic_infra_alert_condition
qui se déclenche si l'utilisation globale du processeur sur ces hôtes dépasse 90 % pendant cinq minutes.
Soyez averti lorsqu'une alerte se déclenche
Maintenant que vous avez configuré certaines conditions d'alerte importantes, ajoutez une destination notification et un canal de notification à votre règle d'alerte pour garantir que les bonnes personnes soient averties lorsqu'une alerte se déclenche. Pour ce faire, utilisez un newrelic_notification_destination
et un newrelic_notification_channel
.
Pour commencer, créez une destination de notification par e-mail pour configurer votre liste de destinataires, qui peut être une personne spécifique ou une équipe. Ceci sera utilisé lors de la création d'un canal de notification :
resource "newrelic_notification_destination" "team_email_destination" { name = "email-example" type = "EMAIL"
property { key = "email" value = "team.member1@email.com,team.member2@email.com,team.member3@email.com" }}
Si vous souhaitez spécifier plusieurs adresses e-mail, utilisez une liste d'adresses e-mail délimitée par des virgules.
Ensuite, créez un modèle de canal de notification par e-mail pour envoyer une notification d'alerte à votre e-mail. Associez le canal à l'ID de destination :
resource "newrelic_notification_channel" "team_email_channel" { name = "email-example" type = "EMAIL" destination_id = newrelic_notification_destination.team_email_destination.id product = "IINT"
property { key = "subject" value = "New Subject" }}
Enfin, et surtout, pour appliquer le canal de notification à votre règle d'alerte, créez un newrelic_workflow
:
resource "newrelic_workflow" "team_workflow" { name = "workflow-example" enrichments_enabled = true destinations_enabled = true workflow_enabled = true muting_rules_handling = "NOTIFY_ALL_ISSUES"
enrichments { nrql { name = "Log" configurations { query = "SELECT count(*) FROM Metric" } } }
issues_filter { name = "filter-example" type = "FILTER"
predicate { attribute = "accumulations.sources" operator = "EXACTLY_MATCHES" values = [ "newrelic" ] } }
destination { channel_id = newrelic_notification_channel.team_email_channel.id }}
Un newrelic_workflow
relie le canal de notification que vous venez de créer à vos alertes.
Pour finaliser votre configuration de notification, exécutez terraform apply
une dernière fois pour vous assurer que toutes vos ressources configurées sont à jour.
Être averti lorsqu'une alerte se déclenche (obsolète)
Important
Les canaux d'alerte sont obsolètes et ne seront pas pris en charge dans les versions futures.
Maintenant que vous avez configuré certaines conditions d'alerte importantes, ajoutez un canal de notification à votre règle d'alerte pour garantir que les bonnes personnes soient averties lorsqu'une alerte se déclenche. Pour ce faire, utilisez un newrelic_alert_channel
.
Pour commencer, créez un canal de notification par e-mail pour envoyer une notification d'alerte à votre e-mail. Utilisez ceci lorsque vous souhaitez avertir une personne ou une équipe spécifique lorsque des alertes sont déclenchées :
resource "newrelic_alert_channel" "team_email" { name = "example" type = "email"
config { recipients = "yourawesometeam@example.com" include_json_attachment = "1" }}
Si vous souhaitez spécifier plusieurs recipients
, utilisez une liste d'adresses e-mail délimitée par des virgules.
Enfin, et surtout, pour appliquer le canal de notification à votre règle d'alerte, créez un newrelic_alert_policy_channel
:
resource "newrelic_alert_policy_channel" "golden_signals" { policy_id = newrelic_alert_policy.golden_signal_policy.id channel_ids = [newrelic_alert_channel.team_email.id]}
Un newrelic_alert_policy_channel
relie le canal de notification que vous venez de créer à votre règle d'alerte.
Pour finaliser configuration de vos alertes signaux dorés, exécutez terraform apply
une dernière fois pour vous assurer que toutes vos ressources configurées sont à jour.
Crédit supplémentaire
new_relic_alert_channel
prend en charge plusieurs types de canaux de notification, notamment le courrier électronique, Slack et PagerDuty. Donc, si vous souhaitez explorer cela davantage, essayez de créer un canal d'alerte pour un deuxième type de canal, tel que Slack :
# Slack notification channelresource "newrelic_alert_channel" "slack_notification" { name = "slack-example" type = "slack"
config { # Use the URL provided in your New Relic Slack integration url = "https://hooks.slack.com/services/XXXXXXX/XXXXXXX/XXXXXXXXXX" channel = "your-slack-channel-for-alerts" }}
Avant d' apply
cette modification, vous devez ajouter l' application Slack New Relic à votre compte Slack et sélectionner un canal Slack pour envoyer la notification. Avec ce nouveau canal d'alerte, les alertes déclenchées envoient une notification au canal Slack de votre choix.
Conclusion
À mesure que votre équipe évalue le système d’alerte que vous avez mis en place, vous constaterez que vous devrez peut-être modifier les valeurs de configuration, telles que le seuil et la durée de l’alerte. Si vous gérez votre projet Terraform dans un référentiel distant, vous pouvez soumettre une demande de tirage afin que votre équipe puisse examiner ces modifications parallèlement au reste de vos contributions au code.
Conseil
Vous pouvez également envisager d’automatiser ce processus dans votre pipeline CI/CD. Utilisez le guide des pratiques recommandées de Terraform pour en savoir plus sur leur workflow recommandé et sur la manière de faire évoluer vos pratiques de provisionnement.