2012-06-29 4 views
14

Я хотел бы настроить Loggly для работы на AWS Elastic Beanstalk, но не могу найти никакой информации о том, как это сделать. Есть ли какое-нибудь руководство в любом месте или какое-то общее руководство по началу работы?Как настроить лоджию на эластичном бобовом стебле?

+0

ли http API и опция? http://wiki.loggly.com/gettinglogsintologgly Я могу написать более подробное описание, если так –

+0

более детальная настройка, характерная для Elastic Beanstalk, - это то, что я ищу. –

+1

Эластичные бобовые стебли просто работают в военном файле, поэтому API-интерфейс Http, вызывающий вызовы непосредственно из вашего кода, будет работать в любом месте, включая эластичный бобовый стебель.Поскольку у вас нет доступа к вашей машине в beanstalk, syslog api не будет работать для вас. –

ответ

6

Это, как я это делаю, для papertrailapp. com (который я предпочитаю вместо loggly). В вашей папке /ebextensions (see more info) создать logs.config, где указать:

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 должен быть заменен на UDP номер порта, предоставленной papertrailapp.com. Каждый раз после загрузки нового экземпляра этот конфиг будет применен. Тогда в вашем 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 

Я не уверен, является ли это оптимальное решение. Подробнее об этом механизме см. В jcabi-beanstalk-maven-plugin

+0

Кажется, что установить имя хоста на EC2 сервер не такая хорошая идея http://stackoverflow.com/questions/603351/can-we-set-easy-to-remember-hostnames-for-ec2-instances –

+0

Используя это решение на EC2 - мне пришлось изменить ' service rsyslog restart', который не работал с '/etc/init.d/rsyslog restart' – yonili

+3

Похоже, что добавление к rsyslog.conf является немного проблематичным - несколько разворачиваются на один и тот же набор серверов с резервным сервером (частое появление) завершится несколькими добавлениями. Как правило, в конце концов, /etc/rsyslog.config будет иметь «$ IncludeConfig /etc/rsyslog.d/*.conf», поэтому вы можете просто ввести свой собственный файл конфигурации, используя часть «files:» вашего. файл ebextensions. Это работает независимо от того, развертываетесь ли вы на свежих серверах или нет. – scolestock

2

Здесь приведена конфигурация эластичного перехода для Loggly, которую я только начал использовать благодаря указателям этой темы и инструкциям по настройке поставщиков SaaS. [Loggly Config Mgmt, Papertrail rsyslog]

Сохраните файл как loggly.config в каталоге .ebextensions и обязательно проверьте соглашения о форматировании YAML (без вкладок и т. Д.). Замените номер порта Loggly TCP, имя пользователя, пароль и доменное имя в угловых скобках по мере необходимости.

Обратите внимание, что для AWS-рубиновых версий эластичного покрытия могут быть различия в установке EC2/etc/rsyslog. Например, если /etc/rsyslog.d уже существует, и уже существует директива «$ IncludeConfig /etc/rsyslog.d/*.conf», тогда команда «01-forward-rsyslog-to-loggly:» может быть удален.

Развертывание на обычные скрипты или aws.push. Для того, чтобы помочь отладить толчок, SSH & хвоста /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

Ни одна из вещей, которые я пытался, казалось, работать, а loggly документация очень запутанная! Надеюсь, что это поможет кому-то, вот как я получил его на работу.

Вставьте следующий в .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 
  • заменить все экземпляры social_php с тегом, который имеет смысл для вашего приложения.
  • Заменить/уаг/приложение/ток/PATH_TO_YOUR_LOG_FILE с вашего местоположения файла журнала
1

Как правило, /etc/rsyslog.config будет иметь "$ IncludeConfig /etc/rsyslog.d/*.conf" На end - так что вы можете просто ввести свой собственный файл конфигурации, используя раздел «файлы:» вашего файла .ebextensions. Это работает независимо от того, развертываетесь ли вы на свежих серверах или нет.

Для рубина production.log у вас может быть что-то подобное в файле .ebextensions/01loggly.config. Обратите внимание, что это также вызывает имя среды beanstalk, как тег 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 

Для Tomcat, вы можете сделать что-то вроде этого в файле .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 

Эта конфигурация работает для меня - хотя я до сих пор не определено, как получить многострочные записи, входящие в одну запись в Loggly.

+0

В конце концов, эта конфигурация тоже не работала. Он не следит за каталитикой после того, как по часовой стрелке встанет на изображение amazon linux. Это работает: https://gist.github.com/troy/4710601 – scolestock

6

Вы также можете использовать скрипт установки из самого журнала. Установки ниже следующие инструкции для установки унаследованной на https://www.loggly.com/docs/configure-syslog-script/ с незначительными изменениями (без подтверждения приглашения, команда Sudo не заменяется, поскольку ни терминал не доступен)

(редактирование: обновлено ссылка, кажется, устаревшее решения сейчас в loggly документации)

Поместите следующий скрипт в .ebextensions/loggly.config

Заменить ЛЕКСЕМУ и СЧЕТ с вашим собственным.

# 
# 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

Это сработало отлично! – Santthosh

+1

Не может ли кто-нибудь, кто скомпрометировал Loggly, скомпрометировать ваши серверы? Кажется, небезопасно запускать удаленный код, подобный этому. – cdmckay

1

Я знаю, что это вопрос довольно старый, но я обнаружил, что ответы реально не ответить на вопрос или просто не работало правильно, когда выполнены. Я обнаружил, что это работает (файл .ebextenstions/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 

"01-преобразование-rsyslog.conf" шаг не является обязательным; Я использую это, чтобы установить тег NODE_ENV в файле. «22-loggly.conf.temp» - это модифицированная версия файла «22-loggly.conf», созданная в «/etc/rsyslog.d/» при запуске сценария установки источника Linux (https://www.loggly.com/install/configure-syslog.py). Я только что установил его на экземпляр ec2 и скопировал файл.

Примечание. Мне пришлось добавить команду/sbin в мою служебную команду, потому что она не срабатывала для меня без нее. Кроме того, это перезапускает syslog при каждом развертывании, что должно быть хорошо.

Теперь вам нужно только убедиться, что ваше приложение зарегистрировано в syslog. Для Java это будет log4j или аналогичный. Для Node.js (это то, что я использую) работает rconsole (https://github.com/tblobaum/rconsole).

0

Следуйте моей конфигурации логоса в эластичном шланге. Для Linux + log4j

по конфигурации .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 скрипт в Python для 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() 

В log4j.properties на вашем 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 
Смежные вопросы