web-dev-qa-db-fra.com

AWS Elastic Beanstalk: ajouter des journaux personnalisés à CloudWatch?

Comment ajouter des journaux personnalisés à CloudWatch? Les journaux par défaut sont envoyés, mais comment en ajouter un personnalisé?

J'ai déjà ajouté un fichier comme celui-ci: (en .ebextensions)

files:
  "/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
      /var/app/current/logs/*

  "/opt/elasticbeanstalk/tasks/taillogs.d/cloud-init.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
      /var/app/current/logs/*

Comme je l'ai fait bundlelogs.d et taillogs.d, ces journaux personnalisés sont maintenant suivis ou récupérés à partir de la console ou du Web, c'est bien mais ils ne persistent pas et ne sont pas envoyés sur CloudWatch.

Dans CloudWatch, j'ai les journaux par défaut comme
/aws/elasticbeanstalk/InstanceName/var/log/eb-activity.log
Et je veux en avoir un autre comme celui-ci
/aws/elasticbeanstalk/InstanceName/var/app/current/logs/mycustomlog.log

19
Joël

bundlelogs.d et taillogs.d sont des journaux récupérés à partir de la console de gestion . Ce que vous voulez faire, c'est étendre les journaux par défaut (par exemple, eb-activity.log) aux journaux CloudWatch. Pour étendre le flux de journaux, vous devez ajouter une autre configuration sous /etc/awslogs/config/. La configuration doit suivre le Format de fichier de configuration de l'agent .

J'ai réussi à étendre mes journaux pour ma plateforme ubuntu/nginx/php personnalisée. Voici mon fichier d'extension FYI. Voici un échantillon officiel FYI.

Dans votre cas, ça pourrait être comme

files:
  "/etc/awslogs/config/my_app_log.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/app/current/logs/xxx.log]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/app/current/logs/xxx.log"]]}`
      log_stream_name = {instance_id}
      file = /var/app/current/logs/xxx.log*
26
Sebastian Hsu

Les crédits dus reviennent à Sebastian Hs et Abhyudit Jain .

Ceci est le fichier config final que j'ai trouvé pour .ebextensions pour notre cas d'utilisation particulier. Les notes expliquant certains aspects se trouvent sous le bloc de code.

files:
  "/etc/awslogs/config/beanstalklogs_custom.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/log/Tomcat8/catalina.out]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Fn::Select" : [ "1", { "Fn::Split" : [ "-", { "Ref":"AWSEBEnvironmentName" } ] } ] }, "var/log/Tomcat8/catalina.out"]]}`
      log_stream_name = `{"Fn::Join":["--", [{ "Ref":"AWSEBEnvironmentName" }, "{instance_id}"]]}`
      file = /var/log/Tomcat8/catalina.out*

services:
  sysvinit:
    awslogs:
      files:
        - "/etc/awslogs/config/beanstalklogs_custom.conf"

commands:
  rm_beanstalklogs_custom_bak:
    command: "rm beanstalklogs_custom.conf.bak"
    cwd: "/etc/awslogs/config"
    ignoreErrors: true

nom_groupe_log

Nous avons un schéma de nommage standard pour nos environnements EB qui est exactement environmentName-environmentType. J'utilise { "Fn::Split" : [ "-", { "Ref":"AWSEBEnvironmentName" } ] } pour diviser cela en un tableau de deux chaînes (nom et type).

Ensuite, j'utilise { "Fn::Select" : [ "1", <<SPLIT_OUTPUT>> ] } pour obtenir uniquement la chaîne de type. Vos besoins seraient évidemment différents, vous n'avez donc besoin que des éléments suivants:

      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/Tomcat8/catalina.out"]]}`

log_stream_name

J'utilise le Fn::Join fonction pour joindre le nom de l'environnement EB à l'ID d'instance. Notez que le modèle d'ID d'instance est une chaîne qui est reproduite exactement comme donnée.

prestations de service

Le service awslogs est redémarré automatiquement lorsque le fichier personnalisé conf est déployé.

commandes

Lorsque le bloc files écrase un fichier existant, il crée un fichier de sauvegarde, comme beanstalklogs_custom.conf.bak. Ce bloc efface ce fichier de sauvegarde car le service awslogs lit les deux fichiers , ce qui peut provoquer un conflit.

Résultat

Si vous vous connectez à une instance EC2 et Sudo cat le fichier, vous devriez voir quelque chose comme ça. Notez que toutes les fonctions Fn sont résolues. Si vous trouvez qu'une fonction Fn n'a pas été résolue, recherchez-la pour des erreurs de syntaxe.

[/var/log/Tomcat8/catalina.out]
log_group_name = /aws/elasticbeanstalk/environmentType/var/log/Tomcat8/catalina.out
log_stream_name = environmentName-environmentType--{instance_id}
file = /var/log/Tomcat8/catalina.out*
12
ADTC

L'agent awslogs recherche dans le fichier de configuration les fichiers journaux qu'il est censé envoyer. Il y a quelques défauts par défaut. Vous devez le modifier et spécifier les fichiers.

Vous pouvez vérifier et éditer le fichier de configuration situé à:

/etc/awslogs/awslogs.conf

Assurez-vous de redémarrer le service:

Sudo service awslogs restart

Vous pouvez y spécifier vos propres fichiers et créer différents groupes et autres.

Veuillez vous référer au lien suivant et vous pourrez obtenir vos journaux en un rien de temps.

Ressources:

https://docs.aws.Amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html

Éditer:

Comme vous ne souhaitez pas modifier les fichiers sur l'instance, vous pouvez ajouter le code approprié dans le dossier .ebextensions à la racine de votre code. Par exemple, voici mon 01_cloudwatch.config:

packages:
  yum:
    awslogs: []

container_commands:
  01_get_awscli_conf_file:
    command: "aws s3 cp s3://project/awscli.conf /etc/awslogs/awscli.conf"
  02_get_awslogs_conf_file:
    command: "aws s3 cp s3://project/awslogs.conf.${NODE_ENV} /etc/awslogs/awslogs.conf"
  03_restart_awslogs:
    command: "Sudo service awslogs restart"
  04_start_awslogs_at_system_boot:
    command: "Sudo chkconfig awslogs on"

Dans cette configuration, je récupère le fichier de configuration approprié dans un compartiment S3 en fonction du NODE_ENV. Vous pouvez faire tout ce que vous voulez dans votre configuration.

5
Abhyudit Jain