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

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

j'ai déjà ajouté un fichier comme ceci: (.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 j'ai fait bundlelogs.d et taillogs.d ces logs 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 logs par défaut comme

/aws/elasticbeanstalk/InstanceName/var/log/eb-activity.log

Et je veux avoir une un autre comme ceci

/aws/elasticbeanstalk/InstanceName/var/app/current/logs/mycustomlog.log

16
demandé sur Joël 2017-05-18 18:49:08

3 réponses

bundlelogs.d et taillogs.d sont des journaux récupérés à partir de la console de gestion. Ce que vous voulez faire est d'étendre les journaux par défaut (par exemple eb-activité.le journal) à CloudWatch Logs. Pour étendre le flux de log, vous devez ajouter une autre configuration sous /etc/awslogs/config/. La configuration doit suivre le format du fichier de Configuration de L'Agent.

j'ai étendu avec succès mes logs pour ma plate-forme ubuntu/Nginx/php personnalisée, voici mon extension de fichier pour info. Voici un échantillon officiel pour info.

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*
20
répondu Sebastian Hsu 2018-01-20 05:04:51

Crédits d'où, en raison accédez à Sebastian Hsu et Abhyudit Jain.

C'est la finale config le fichier, je suis venu avec pour .ebextensions pour notre cas particulier. Des Notes expliquant certains aspects se trouvent sous le bloc de codes.

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

log_group_name

nous avons un schéma de nommage standard pour nos environnements EB qui est exactement environmentName-environmentType. Je suis à l'aide de { "Fn::Split" : [ "-", { "Ref":"AWSEBEnvironmentName" } ] } pour la diviser en un tableau de deux chaînes (nom et type).

Puis-je utiliser { "Fn::Select" : [ "1", <<SPLIT_OUTPUT>> ] } pour obtenir juste la chaîne de caractères. Vos besoins serait évidemment différents, de sorte que vous avez besoin est le suivant:

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

log_stream_name

j'utilise le Fn::Join fonction pour rejoindre le nom D'environnement EB avec l'identifiant de l'instance. Notez que le modèle d'ID d'instance est une chaîne de caractères qui se répercute exactement comme indiqué.

services

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

commandes

quand le files bloc remplace un fichier existant, il crée un fichier de sauvegarde, comme beanstalklogs_custom.conf.bak. Ce bloc efface ce fichier de sauvegarde, car awslogs lecture du service fichiers, potentiellement source de conflit.

Résultat

Si vous vous connectez à une instance EC2 et sudo cat le fichier, vous devriez voir quelque chose comme cela. Notez que tous les Fn les fonctions ont disparu. Si vous trouver un Fn la fonction ne s'est pas résolue, Vérifiez s'il y a 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*
6
répondu ADTC 2018-01-26 22:23:54

awslogs l'agent recherche dans le fichier de configuration les fichiers journaux qu'il est censé envoyer. Il y a certains paramètres par défaut. Vous devez l'éditer et spécifier les fichiers.

Vous pouvez vérifier et modifier 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 ce qui ne l'est pas.

Veuillez consulter le lien suivant et vous serez en mesure de obtenez vos journaux en un rien de temps.

Ressources:

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

Edit:

Que vous ne souhaitez pas modifier les fichiers sur l'instance, vous pouvez ajouter le code correspondant à l' .dossier ebextensions dans la racine de votre code. Par exemple, ceci est 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é à partir d'un seau S3 en fonction du NODE_ENV. Vous pouvez faire ce que vous voulez dans votre config.

5
répondu Abhyudit Jain 2017-06-08 12:31:40