Me gustaría configurar Loggly para que se ejecute en AWS Elastic Beanstalk, pero no puedo encontrar ninguna información sobre cómo hacerlo. ¿Hay alguna guía en algún lugar, o alguna guía general sobre cómo comenzar?¿Cómo configurar Loggly en Elastic Beanstalk?
Respuesta
Así es como lo hago, por papertrailapp. com (que prefiero en lugar de loggly). En su /ebextensions
carpeta (see more info) se crea logs.config
, donde especifique:
container_commands:
01-set-correct-hostname:
command: hostname www.example.com
02-forward-rsyslog-to-papertrail:
# https://papertrailapp.com/systems/setup
command: echo "*.* @logs.papertrailapp.com:55555" >> /etc/rsyslog.conf
03-enable-remote-logging:
command: echo -e "\$ModLoad imudp\n\$UDPServerRun 514\n\$ModLoad imtcp\n\$InputTCPServerRun 514\n\$EscapeControlCharactersOnReceive off" >> /etc/rsyslog.conf
04-restart-syslog:
command: service rsyslog restart
55555
debe sustituirse por el número de puerto UDP proporcionada por papertrailapp.com. Cada vez que se ejecute una nueva instancia, se aplicará esta configuración. Luego, en su log4j.properties
:
log4j.rootLogger=WARN, SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.facility=local1
log4j.appender.SYSLOG.header=true
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=[%p] %t %c: %m%n
No estoy seguro de si se trata de una solución óptima. Lea más sobre este mecanismo en jcabi-beanstalk-maven-plugin
parece establecer el nombre de host en un EC2 servidor no es una buena idea http://stackoverflow.com/questions/603351/can-we-set-easy-to-remember-hostnames-for-ec2-instances –
Usando esta solución en EC2 - Tuve que cambiar ' service rsyslog restart' que no funcionaba con '/etc/init.d/rsyslog restart' – yonili
Parece que agregar a rsyslog.conf es un poco problemático: implementaciones múltiples en el mismo conjunto de servidores aprovisionados por beanstalk (una ocurrencia frecuente) terminaría con múltiples anexos. Normalmente, /etc/rsyslog.config tendrá un "$ IncludeConfig /etc/rsyslog.d/*.conf" al final, por lo que puede simplemente introducir su propio archivo de configuración utilizando la parte "archivos:" de su. archivo ebextensions. Esto funciona tanto si se está implementando en servidores nuevos como si no. – scolestock
Aquí hay un enlace a loggly sitio de soporte para usar syslogd con loggly: http://wiki.loggly.com/loggingconfiguration
o el uso de la API loggly con su propia aplicación: http://wiki.loggly.com/apidocumention
Aquí hay una configuración de cuenta elástico para Loggly que acabo de empezar a usar gracias a los punteros de este hilo y las instrucciones de instalación de los proveedores de SaaS. [Loggly Config Mgmt, Papertrail rsyslog]
Guarde el archivo como loggly.config en el directorio .ebextensions y asegúrese de verificar las convenciones de formato YAML (sin pestañas, etc.). Sustituya el número de puerto, nombre de usuario, contraseña y nombre de dominio de Loggly TCP en los corchetes angulares según sea necesario.
Tenga en cuenta que para las versiones AWS ruby de elasticbeanstalk, puede haber diferencias en la configuración de EC2/etc/rsyslog. Por ejemplo, si /etc/rsyslog.d ya existe, y ya existe una directiva "$ IncludeConfig /etc/rsyslog.d/*.conf", entonces el comando "01-forward-rsyslog-to-loggly:" puede ser remoto.
Despliegue por scripts normales o aws.push. Para ayudar a depurar el empuje, ssh & cola /var/log/cfn-init.log
files:
"/etc/rsyslog.d/90-loggly.conf" :
mode: "000664"
owner: root
group: root
content: |
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
$WorkDirectory /var/lib/rsyslog # where to place spool files
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinite retries if host is down
*.* @@logs.loggly.com:<yourportnum> # !!!Loggly supplied port number for each app!!!
# ### end of the forwarding rule ###
encoding: plain
"/tmp/loggly.py" :
mode: "000755"
owner: root
group: root
content: |
import json
import sys
import urllib2
'''
Auto-authenticate Syslog TCP inputs.
Usage: python inputs.py -u user -p pass -s subdomain
'''
state = None
params = {}
for i in range(len(sys.argv)):
arg = sys.argv[i]
if state:
params[state] = arg
state = None
if arg == '--username' or arg == '-u':
state = 'username'
if arg == '--password' or arg == '-p':
state = 'password'
if arg == '--subdomain' or arg == '-s':
state = 'subdomain'
url = 'https://%s.loggly.com/api/inputs' % params['subdomain']
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, url, params['username'], params['password'])
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
opener.open(url)
urllib2.install_opener(opener)
inputs = json.loads(urllib2.urlopen(url).read())
for input in inputs:
if input['service']['name'] == 'syslogtcp':
url = 'https://%s.loggly.com/api/inputs/%d/adddevice' % \
(params['subdomain'], input['id'])
response = urllib2.urlopen(url, {}).read()
print response
encoding: plain
commands:
01-forward-rsyslog-to-loggly:
# http://loggly.com/support/sending-data/logging-from/syslog/rsyslog/cd
command: test "$(grep -s '90-loggly.conf' /etc/rsyslog.conf)" == "" && echo -e "\n# Include the loggly.conf file\n\$IncludeConfig /etc/rsyslog.d/90-loggly.conf" >> /etc/rsyslog.conf
02-restart-syslog:
command: service rsyslog restart
03-inform_loggly:
command: "python /tmp/loggly.py -u <Yourloginname> -p <Yourpassword> -s <Yourdomainname>"
Ninguna de las cosas que intenté parecía funcionar, y la documentación loggly es muy confuso! Espero que esto ayude a alguien, así es como lo hice funcionar.
pegue el siguiente en .ebextensions/loggly.config
files:
"/etc/rsyslog.conf" :
mode: "000644"
owner: root
group: root
content: |
$ModLoad imfile
$InputFilePollInterval 10
$PrivDropToGroup adm
# Input for FILE.LOG
$InputFileName /var/app/current/PATH_TO_YOUR_LOG_FILE
$InputFileTag social_php:
$InputFileStateFile stat-social_php #this must be unique for each file being polled
$InputFileSeverity info
$InputRunFileMonitor
#Add a tag for events from this file
$template LogglyFormatsocial_php,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [[email protected] tag=\"php_log\"] %msg%\n"
if $programname == 'social_php' then @@logs.loggly.com:37146;LogglyFormatsocial_php
if $programname == 'social_php' then ~
*.* @@logs.loggly.com:37146
commands:
01-restart-syslog:
command: service rsyslog restart
- reemplazar todas las instancias de social_php con la etiqueta que tenga sentido para su aplicación.
- Reemplazar/var/app/corriente/PATH_TO_YOUR_LOG_FILE con la ubicación del archivo de registro
Típicamente, /etc/rsyslog.config tendrá un "$ IncludeConfig /etc/rsyslog.d/*.conf" en el end - para que simplemente pueda introducir su propio archivo de configuración usando la parte "archivos:" de su archivo .ebextensions. Esto funciona tanto si se está implementando en servidores nuevos como si no.
Para un ruby production.log, puede tener algo como esto en un archivo .ebextensions/01loggly.config. Tenga en cuenta que también recoge su nombre de entorno beanstalk como una etiqueta loggly.
# For docs on eb configs, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
# This set of commands sets up loggly forwarding
files:
"/etc/rsyslog.d/myapp-loggly.conf" :
mode: "000664"
owner: root
group: root
content: |
$template LogglyFormat,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [[email protected] tag=`{ "Ref" : "AWSEBEnvironmentName" }`] %msg%\n"
*.* @@logs-01.loggly.com:514;LogglyFormat
# One time config
$ModLoad imfile
$InputFilePollInterval 10
$PrivDropToGroup adm
$WorkDirectory /var/spool/rsyslog
# Add a tag for file events
# For production.log
$InputFileName /var/app/support/logs/production.log
$InputFileTag production-log
$InputFileStateFile stat-production-log #this must be unique for each file being polled
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
# Send to Loggly then discard
if $programname == 'myapp-production-log' then @@logs-01.loggly.com:514;LogglyFormat
if $programname == 'myapp-production-log' then ~
encoding: plain
commands:
00-make-work-directory:
command: mkdir -p /var/spool/rsyslog
01-restart-syslog:
command: service rsyslog restart
caso de Tomcat, que podría hacer algo como esto en un archivo .ebextesions/01logglyg.config:
# For docs on eb configs, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
# This set of commands sets up loggly forwarding
files:
"/etc/rsyslog.d/mytomcatapp-loggly.conf" :
mode: "000664"
owner: root
group: root
content: |
$template LogglyFormat,"<%pri%>%protocol-version% %timestamp:::date-rfc3339% %HOSTNAME% %app-name% %procid% %msgid% [[email protected] tag=`{ "Ref" : "AWSEBEnvironmentName" }`] %msg%\n"
*.* @@logs-01.loggly.com:514;LogglyFormat
# One time config
$ModLoad imfile
$InputFilePollInterval 10
$PrivDropToGroup adm
$WorkDirectory /var/spool/rsyslog
# catalina.log
$InputFileName /var/log/tomcat7/catalina.log
$InputFileTag catalina-log
$InputFileStateFile stat-catalina-log
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
if $programname == 'catalina-log' then @@logs-01.loggly.com:514;LogglyFormat
if $programname == 'catalina-log' then ~
# catalina.out
$InputFileName /var/log/tomcat7/catalina.out
$InputFileTag catalina-out
$InputFileStateFile stat-catalina-out
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
if $programname == 'catalina-out' then @@logs-01.loggly.com:514;LogglyFormat
if $programname == 'catalina-out' then ~
# host-manager.log
$InputFileName /var/log/tomcat7/host-manager.log
$InputFileTag host-manager
$InputFileStateFile stat-host-manager
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
if $programname == 'host-manager' then @@logs-01.loggly.com:514;LogglyFormat
if $programname == 'host-manager' then ~
# initd.log
$InputFileName /var/log/tomcat7/initd.log
$InputFileTag initd
$InputFileStateFile stat-initd
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
if $programname == 'initd' then @@logs-01.loggly.com:514;LogglyFormat
if $programname == 'initd' then ~
# localhost.log
$InputFileName /var/log/tomcat7/localhost.log
$InputFileTag localhost-log
$InputFileStateFile stat-localhost-log
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
if $programname == 'localhost-log' then @@logs-01.loggly.com:514;LogglyFormat
if $programname == 'localhost-log' then ~
# manager.log
$InputFileName /var/log/tomcat7/manager.log
$InputFileTag manager
$InputFileStateFile stat-manager
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$InputRunFileMonitor
if $programname == 'manager' then @@logs-01.loggly.com:514;LogglyFormat
if $programname == 'manager' then ~
encoding: plain
commands:
00-make-work-directory:
command: mkdir -p /var/spool/rsyslog
01-restart-syslog:
command: service rsyslog restart
Esta configuración está funcionando para mí - aunque aún no han decidido cómo llegar entradas de múltiples líneas que entran en una sola entrada en Loggly todavía.
Al final del día, esta configuración tampoco funcionaba. No sigue a catalina.out después de la rotación horaria establecida en la imagen amazon linux. Esto funciona: https://gist.github.com/troy/4710601 – scolestock
También puede usar el script de instalación de loggly. La configuración a continuación sigue las instrucciones para la configuración de la herencia en https://www.loggly.com/docs/configure-syslog-script/ con cambios menores (no hay mensajes de confirmación, comando sudo reemplazados ya que ningún TTY está disponible)
(edit: enlace actualizado, parece ser una solución obsoleta ahora en loggly docs)
Coloque la siguiente secuencia de comandos en .ebextensions/loggly.config
Sustituir ficha y cuenta en su propio.
#
# Install loggly.com on AWS Elastic Beanstalk
# Tested with node.js environment
# Save this file as .ebextensions/loggly.config
# Deploy per normal scripts or aws.push. To help debug the push, ssh & tail /var/log/cfn-init.log
# See Also /var/log/eb-tools.log
#
commands:
01_loggly_dl:
command: wget -q -O /tmp/loggly.py https://www.loggly.com/install/configure-syslog.py
02_loggly_config:
command: su --session-command="python /tmp/loggly.py setup --auth TOKEN --account ACCOUNT --yes"
Sé que esta pregunta es bastante antigua, pero encontré que las respuestas realmente no respondieron la pregunta o simplemente no funcionó correctamente cuando se implementaron. He encontrado que esto funciona (.ebextenstions de archivos/02loggly.config):
container_commands:
01-transform-rsyslog.conf:
command: sed "s/NODE_ENV/$NODE_ENV/g" scripts/22-loggly.conf.temp > scripts/22-loggly.conf
02-setup-rsyslog.conf:
command: cp scripts/22-loggly.conf /etc/rsyslog.d/22-loggly.conf
03-restart:
command: /sbin/service rsyslog restart
el "01-transform-rsyslog.conf" paso es opcional; Lo uso para establecer una etiqueta por NODE_ENV en el archivo. "22-loggly.conf.temp" es una versión modificada del archivo "22-loggly.conf" que se crea en "/etc/rsyslog.d/" cuando ejecuta el script de configuración de origen de Linux (https://www.loggly.com/install/configure-syslog.py). Acabo de instalarlo en una instancia de ec2 y copié el archivo.
Nota: tuve que anteponer '/ sbin' a mi comando de servicio porque estaba fallando sin él. Además, esto reinicia syslog en cada implementación, lo que debería estar bien.
Ahora solo tiene que asegurarse de que la aplicación inicie sesión en syslog. Para Java va a ser log4j o similar. Para Node.js (que es lo que estoy usando), rconsole funciona (https://github.com/tblobaum/rconsole).
Siga mi configuración de loggly en elasticbeanstalk. Para Linux + log4j
de la configuración del archivo de .ebextensions
container_commands:
01_configure_sudo_access:
command: sed -i -- 's/ requiretty/ \!requiretty/g' /etc/sudoers
02_loggy_configure:
command: sudo python .ebextensions/scripts/loggly_config.py
03_restore_sudo_access:
command: sed -i -- 's/ \!requiretty/ requiretty/g' /etc/sudoers
Loggly guión en Python para predeterminado AMI:
import os
rsyslog_path = '/etc/rsyslog.conf'
loggly_file_path = '/etc/rsyslog.d/22-loggly.conf'
class LogglyConfig:
def __init__(self):
self.__linux_log()
self.__config_loggly_for_log4j()
def __linux_log(self):
#not installed on this machine
if not os.path.exists(loggly_file_path):
os.system('rm -f configure-linux.sh')
os.system('wget https://www.loggly.com/install/configure-linux.sh')
os.system('sudo bash configure-linux.sh -a DOMAIN -t TOKEN -u USER -p PASSWORD -s')
def __config_loggly_for_log4j(self):
f = open(rsyslog_path,'r')
file_text = f.read()
f.close()
file_text = file_text.replace('#$ModLoad imudp', '$ModLoad imudp')
file_text = file_text.replace('#$UDPServerRun 514', '$UDPServerRun 514')
f = open(rsyslog_path,'w')
f.write(file_text)
f.close()
os.system('service rsyslog restart')
LogglyConfig()
En log4j.properties en su proyecto java
log4j.rootLogger=INFO, SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.SyslogHost=localhost
log4j.appender.SYSLOG.Facility=Local3
log4j.appender.SYSLOG.Header=true
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=java %d{ISO8601} %p %t %c{1}.%M - %m%n
- 1. personalizar instancias de Elastic Beanstalk
- 2. PostgreSQL para Django en Elastic Beanstalk
- 3. URL personalizada de AWS Elastic Beanstalk
- 4. Elástico Beanstalk sin Elastic Load Balancer
- 5. Despliegue manual frente a Amazon Elastic Beanstalk
- 6. AWS Elastic Beanstalk [rechazada remoto] (gancho declinó)
- 7. Agregar trabajadores en segundo plano a AWS Elastic Beanstalk
- 8. Usando Django + fáciles de miniaturas/SORL-miniatura en Elastic Beanstalk
- 9. Despliegue de Python en Elastic Beanstalk con diferentes configuraciones para diferentes entornos
- 10. Replicar la función de cola de tareas de App Engine en EC2/Elastic Beanstalk
- 11. Implementar varias aplicaciones en una sola instancia de EC2 utilizando AWS Elastic Beanstalk
- 12. ¿Dónde se almacenan los archivos de registro de la aplicación Tomcat en Elastic Beanstalk?
- 13. ¿Cuáles son las ventajas del nuevo soporte Heroku Java sobre Amazon Elastic Beanstalk
- 14. ¿Cómo proporciono la configuración a tomcat elástico beanstalk
- 15. Cómo evitar el tiempo de inactividad durante la implementación AWS Elastic Beanstalk de una nueva versión de la aplicación?
- 16. ¿Cómo se usa Elastic Net?
- 17. Cómo ejecutar múltiples beanstalk worker usando php
- 18. Error al implementar la aplicación web en Amazon beanstalk
- 19. Amazon AWS Ec2 + Elastic IP
- 20. Elastic Load Balancing en EC2
- 21. Reductores disponibles en Elastic MapReduce
- 22. Elastic Search y "subconsultas"
- 23. Amazon Elastic MapReduce - SIGTERM
- 24. Diferencia entre AWS Elastic Load Balancing y Auto Scaling
- 25. Cómo paso UserData a una instancia de Beanstalk con CloudFormation
- 26. Numpy and Scipy con Amazon Elastic MapReduce
- 27. Configuración de fuente de datos externa para Elastic MapReduce
- 28. Elastic Search/Tire: ¿Cómo se filtra un atributo booleano?
- 29. Reutilizar la instancia de Amazon Elastic MapReduce
- 30. ¿Cómo instalar automáticamente un certificado SSL en AWS ElasticBeanstalk que se ejecuta en Windows y .NET?
Es la API http y la opción? http://wiki.loggly.com/gettinglogsintologgly Puedo escribir una descripción más detallada, si es así, –
, la configuración más detallada específica de Elastic Beanstalk es lo que estoy buscando. –
El tallo de frijol elástico solo funciona como un archivo de guerra, por lo que la API Http que realiza llamadas directamente desde su código funcionaría en cualquier lugar, incluido el beanstalk elástico. Como no tiene acceso a su máquina en beanstalk, la api syslog no funcionará para usted. –