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
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*
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*
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.