ver logs log error elasticbeanstalk ec2 aws amazon-web-services elastic-beanstalk amazon-cloudwatch amazon-elastic-beanstalk amazon-cloudwatchlogs

amazon web services - logs - AWS Elastic Beanstalk: ¿Agregar registros personalizados a CloudWatch?



elasticbeanstalk config (3)

El agente de awslogs busca en el archivo de configuración los archivos de registro que debe enviar. Hay algunos valores por defecto en él. Necesitas editarlo y especificar los archivos.

Puede revisar y editar el archivo de configuración ubicado en:

/etc/awslogs/awslogs.conf

Asegúrese de reiniciar el servicio:

sudo service awslogs restart

Puede especificar sus propios archivos allí y crear diferentes grupos y cuáles no.

Consulte el siguiente enlace y podrá obtener sus registros en poco tiempo.

Recursos:

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

Editar:

Como no desea editar los archivos en la instancia, puede agregar el código relevante a la carpeta .ebextensions en la raíz de su código. Por ejemplo, este es mi 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"

En esta configuración, estoy recuperando el archivo de configuración apropiado de un grupo de S3 dependiendo de NODE_ENV. Puedes hacer lo que quieras en tu configuración.

¿Cómo agregar registros personalizados a CloudWatch? Se envían los registros predeterminados, pero ¿cómo agregar uno personalizado?

Ya agregué un archivo como este: (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/*

Como hice con bundlelogs.d y taillogs.d, estos registros personalizados ahora están seguidos o recuperados desde la consola o la web, eso está bien, pero no persisten y no se envían en CloudWatch.

En CloudWatch tengo los registros predeterminados como
/aws/elasticbeanstalk/InstanceName/var/log/eb-activity.log
Y quiero tener otro como este.
/aws/elasticbeanstalk/InstanceName/var/app/current/logs/mycustomlog.log


Tanto bundlelogs.d como taillogs.d son registros recuperados desde la consola de administración. Lo que quiere hacer es extender los registros predeterminados (por ejemplo, eb-activity.log) a los registros de CloudWatch. Para ampliar la secuencia de registro, debe agregar otra configuración en /etc/awslogs/config/ . La configuración debe seguir el formato del archivo de configuración del agente .

He ampliado con éxito mis registros para mi plataforma personalizada de ubuntu / nginx / php. Aquí está mi archivo de extensión FYI. Aquí hay una muestra oficial para tu información .

En tu caso, podría ser como

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éditos a los que deben ir Sebastian Hsu y Abhyudit Jain .

Este es el archivo de config final que se me ocurrió para .ebextensions para nuestro caso de uso particular. Las notas que explican algunos aspectos están debajo del bloque de código.

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

Tenemos un esquema de denominación estándar para nuestros entornos EB, que es exactamente environmentName-environmentType . Estoy usando { "Fn::Split" : [ "-", { "Ref":"AWSEBEnvironmentName" } ] } para dividir eso en una matriz de dos cadenas (nombre y tipo).

Luego uso { "Fn::Select" : [ "1", <<SPLIT_OUTPUT>> ] } para obtener solo la cadena de tipo. Sus necesidades obviamente diferirán, por lo que es posible que solo necesite lo siguiente:

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

log_stream_name

Estoy usando la función Fn::Join para unir el nombre del entorno EB con el ID de instancia. Tenga en cuenta que la plantilla de ID de instancia es una cadena que se repite exactamente como se indica.

servicios

El servicio de awslogs se reinicia automáticamente cuando se implementa el archivo conf personalizado.

comandos

Cuando el bloque de files sobrescribe un archivo existente, crea un archivo de copia de seguridad, como beanstalklogs_custom.conf.bak . Este bloque borra ese archivo de copia de seguridad porque el servicio de awslogs lee ambos archivos, lo que podría causar conflictos.

Resultado

Si inicia sesión en una instancia de EC2 y sudo cat el archivo, debería ver algo como esto. Tenga en cuenta que todas las funciones Fn han resuelto. Si encuentra que una función Fn no se resolvió, verifique si hay errores de sintaxis.

[/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*