LogStashLogger расширяет класс Ruby Logger
для входа непосредственно в Logstash. Он поддерживает запись на различные выходные данные в формате logstash JSON. Это улучшение по сравнению с записью в файл или системный журнал, поскольку Logstash может получать структурированные данные напрямую.
Может писать напрямую в прослушиватель logstash через соединение UDP или TCP/SSL.
Может писать в файл, Redis, Kafka, Kinesis, Firehose, сокет unix, системный журнал, стандартный вывод или стандартный поток ошибок.
Logger может принимать в качестве входных данных строковое сообщение, хеш, LogStash::Event
, объект или строку JSON.
События автоматически заполняются сообщением, меткой времени, хостом и серьезностью.
Записывает в формате logstash JSON, но поддерживает и другие форматы.
Может писать на несколько выходов.
Сообщения журнала буферизуются и автоматически пересылаются при возникновении проблем с подключением.
Легко интегрируется с Rails посредством конфигурации.
Добавьте эту строку в Gemfile вашего приложения:
gem 'logstash-logger'
И затем выполните:
$ bundle
Или установите его самостоятельно как:
$ gem install logstash-logger
require 'logstash-logger'# По умолчанию UDP на 0.0.0.0logger = LogStashLogger.new(port: 5228)# Явно укажите хост и тип (UDP или TCP)udp_logger = LogStashLogger.new(type: :udp, хост: 'localhost' , порт: 5228)tcp_logger = LogStashLogger.new(тип: :tcp, хост: 'localhost', порт: 5229)# Другие типы loggersfile_logger = LogStashLogger.new(тип: :file, путь: 'log/development.log', sync: true)unix_logger = LogStashLogger.new(type: :unix, путь: '/tmp/sock')syslog_logger = LogStashLogger.new(тип: :syslog)redis_logger = LogStashLogger.new(type: :redis)kafka_logger = LogStashLogger.new(type: :kafka)stdout_logger = LogStashLogger.new(type: :stdout)stderr_logger = LogStashLogger.new(type: :stderr)io_logger = LogStashLogger .new(тип: :io, io: io)# Используйте другой форматtercee_logger = LogStashLogger.new( тип: :tcp, хост: 'logsene-receiver-syslog.sematext.com', порт: 514, форматтер: :cee_syslog)custom_formatted_logger = LogStashLogger.new( тип: :redis, форматтер: MyCustomFormatter)lambda_formatted_logger = LogStashLogger.new( введите: :stdout, форматтер: ->(серьезность, время, имя программы, сообщение) { "[#{имя_программы}] #{msg}" })ruby_default_formatter_logger = LogStashLogger.new( тип: :файл, путь: 'log/development.log', formatter: ::Logger::Formatter)# Отправка сообщений на несколько выходов. Каждый вывод будет иметь один и тот же формат. # Системный журнал не может быть выходом, поскольку для него требуется отдельный logger.multi_delegating_logger = LogStashLogger.new( введите: :multi_delegator, выходные данные: [{ тип: :file, путь: 'log/development.log' },{ тип: :udp, хост: 'localhost', порт: 5228 } ])# Балансируйте сообщения между несколькими выходами.# Работает так же, как мульти-делегатор, но случайным образом выбирает выход для отправки каждого сообщения.balancer_logger = LogStashLogger.new( тип: :балансир, выходные данные: [{ тип: :udp, хост: 'host1', порт: 5228 },{ тип: :udp, хост: 'host2', порт: 5228 } ])# Отправляйте сообщения нескольким регистраторам.# Используйте это, если вам нужно отправлять разные форматы на разные выходы.# Если вам нужно войти в системный журнал, вы должны использовать this.multi_logger = LogStashLogger.new( введите: :multi_logger, выходные данные: [{ тип: :file, путь: 'log/development.log', форматтер: ::Logger::Formatter }, { тип: :tcp, хост: 'localhost', порт: 5228, форматтер: :json } ])# Следующие сообщения записываются на порт UDP 5228:logger.info 'test'# {"message":"test","@timestamp":"2014-05-22T09:37:19.204-07:00", "@version":"1","severity":"INFO","host":"[hostname]"}logger.error '{"message": "error"}'# {"message":"error","@timestamp":"2014-05-22T10:10:55.877-07:00","@version":"1","severity":" ОШИБКА","host":"[hostname]"}сообщение logger.debug: 'test', foo: 'bar'# {"message":"test","foo":"bar","@timestamp":"2014-05-22T09:43:24.004-07:00","@version":"1","severity" :"DEBUG","host":"[hostname]"}logger.warn LogStash::Event.new(message: 'test', foo: 'bar')# {"message":"test","foo":"bar","@timestamp":"2014-05-22T16:44:37.364Z","@version":"1","severity":"WARN ","host":"[hostname]"}# Tagged logginglogger.tagged('foo') { logger.fatal('bar') }# {"message":"bar","@timestamp":"2014-05-26T20:35:14.685-07:00","@version":"1","severity":"FATAL","host" :"[имя хоста]","tags":["foo"]}
Вы можете использовать URI для настройки регистратора logstash вместо хеша. Это полезно в таких средах, как Heroku, где вам может потребоваться прочитать значения конфигурации из среды. Схема URI — type://host:port/path?key=value
. Некоторые примеры конфигураций URI приведены ниже.
udp://localhost:5228 tcp://localhost:5229 unix:///tmp/socket file:///path/to/file redis://localhost:6379 kafka://localhost:9092 stdout:/ stderr:/
Передайте URI в свой регистратор logstash следующим образом:
# Считайте URI из переменной среды logger = LogStashLogger.new(uri: ENV['LOGSTASH_URI'])
Чтобы logstash правильно получал и анализировал события, вам необходимо настроить и запустить прослушиватель, использующий кодек json_lines
. Например, чтобы получать события по UDP на порту 5228:
вход { udp {хост => порт "0.0.0.0" => 5228codec => json_lines }}
Вместо этого для входных данных File и Redis следует использовать кодек json
. Для получения дополнительной информации прочтите документацию Logstash.
Дополнительные примеры конфигурации см. в каталоге примеров.
Если вы используете TCP, есть возможность добавить сертификат SSL к хешу параметров при инициализации.
LogStashLogger.new (тип:: TCP, порт: 5228, ssl_certificate: "/path/to/certificate.crt")
Сертификат и ключ SSL можно сгенерировать с помощью
openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout logstash.key -out logstash.crt
Вы также можете включить SSL без сертификата:
LogStashLogger.new (тип:: TCP, порт: 5228, ssl_enable: true)
Укажите контекст SSL, чтобы иметь больше контроля над поведением. Например, установите режим проверки:
ctx = OpenSSL::SSL::SSLContext.newctx.set_params(verify_mode: OpenSSL::SSL::VERIFY_NONE)LogStashLogger.new(тип: :tcp, порт: 5228, ssl_context: ctx)
Для SSL требуется следующая конфигурация Logstash:
вход { TCP {хост => "0.0.0.0" порт => 5228codec => json_linessl_enable => truessl_cert => "/path/to/certificate.crt"ssl_key => "/path/to/key.key" }}
Проверка имени хоста включена по умолчанию. Без дальнейшей настройки имя хоста, указанное в :host
, будет использоваться для проверки подлинности сертификата сервера.
Если вы не передадите :ssl_context
или не передадите значение false в параметр :verify_hostname
, проверка имени хоста не произойдет.
Проверьте имя хоста с помощью параметра :host
ctx = OpenSSL::SSL::SSLContext.newctx.cert = '/path/to/cert.pem'ctx.verify_mode = OpenSSL::SSL::VERIFY_PEERLogStashLogger.new тип: :tcp, хост: 'logstash.example.com' порт: 5228, ssl_context: ctx
Проверьте имя хоста, отличное от параметра :host
.
ЛогСташЛоггер.новый тип: :tcp, хост: '1.2.3.4' порт: 5228, ssl_context: ctx, verify_hostname: 'server.example.com'
Явно отключить проверку имени хоста
ЛогСташЛоггер.новый тип: :tcp, хост: '1.2.3.4' порт: 5228, ssl_context: ctx, проверить_имя_хоста: ложь
LogStashLogger
по умолчанию регистрирует объект JSON в формате, указанном ниже.
{ "message":"Некоторое сообщение", "@timestamp":"2015-01-29T10:43:32.196-05:00", "@version":"1", "severity":"INFO", "host ":"имя хоста"}
Некоторым приложениям может потребоваться прикрепить к каждому сообщению дополнительные метаданные. LogStash::Event
можно манипулировать напрямую, указав блок customize_event
в конфигурации LogStashLogger
.
config = LogStashLogger.configure do |config| config.customize_event do |event|event["other_field"] = "some_other_value" положить конец
Эта конфигурация приведет к следующему выводу.
{"message": "Некоторое сообщение","@timestamp": "2015-01-29T10:43:32.196-05:00","@version": "1","severity": "INFO","host ": "имя_хоста","other_field": "some_other_value"}
Этот блок имеет полный доступ к событию, поэтому вы можете удалять поля, изменять существующие поля и т. д. Например, чтобы удалить метку времени по умолчанию:
config = LogStashLogger.configure do |config| config.customize_event do |event|event.remove('@timestamp') положить конец
Вы также можете настроить события для каждого регистратора, передав вызываемый объект (лямбда или proc) в параметр customize_event
при создании регистратора:
LogStashLogger.new(customize_event: ->(event){ event['other_field'] = 'other_field' })
Для устройств, которые устанавливают соединение с удаленной службой, сообщения журнала буферизуются внутри и сбрасываются в фоновый поток. Если возникает проблема с соединением, сообщения сохраняются в буфере и автоматически отправляются повторно до тех пор, пока соединение не будет успешным. Выходные данные, поддерживающие пакетную запись (Redis и Kafka), будут записывать сообщения журнала в массовом порядке из буфера. Эта функциональность реализована с помощью ответвления Stud::Buffer. Вы можете настроить его поведение, передав в LogStashLogger следующие параметры:
:buffer_max_items — Максимальное количество элементов для буферизации перед сбросом. По умолчанию 50.
:buffer_max_interval — Максимальное количество секунд ожидания между сбросами. По умолчанию 5.
:drop_messages_on_flush_error — удалять сообщения при возникновении ошибки сброса. По умолчанию ложь.
:drop_messages_on_full_buffer — удалять сообщения, когда буфер заполнен. По умолчанию истинно.
:sync — Очищать буфер каждый раз при получении сообщения (блокировка). По умолчанию ложь.
:buffer_flush_at_exit - Сбрасывать сообщения при выходе из программы. По умолчанию истинно.
:buffer_logger — Регистратор для записи в буфер сообщений отладки/ошибок. По умолчанию нет.
Вы можете отключить буферизацию, установив sync = true
.
Обратите внимание на следующие предостережения относительно такого поведения:
При повторной попытке могут быть отправлены повторяющиеся сообщения журнала. Для таких результатов, как Redis и Kafka, которые пишутся пакетами, весь пакет может быть отправлен повторно. Если это проблема, вы можете добавить поле UUID к каждому событию, чтобы однозначно идентифицировать его. Вы можете сделать это в блоке customize_event
или с помощью фильтра UUID logstash.
Сообщения журнала все еще можно потерять. Ruby не сразу обнаружит проблему соединения TCP/UDP. В моем тестировании Ruby потребовалось около 4 секунд, чтобы заметить, что принимающая сторона не работает, и начать генерировать исключения. Поскольку прослушиватели logstash через TCP/UDP не подтверждают полученные сообщения, невозможно узнать, какие сообщения журнала следует отправить повторно.
Когда sync
отключена, Ruby может буферизовать данные внутри себя перед записью на устройство ввода-вывода. Вот почему вы можете не увидеть сообщения, записанные немедленно в сокет UDP или TCP, даже если буфер LogStashLogger периодически очищается.
По умолчанию сообщения отбрасываются, когда буфер заполняется. Это может произойти, если источник вывода не работает слишком долго или сообщения журнала принимаются слишком быстро. Если ваше приложение внезапно завершится (например, из-за SIGKILL или отключения электроэнергии), весь буфер будет потерян.
Вы можете снизить вероятность потери сообщений, увеличив buffer_max_items
(чтобы в буфере могло храниться больше событий) и уменьшив buffer_max_interval
(чтобы сократить время ожидания между сбросами). Это увеличит нагрузку на память вашего приложения, поскольку сообщения журнала накапливаются в буфере, поэтому убедитесь, что вы выделили достаточно памяти для своего процесса.
Если вы не хотите терять сообщения, когда буфер заполняется, вы можете установить drop_messages_on_full_buffer = false
. Обратите внимание: если буфер заполнится, любое входящее сообщение журнала будет заблокировано, что может быть нежелательно.
Все выходы регистратора поддерживают настройку sync
. Это аналогично настройке «режим синхронизации» для объектов Ruby IO. Если установлено значение true
, вывод немедленно сбрасывается и не буферизуется во внутренней буферизации. Обычно для устройств, подключающихся к удаленной службе, буферизация полезна, поскольку она повышает производительность и снижает вероятность ошибок, влияющих на программу. Для этих устройств по умолчанию sync
значение false
, и рекомендуется оставить значение по умолчанию. Возможно, вы захотите включить режим синхронизации для тестирования, например, если вы хотите видеть сообщения журнала сразу после их записи.
Рекомендуется включить режим синхронизации для вывода файлов и сокетов Unix. Это гарантирует, что сообщения журнала из разных потоков или процессов будут правильно записываться в отдельные строки.
Подробнее см. № 44.
Если во время записи сообщения на устройство возникает исключение, оно регистрируется с помощью внутреннего средства регистрации. По умолчанию это регистрируется в $stderr. Вы можете изменить регистратор ошибок, задав LogStashLogger.configuration.default_error_logger
или передав свой собственный объект регистратора в ключе конфигурации :error_logger
при создании экземпляра LogStashLogger.
LogStashLogger обеспечивает поддержку отключения логгера в стиле Rails. Реализация была извлечена из Rails, но не имеет зависимостей, поэтому ее можно использовать вне приложения Rails. Интерфейс такой же, как в Rails:
logger.silence(temporary_level) сделать ...конец
По умолчанию LogStashLogger создает средство ведения журнала, расширяющее встроенный в Ruby класс Logger
. Если вам требуется другая реализация журнала, вы можете использовать другой класс, передав класс с опцией logger_class
.
Обратите внимание, что для системного журнала требуется класс Syslog::Logger
, который нельзя изменить.
Поддерживает Rails 4.2 и 5.x.
По умолчанию каждое сообщение журнала Rails будет записано в logstash в формате LogStash::Event
JSON.
Для минимальных и более структурированных событий logstash попробуйте один из следующих драгоценных камней:
лесозаготовка
дворник
В настоящее время эти драгоценные камни выводят строку JSON, которую затем анализирует LogStashLogger. Будущие версии этих драгоценных камней потенциально могут иметь более глубокую интеграцию с LogStashLogger (например, путем прямой записи объектов LogStash::Event
).
Добавьте следующее в свой config/environments/production.rb
:
# Необязательно, Rails устанавливает значение по умолчанию на :infoconfig.log_level = :debug# Необязательно, Rails 4 по умолчанию имеет значение true в разработке и false в производствеconfig.autoflush_log = true# Необязательно, используйте URI для настройки. Полезно для Herokuconfig.logstash.uri = ENV['LOGSTASH_URI']# Необязательно. По умолчанию: json_lines. Если имеется несколько выходных данных, # все они будут использовать один и тот же форматтер.config.logstash.formatter = :json_lines# Необязательно, регистратор для регистрации ошибок записи. По умолчанию протоколируется в $stderrconfig.logstash.error_logger = Logger.new($stderr)# Необязательно, максимальное количество элементов для буферизации перед сбросом. По умолчанию 50config.logstash.buffer_max_items = 50# Необязательно, максимальное количество секунд ожидания между сбросами. По умолчанию 5config.logstash.buffer_max_interval = 5# Необязательно, отбрасывать сообщение при возникновении ошибки соединения. По умолчанию falseconfig.logstash.drop_messages_on_flush_error = false# Необязательно, удалять сообщения, когда буфер заполнен. По умолчанию trueconfig.logstash.drop_messages_on_full_buffer = true
# Необязательно, по умолчанию '0.0.0.0'config.logstash.host = 'localhost'# Необязательно, по умолчанию: :udp.config.logstash.type = :udp# Обязательно, порт для подключения к config.logstash.port = 5228
# Необязательно, по умолчанию '0.0.0.0'config.logstash.host = 'localhost'# Обязательно, порт для подключения к config.logstash.port = 5228# Обязательноconfig.logstash.type = :tcp# Необязательно, включает SSLconfig.logstash. ssl_enable = правда
# Requiredconfig.logstash.type = :unix# Requiredconfig.logstash.path = '/tmp/sock'
Если вы используете Ruby 1.9, добавьте Syslog::Logger
v2 в свой Gemfile:
gem 'SyslogLogger', '2.0'
Если вы используете Ruby 2+, Syslog::Logger
уже встроен в стандартную библиотеку.
# Обязательныйconfig.logstash.type = :syslog# Необязательный. По умолчанию — «ruby»config.logstash.program_name = «MyApp»# Необязательный уровень возможностей по умолчанию. Работает только в Ruby 2+config.logstash.facility = Syslog::LOG_LOCAL0
Добавьте драгоценный камень Redis в свой Gemfile:
gem 'redis'
# Requiredconfig.logstash.type = :redis# Необязательно, по умолчанию используется список 'logstash'config.logstash.list = 'logstash'# Все остальные параметры передаются клиенту Redis# Поддерживаемые параметры включают хост, порт, путь, пароль , url# Пример:# Необязательно, Redis по умолчанию будет использовать localhostconfig.logstash.host = 'localhost'# Необязательно, Redis по умолчанию будет использовать порт 6379config.logstash.port = 6379
Добавьте драгоценный камень Посейдон в свой Gemfile:
gem 'poseidon'
# Requiredconfig.logstash.type = :kafka# Необязательно, по умолчанию будет использоваться 'logstash' themeconfig.logstash.path = 'logstash'# Необязательно, по умолчанию будет 'logstash-logger' Producerconfig.logstash.producer = 'logstash-logger '# Необязательно, по умолчанию будет localhost:9092 host/portconfig.logstash.hosts = ['localhost:9092']# Необязательно, по умолчанию будет 1 с backoffconfig.logstash.backoff = 1
Добавьте драгоценный камень aws-sdk в свой Gemfile:
# aws-sdk >= 3.0 gem 'aws-sdk-kinesis' # aws-sdk < 3.0 gem 'aws-sdk'
# Requiredconfig.logstash.type = :kinesis# Необязательно, по умолчанию будет 'logstash'streamconfig.logstash.stream = 'my-stream-name'# Необязательно, по умолчанию будет 'us-east-1'config.logstash.aws_region = 'us-west-2'# Необязательно, по умолчанию используется переменная среды AWS_ACCESS_KEY_IDconfig.logstash.aws_access_key_id = 'ASKASKHLD12341'# Необязательно, по умолчанию используется переменная среды AWS_SECRET_ACCESS_KEYconfig.logstash.aws_secret_access_key = 'ASKASKHLD1234123412341234'
Добавьте драгоценный камень aws-sdk в свой Gemfile:
# aws-sdk >= 3.0 gem 'aws-sdk-firehose' # aws-sdk < 3.0 gem 'aws-sdk'
# Requiredconfig.logstash.type = :firehose# Необязательно, по умолчанию будет использоваться доставка «logstash». us-west-2'# Необязательно, по умолчанию будет использоваться поставщик учетных данных AWS по умолчанию Chainconfig.logstash.aws_access_key_id = 'ASKASKHLD12341'# Необязательно, по умолчанию используется поставщик учетных данных AWS по умолчанию Chainconfig.logstash.aws_secret_access_key = 'ASKASKHLD1234123412341234'
# Обязательныйconfig.logstash.type = :file# Необязательный, по умолчанию — журнал Rails pathconfig.logstash.path = 'log/production.log'
# Обязательныйconfig.logstash.type = :io# Обязательныйconfig.logstash.io = io
# Requiredconfig.logstash.type = :multi_delegator# Requiredconfig.logstash.outputs = [ {тип: :файл,путь: 'log/production.log' }, {тип: :udp,порт: 5228,хост: 'localhost' }]
# Обязательноconfig.logstash.type = :multi_logger# Обязательно. Каждый регистратор может иметь свой собственный formatter.config.logstash.outputs = [ {тип: :файл,путь: 'log/production.log',форматтер:::Logger::Formatter }, {тип: :udp,порт: 5228,хост: 'localhost' }]
В веб-приложениях вы можете регистрировать данные из HTTP-запросов (например, заголовков) с помощью промежуточного программного обеспечения RequestStore. В следующем примере предполагается, что Rails.
# в Gemfilegem 'request_store'
# в application.rbLogStashLogger.configure do |config| config.customize_event do |event|event["session_id"] = RequestStore.store[:load_balancer_session_id] положить конец
# в app/controllers/application_controller.rbbefore_filter :track_load_balancer_session_iddef track_load_balancer_session_id RequestStore.store[:load_balancer_session_id] = request.headers["X-LOADBALANCER-SESSIONID"]end
Если ваше приложение разветвляется (как это часто бывает со многими веб-серверами), вам нужно будет управлять очисткой ресурсов в ваших экземплярах LogStashLogger. Для этой цели доступен метод экземпляра #reset
. Вот пример конфигурации для нескольких распространенных веб-серверов, используемых с Rails:
Пассажир:
::PhusionPassenger.on_event(:starting_worker_process) делает |форк| Rails.logger.resetend
Пума:
# В config/puma.rbon_worker_boot сделайте Rails.logger.resetend
Единорог
# В config/unicorn.rbafter_fork выполните |server, worker| Rails.logger.resetend
Проверено для работы с:
МРТ Рубин 2,2 - 2,5
JRuby 9.x
Рубиниус
Версии Ruby < 2.2 имеют статус EOL и больше не поддерживаются.
Это зависит от ваших конкретных потребностей, но большинство приложений должны использовать значение по умолчанию (UDP). Вот преимущества и недостатки каждого типа:
UDP быстрее, чем TCP, поскольку он асинхронен (по принципу «выстрелил и забыл»). Однако это означает, что сообщения журнала могут быть удалены. Это нормально для многих приложений.
TCP проверяет, что каждое сообщение было получено посредством двусторонней связи. Он также поддерживает SSL для безопасной передачи сообщений журнала по сети. Это может замедлить сканирование вашего приложения, если прослушиватель TCP испытывает большую нагрузку.
Файл прост в использовании, но вам придется беспокоиться о ротации журналов и нехватке места на диске.
Запись в сокет Unix выполняется быстрее, чем запись в порт TCP или UDP, но работает только локально.
Запись в Redis хороша для распределенных установок, генерирующих массу журналов. Однако у вас будет еще одна движущаяся часть, и вам придется беспокоиться о том, что у Redis закончится память.
Запись в стандартный вывод рекомендуется только в целях отладки.
Для более подробного обсуждения UDP и TCP я рекомендую прочитать эту статью: UDP против TCP.
Если вы используете устройство, поддерживаемое объектом ввода-вывода Ruby (например, файл, сокет UDP или сокет TCP), имейте в виду, что Ruby сохраняет свой собственный внутренний буфер. Несмотря на то, что LogStashLogger буферизует сообщения и периодически сбрасывает их, данные, записанные в объект ввода-вывода, могут буферизоваться внутри Ruby на неопределенный срок и могут даже не записываться до тех пор, пока программа не завершится. Если это вас беспокоит или вам нужно немедленно просмотреть сообщения журнала, единственный выход — установить параметр sync: true
.
Ваше приложение, вероятно, пытается зарегистрировать данные, которые не закодированы корректным образом. Когда это произойдет, стандартная библиотека JSON Ruby вызовет исключение. Возможно, вы сможете преодолеть эту проблему, заменив другой кодировщик JSON, например Oj. Используйте драгоценный камень oj_mimic_json, чтобы использовать Oj для генерации JSON.
Heroku рекомендует установитьrails_12factor, чтобы журналы отправлялись на STDOUT. К сожалению, это переопределяет LogStashLogger, предотвращая отправку журналов в настроенное место назначения. Решение состоит в том, чтобы rails_12factor
из вашего Gemfile.
Скорее всего, это не проблема LogStashLogger, а другой драгоценный камень, меняющий уровень журнала Rails.logger
. Это особенно вероятно, если вы используете многопоточный сервер, такой как Puma, поскольку драгоценные камни часто изменяют уровень журнала Rails.logger
не поточно-безопасным способом. См. № 17 для получения дополнительной информации.
Если вы используете вывод UDP и записываете данные в прослушиватель logstash, вы, скорее всего, столкнулись с ошибкой в реализации UDP прослушивателя logstash. На данный момент нет известного решения. См. № 43 для получения дополнительной информации.
Известным недостатком использования TCP или UDP является ограничение общего размера сообщения в 65535 байт. Чтобы обойти эту проблему, вам придется обрезать сообщение, установив максимальный размер сообщения:
LogStashLogger.configure do |config| config.max_message_size = 2000конец
Это приведет к усечению только поля message
события LogStash. Поэтому убедитесь, что вы установили максимальный размер сообщения значительно меньше 65535 байт, чтобы освободить место для других полей.
Rails 3.2, MRI Ruby < 2.2 и JRuby 1.7 больше не поддерживаются, поскольку они прошли EOL. Если вы используете более старую версию Ruby, вам нужно будет использовать версию 0.24 или ниже.
Ключ source
события был заменен на host
, чтобы лучше соответствовать последнему журналу.
Конструктор (host, port, type)
устарел в пользу конструктора хэша параметров.
LogStash::Event
использует формат v1, начиная с версии 1.2+. Если вы используете версию 1, вам необходимо установить LogStashLogger версии 0.4+. Это не имеет обратной совместимости со старым LogStash::Event
v1.1.5, который использует формат v0.
Более ранние версии этого драгоценного камня (<= 0.2.1) реализовывали только TCP-соединение. Более новые версии (>= 0.3) также реализуют UDP и используют его как новое значение по умолчанию. Имейте в виду, что если вы используете конструктор по умолчанию и все еще требуете TCP, вам следует добавить дополнительный аргумент:
# Теперь по умолчанию используется UDP вместо TCPlogger = LogStashLogger.new('localhost', 5228)# Явно укажите TCP вместо UDPlogger = LogStashLogger.new('localhost', 5228, :tcp)
Дэвид Батлер
pctj101
Гэри Ренни
Ник Этье
Аррон Мабри
Ян Шульте
Курт Престон
Крис Блатчли
Феликс Бехштейн
Вадим Казаков
Анил Ремтулла
Никита Воробей
мальчик-огонь1919
Майк Гандерлой
Виталий Городецкий
Кортленд Колдуэлл
Бибек Шреста
Алекс Янус
Крейг Рид
Глазциг
Бин Лан
Жоао Фернандес
КрутоЭлвис
Сергей Пьянков
Алек Хоуи
Алексей Красноперов
Габриэль де Оливейра
Владислав Сябрук
Матус Вакула
Разветвить это
Создайте свою ветку функций ( git checkout -b my-new-feature
)
Зафиксируйте изменения ( git commit -am 'Add some feature'
)
Нажмите на ветку ( git push origin my-new-feature
)
Создать новый запрос на включение