Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Création d’un connecteur personnalisé à une source de données
Cette rubrique décrit comment connecter une source de données personnalisée à CloudWatch. Vous pouvez connecter une source de données personnalisée CloudWatch de deux manières :
-
À l'aide d'un exemple de modèle qui CloudWatch fournit. Vous pouvez utiliser l'un JavaScript ou l'autre ou Python avec ce modèle. Ces modèles incluent un exemple de code Lambda qui vous sera utile lors de la création de votre fonction Lambda. Vous pouvez ensuite modifier la fonction Lambda à partir du modèle pour vous connecter à votre source de données personnalisée.
-
Création d'un AWS Lambda fonction partant de zéro qui implémente le connecteur de source de données, la requête de données et la préparation des séries chronologiques destinées à être utilisées par CloudWatch. Cette fonction doit pré-agréger ou fusionner des points de données si nécessaire, et également aligner la période et les horodatages pour être compatible avec. CloudWatch
Table des matières
Utilisation d’un modèle
L’utilisation d’un modèle crée un exemple de fonction Lambda et peut vous aider à créer votre connecteur personnalisé plus rapidement. Ces exemples de fonctions fournissent des exemples de code pour de nombreux scénarios courants liés à la création d’un connecteur personnalisé. Vous pouvez examiner le code Lambda après avoir créé un connecteur avec un modèle, puis le modifier pour l’utiliser pour vous connecter à votre source de données.
De plus, si vous utilisez le modèle, CloudWatch prend soin de créer la politique d'autorisations Lambda et d'associer des balises de ressources à la fonction Lambda.
Pour utiliser le modèle afin de créer un connecteur vers une source de données personnalisée
Ouvrez la CloudWatch console à l'adresse https://console.aws.amazon.com/cloudwatch/
. -
Dans le panneau de navigation, sélectionnez Settings (Paramètres).
Choisissez l’onglet Sources de données de métriques.
Choisissez Create data source.
Choisissez le bouton radio Personnalisé – modèle de démarrage, puis Choisissez Suivant.
Entrez un nom pour la source de données.
Sélectionnez l’un des modèles répertoriés.
Sélectionnez Node.js ou Python.
Choisissez Create data source.
La nouvelle source personnalisée que vous venez d'ajouter n'apparaît que lorsque AWS CloudFormation stack finit de le créer. Pour vérifier la progression, vous pouvez choisir Afficher le statut de ma CloudFormation pile. Vous pouvez également choisir l’icône d’actualisation pour mettre à jour cette liste.
Lorsque votre nouvelle source de données apparaît dans cette liste, elle est prête à être testée dans la console et modifiée.
(Facultatif) Pour interroger les données de test de cette source dans la console, suivez les instructions de la rubrique Création d’un graphique de mesures à partir d’une autre source de données.
Modifiez la fonction Lambda en fonction de vos besoins.
Dans le panneau de navigation, sélectionnez Settings (Paramètres).
Choisissez l’onglet Sources de données de métriques.
Choisissez Afficher dans la console Lambda pour la source que vous souhaitez modifier.
Vous pouvez désormais modifier la fonction pour accéder à votre source de données. Pour de plus amples informations, veuillez consulter Étape 1 : créer la fonction.
Note
En utilisant le modèle, lorsque vous écrivez votre fonction Lambda, vous n’avez pas besoin de suivre les instructions contenues dans Étape 2 : créer une stratégie d’autorisations Lambda ou. Étape 3 : attacher une balise de ressource à la fonction Lambda Ces étapes ont été effectuées CloudWatch parce que vous avez utilisé le modèle.
Création d’une source de données personnalisée de toutes pièces
Suivez les étapes décrites dans cette section pour créer une fonction Lambda qui se connecte CloudWatch à une source de données.
Étape 1 : créer la fonction
Un connecteur de source de données personnalisé doit prendre en charge GetMetricData
les événements provenant de CloudWatch. Vous pouvez également éventuellement implémenter un DescribeGetMetricData
événement pour fournir aux utilisateurs de la CloudWatch console une documentation expliquant comment utiliser le connecteur. La DescribeGetMetricData
réponse peut également être utilisée pour définir les valeurs par défaut utilisées dans le générateur de requêtes CloudWatch personnalisé.
CloudWatch fournit des extraits de code sous forme d'exemples pour vous aider à démarrer. Pour plus d'informations, consultez le référentiel d'échantillons à l'adresse https://github.com/aws-samples/cloudwatch-data-source-samples
Contraintes
La réponse de Lambda doit être inférieure à 6 Mo. Si la réponse dépasse 6 Mo, la réponse
GetMetricData
marque la fonction Lambda commeInternalError
et aucune donnée n’est renvoyée.La fonction Lambda doit être exécutée dans les 10 secondes à des fins de visualisation et de tableau de bord, ou dans les 4,5 secondes pour l’utilisation des alarmes. Si le temps d’exécution dépasse ce délai, la réponse
GetMetricData
marque la fonction Lambda commeInternalError
et aucune donnée n’est renvoyée.La fonction Lambda doit envoyer sa sortie en utilisant des horodatages d’époque en secondes.
Si la fonction Lambda ne rééchantillonne pas les données mais renvoie des données qui ne correspondent pas à l'heure de début et à la durée de la période demandées par l' CloudWatch utilisateur, ces données sont ignorées par. CloudWatch Les données supplémentaires sont supprimées de toute visualisation ou alarme. Toutes les données qui ne se situent pas entre l’heure de début et de fin sont également supprimées.
Par exemple, si un utilisateur demande des données entre 10 h et 11 h avec une période de 5 minutes, les intervalles de temps « 10:00:00 à 10:04:59 » et « 10:05:00 à 10:09:59 » sont les intervalles de temps valides pour le renvoi des données. Vous devez renvoyer une série chronologique qui inclut
10:00 value1
,10:05 value2
, etc. Si la fonction renvoie10:03 valueX
, par exemple, elle est supprimée, car 10:03 ne correspond pas à l’heure de début et à la période demandées.Les requêtes multilignes ne sont pas prises en charge par les connecteurs de source de CloudWatch données. Chaque retour à la ligne est remplacé par un espace lorsque la requête est exécutée, ou lorsque vous créez une alarme ou un widget de tableau de bord avec la requête. Dans certains cas, cela peut rendre votre requête non valide.
GetMetricData événement
Charge utile de la requête
Voici un exemple de charge utile de la requête GetMetricData
envoyée en entrée à la fonction Lambda.
{ "EventType": "GetMetricData", "GetMetricDataRequest": { "StartTime": 1697060700, "EndTime": 1697061600, "Period": 300, "Arguments": ["serviceregistry_external_http_requests{host_cluster!=\"prod\"}"] } }
StartTime— L'horodatage spécifiant les premières données à renvoyer. Le type est horodatage, époque, secondes.
EndTime— L'horodatage spécifiant les dernières données à renvoyer. Le type est horodatage, époque, secondes.
Période : nombre de secondes que représente chaque agrégation des données de métriques. La valeur minimale est 60 secondes. Le type est secondes.
Arguments : tableau d’arguments à transmettre à l’expression mathématique de la métrique Lambda. Pour plus d’informations sur le passage d’arguments, veuillez consulter la rubrique Comment transmettre des arguments à votre fonction Lambda.
Charge utile de la réponse
Voici un exemple de charge utile de la réponse GetMetricData
renvoyée par la fonction Lambda.
{ "MetricDataResults": [ { "StatusCode": "Complete", "Label": "CPUUtilization", "Timestamps": [ 1697060700, 1697061000, 1697061300 ], "Values": [ 15000, 14000, 16000 ] } ] }
La charge utile de la réponse contiendra soit un champ MetricDataResults
, soit un champ Error
, mais pas les deux.
Un champ MetricDataResults
est une liste de champs de séries temporelles de type MetricDataResult
. Chacun de ces champs de série temporelle peut comprendre les champs suivants.
StatusCode— (Facultatif)
Complete
indique que tous les points de données de la plage de temps demandée ont été renvoyés.PartialData
signifie qu'un ensemble incomplet de points de données a été renvoyé. Si cet argument est omis, la valeur par défaut estComplete
.Valeurs Valides:
Complete
|InternalError
|PartialData
|Forbidden
Messages : liste facultative de messages contenant des informations supplémentaires sur les données renvoyées.
Type : tableau d'MessageDataobjets avec des
Value
chaînesCode
et.Label : étiquette lisible par l’homme associée aux données.
Type : String
Timestamps : horodatages des points de données, formatés en fonction de l’époque. Le nombre d’horodatages correspond toujours au nombre de valeurs et la valeur de
Timestamps[x]
estValues[x
].Type : tableau d’horodatage
Values : valeurs des points de données de la métrique, correspondant à
Timestamps
. Le nombre de valeurs correspond toujours au nombre d’horodatages et la valeur deTimestamps[x]
estValues[x
].Type : tableau de doubles
Pour en savoir plus sur les objets Error
, veuillez consulter les sections suivantes.
Formats de réponse aux erreurs
Vous pouvez éventuellement utiliser la réponse d’erreur pour fournir plus d’informations sur les erreurs. Nous vous recommandons de renvoyer une erreur lors de la validation du code lorsqu’une erreur de validation se produit, par exemple lorsqu’un paramètre est manquant ou de type incorrect.
Voici un exemple de réponse lorsque la fonction Lambda souhaite déclencher une exception de validation GetMetricData
.
{ "Error": { "Code": "Validation", "Value": "Invalid Prometheus cluster" } }
Voici un exemple de réponse lorsque la fonction Lambda indique qu’elle n’est pas en mesure de renvoyer des données en raison d’un problème d’accès. La réponse est traduite en une seule série chronologique avec un code d’état Forbidden
.
{ "Error": { "Code": "Forbidden", "Value": "Unable to access ..." } }
Voici un exemple de cas où la fonction Lambda déclenche une exception globale InternalError
, qui est traduite en une série temporelle unique avec un code d’état InternalError
et un message. Chaque fois qu'un code d'erreur a une valeur autre que Validation
ouForbidden
, CloudWatch suppose qu'il s'agit d'une erreur interne générique.
{ "Error": { "Code": "PrometheusClusterUnreachable", "Value": "Unable to communicate with the cluster" } }
DescribeGetMetricData événement
Charge utile de la requête
L’exemple qui suit illustre la charge utile d’une requête DescribeGetMetricData
.
{ "EventType": "DescribeGetMetricData" }
Charge utile de la réponse
L’exemple qui suit illustre la charge utile d’une réponse DescribeGetMetricData
.
{ "Description": "Data source connector", "ArgumentDefaults": [{ Value: "default value" }] }
Description : description de l’utilisation du connecteur de source de données. Cette description apparaîtra dans la CloudWatch console. Markdown est pris en charge.
Type : String
ArgumentDefaults— Le tableau facultatif des valeurs par défaut des arguments utilisés préremplit le générateur de sources de données personnalisé.
Si
[{ Value: "default value 1"}, { Value: 10}]
, est renvoyé, le générateur de requêtes de la CloudWatch console affiche deux entrées, la première avec la « valeur par défaut 1 » et la seconde avec 10.Si
ArgumentDefaults
n’est pas fourni, une seule entrée est affichée avec le type par défaut défini surString
.Type : tableau d’objets contenant Value et Type.
Error : (facultatif) un champ d’erreur peut être inclus dans n’importe quelle réponse. Vous pouvez voir des exemples dans GetMetricData événement.
Considérations importantes relatives aux CloudWatch alarmes
Si vous comptez utiliser la source de données pour définir des CloudWatch alarmes, vous devez la configurer pour qu'elle rapporte les données avec des horodatages toutes les minutes à. CloudWatch Pour plus d’informations et d’autres considérations relatives à la création d’alarmes sur des métriques provenant de sources de données connectées, veuillez consulter la rubrique Création d’une alarme basée sur une source de données connectée.
(Facultatif) Utilisation AWS Secrets Manager pour stocker les informations d'identification
Si votre fonction Lambda doit utiliser des informations d'identification pour accéder à la source de données, nous vous recommandons d'utiliser AWS Secrets Manager pour stocker ces informations d'identification au lieu de les coder en dur dans votre fonction Lambda. Pour plus d'informations sur l'utilisation AWS Secrets Manager avec Lambda, voir Utilisation AWS Secrets Manager secrets dans AWS Lambda fonctions.
(Facultatif) Connectez-vous à une source de données dans un VPC
Si votre source de données se trouve dans un cloud VPC géré par Amazon Virtual Private Cloud, vous devez configurer votre fonction Lambda pour y accéder. Pour plus d'informations, consultez Connecter le réseau sortant aux ressources d'un VPC.
Vous devrez peut-être également configurer des points de terminaison VPC de service pour accéder à des services tels que AWS Secrets Manager. Pour plus d'informations, voir Accéder à un AWS service utilisant un point de VPC terminaison d'interface.
Étape 2 : créer une stratégie d’autorisations Lambda
Vous devez utiliser create une déclaration de politique qui CloudWatch autorise l'utilisation de la fonction Lambda que vous avez créée. Vous pouvez utiliser le plugin AWS CLI ou la console Lambda pour créer la déclaration de politique.
Pour utiliser le plugin AWS CLI pour créer la déclaration de politique
Entrez la commande suivante. Remplacez
123456789012
avec votre identifiant de compte, remplacezmy-data-source-function
avec le nom de votre fonction Lambda, et remplacezMyDataSource-DataSourcePermission1234
avec une valeur unique arbitraire.aws lambda add-permission --function-name
my-data-source-function
--statement-idMyDataSource-DataSourcePermission1234
--action lambda:InvokeFunction --principal lambda.datasource.cloudwatch.amazonaws.com --source-account123456789012
Étape 3 : attacher une balise de ressource à la fonction Lambda
La CloudWatch console détermine quelles fonctions Lambda sont des connecteurs de source de données à l'aide d'une balise. Lorsque vous créez une source de données à l'aide de l'un des assistants, la balise est automatiquement appliquée par AWS CloudFormation pile qui le configure. Lorsque vous créez vous-même une source de données, vous pouvez utiliser la balise suivante pour votre fonction Lambda. Cela fait apparaître votre connecteur dans la liste déroulante des sources de données de la CloudWatch console lorsque vous interrogez des métriques.
Une étiquette avec la clé
cloudwatch:datasource
et la valeurcustom
.