Commit graph

93 commits

Author SHA1 Message Date
Jordan Sissel
55d04e4301 Use structured logging. 2016-03-07 11:16:41 -08:00
Jordan Sissel
3c4b222eaf Make ${FOO} evaluation fail if FOO is not an environment variable
This updates the specs to cover this expectation. It also makes
assertions about default values if a default `${FOO:default value}` is
given.

Specs pass for me (18 specs)

(Improves on #4710)
2016-03-07 11:16:32 -08:00
Jordan Sissel
74fac6e439 Small refactor to use String#gsub and named captures for text replacements.
The config/mixin_spec.rb specs are passing for me (20 of 20 passing)

(Improves upon #4710)
2016-03-07 11:16:22 -08:00
fbaligand
93b6b6eaf9 Fix issue #3944 : Add support for environment variable injection in logstash plugin configuration 2016-03-07 11:01:54 -08:00
Joao Duarte
0099537868 support live reloading of multiple pipelines
NOTE: this is a backport from master

* reload config from files
* add reload config flag and allow reload through sighup
* move signal handling to runner
* add "-r" flag to detect changes in config and reload
* make SIGHUP reload config file
* make agent execute either loop to detect changes or sleep forever
* sigint/sigterm shut down the agent.execute task
* stop agent if pipeline terminates
* Better shutdown logic for controller and pipeline
* support multiple pipeline reloading and other cleanups
* serialize upgrade_state and running_pipelines?
* remove useless @thread from pipeline
* remove agent registry and cleanup
* reduce reload_interval from 5 to 3
* remove useless MissingAgentError class
* fix exit codes for reload_state failures
* explain why thread var exists in agent.rb
* properly pass backtrace exceptions to oops
* remove is_config_test from loader
* better documentation on agent/runner/pipeline methods

Fixes #4643
2016-03-07 11:55:57 +00:00
Andrew Cholakian
a44830792c Fix oops backtrace logging, it should be structured
Fixes #4724
2016-03-03 16:26:56 +00:00
Andrew Cholakian
8c9aa4e679 This brings back --filter-workers for the 2.x series. This will be gone in the next major version
Fixes #4669

Fixes #4672
2016-02-10 22:57:31 +00:00
Colin Surprenant
4625de45ca new Event#from_json method
from_json POC

add Event#from_json with corresponding specs

pre-inititalize error class constants

tests for Event#from_json

support array of events in from_json, upgrade to latest jackson

add test for partially invalid json array
2016-02-09 12:52:55 -05:00
Andrew Cholakian
080a160562 Add specs to code around flusher initialization order
Fixes #4623
2016-02-04 16:41:33 +00:00
Andrew Cholakian
789667d2f1 Fix flusher initialization to prevent race breaking flushing
If start_flusher is called before @running is set to true it may shut itself
down before it truly starts. This fixes that bug.

Fixes #4623
2016-02-04 16:41:33 +00:00
Pier-Hugues Pellerin
a17011656d Hide milestone confusing message to the user
This PR change the log level when a user load a plugin with a milestone
option to debug instead of warn.

Fixes: #4562

Fixes #4603
2016-02-03 23:52:30 +00:00
Joao Duarte
ad109f0a5b bump cabin to 0.8.x
Fixes #4616
2016-02-02 17:24:30 +00:00
Pier-Hugues Pellerin
97e1034854 Fix a warning in the tests
When running the test for the `ShutdownWatcher` in the full suite, the
logger of the class was incorrectly setup, this PR make sure we use a
silent logger instead.

Fixes #4581

Fixes #4582
2016-01-28 20:12:50 +00:00
Colin Surprenant
b985abebfc code cleanups and integration work for defaulting to Java Event implementation
cleaned dependencies, removed Guava code

default to java event

also compile java event

use json-unit for json result assertions

remove Java 8 specific constructs to be able to compile on Java 7

use jar-dependencies

better jar file loading

copy jar into lib after build

add post-build copy and clean of gem jar and re-indented file

fix jar destination

include generated jar in gem

remove useless ArrayList constructions

add tests for KeyNode.join method

remove useless  shadow and disable unchecked warnings

update gradle dependency to 2.8

fix deprecated asserEquals usage

simplify convoluted list contruction

fix array fields nil values handling

moar nil value tests

simplify for loop
2016-01-26 15:07:06 -05:00
Pere Urbon-Bayes
abf066f6c5 add test to verify that a cloned codec is only registerd once
Fixes #4533
2016-01-21 16:33:58 +00:00
Pere Urbon-Bayes
e17d861269 remove unnecessary re register when doing deep clone for codecs
Fixes #4533
2016-01-21 16:33:58 +00:00
Guy Boertje
681719bd9a Better method of ensuring that args are not mutated by plugin initialize
add test for subclasses of codec, filter, input and output

Register codec clone, use String clone not dup so frozen strings stay so

Fixes #4444

Fixes #4473
2016-01-14 14:15:55 +00:00
Joao Duarte
2952abedc6 distinguish between user set and default pipeline settings 2016-01-13 10:14:58 +00:00
Andrew Cholakian
51ae206f10 Check integer values for pipeline arguments
Fixes #4448

Fixes #4456
2016-01-11 23:29:00 +00:00
Suyog Rao
d961ea11bb Pin jruby-openssl to latest released version
Fixes #4437

Fixes #4438
2016-01-08 22:17:44 +00:00
Joao Duarte
e0eec78244 rename pipeline-worker settings to symbols
Fixes #4430
2016-01-07 18:58:40 +00:00
Andrew Cholakian
a8d622b1b4 Code cleanup per PR review in OutputDelegator
Fixes #4391
2016-01-07 17:19:09 +00:00
Andrew Cholakian
aa9f1ca46d Link to jruby issue in OutputDelegator
Fixes #4391
2016-01-07 17:19:09 +00:00
Andrew Cholakian
3b3d5077ba Remove unnecessary logger line used for debugging in outputdelegator
Fixes #4391
2016-01-07 17:19:09 +00:00
Andrew Cholakian
2fc233e25f Cleanup code around warnings around outputs with no workers allowed
Fixes #4391
2016-01-07 17:19:09 +00:00
Andrew Cholakian
edd1dd1814 Add debug log for determining the number of output workers for output delegator
Fixes #4391
2016-01-07 17:19:09 +00:00
Andrew Cholakian
ed6882bf63 Fix jruby 1.7.x bug around define_singleton_method.
We were getting some bizzare
errors (https://github.com/elastic/logstash/pull/4391#issuecomment-169477728)
on the file output with the new OutputDelegator changes. By switching
away from method(:mymethod) to blocks with define_singleton_method they
went away.

This bug is only present with Jruby 1.7.x (tested with 1.7.22 and
1.7.23). Jruby 9.x is fine.

Fixes #4391
2016-01-07 17:19:09 +00:00
Andrew Cholakian
543c3f7497 Improve OutputDelegator implementation and specs.
Backwards compatibility is now implemented for existing workers_not_supported uses.

This clears up a few bugs in the initial pass as well.

Fixes #4391
2016-01-07 17:19:09 +00:00
Andrew Cholakian
ee12468354 Improved semantics for OutputDelegator This commit greatly improves the semantics for the OutputDelegator. It now: * Has an API for declaring if an output is threadsafe to avoid instance creation * By default sets the number of workers for an output to be == the number of pipeline workers * Moves the worker safe API to the class, not instance level * Strongly enforces the worker safety API * Should provide better performance for threadsafe plugins
Fixes #4391
2016-01-07 17:19:09 +00:00
Pier-Hugues Pellerin
da26b88648 Replace def #{type}_func with define_singleton_method
When you run multiples pipeline and the config code get evaluated, on
every evaluation the class cached is clear, everytime you were calling a
`func` method you had the latest evaluated code. The `filter_func` and
the `output_func` need to be unique for every instance of the pipeline,
this PR replace the `def` with a `define_single_method` call ensuring
the uniqueness of the code on every instance.

This PR is based on #4254

Fixes #4298
2016-01-06 20:11:21 +00:00
Pier-Hugues Pellerin
2e93758c66 Remove sized_queue.rb
Since Logstash 2.2, we now use Java SynchronousQueue instead of ruby
sizequeue

Fixes #4422
2016-01-06 19:22:49 +00:00
Joao Duarte
836482edfb rename ShutdownController to ShutdownWatcher
slightly adjust the metaphor for the class that is responsible for
monitoring a pipeline's shutdown process, report on its status and
intervene if it's stalled
2016-01-05 17:40:32 +00:00
Pier-Hugues Pellerin
4597eac21d Add a WrappedSynchronousQueue#offer method
Expose the Java's `#offer` method of the `SynchronousQueue` class,
This method allow the input developper to correctly apply back pressure
to the network clients.

If you use `#push` it will block forever until the pipeline free some
space, this behavior is sufficient if the pipeline outputs are healthy.
But if the output stale the backpressure will be applied up to the input
(producers) when reading a file this scenario is fine since we will just
stop reading the file until the thread unblock again.

In the context of network clients, the story is a bit different the
clients will timeout and try to reconnect to restransmit their payload
creating multiple new connection thread block on the queue. In some case
this will lead into a OOM issues.

This PR is the first step to communicate that the queue is under
pressure.

Fixes #4408
2016-01-05 17:09:58 +00:00
Andrew Cholakian
84d0e42a30 Up default # of pipeline workers to 100% of cores
This is predicated on the fact that with the ng_pipeline it is expected that workers
will spend a significant amount of time in iowait due to outputs like the Elasticsearch
output. In benchmarks based on real-world Apache log files the best performance came out
of scenarios where pipeline_workers > num_cpu_cores. Setting this to default to the # of
cores is a defensive decision that should handle cases where users have particularly IO
heavy inputs.

For most users we should recommend setting the number of workers to be as high as possible
until performance decreases.

Previous benchmark information:
https://github.com/elastic/logstash/pull/4340

Fixes #4414
2016-01-05 17:01:23 +00:00
Andrew Cholakian
e5cc9c407d Warn on potential memory issues when a large number of inflight messages are present
Fixes #4410
2016-01-04 19:14:14 +00:00
Colin Surprenant
3081c53a99 fix to support legacy plugins specs monkeypatching pipelines 2015-12-21 17:09:29 -05:00
Andrew Cholakian
8de54e46ce NG Pipeline
Fixes #4363
2015-12-16 20:03:05 +00:00
Joao Duarte
c3c15aa81f move misplaced shutdown_controller after broken merge
Fixes #4268
2015-12-02 18:18:44 +00:00
Joao Duarte
21dfae1652 fix shutdown controller when using no filters 2015-11-27 10:48:19 +00:00
Joao Duarte
79b90b19d7 add shutdown controller to force exit on stalled shutdown
* start logstash with --allow-unsafe-shutdown to force_exit on stalled shutdown
* by default --allow-unsafe-shutdown is disabled
* stall detection kicks in when SIGTERM/SIGINT is received
* check if inflight event count isn't going down and if there are blocked/blocking plugin threads
2015-11-19 15:35:47 +00:00
Pere Urbon-Bayes
577d8377b8 This adds a feature to let users dump all their installed plugins,
including dependencies, and reuse them in an offline installation by
providing an package for it. It adds two important commands to the
plugin manager, the pack and upack, to handle package creation and
installation and adds the --local flag to install and update to pull
plugins from the installed local packages.

Former commits:

add a task to create a bundle, under vendor/cache of the installed gems + their dependencies, this can be used later on to be installed offline

add an option to pass the --local flag to the bin/plugin update task, so it fetch plugins from a local cache, by default under vendor/cache

rename package:build to package:build-cache as is more meaningfull

add a --local flag to bin/plugin install to users can install plugins from the local cache, under the default directory of vendor/cache

add a plugin manager command to build the local cache of installed plugins using bundler package alike command

It adds code for compressing and extracting in zip and tar formats to
the utils module of logstash. The zip module is only jruby dependant as
it uses functions provided by java.
There is also code add in the plugin manager package command to handle
compression of plugins dumping.

Cleanup the custom java code to compress and extract zip files as it has
been known that using rubyzip is good and it has a more ruby like
features so the code is more clean and portable.

set of smallish improvement requested during review

added several options to handle situation when the package of plugins we want to generate is already there

clean up old code

applyed feedback from review, mostly changed in documentating behaviour plus better wording for messages

relocate the Environment.windows? check to the bootstrap side as it's used also in the plugin manager

add an unpack bin/plugin command so users can install packages of plugins throw the plugin manager

document override behaviour in the compress helpers (for zip and tar) plus add a fix for the tar extract when reading entries

made the unpack filename parameter a required one

add a force option to the bin/plugin unpack command

add a notice to that if using a local cache the --local flag should be passed with

Code cleanup and refactor introduced during review

add two wording suggestions comming from review

ammend more wording

skip the major version validation as in situation where there is no internet connection like when using the local vendor/cache to do the update

move compress to the bootstrap environment as being used in the plugin manager means not being loaded with logstash-core

Bring pack cached gems in the vendor directory so they can be used for bundler when packaging dependencies

Revert "Bring pack cached gems in the vendor directory so they can be used for bundler when packaging dependencies"

This reverts commit a9d7f46649932b06efaafebdd0eed2b4c63c2235.

patch the Bundler::Source::Rubygems to fetch only gems from a remote  source

small changes in several parts of the plugin manager and the creation of a common pack command with shared code

change compress to read in chuncks

fix wrong var name in the bootstrap compress utils module

fix namespacing conflicts

add basic test for the compress utility module

ammend more namespace issues

add a comment to the rubygems mockey patch to rebuild the gem cache

apply cosmetic changes

make the compress module raise CompressError

remove vendor_path and pattern_path form environment as they where mix up during rebase

change the bin/pack force option to be force-delete-cache

rename force_delete_cache to overwrite

change force for overwrite in tha pack command

remove the override option for bin/plugin unpack

revert Gemfile and Genfile.lock wrong committed
2015-11-18 16:28:50 +01:00
guyboertje
447b47d9ce add provision for worker threads based on threadsafe workers
updates requested by code review

changes requested by colin: make workers override from -w arg

do not set workers unless user actually specified it via cmdline

fix defaults printing

add describe block to improve test output readability

Closes #4130
2015-11-17 14:37:56 +00:00
Colin Surprenant
12a5982da2 logstash-core & logstash-core-event extraction to support logstash-core-event-java impl, relates to #4191
fixed timezone issue

extracted logstash-core and reorganized specs

extracted logstash-core-event

extract java Event into logstash-core-event-java in a proper gem

remove obsolete jruby_event bootstrapping

fix require path

add java code bootstrap

use logstash-core-event/logstash-core-event.rb

remove obsolete files

basic instructions

LogStash::Json need to be initialized from event

update jruby and gradle versions

update compile:logstash-core-event-java rake task

WIP tasks refactor

fix gem.files

skip test if class is not defined

fix gem related tasks for new structure

add gem spec dirs in core tests

bootstrap java implementation when requiring timestamp

new Cloner class and Event clone impl

fix array fields assignments, see #4140

don't rely on json implementation ordering

fix skipped last iterpolation char

remove implementation specific unnecessary check

also require ruby classes

define error class in ruby

raise exception on invalid format

remove implementation specific tests and extract and put logger related test in pending

missing bits for having all core timestamp specs pass

run all core specs

remove leftover

comment regex

missing encoding header

revert to logstash-core-event by default

finished proper gemification

useless require

dynamically pick specs depending on logstash-core-event-* implementation

logstash root package version

missing file for proper gemification

do not build java event by default

always check for root logstash lib dir

fix concurrent-ruby version confict

fix rebase conflict

re-enable specs

user vars instead of constants

move non core code in bootstrap

document version files

move version file

remove useless code

use version in logstash-core

fix gem files list

put back concurrent-ruby version constrain as in master

add dependency on logstash-core-event

remove dependency on logstash-core to avoid circular dependency

fix rebase conflict

remove circular dependency

fix specs

update README
2015-11-16 17:16:10 -05:00