10.12. Transférer les journaux vers Amazon CloudWatch
Vous pouvez transmettre les journaux à Amazon CloudWatch, un service de surveillance et de stockage de journaux hébergé par Amazon Web Services (AWS). Vous pouvez transmettre les journaux à CloudWatch en plus ou à la place du magasin de journaux par défaut.
Pour configurer la transmission des journaux à CloudWatch, vous devez créer une ressource personnalisée (CR) ClusterLogForwarder avec une sortie pour CloudWatch et un pipeline qui utilise la sortie.
Procédure
Créez un fichier YAML
Secretqui utilise les champsaws_access_key_idetaws_secret_access_keypour spécifier vos informations d'identification AWS encodées en base64. Par exemple :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez le secret. Par exemple :
oc apply -f cw-secret.yaml
$ oc apply -f cw-secret.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Créez ou modifiez un fichier YAML qui définit l'objet
ClusterLogForwarderCR. Dans le fichier, indiquez le nom du secret. Par exemple :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le nom du CR
ClusterLogForwarderdoit êtreinstance. - 2
- L'espace de noms pour le CR
ClusterLogForwarderdoit êtreopenshift-logging. - 3
- Spécifiez un nom pour la sortie.
- 4
- Spécifiez le type de
cloudwatch. - 5
- Facultatif : Indiquez comment regrouper les journaux :
-
logTypecrée des groupes de journaux pour chaque type de journal -
namespaceNamecrée un groupe de journaux pour chaque espace de noms d'applications. Il crée également des groupes de journaux distincts pour les journaux d'infrastructure et d'audit. -
namespaceUUIDcrée un nouveau groupe de journaux pour chaque UUID d'espace de noms d'applications. Il crée également des groupes de journaux distincts pour les journaux d'infrastructure et d'audit.
-
- 6
- Facultatif : Spécifiez une chaîne de caractères pour remplacer le préfixe par défaut
infrastructureNamedans les noms des groupes de journaux. - 7
- Spécifiez la région AWS.
- 8
- Indiquez le nom du secret qui contient vos informations d'identification AWS.
- 9
- Facultatif : Spécifiez un nom pour le pipeline.
- 10
- Spécifiez les types de journaux à transférer en utilisant le pipeline :
application,infrastructureouaudit. - 11
- Spécifiez le nom de la sortie à utiliser lors du transfert des journaux avec ce pipeline.
Créer l'objet CR :
oc create -f <nom-de-fichier>.yaml
oc create -f <nom-de-fichier>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Exemple : Utilisation de ClusterLogForwarder avec Amazon CloudWatch
Vous voyez ici un exemple de ressource personnalisée (CR) ClusterLogForwarder et les données de journal qu'elle envoie à Amazon CloudWatch.
Supposons que vous exécutiez un cluster OpenShift Container Platform nommé mycluster. La commande suivante renvoie l'adresse infrastructureName du cluster, que vous utiliserez pour composer des commandes aws par la suite :
oc get Infrastructure/cluster -ojson | jq .status.infrastructureName
$ oc get Infrastructure/cluster -ojson | jq .status.infrastructureName
"mycluster-7977k"
Pour générer les données de journalisation de cet exemple, vous exécutez un module busybox dans un espace de noms appelé app. Le module busybox écrit un message sur la sortie standard (stdout) toutes les trois secondes :
Vous pouvez consulter l'UUID de l'espace de noms app dans lequel s'exécute le pod busybox:
oc get ns/app -ojson | jq .metadata.uid
$ oc get ns/app -ojson | jq .metadata.uid
"794e1e1a-b9f5-4958-a190-e76a9b53d7bf"
Dans votre ressource personnalisée (CR) ClusterLogForwarder, vous configurez les types de journaux infrastructure, audit et application en tant qu'entrées du pipeline all-logs. Vous connectez également ce pipeline à la sortie cw, qui transmet les journaux à une instance CloudWatch dans la région us-east-2:
Chaque région dans CloudWatch contient trois niveaux d'objets :
groupe de logs
flux de données
- événement de journal
Avec groupBy: logType dans le CR ClusterLogForwarding, les trois types de journaux dans inputRefs produisent trois groupes de journaux dans Amazon Cloudwatch :
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.application"
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
Chaque groupe de journaux contient des flux de journaux :
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.application | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.application | jq .logStreams[].logStreamName
"kubernetes.var.log.containers.busybox_app_busybox-da085893053e20beddd6747acdbaf98e77c37718f85a7f6a4facf09ca195ad76.log"
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.audit | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.audit | jq .logStreams[].logStreamName
"ip-10-0-131-228.us-east-2.compute.internal.k8s-audit.log"
"ip-10-0-131-228.us-east-2.compute.internal.linux-audit.log"
"ip-10-0-131-228.us-east-2.compute.internal.openshift-audit.log"
...
aws --output json logs describe-log-streams --log-group-name mycluster-7977k.infrastructure | jq .logStreams[].logStreamName
$ aws --output json logs describe-log-streams --log-group-name mycluster-7977k.infrastructure | jq .logStreams[].logStreamName
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-69f9fd9b58-zqzw5_openshift-oauth-apiserver_oauth-apiserver-453c5c4ee026fe20a6139ba6b1cdd1bed25989c905bf5ac5ca211b7cbb5c3d7b.log"
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-797774f7c5-lftrx_openshift-apiserver_openshift-apiserver-ce51532df7d4e4d5f21c4f4be05f6575b93196336be0027067fd7d93d70f66a4.log"
"ip-10-0-131-228.us-east-2.compute.internal.kubernetes.var.log.containers.apiserver-797774f7c5-lftrx_openshift-apiserver_openshift-apiserver-check-endpoints-82a9096b5931b5c3b1d6dc4b66113252da4a6472c9fff48623baee761911a9ef.log"
...
Chaque flux de journaux contient des événements de journaux. Pour voir un événement du Pod busybox, vous devez spécifier son flux de journaux dans le groupe de journaux application:
Exemple : Personnalisation du préfixe dans les noms de groupes de journaux
Dans les noms de groupes de journaux, vous pouvez remplacer le préfixe par défaut infrastructureName, mycluster-7977k, par une chaîne arbitraire telle que demo-group-prefix. Pour ce faire, vous devez mettre à jour le champ groupPrefix dans le CR ClusterLogForwarding:
cloudwatch:
groupBy: logType
groupPrefix: demo-group-prefix
region: us-east-2
cloudwatch:
groupBy: logType
groupPrefix: demo-group-prefix
region: us-east-2
La valeur de groupPrefix remplace le préfixe par défaut infrastructureName:
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"demo-group-prefix.application"
"demo-group-prefix.audit"
"demo-group-prefix.infrastructure"
Exemple : Nommer les groupes de journaux d'après les noms des espaces de noms des applications
Pour chaque espace de noms d'applications dans votre cluster, vous pouvez créer un groupe de logs dans CloudWatch dont le nom est basé sur le nom de l'espace de noms d'applications.
Si vous supprimez un objet d'espace de noms d'application et en créez un nouveau qui porte le même nom, CloudWatch continue d'utiliser le même groupe de journaux qu'auparavant.
Si vous considérez que des objets successifs de l'espace de noms d'applications qui portent le même nom sont équivalents, utilisez l'approche décrite dans cet exemple. Dans le cas contraire, si vous devez distinguer les groupes de journaux résultants les uns des autres, reportez-vous plutôt à la section suivante "Nommer les groupes de journaux pour les UUID de l'espace de noms d'application".
Pour créer des groupes de journaux d'application dont les noms sont basés sur les noms des espaces de noms d'application, vous définissez la valeur du champ groupBy sur namespaceName dans le CR ClusterLogForwarder:
cloudwatch:
groupBy: namespaceName
region: us-east-2
cloudwatch:
groupBy: namespaceName
region: us-east-2
Le réglage de groupBy à namespaceName n'affecte que le groupe d'enregistrement de l'application. Il n'affecte pas les groupes de journaux audit et infrastructure.
Dans Amazon Cloudwatch, le nom de l'espace de noms apparaît à la fin de chaque nom de groupe de journaux. Comme il n'existe qu'un seul espace de noms d'application, \N "app", la sortie suivante montre un nouveau groupe de journaux mycluster-7977k.app au lieu de mycluster-7977k.application:
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.app"
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
Si le cluster de cet exemple avait contenu plusieurs espaces de noms d'applications, la sortie montrerait plusieurs groupes de journaux, un pour chaque espace de noms.
Le champ groupBy n'affecte que le groupe de journaux d'application. Il n'affecte pas les groupes de journaux audit et infrastructure.
Exemple : Nommer les groupes de journaux d'après les UUID de l'espace de noms de l'application
Pour chaque espace de noms d'applications dans votre cluster, vous pouvez créer un groupe de logs dans CloudWatch dont le nom est basé sur l'UUID de l'espace de noms d'applications.
Si vous supprimez un objet d'espace de noms d'application et en créez un nouveau, CloudWatch crée un nouveau groupe de journaux.
Si vous considérez que des objets successifs de l'espace de noms de l'application portant le même nom sont différents les uns des autres, utilisez l'approche décrite dans cet exemple. Sinon, consultez la section précédente "Exemple : Nommer les groupes de journaux pour les espaces de noms d'applications".
Pour nommer les groupes de journaux d'après les UUID de l'espace de noms de l'application, vous définissez la valeur du champ groupBy sur namespaceUUID dans le CR ClusterLogForwarder:
cloudwatch:
groupBy: namespaceUUID
region: us-east-2
cloudwatch:
groupBy: namespaceUUID
region: us-east-2
Dans Amazon Cloudwatch, l'UUID de l'espace de noms apparaît à la fin de chaque nom de groupe de journaux. Étant donné qu'il n'existe qu'un seul espace de noms d'application, "app", la sortie suivante montre un nouveau groupe de journaux mycluster-7977k.794e1e1a-b9f5-4958-a190-e76a9b53d7bf au lieu de mycluster-7977k.application:
aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
$ aws --output json logs describe-log-groups | jq .logGroups[].logGroupName
"mycluster-7977k.794e1e1a-b9f5-4958-a190-e76a9b53d7bf" // uid of the "app" namespace
"mycluster-7977k.audit"
"mycluster-7977k.infrastructure"
Le champ groupBy n'affecte que le groupe de journaux d'application. Il n'affecte pas les groupes de journaux audit et infrastructure.
10.12.1. Transférer les journaux vers Amazon CloudWatch à partir de clusters compatibles avec STS Copier lienLien copié sur presse-papiers!
Pour les clusters avec AWS Security Token Service (STS) activé, vous pouvez créer un compte de service AWS manuellement ou créer une demande d'informations d'identification à l'aide de l'utilitaire Cloud Credential Operator (CCO) ccoctl.
Cette fonction n'est pas prise en charge par le collecteur de vecteurs.
Conditions préalables
- Sous-système de journalisation pour Red Hat OpenShift : 5.5 et versions ultérieures
Procédure
Créez une ressource personnalisée YAML pour
CredentialsRequesten utilisant le modèle ci-dessous :Modèle de demande d'informations d'identification CloudWatch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Utilisez la commande
ccoctlpour créer un rôle pour AWS à l'aide de votre CRCredentialsRequest. Avec l'objetCredentialsRequest, cette commandeccoctlcrée un rôle IAM avec une politique de confiance liée au fournisseur d'identité OIDC spécifié et une politique de permissions qui accorde des permissions pour effectuer des opérations sur les ressources CloudWatch. Cette commande crée également un fichier de configuration YAML dans/<path_to_ccoctl_output_dir>/manifests/openshift-logging-<your_role_name>-credentials.yaml. Ce fichier secret contient la clé/valeurrole_arnutilisée lors de l'authentification avec le fournisseur d'identité AWS IAM.ccoctl aws create-iam-roles \ --name=<name> \ --region=<aws_region> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests \ --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
$ ccoctl aws create-iam-roles \ --name=<name> \ --region=<aws_region> \ --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests \ --identity-provider-arn=arn:aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <name> est le nom utilisé pour marquer vos ressources cloud et doit correspondre au nom utilisé lors de l'installation de votre cluster STS
Appliquer le secret créé :
oc apply -f output/manifests/openshift-logging-<votre_nom_de_rôle>-credentials.yaml
oc apply -f output/manifests/openshift-logging-<votre_nom_de_rôle>-credentials.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Créer ou modifier une ressource personnalisée
ClusterLogForwarder:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le nom du CR
ClusterLogForwarderdoit êtreinstance. - 2
- L'espace de noms pour le CR
ClusterLogForwarderdoit êtreopenshift-logging. - 3
- Spécifiez un nom pour la sortie.
- 4
- Spécifiez le type de
cloudwatch. - 5
- Facultatif : Indiquez comment regrouper les journaux :
-
logTypecrée des groupes de journaux pour chaque type de journal -
namespaceNamecrée un groupe de journaux pour chaque espace de noms d'applications. Les journaux d'infrastructure et d'audit ne sont pas affectés et restent regroupés parlogType. -
namespaceUUIDcrée un nouveau groupe de journaux pour chaque UUID d'espace de noms d'applications. Il crée également des groupes de journaux distincts pour les journaux d'infrastructure et d'audit.
-
- 6
- Facultatif : Spécifiez une chaîne de caractères pour remplacer le préfixe par défaut
infrastructureNamedans les noms des groupes de journaux. - 7
- Spécifiez la région AWS.
- 8
- Indiquez le nom du secret qui contient vos informations d'identification AWS.
- 9
- Facultatif : Spécifiez un nom pour le pipeline.
- 10
- Spécifiez les types de journaux à transférer en utilisant le pipeline :
application,infrastructureouaudit. - 11
- Spécifiez le nom de la sortie à utiliser lors du transfert des journaux avec ce pipeline.
10.12.1.1. Création d'un secret pour AWS CloudWatch avec un rôle AWS existant Copier lienLien copié sur presse-papiers!
Si vous avez un rôle existant pour AWS, vous pouvez créer un secret pour AWS avec STS à l'aide de la commande oc create secret --from-literal.
Procédure
Dans l'interface de commande, entrez la commande suivante pour générer un secret pour AWS :
oc create secret generic cw-sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/my-role_with-permissions
$ oc create secret generic cw-sts-secret -n openshift-logging --from-literal=role_arn=arn:aws:iam::123456789012:role/my-role_with-permissionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple Secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow