2012-06-29 36 views
14

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?

+0

Es la API http y la opción? http://wiki.loggly.com/gettinglogsintologgly Puedo escribir una descripción más detallada, si es así, –

+0

, la configuración más detallada específica de Elastic Beanstalk es lo que estoy buscando. –

+1

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

Respuesta

6

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

+0

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 –

+0

Usando esta solución en EC2 - Tuve que cambiar ' service rsyslog restart' que no funcionaba con '/etc/init.d/rsyslog restart' – yonili

+3

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

2

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>" 
0

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
1

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.

+0

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

6

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" 
+0

¡Esto funcionó muy bien! – Santthosh

+1

¿No podría alguien que comprometió a Loggly poder poner en peligro sus servidores? Parece inseguro ejecutar un código remoto como este. – cdmckay

1

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

0

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 
Cuestiones relacionadas