Commit graph

835 commits

Author SHA1 Message Date
Dan Hermann
0de53939e9 * Adds a java_generator input with jdots codec to facilitate testing, adds float config type
* Breaking change to codec.encode method

* Sink output for discarding events

* URI and password config types

* Utility methods for packaging Java plugins

* Plugin API validation, fix gemspec generation

* Plugin Jar validation

* Update developer documentation

* Update codec metrics for new encode method

* Beta: Isolated classloaders for Java plugins

* Address code review comments

Fixes #10620
2019-05-03 11:54:37 +00:00
Colin Surprenant
c28ded78c9
fix JRuby resolv.rb leak (#10734) 2019-05-01 13:58:49 -04:00
Mike Place
3f56d93e01
Enhance GET / API for Metricbeat (#10589)
* ephemeral id

* hard-code status

* Add snapshot field
2019-05-01 13:14:47 +02:00
Mike Place
cc3c5ec00f
Refactoring of LIR serializer and exposing pipeline metrics (#10561)
* [WIP] Add ephemeral id and hash to pipeline stats

Refs #10119

* Fix incorrect hash id

* Add graph metrics

* Include node update

* LIR serializer refactor

* Remove commented code

* Remove more commented code

* Update spec

* Remove license and add encoding

* Style change to make code more vertical.

* Implement review suggestions

* Remove commented code

* Fix spec path

* Add cluster UUID

* Add graph?=true parameter

* Add options to pipelines/

* Use pluginmetadata

* Replicate change from java_pipeline to ruby pipeline
2019-05-01 12:45:11 +02:00
Rob Bavey
b088147cf1 Move plugin cleanup before retry
Previously the `do_close` method would never be called on a failing
plugin, because the retry call stops the code under `ensure` from
ever being called.

Fixes #10691
2019-04-26 13:15:46 +00:00
Rob Bavey
4f270295a1 Adds cleanup after shutdown of plugin
Fixes #10691
2019-04-26 13:15:46 +00:00
Rob Bavey
9c09f1ee50 Add methods to clear PluginMetadata repositories
Fixes #10691
2019-04-26 13:15:46 +00:00
Ry Biesemeyer
1fa9454c7c adds LogStash::PluginMetadata for simple key/value plugin metadata
We need a way for a plugin to register simple metadata about external
resources it connects to in order to implement a Monitoring feature in which
an Elasticsearch Output Plugin can store the connected cluster's uuid (#10602)

Here, we add a generic `LogStash::PluginMetadata` along with a registry, and
expose an accessor on `LogStash::Plugin#plugin_metadata` so that instances
can access their own metadata object.

Fixes #10691
2019-04-26 13:15:45 +00:00
Jordan Johnson-Doyle
68e9c6ff04 Collect and expose metrics from Ruby codecs
Fixes #10614
2019-04-11 13:10:18 +00:00
Jordan Johnson-Doyle
310541f41b Collect and expose metrics from Java codecs
Fixes #10614
2019-04-11 13:10:18 +00:00
Dan Hermann
a16e67d332 Handle duplicate config entries
Fixes #10619
2019-04-04 17:53:44 +00:00
Dan Hermann
a808c8fcb3 Log successful shutdowns
Fixes #10628
2019-04-04 08:51:00 +00:00
Ry Biesemeyer
fcd52c1573 prevent concurrent convergence (e.g., SIGHUP during in-flight convergence)
There are several scenarios in which we can trigger concurrent convergence in
the agent, resulting in two or more threads working to perform interleaved and
potentially conflicting or overlapping pipeline actions. Notably, our trap on
`SIGHUP` will be resolved in its own thread, so if we are sent `SIGHUP` while
in the process of converging, the second in-flight convergence may get its
starting state before, during, or after the effects of the first convergence.

By mutually excluding execution of the convergence cycle, we eliminate the
class of bugs in which one convergence acquires actions that cannot succeed due
to the prior success of actions given to the other convergence.

Fixes #10537
2019-03-12 17:37:40 +00:00
Colin Surprenant
0cdefb9141
remove exclusive lock for Ruby pipeline initialization (#10431) 2019-02-15 17:27:43 -05:00
Ry Biesemeyer
b605161662 ast/lir: simplify concurrent use of AST, which is globally stateful
Fixes #10415
2019-02-09 00:24:46 +00:00
Rob Bavey
51d7723fb6 Remove unnecessary option to not require host in SafeURI
Fixes #10414
2019-02-08 14:14:33 +00:00
Rob Bavey
795fd98e52 Better handle malformed URIs
Raise an error if a URI has inadvertently been supplied without a host

Fixes #10414
2019-02-08 14:14:33 +00:00
Ry Biesemeyer
937200d70d agent webserver: synchronise control
if we send `Agent#stop_webserver` while `Agent#start_webserver` is
executing, we risk the `@webserver_thread` being nil and getting a
`NoMethodError`.

Fixes #10393
2019-02-06 07:47:59 +00:00
Ry Biesemeyer
583ec6b625
Java 11 support (#10279)
* bump jruby to 9.2

* don't rely on logstash-base docker image

* work around webmock ruby 2.5 support

* ensure data folder exists in docker

* change fixnum and bignum to integer

* FileUtils.rmdir to rm_rf

this is because from 2.3 to 2.5 FileUtils.rmdir will throw an exception
if the directory isn't empty. On 2.3 the operation will just not delete
the directory silently.

* bump jruby to 9.2.5.0 and fix test

* make rake default task since prepare pack needs it

* Resolve compiler warnings (#10247)

There are 3 types of compiler warnings that are either resolved or suppressed:

1. Rawtypes: In JRuby 9.2, `RubyArray` is a generic, so references throughout
   our codebase to the now "raw" type trigger warnings. In most cases we cannot
   actually resolve the issue, since the JRuby-provided methods for creating
   `RubyArray`s still return the raw type, so these have been suppressed.

2. Deprecations:
   - `RubyString#intern19()` -> `RubyString#intern()`
   - `RubyString#downcase19(ThreadContext)` -> `RubyString#downcase(ThreadContext)`
   - `NativeException`: remove import & reference directly; suppress usage
     warnings
   - `RaiseException()`: migrate to equivalent non-deprecated methods wherever
     possible; in some cases where we are using this in conjunction with the
     also-deprecated `NativeException` to preserve java stacktraces, there
     seems to be no non-deprecated path forward, so these cases have been
     suppressed.

3. Redundant Casts
   - Resolved

* JRuby 9.2 bundler shenanigans (#10266)

* Revert "Revert "remove forced dependency on old bundler (#9395)""

This reverts commit bef984143d.

* plugin management: update internal bundler to 1.17.x APIs

* deps: update dev dependency webmock to version compatible with JRuby 9.2

* spec: update Pack fixture to include manticore version that doesn't conflict

* build: update gradle to version that has Java 11 support

* java11: resolve or suppress deprecation warnings

* Remove superfluous flag opting into ParNew GC implementation

When opting into CMS garbage collector with `XX:+UseConcMarkSweepGC`, the
young generation collector ParNew has been the default since Java 8, making
the `XX:+UseParNew` flag redundant; the flag was removed in Java 9, and
should no longer be specified to work with modern Javas.

https://bugs.openjdk.java.net/browse/JDK-8006478
https://openjdk.java.net/jeps/214

* spec: set thread name to example description for easier debugging

* spec: prevent errors in testing specs by checking against skip list before using

* no-op: remove use of `HashMap#computeIfAbsent` on single-threaded code

> This method will, on a best-effort basis, throw a `ConcurrentModificationException`
> if it is detected that the mapping function modifies this map during computation.
>
> -- https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/HashMap.html#computeIfAbsent(K,java.util.function.Function)

* qa: by default, run integration against Elastic Stack 6.5.x

To support development on Logstash on top of Java 11, default to testing
against an Elastic Stack that is capable of running on Java 11.

* qa: ignore deprecation warnings when comparing offline pack output

* qa: add Java 9+ support to ChildProcess dev dependency

this can safely be removed when the childprocess gem supports Java9+
https://github.com/enkessler/childprocess/pull/141

* qa: allow connections to localhost in webmock

* bump jrjackson version

* fix filebeat integration tests

* spec: ensure license compliance spec runs first

The license compliance spec that validates the licenses of bundled
plugins appears to not be compatible with the hooks that we inject
into bundler for plugin management, and will fail in obscure ways
when run after those hooks have been added. Since those hooks are
not necessary for validating licenses, the easiest solution was to
ensure that those specs run first, before the VM has been poluted.

Since the gradle/junit/rspec bridge that is currently in place
runs all specs in the same JVM, we also need to make sure that the
rspec "world" is reset before a run, to ensure that it doesn't
retain spec definitions from previous runs.

Also updates the rake invocation, although I'm not sure it is used
any more.
2019-02-04 16:36:11 -08:00
Dan Hermann
48ee9987cc
Native support for Java plugins (beta) (#10232) 2019-02-04 11:36:36 -06:00
Colin Surprenant
f08b8c5076
fix agent silent exit upon pipelines reloading (#10346) 2019-01-31 15:48:50 -05:00
João Duarte
25e773556c
remove pipeline output workers setting (#10358) 2019-01-30 10:09:15 +00:00
Colin Surprenant
528112c67e
correctly handle pipeline actions (#10331) 2019-01-16 14:42:26 -05:00
Colin Surprenant
5591ee7d79 properly set thread name in thread context 2019-01-09 18:12:04 -05:00
Dan Hermann
19554259b8 add option for PQ checkpoint retry
Fixes #10234
2019-01-02 21:15:38 +00:00
Dan Hermann
47e1bd252f Increase default number of threads reported by hot_threads
Fixes #10218
2018-12-18 16:54:12 +00:00
Dan Hermann
e89501e47e Java plugin API
Fixes #10216
2018-12-18 00:39:59 +00:00
dmitriisilin
d5b5f9a4fc Add Zing JVM to the list of supported garbage collectors.
Fixes #10051
2018-12-10 10:30:43 +00:00
Joao Duarte
e4159d0fb6 setting a list config to empty array should not result in nil
if a plugin author defines a config parameter as:

  config :retryable_codes, :validate => :number, :list => true, :default => [429]

And a user configures the plugin as:

  plugin { retryable_codes => [] }

It's expected that the retryable_codes parameter is an empty array and not a nil object

This PR changes this behaviour to generate an empty array

Fixes #10179
2018-11-27 14:00:26 +00:00
Guy Boertje
1f7a369993
Add VERSION_QUALIFIER support for use by release manager (#10117)
* Add VERSION_QUALIFIER support for use by release manager

* Make the gem build processes aware of the version qualifier

* Try debugging xpack ci test failure.

* Try to use the artifacts-api.elastic.co api for ES download.

* It builds/tests locally now.

* add some comments explaining the artifacts-api and the version string

* cahnges requested in review.

Fixes #9956
2018-11-07 22:39:52 +00:00
João Duarte
fe7607abd4
only start monitoring pipeline after valid license (#10106)
Avoid unecessary logging errors and resource usage by only starting
the monitoring pipeline if we can validate the license.
2018-11-07 17:28:48 +00:00
Colin Surprenant
cc2d54bc16
synchronize ruby pipeline initialization to fix concurrency bug (#10113) 2018-11-02 19:19:31 -04:00
Joao Duarte
935e7cd8ae make java execution beta
Fixes #10063
2018-10-24 09:19:35 +00:00
Guy Boertje
3fdee027d9
Add SC and EB input TLS support for the Logstash ArcSight module (#10056)
* Add SC and EB input TLS support for the Logstash ArcSight module
I added the ssl for the smart connector (tcp) and ssl and sasl for the
event broker.
Needs verification on a current stack.

* So this is the actual extent of changes (I thought it was to simple)
Fixed the docs omission
Fixed the load path issue
Fixed the ERB binding context problem
Added some basic happy path tests

* remove module settings in logstash.yml

* Overwrite my logstash.yml with the content on master

* Add comments to yaml fixtures
2018-10-23 09:12:12 +01:00
Guy Boertje
cdc1015629
Make cgroups more robust and provide the override similar to ES (#9999)
* Make cgroups more robust and provide the override similar to ES
and Kibana

This should go out as soon as possible and backport to 5.6

* refactor as per comments

Fixes #6797
Fixes #6824 
Fixes #7928
Fixes #8792
Fixes #9907
2018-09-22 12:13:32 +01:00
Colin Surprenant
069a42d35e
move queue opening bits from constructor to open_queue method (#9985) 2018-09-12 18:34:54 -04:00
Donal Diamond
234add03dc make worker thread names visbile to OS, fixes #9968
Fixes #9973
2018-09-12 01:02:20 +00:00
Ry Biesemeyer
796eb3e4b3 extract kibana and elasticsearch client ssl config
shared helper does not ignore ssl options when user fails to supply
the `${MODULE}.var.${TARGET}.ssl.enabled=true` directive.

Fixes: https://github.com/elastic/logstash/issues/9664

Fixes #9945
2018-09-04 16:50:25 +00:00
Joao Duarte
9816af6c40 support more than 3 identifiers in cloud id
Fixes #9882
2018-08-09 13:14:26 +00:00
Joao Duarte
9f243d83f4 support port customization in cloud id
Fixes #9877
2018-08-08 10:47:42 +00:00
Ry Biesemeyer
d6f7f037f3
BREAKING: FieldReference - strict mode cutover (#9543)
* noop: swap expected/actual in tests so failures read correctly

* field_reference: fixes crash and adds many edge-case test cases

Some pathological inputs can cause `FieldReference#parse(CharSequence)` to
throw an `ArrayIndexOutOfBounds` exception, which hard-crashes the entire
Logstash process because this Java-based exception is not caught by the Ruby
plugins.

Instead, proactively throw a new runtime exception indicating that we
encountered illegal syntax, and adjust the ruby event wrapper to re-throw
a ruby RuntimeException that can be handled in the normal way.

Additionally, this commit adds specs for the current behaviour of a wide
variety of illegal-syntax inputs, to ensure we don't accidentally change
the current behaviour.

* field_reference: break legacy tokenizer out, lay groundwork for strict-mode

Extracts the bulk of the current `FieldReference#parse(CharSequence)` method
out into its own `LegacyTokenizer` class verbatim to simplify subsequent
review as we add a strict-mode tokenizer.

* field_reference: add strict-mode and compat-mode

Adds a strict-mode FieldReference tokenizer, which throws an illegal syntax
exception when it encounters illegal syntax.

Adds a compat-mode FieldReference tokenizer, which _warns_ when it encounters
an input that would produce a different output under the strict-mode parser,
but otherwise behaves the same as the legacy-mode parser

Enables users to opt-in to the strict-mode parsing, or to opt-out of the
warnings using a command line flag or a settings-file directive

* field_reference (BREAKING): remove LEGACY and COMPAT for 7.0
2018-07-23 10:42:48 -07:00
Ry Biesemeyer
db35ced2a7 hooks: fire pipeline_stopped when pipeline is stopped
Fixes #9627
2018-07-05 20:57:02 +00:00
Colin Surprenant
ac72778c52 backport a JRuby 9.1.16.0 stdlib resolv.rb patch in current 9.1.13.0 JRuby version
use Gem::Version to compare versions and improve comments

include JRuby license info
2018-07-04 13:30:12 -04:00
Josh Soref
c6cd247ec3 Multiple spelling corrections (#9782)
* spelling: actually
* spelling: already
* spelling: concurrency
* spelling: constructor
* spelling: destinations
* spelling: different
* spelling: elasticsearch
* spelling: encoding
* spelling: error
* spelling: explicitly
* spelling: failings
* spelling: falsey
* spelling: guarantees
* spelling: having
* spelling: implementation
* spelling: logstash
* spelling: module
* spelling: multiple
* spelling: omitted
* spelling: overridden
* spelling: pipeline
* spelling: raspberry
* spelling: receive
* spelling: recommended
* spelling: registered
* spelling: registering
* spelling: shutdown
* spelling: signal
* spelling: specified
* spelling: successful
* spelling: successfully
* spelling: valuefied
* spelling: vector
2018-07-04 10:41:10 +01:00
Armin
cccd044c92 JAVAFICATION: Move more of the pipelines to Java
Fixes #9765
2018-06-19 12:02:11 +00:00
Armin
7bf2d129d0 MINOR: Move more dynamic Ruby calls to typed Java calls
Fixes #9743
2018-06-15 14:29:35 +00:00
Armin
30e055b1bf JAVAFICATION: Move more of the Java pipeline to Java
Fixes #9723
2018-06-12 13:50:15 +00:00
Armin
3c30459c80 JAVAFICATION: Move more of the pipeline code to Java
* More pipeline code pulled to Java superclass
* Stronger typing for PQ write client code

Fixes #9697
2018-06-07 09:59:13 +00:00
Tamara Braun
1cc5358892 Moved ConvergeResult to Java
Fixes #9699
2018-06-07 09:18:14 +00:00
Armin
060a8e3bd2 JAVAFICATION: Further dry up ruby and java pipeline and move more of their logic to Java
Fixes #9687
2018-06-01 04:39:44 +00:00