Author: jbonofre
Date: Tue Feb 16 06:45:00 2021
New Revision: 1886565
URL: http://svn.apache.org/viewvc?rev=1886565&view=rev
Log:
[scm-publish] Updating main site with Karaf Decanter documentation
Removed:
karaf/site/production/manual/decanter/latest-2/pdf/
Modified:
karaf/site/production/manual/decanter/latest-2/html/alerting.html
karaf/site/production/manual/decanter/latest-2/html/appenders.html
karaf/site/production/manual/decanter/latest-2/html/collectors.html
karaf/site/production/manual/decanter/latest-2/html/index.html
karaf/site/production/manual/decanter/latest-2/html/introduction.html
karaf/site/production/manual/decanter/latest-2/html/processors.html
Modified: karaf/site/production/manual/decanter/latest-2/html/alerting.html
URL:
http://svn.apache.org/viewvc/karaf/site/production/manual/decanter/latest-2/html/alerting.html?rev=1886565&r1=1886564&r2=1886565&view=diff
==============================================================================
--- karaf/site/production/manual/decanter/latest-2/html/alerting.html (original)
+++ karaf/site/production/manual/decanter/latest-2/html/alerting.html Tue Feb
16 06:45:00 2021
@@ -2587,7 +2587,7 @@ the alert rules:</p>
</div>
<div class="listingblock">
<div class="content">
-<pre>rule.my="{'condition':'message:*','level':'ERROR'}</pre>
+<pre>rule.my="{'condition':'message:*','level':'ERROR'}"</pre>
</div>
</div>
<div class="paragraph">
@@ -2672,6 +2672,9 @@ If recoverable, you will have a single a
<li>
<p><code>alertTimestamp</code> is the alert timestamp added by the alert
service</p>
</li>
+<li>
+<p><code>decanter.collector.name</code> is the name of the origintating
Decanter collector</p>
+</li>
</ul>
</div>
</div>
@@ -2699,6 +2702,19 @@ If recoverable, you will have a single a
<div class="paragraph">
<p>This alerter doesn’t need any configuration.</p>
</div>
+<div class="admonitionblock caution">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Caution</div>
+</td>
+<td class="content">
+Use the Alerter Log with caution when also using the Log Collector,
decanter-collector-log, as you can create a loop. Specifically a
+log event will generate an alert event that will generate a log
event…​..
+</td>
+</tr>
+</table>
+</div>
</div>
<div class="sect4">
<h5 id="_e_mail">E-mail</h5>
@@ -2932,7 +2948,7 @@ To "turn" an appender as an alerter, it
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2020-04-01 08:27:43 CEST
+Last updated 2021-01-18 05:57:52 CET
</div>
</div>
</body>
Modified: karaf/site/production/manual/decanter/latest-2/html/appenders.html
URL:
http://svn.apache.org/viewvc/karaf/site/production/manual/decanter/latest-2/html/appenders.html?rev=1886565&r1=1886564&r2=1886565&view=diff
==============================================================================
--- karaf/site/production/manual/decanter/latest-2/html/appenders.html
(original)
+++ karaf/site/production/manual/decanter/latest-2/html/appenders.html Tue Feb
16 06:45:00 2021
@@ -2627,9 +2627,22 @@ It transforms the data as a json documen
</div>
</div>
<div class="paragraph">
-<p>By default, the file appender stores the collected data in
<code>${karaf.data}/decanter</code> file. You can change the file where to
store the data
+<p>By default, the file appender stores the collected data in
<code>${karaf.data}/decanter/appender.csv</code> file. You can change the file
where to store the data
using the <code>filename</code> property in
<code>etc/org.apache.karaf.decanter.appender.file.cfg</code> configuration
file.</p>
</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+The default file changed from <code>${karaf.data}/decanter</code> to
<code>${karaf.data}/decanter/appender.csv</code> in verson 2.7.0 due to a
+conflict with the Alerting Service.
+</td>
+</tr>
+</table>
+</div>
<div class="paragraph">
<p>You can also change the marshaller to use. By default, the marshaller used
is the CSV one. But you can switch to the JSON one
using the <code>marshaller.target</code> property in
<code>etc/org.apache.karaf.decanter.appender.file.cfg</code> configuration
file.</p>
@@ -3015,6 +3028,60 @@ destination.uri=direct-vm:decanter</pre>
</div>
</div>
<div class="sect3">
+<h4 id="_loki">Loki</h4>
+<div class="paragraph">
+<p>Loki (<a href="https://grafana.com/oss/loki/"
class="bare">https://grafana.com/oss/loki/</a>) is a log aggregation system.
The Decanter Loki appender is able to push collected data
+to Loki via the Push API.</p>
+</div>
+<div class="paragraph">
+<p>The Decanter Loki appender converts any kind of collected data (coming from
the dispatcher) as a log string that can be stored in Loki.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-loki</code> feature installs the Loki
appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-appender-loki</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also adds
<code>etc/org.apache.karaf.decanter.appender.loki.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>######################################
+# Decanter Loki Appender Configuration
+######################################
+
+# Loki push API location
+#loki.url=http://localhost:3100/loki/api/v1/push
+
+# Loki tenant
+#loki.tenant=my-tenant
+
+# Loki basic authentication
+#loki.username=
+#loki.password=
+
+# Marshaller
+#marshaller.target=(dataFormat=raw)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>loki.url</code> is the location of the Loki push API</p>
+</li>
+<li>
+<p><code>loki.tenant</code> is optional and define the tenant used to push
data</p>
+</li>
+<li>
+<p><code>loki.username</code> and <code>loki.password</code> are used for
basic authentication</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
<h4 id="_redis">Redis</h4>
<div class="paragraph">
<p>The Decanter Redis appender sends the data (collected by the collectors) to
a Redis broker.</p>
@@ -3320,7 +3387,16 @@ containing:</p>
#host=localhost
# Port number where to send the collected data
-#port=34343</pre>
+#port=34343
+
+# If connected is true, the socket connection is created when the appender
starts and
+# collected data are "streamed" to the socket.
+# If connected is false (default), a new socket connection is created for each
data
+# to send to the socket.
+#connected=false
+
+# Marshaller to use
+marshaller.target=(dataFormat=json)</pre>
</div>
</div>
<div class="ulist">
@@ -3331,6 +3407,12 @@ containing:</p>
<li>
<p>the <code>port</code> property contains the port number of the remote
network socket collector</p>
</li>
+<li>
+<p>the <code>connected</code> property defines if the socket connection is
created when the appender starts, or for each data event.</p>
+</li>
+<li>
+<p>the <code>marshaller.target</code> property defines the data format to
use.</p>
+</li>
</ul>
</div>
</div>
@@ -3486,7 +3568,7 @@ of the OrientDB database to use:</p>
to "push" these metrics to some backend.</p>
</div>
<div class="paragraph">
-<p>The <code>decanter-appender-dropwizard</code> feature provides the Decanter
event handler registering the harvested data ino the
+<p>The <code>decanter-appender-dropwizard</code> feature provides the Decanter
event handler registering the harvested data into the
<code>MetricRegistry</code>:</p>
</div>
<div class="listingblock">
@@ -3511,8 +3593,6 @@ to "push" these metrics to some backend.
<pre class="CodeRay highlight"><code>docker run -d --name timescaledb -p
5432:5432 -e POSTGRES_PASSWORD=decanter -e POSTGRES_USER=decanter -e
POSTGRES_DATABASE=decanter timescale/timescaledb</code></pre>
</div>
</div>
-<div class="sect4">
-<h5 id="_timescaledb_appender">TimescaleDB appender</h5>
<div class="paragraph">
<p>The <code>decanter-appender-timescaledb</code> feature installs the
TimescaleDB appender.</p>
</div>
@@ -3570,8 +3650,8 @@ The table is simple and contains just tw
</ul>
</div>
</div>
-<div class="sect4">
-<h5 id="_websocket_servlet">WebSocket Servlet</h5>
+<div class="sect3">
+<h4 id="_websocket_servlet">WebSocket Servlet</h4>
<div class="paragraph">
<p>The <code>decanter-appender-websocket-servlet</code> feature exposes a
websocket on which clients can register. Then, Decanter will send the collected
data to the connected clients.</p>
</div>
@@ -3614,8 +3694,8 @@ ID â Servlet â�
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_prometheus">Prometheus</h5>
+<div class="sect3">
+<h4 id="_prometheus">Prometheus</h4>
<div class="paragraph">
<p>The <code>decanter-appender-prometheus</code> feature collects and exposes
metrics on prometheus:</p>
</div>
@@ -3697,12 +3777,174 @@ You just have to import <code>io.prometh
<p>That’s the only thing you need: your metrics will be available on the
Decanter Prometheus servlet (again on <code><a
href="http://localhost:8181/decanter/prometheus"
class="bare">http://localhost:8181/decanter/prometheus</a></code> by
default).</p>
</div>
</div>
+<div class="sect3">
+<h4 id="_rest">Rest</h4>
+<div class="paragraph">
+<p>Decanter Rest appender send collected data to a remote REST service.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-rest</code> feature installs the Rest
appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-appender-rest</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The feature also installs
<code>etc/org.apache.karaf.decanter.appender.rest.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>###############################
+# Decanter Appender REST Configuration
+###############################
+
+# Mandatory URI where the REST appender connects to
+uri=
+
+#request.method=POST (the REST verb)
+#user= (for basic authentication)
+#password= (for basic authentication)
+#content.type=application/json (the message content type sent)
+#charset=utf-8 (the message charset)
+#header.foo= (HTTP header prefixed with header.)
+#payload.header= (if set the Decanter collected data is sent as HTTP header
instead of body)
+
+# Marshaller to use (json is recommended)
+marshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>uri</code> is mandatory and contains the location of the Rest service
to call</p>
+</li>
+<li>
+<p><code>user</code> and <code>password</code> are used if the Rest service
uses basic authentication</p>
+</li>
+<li>
+<p><code>content.type</code> is the message type sent to the Rest service
(default is <code>application/json</code>)</p>
+</li>
+<li>
+<p><code>charset</code> is the message encoding (default is
<code>utf-8</code>)</p>
+</li>
+<li>
+<p><code>header.</code> allows you to add any custom HTTP headers (parameters)
to the request (prefixed by <code>header.</code>)</p>
+</li>
+<li>
+<p><code>payload.header</code> allows you to use a HTTP header to send the
collected data instead of directly the "body".</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_hdfs">HDFS</h4>
+<div class="paragraph">
+<p>Decanter HDFS appender stores collected data into a HDFS file.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-hdfs</code> feature installs the HDFS
appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>karaf@root()> feature:install
decanter-appender-hdfs</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The feature also installs
<code>etc/org.apache.karaf.decanter.appender.hdfs.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>######################################
+# Decanter HDFS Appender Configuration
+######################################
+
+# Optional HDFS configuration
+#hdfs.configuration=
+
+# File mode (create or append)
+#hdfs.mode=create|append|overwrite
+
+# Path location
+#hdfs.path=
+
+# Marshaller
+marshaller.target=(dataFormat=csv)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>hdfs.configuration</code> is the location of the hdfs configuration
file (core or site)</p>
+</li>
+<li>
+<p><code>hdfs.mode</code> defines the way of populating the file on HDFS
(creating a new one, appending to an existing one, overwriting an existing
one)</p>
+</li>
+<li>
+<p><code>hdfs.path</code> defines the location and name of the file on HDFS</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_amazon_s3">Amazon S3</h4>
+<div class="paragraph">
+<p>Decanter Amazon S3 appender stores collected data as objects in a S3
bucket.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-s3</code> feature installs the S3 appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-appender-s3</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The feature also installs
<code>etc/org.apache.karaf.decanter.appender.hdfs.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>###############################
+# Decanter Appender S3 Configuration
+###############################
+
+# AWS credentials
+accessKeyId=
+secretKeyId=
+
+# AWS Region (optional)
+#region=
+
+# S3 bucket name
+bucket=
+
+
+# Marshaller to use
+marshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>accessKeyId</code> property is required, containing your AWS access
key</p>
+</li>
+<li>
+<p><code>secretKeyId</code> property is required, containing your AWS secret
key</p>
+</li>
+<li>
+<p><code>region</code> property is optional and allows you to define the
Amazon region to use</p>
+</li>
+<li>
+<p><code>bucket</code> property is required, containing the name of the S3
bucket where to add objects</p>
+</li>
+</ul>
+</div>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2020-04-01 08:27:43 CEST
+Last updated 2021-02-10 13:42:32 CET
</div>
</div>
</body>
Modified: karaf/site/production/manual/decanter/latest-2/html/collectors.html
URL:
http://svn.apache.org/viewvc/karaf/site/production/manual/decanter/latest-2/html/collectors.html?rev=1886565&r1=1886564&r2=1886565&view=diff
==============================================================================
--- karaf/site/production/manual/decanter/latest-2/html/collectors.html
(original)
+++ karaf/site/production/manual/decanter/latest-2/html/collectors.html Tue Feb
16 06:45:00 2021
@@ -3200,11 +3200,13 @@ object.name=org.apache.camel:context=*,t
<div class="sect4">
<h5 id="_camel_tracer">Camel Tracer</h5>
<div class="paragraph">
-<p>If you enable the tracer on a Camel route, all tracer events (exchanges on
each step of the route) are sent to the
-appenders.</p>
+<p>Decanter Camel Tracer is actually an intercept strategy.</p>
</div>
<div class="paragraph">
-<p>The <code>decanter-collector-camel</code> feature provides the Camel Tracer
Handler:</p>
+<p>It catches all exchanges in the route. If you enable the tracer on a Camel
route, all events (exchanges on each step of the route) are sent to the
dispatcher.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-collector-camel</code> feature provides the Decanter
Camel intercept strategy:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -3212,11 +3214,17 @@ appenders.</p>
</div>
</div>
<div class="paragraph">
-<p>Now, you can use the Decanter Camel Tracer Handler in a tracer that you can
use in routes.</p>
+<p>You just have to register Decanter intercept strategy in your Camel
Context:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>DecanterInterceptStrategy decanterCamelTracer = new
DecanterInterceptStrategy();
+decanterCamelTracer.setDispatcher(eventAdmin);
+camelContext.addInterceptStrategy(decanterCamelTracer);</pre>
+</div>
</div>
<div class="paragraph">
-<p>For instance, the following route definition shows how to enable tracer on
a route, and use the Decanter Tracer Handler
-in the Camel Tracer:</p>
+<p>This is an example of a complete route with Decanter Camel intercept
strategy:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -3225,18 +3233,14 @@ in the Camel Tracer:</p>
<reference id="dispatcher"
interface="org.osgi.service.event.EventAdmin"/>
- <bean id="traceHandler"
class="org.apache.karaf.decanter.collector.camel.DecanterTraceEventHandler">
+ <bean id="decanterInterceptor"
class="org.apache.karaf.decanter.collector.camel.DecanterInterceptStrategy">
<property name="dispatcher" ref="dispatcher"/>
</bean>
- <bean id="tracer"
class="org.apache.camel.processor.interceptor.Tracer">
- <property name="traceHandler" ref="traceHandler"/>
- <property name="enabled" value="true"/>
- <property name="traceOutExchanges" value="true"/>
- <property name="logLevel" value="OFF"/>
- </bean>
-
- <camelContext trace="true"
xmlns="http://camel.apache.org/schema/blueprint">
+ <camelContext xmlns="http://camel.apache.org/schema/blueprint">
+ <interceptStrategy>
+ <bean ref="decanterInterceptor"/>
+ </interceptStrategy>
<route id="test">
<from uri="timer:fire?period=10000"/>
<setBody><constant>Hello
World</constant></setBody>
@@ -3260,7 +3264,7 @@ in the Camel Tracer:</p>
</div>
</div>
<div class="paragraph">
-<p>You can inject your extender using <code>setExtender(myExtender)</code> on
the <code>DecanterTraceEventHandler</code>. Decanter will automatically
+<p>You can inject your extender using <code>setExtender(myExtender)</code> on
the <code>DecanterInterceptStrategy</code>. Decanter will automatically
call your extender to populate extra properties.</p>
</div>
</div>
@@ -3440,6 +3444,9 @@ call your extender to populate extra pro
# Port number on which to listen
#port=34343
+# Binding address on which to listen
+#host=0.0.0.0
+
# Number of worker threads to deal with
#workers=10
@@ -3457,6 +3464,9 @@ unmarshaller.target=(dataFormat=json)</p
<p>the <code>port</code> property contains the port number where the network
socket collector is listening</p>
</li>
<li>
+<p>the <code>host</code> property contains the host name/interface address
where the network socket collector is listening</p>
+</li>
+<li>
<p>the <code>workers</code> property contains the number of worker threads the
socket collector is using for the connection</p>
</li>
<li>
@@ -3672,6 +3682,54 @@ from (several) remote machines.</p>
</div>
</div>
<div class="sect3">
+<h4 id="_rest">REST</h4>
+<div class="paragraph">
+<p>The Decanter REST collector periodically requests a REST service and
returns the result (with all HTTP details).</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-collector-rest</code> feature installs the collector:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-collector-rest</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs
<code>etc/org.apache.karaf.decanter.collector.rest.cfg</code> configuration
file where you can setup the REST service request:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter REST collector
+#
+
+url=http://localhost:8080
+paths=metrics
+
+#request.method=GET (possible values are GET, POST, PUT, DELETE, default is
GET)
+#request=foo (request payload)
+#header.foo=bar (header passed, prefixed with header.)
+#user=user (used for basic authentication)
+#password=password (used for basic authentication)
+#topic=decanter/collector/rest (Decanter dispatcher topic name to use)
+
+# Possible to wrap exception as HTTP response, where you can define the HTTP
response code
+# exception.as.http.response=true
+# exception.http.response.code=501
+
+# Unmarshaller to use
+unmarshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>exception.as.http.response</code> property allows you to "wrap"
any connection exception as a HTTP message.
+If <code>true</code>, any exception is catched and we send kind of HTTP
message in the Decanter dispatcher.</p>
+</div>
+<div class="paragraph">
+<p>It’s also possible to define a HTTP response code (thanks to
<code>exception.http.response.code</code> property) when an exception is
catched.</p>
+</div>
+</div>
+<div class="sect3">
<h4 id="_soap">SOAP</h4>
<div class="paragraph">
<p>The Decanter SOAP collector periodically requests a SOAP service and
returns the result (the SOAP Response, or error details if it failed).</p>
@@ -3946,6 +4004,230 @@ addresses=http://localhost:9200
</div>
</div>
<div class="sect3">
+<h4 id="_pax_web_jetty_handler">Pax Web Jetty Handler</h4>
+<div class="paragraph">
+<p>Pax Web Jetty Handler collector "intercepts" all HTTP exchanges with the
Pax Web Jetty container running in Apache Karaf.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-collector-jetty</code> feature installs the Pax Web
Jetty container:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>karaf@root()> feature:install
decanter-collector-jetty</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The collector automatically registers in the Pax Web Jetty container and
then all HTTP requests/responses data will be sent to the appenders.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_snmp">SNMP</h4>
+<div class="paragraph">
+<p>Decanter SNMP Collector allows you to trap or poll metrics from SNMP.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-collector-snmp</code> feature installs the SNMP
collector:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-collector-snmp</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Actually, this collector provides two kind of collectors: poller or
trap.</p>
+</div>
+<div class="sect4">
+<h5 id="_trap">Trap</h5>
+<div class="paragraph">
+<p>If you want to use SNMP trap, you have to create
<code>etc/org.apache.karaf.decanter.collector.snmp.trap.cfg</code>
configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>address=127.0.0.1:161
+protocol=tcp</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>address</code> is the listening SNMP trap address</p>
+</li>
+<li>
+<p><code>protocol</code> is the transport protocol (TCP or UDP).</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_poll">Poll</h5>
+<div class="paragraph">
+<p>If you want to use SNMP poller (periodically getting SNMP metrics), you
have to create
<code>etc/org.apache.karaf.decanter.collector.snmp.poll.cfg</code>
configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>address=127.0.0.1:161
+protocol=tcp
+retries=2
+timeout=1500
+treelist=false
+oids=first,second
+snmp.version=3
+security.level=3
+security.name=security
+authentication.protocol=MD5
+authentication.passphrase=pass
+privacy.protocol=DES
+privacy.passphrase=pass
+#snmp.context.engine.id=foo
+#snmp.context.name=foo
+snmp.community=public</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>address</code> is the SNMP service address</p>
+</li>
+<li>
+<p><code>protocol</code> is the transport protocol (tcp or udp)</p>
+</li>
+<li>
+<p><code>retries</code> is the number of attempts</p>
+</li>
+<li>
+<p><code>timeout</code> is the SNMP request timeout (in ms)</p>
+</li>
+<li>
+<p><code>treelist</code> is true to request SNMP tree, false else</p>
+</li>
+<li>
+<p><code>oids</code> is the list of SNMP OIDs to request</p>
+</li>
+<li>
+<p><code>snmp.version</code> is the SNMP version to use (3 by default)</p>
+</li>
+<li>
+<p><code>security.level</code> is the level of security expected by the SNMP
version (3 == AUTH_PRIV by default)</p>
+</li>
+<li>
+<p><code>security.name</code> is the security name alias</p>
+</li>
+<li>
+<p><code>authentication.protocol</code> is the password protocol (MD5 or
SHA1)</p>
+</li>
+<li>
+<p><code>authentication.passphrase</code> is the password/passphrase to use</p>
+</li>
+<li>
+<p><code>privacy.protocol</code> is DES, TRIDES, AES128, AES192, AES256</p>
+</li>
+<li>
+<p><code>private.passphrase</code> is the password/passphrase to use</p>
+</li>
+<li>
+<p><code>snmp.context.engine.id</code> is optional</p>
+</li>
+<li>
+<p><code>snmp.context.name</code> is optional</p>
+</li>
+<li>
+<p><code>snmp.community</code> is the community to use, <code>public</code> by
default</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_druid">Druid</h4>
+<div class="paragraph">
+<p>Karaf Decanter Druid collector schedules execution of queries on Apache
Druid broker.</p>
+</div>
+<div class="paragraph">
+<p>It allows to easily create analytics on data and schedule execution with
Decanter. Then, the query result is sent to the dispatcher.</p>
+</div>
+<div class="paragraph">
+<p>The <code>karaf-collector-druid</code> feature installs the Druid
collector:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-collector-druid</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The location of the Apache Druid broker and Druid queries to execute are
configured in <code>etc/org.apache.karaf.decanter.collector.druid.cfg</code>
configuration file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Druid broker query API location
+#
+druid.broker.location=http://localhost:8888/druid/v2/sql/
+
+# Druid queries set, using syntax: query.id
+query.foo=select sum_operatingSystem_threadCount from decanter
+
+# Unmarshaller to use
+unmarshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>druid.broker.location</code> is the URL of the Apache Druid
broker.</p>
+</div>
+<div class="paragraph">
+<p>Then, we can add the Druid queries using the format
<code>query.ID=QUERY</code>.</p>
+</div>
+<div class="paragraph">
+<p>Decanter Druid collector schedules the queries and send the results in the
dispatcher.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_openstack">OpenStack</h4>
+<div class="paragraph">
+<p>Karaf Decanter OpenStack collector periodically request OpenStack API to
get details about openstack ecosystem.</p>
+</div>
+<div class="paragraph">
+<p>The <code>karaf-collector-openstack</code> feature installs the OpenStack
collector:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-collector-openstack</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs
<code>etc/org.apache.karaf.decanter.collector.openstack.cfg</code>
configuration file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter Openstack collector
+#
+# Openstack services API locations
+#
+
+#openstack.identity=http://localhost/identity
+#openstack.project=2c7be0bac05c4144a328d4ab3dfac379
+#openstack.username=admin
+#openstack.password=secret
+#openstack.domain=default
+
+#openstack.compute.enabled=true
+#openstack.compute=http://localhost/compute/v2.1
+#openstack.block.storage.enabled=true
+#openstack.block.storage=http://localhost/volume/v3
+#openstack.image.enabled=true
+#openstack.image=http://localhost/image
+#openstack.metric.enabled=true
+#openstack.metric=http://localhost/metric
+
+# Unmarshaller to use
+unmarshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You have to define the locations of the OpenStack APIs and if you enabled
requesting the APIs or not.</p>
+</div>
+</div>
+<div class="sect3">
<h4 id="_customizing_properties_in_collectors">Customizing properties in
collectors</h4>
<div class="paragraph">
<p>You can add, rename or remove properties collected by the collectors before
sending it to the dispatcher.</p>
@@ -3996,7 +4278,7 @@ fields.rename.helo=hello
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2020-04-23 14:52:08 CEST
+Last updated 2021-02-06 06:36:54 CET
</div>
</div>
</body>
Modified: karaf/site/production/manual/decanter/latest-2/html/index.html
URL:
http://svn.apache.org/viewvc/karaf/site/production/manual/decanter/latest-2/html/index.html?rev=1886565&r1=1886564&r2=1886565&view=diff
==============================================================================
--- karaf/site/production/manual/decanter/latest-2/html/index.html (original)
+++ karaf/site/production/manual/decanter/latest-2/html/index.html Tue Feb 16
06:45:00 2021
@@ -2591,14 +2591,19 @@ table.CodeRay td.code>pre{padding:0}
<li><a href="#_mqtt">1.2.14. MQTT</a></li>
<li><a href="#_kafka">1.2.15. Kafka</a></li>
<li><a href="#_rest_servlet">1.2.16. Rest Servlet</a></li>
-<li><a href="#_soap">1.2.17. SOAP</a></li>
-<li><a href="#_dropwizard_metrics">1.2.18. Dropwizard Metrics</a></li>
-<li><a href="#_jdbc">1.2.19. JDBC</a></li>
-<li><a href="#_configadmin">1.2.20. ConfigAdmin</a></li>
-<li><a href="#_prometheus">1.2.21. Prometheus</a></li>
-<li><a href="#_redis">1.2.22. Redis</a></li>
-<li><a href="#_elasticsearch">1.2.23. Elasticsearch</a></li>
-<li><a href="#_customizing_properties_in_collectors">1.2.24. Customizing
properties in collectors</a></li>
+<li><a href="#_rest">1.2.17. REST</a></li>
+<li><a href="#_soap">1.2.18. SOAP</a></li>
+<li><a href="#_dropwizard_metrics">1.2.19. Dropwizard Metrics</a></li>
+<li><a href="#_jdbc">1.2.20. JDBC</a></li>
+<li><a href="#_configadmin">1.2.21. ConfigAdmin</a></li>
+<li><a href="#_prometheus">1.2.22. Prometheus</a></li>
+<li><a href="#_redis">1.2.23. Redis</a></li>
+<li><a href="#_elasticsearch">1.2.24. Elasticsearch</a></li>
+<li><a href="#_pax_web_jetty_handler">1.2.25. Pax Web Jetty Handler</a></li>
+<li><a href="#_snmp">1.2.26. SNMP</a></li>
+<li><a href="#_druid">1.2.27. Druid</a></li>
+<li><a href="#_openstack">1.2.28. OpenStack</a></li>
+<li><a href="#_customizing_properties_in_collectors">1.2.29. Customizing
properties in collectors</a></li>
</ul>
</li>
<li><a href="#_appenders">1.3. Appenders</a>
@@ -2610,15 +2615,21 @@ table.CodeRay td.code>pre{padding:0}
<li><a href="#_jms_2">1.3.5. JMS</a></li>
<li><a href="#_camel">1.3.6. Camel</a></li>
<li><a href="#_kafka_2">1.3.7. Kafka</a></li>
-<li><a href="#_redis_2">1.3.8. Redis</a></li>
-<li><a href="#_mqtt_2">1.3.9. MQTT</a></li>
-<li><a href="#_cassandra">1.3.10. Cassandra</a></li>
-<li><a href="#_influxdb">1.3.11. InfluxDB</a></li>
-<li><a href="#_mongodb">1.3.12. MongoDB</a></li>
-<li><a href="#_network_socket_2">1.3.13. Network socket</a></li>
-<li><a href="#_orientdb">1.3.14. OrientDB</a></li>
-<li><a href="#_dropwizard_metrics_2">1.3.15. Dropwizard Metrics</a></li>
-<li><a href="#_timescaledb">1.3.16. TimescaleDB</a></li>
+<li><a href="#_loki">1.3.8. Loki</a></li>
+<li><a href="#_redis_2">1.3.9. Redis</a></li>
+<li><a href="#_mqtt_2">1.3.10. MQTT</a></li>
+<li><a href="#_cassandra">1.3.11. Cassandra</a></li>
+<li><a href="#_influxdb">1.3.12. InfluxDB</a></li>
+<li><a href="#_mongodb">1.3.13. MongoDB</a></li>
+<li><a href="#_network_socket_2">1.3.14. Network socket</a></li>
+<li><a href="#_orientdb">1.3.15. OrientDB</a></li>
+<li><a href="#_dropwizard_metrics_2">1.3.16. Dropwizard Metrics</a></li>
+<li><a href="#_timescaledb">1.3.17. TimescaleDB</a></li>
+<li><a href="#_websocket_servlet">1.3.18. WebSocket Servlet</a></li>
+<li><a href="#_prometheus_2">1.3.19. Prometheus</a></li>
+<li><a href="#_rest_2">1.3.20. Rest</a></li>
+<li><a href="#_hdfs">1.3.21. HDFS</a></li>
+<li><a href="#_amazon_s3">1.3.22. Amazon S3</a></li>
</ul>
</li>
<li><a href="#_alerting">1.4. Alerting</a>
@@ -2631,6 +2642,8 @@ table.CodeRay td.code>pre{padding:0}
<ul class="sectlevel3">
<li><a href="#_pass_through">1.5.1. Pass Through</a></li>
<li><a href="#_aggregate">1.5.2. Aggregate</a></li>
+<li><a href="#_groupby">1.5.3. GroupBy</a></li>
+<li><a href="#_apache_camel">1.5.4. Apache Camel</a></li>
</ul>
</li>
</ul>
@@ -2707,16 +2720,30 @@ provides appenders depending on the back
</div>
<div class="listingblock">
<div class="content">
-<pre>karaf@root()> feature:repo-add
mvn:org.apache.karaf.decanter/apache-karaf-decanter/2.0.0/xml/features</pre>
+<pre>karaf@root()> feature:repo-add
mvn:org.apache.karaf.decanter/apache-karaf-decanter/2.x.x/xml/features <b
class="conum">(1)</b></pre>
</div>
</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>Substitute the desired version, i.e. 2.8.0-SNAPSHOT, for 2.x.x</p>
+</li>
+</ol>
+</div>
<div class="paragraph">
<p>Or</p>
</div>
<div class="listingblock">
<div class="content">
-<pre>karaf@root()> feature:repo-add decanter 2.0.0</pre>
+<pre>karaf@root()> feature:repo-add decanter 2.x.x <b
class="conum">(1)</b></pre>
+</div>
</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>Substitute the desired version, i.e. 2.8.0-SNAPSHOT, for 2.x.x</p>
+</li>
+</ol>
</div>
<div class="paragraph">
<p>Now, you have to install the collectors, appenders, and eventually alerters
feature to match your need.</p>
@@ -3352,11 +3379,13 @@ object.name=org.apache.camel:context=*,t
<div class="sect4">
<h5 id="_camel_tracer">Camel Tracer</h5>
<div class="paragraph">
-<p>If you enable the tracer on a Camel route, all tracer events (exchanges on
each step of the route) are sent to the
-appenders.</p>
+<p>Decanter Camel Tracer is actually an intercept strategy.</p>
+</div>
+<div class="paragraph">
+<p>It catches all exchanges in the route. If you enable the tracer on a Camel
route, all events (exchanges on each step of the route) are sent to the
dispatcher.</p>
</div>
<div class="paragraph">
-<p>The <code>decanter-collector-camel</code> feature provides the Camel Tracer
Handler:</p>
+<p>The <code>decanter-collector-camel</code> feature provides the Decanter
Camel intercept strategy:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -3364,11 +3393,17 @@ appenders.</p>
</div>
</div>
<div class="paragraph">
-<p>Now, you can use the Decanter Camel Tracer Handler in a tracer that you can
use in routes.</p>
+<p>You just have to register Decanter intercept strategy in your Camel
Context:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>DecanterInterceptStrategy decanterCamelTracer = new
DecanterInterceptStrategy();
+decanterCamelTracer.setDispatcher(eventAdmin);
+camelContext.addInterceptStrategy(decanterCamelTracer);</pre>
+</div>
</div>
<div class="paragraph">
-<p>For instance, the following route definition shows how to enable tracer on
a route, and use the Decanter Tracer Handler
-in the Camel Tracer:</p>
+<p>This is an example of a complete route with Decanter Camel intercept
strategy:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -3377,18 +3412,14 @@ in the Camel Tracer:</p>
<reference id="dispatcher"
interface="org.osgi.service.event.EventAdmin"/>
- <bean id="traceHandler"
class="org.apache.karaf.decanter.collector.camel.DecanterTraceEventHandler">
+ <bean id="decanterInterceptor"
class="org.apache.karaf.decanter.collector.camel.DecanterInterceptStrategy">
<property name="dispatcher" ref="dispatcher"/>
</bean>
- <bean id="tracer"
class="org.apache.camel.processor.interceptor.Tracer">
- <property name="traceHandler" ref="traceHandler"/>
- <property name="enabled" value="true"/>
- <property name="traceOutExchanges" value="true"/>
- <property name="logLevel" value="OFF"/>
- </bean>
-
- <camelContext trace="true"
xmlns="http://camel.apache.org/schema/blueprint">
+ <camelContext xmlns="http://camel.apache.org/schema/blueprint">
+ <interceptStrategy>
+ <bean ref="decanterInterceptor"/>
+ </interceptStrategy>
<route id="test">
<from uri="timer:fire?period=10000"/>
<setBody><constant>Hello
World</constant></setBody>
@@ -3412,7 +3443,7 @@ in the Camel Tracer:</p>
</div>
</div>
<div class="paragraph">
-<p>You can inject your extender using <code>setExtender(myExtender)</code> on
the <code>DecanterTraceEventHandler</code>. Decanter will automatically
+<p>You can inject your extender using <code>setExtender(myExtender)</code> on
the <code>DecanterInterceptStrategy</code>. Decanter will automatically
call your extender to populate extra properties.</p>
</div>
</div>
@@ -3592,6 +3623,9 @@ call your extender to populate extra pro
# Port number on which to listen
#port=34343
+# Binding address on which to listen
+#host=0.0.0.0
+
# Number of worker threads to deal with
#workers=10
@@ -3609,6 +3643,9 @@ unmarshaller.target=(dataFormat=json)</p
<p>the <code>port</code> property contains the port number where the network
socket collector is listening</p>
</li>
<li>
+<p>the <code>host</code> property contains the host name/interface address
where the network socket collector is listening</p>
+</li>
+<li>
<p>the <code>workers</code> property contains the number of worker threads the
socket collector is using for the connection</p>
</li>
<li>
@@ -3824,7 +3861,55 @@ from (several) remote machines.</p>
</div>
</div>
<div class="sect3">
-<h4 id="_soap">1.2.17. SOAP</h4>
+<h4 id="_rest">1.2.17. REST</h4>
+<div class="paragraph">
+<p>The Decanter REST collector periodically requests a REST service and
returns the result (with all HTTP details).</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-collector-rest</code> feature installs the collector:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-collector-rest</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs
<code>etc/org.apache.karaf.decanter.collector.rest.cfg</code> configuration
file where you can setup the REST service request:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter REST collector
+#
+
+url=http://localhost:8080
+paths=metrics
+
+#request.method=GET (possible values are GET, POST, PUT, DELETE, default is
GET)
+#request=foo (request payload)
+#header.foo=bar (header passed, prefixed with header.)
+#user=user (used for basic authentication)
+#password=password (used for basic authentication)
+#topic=decanter/collector/rest (Decanter dispatcher topic name to use)
+
+# Possible to wrap exception as HTTP response, where you can define the HTTP
response code
+# exception.as.http.response=true
+# exception.http.response.code=501
+
+# Unmarshaller to use
+unmarshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>exception.as.http.response</code> property allows you to "wrap"
any connection exception as a HTTP message.
+If <code>true</code>, any exception is catched and we send kind of HTTP
message in the Decanter dispatcher.</p>
+</div>
+<div class="paragraph">
+<p>It’s also possible to define a HTTP response code (thanks to
<code>exception.http.response.code</code> property) when an exception is
catched.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_soap">1.2.18. SOAP</h4>
<div class="paragraph">
<p>The Decanter SOAP collector periodically requests a SOAP service and
returns the result (the SOAP Response, or error details if it failed).</p>
</div>
@@ -3867,7 +3952,7 @@ soap.request=</pre>
</div>
</div>
<div class="sect3">
-<h4 id="_dropwizard_metrics">1.2.18. Dropwizard Metrics</h4>
+<h4 id="_dropwizard_metrics">1.2.19. Dropwizard Metrics</h4>
<div class="paragraph">
<p>The Decanter Dropwizard Metrics collector get a <code>MetricSet</code> OSGi
service and periodically get the metrics in the set.</p>
</div>
@@ -3885,7 +3970,7 @@ send to the Decanter dispatcher.</p>
</div>
</div>
<div class="sect3">
-<h4 id="_jdbc">1.2.19. JDBC</h4>
+<h4 id="_jdbc">1.2.20. JDBC</h4>
<div class="paragraph">
<p>The Decanter JDBC collector periodically executes a query on a database and
sends the query result to the dispatcher.</p>
</div>
@@ -3932,7 +4017,7 @@ create this datasource using the Karaf <
</div>
</div>
<div class="sect3">
-<h4 id="_configadmin">1.2.20. ConfigAdmin</h4>
+<h4 id="_configadmin">1.2.21. ConfigAdmin</h4>
<div class="paragraph">
<p>The Decanter ConfigAdmin collector listens for any configuration change and
send the updated configuration to the dispatcher.</p>
</div>
@@ -3946,7 +4031,7 @@ create this datasource using the Karaf <
</div>
</div>
<div class="sect3">
-<h4 id="_prometheus">1.2.21. Prometheus</h4>
+<h4 id="_prometheus">1.2.22. Prometheus</h4>
<div class="paragraph">
<p>The Decanter Prometheus collector is able to periodically (scheduled
collector) read Prometheus servlet output to create events sent in Decanter.</p>
</div>
@@ -3971,7 +4056,7 @@ create this datasource using the Karaf <
</div>
</div>
<div class="sect3">
-<h4 id="_redis">1.2.22. Redis</h4>
+<h4 id="_redis">1.2.23. Redis</h4>
<div class="paragraph">
<p>The Decanter Redis collector is able to periodically (scheduled collector)
read Redis Map to get key/value pairs.
You can filter the keys you want thanks to key pattern.</p>
@@ -4033,7 +4118,7 @@ map=Decanter
</div>
</div>
<div class="sect3">
-<h4 id="_elasticsearch">1.2.23. Elasticsearch</h4>
+<h4 id="_elasticsearch">1.2.24. Elasticsearch</h4>
<div class="paragraph">
<p>The Decanter Elasticsearch collector retrieves documents from Elasticsearch
periodically (scheduled collector).
By default, it harvests all documents in the given index, but you can also
specify a query.</p>
@@ -4098,7 +4183,231 @@ addresses=http://localhost:9200
</div>
</div>
<div class="sect3">
-<h4 id="_customizing_properties_in_collectors">1.2.24. Customizing properties
in collectors</h4>
+<h4 id="_pax_web_jetty_handler">1.2.25. Pax Web Jetty Handler</h4>
+<div class="paragraph">
+<p>Pax Web Jetty Handler collector "intercepts" all HTTP exchanges with the
Pax Web Jetty container running in Apache Karaf.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-collector-jetty</code> feature installs the Pax Web
Jetty container:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>karaf@root()> feature:install
decanter-collector-jetty</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The collector automatically registers in the Pax Web Jetty container and
then all HTTP requests/responses data will be sent to the appenders.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_snmp">1.2.26. SNMP</h4>
+<div class="paragraph">
+<p>Decanter SNMP Collector allows you to trap or poll metrics from SNMP.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-collector-snmp</code> feature installs the SNMP
collector:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-collector-snmp</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Actually, this collector provides two kind of collectors: poller or
trap.</p>
+</div>
+<div class="sect4">
+<h5 id="_trap">Trap</h5>
+<div class="paragraph">
+<p>If you want to use SNMP trap, you have to create
<code>etc/org.apache.karaf.decanter.collector.snmp.trap.cfg</code>
configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>address=127.0.0.1:161
+protocol=tcp</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>address</code> is the listening SNMP trap address</p>
+</li>
+<li>
+<p><code>protocol</code> is the transport protocol (TCP or UDP).</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_poll">Poll</h5>
+<div class="paragraph">
+<p>If you want to use SNMP poller (periodically getting SNMP metrics), you
have to create
<code>etc/org.apache.karaf.decanter.collector.snmp.poll.cfg</code>
configuration file containing:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>address=127.0.0.1:161
+protocol=tcp
+retries=2
+timeout=1500
+treelist=false
+oids=first,second
+snmp.version=3
+security.level=3
+security.name=security
+authentication.protocol=MD5
+authentication.passphrase=pass
+privacy.protocol=DES
+privacy.passphrase=pass
+#snmp.context.engine.id=foo
+#snmp.context.name=foo
+snmp.community=public</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>address</code> is the SNMP service address</p>
+</li>
+<li>
+<p><code>protocol</code> is the transport protocol (tcp or udp)</p>
+</li>
+<li>
+<p><code>retries</code> is the number of attempts</p>
+</li>
+<li>
+<p><code>timeout</code> is the SNMP request timeout (in ms)</p>
+</li>
+<li>
+<p><code>treelist</code> is true to request SNMP tree, false else</p>
+</li>
+<li>
+<p><code>oids</code> is the list of SNMP OIDs to request</p>
+</li>
+<li>
+<p><code>snmp.version</code> is the SNMP version to use (3 by default)</p>
+</li>
+<li>
+<p><code>security.level</code> is the level of security expected by the SNMP
version (3 == AUTH_PRIV by default)</p>
+</li>
+<li>
+<p><code>security.name</code> is the security name alias</p>
+</li>
+<li>
+<p><code>authentication.protocol</code> is the password protocol (MD5 or
SHA1)</p>
+</li>
+<li>
+<p><code>authentication.passphrase</code> is the password/passphrase to use</p>
+</li>
+<li>
+<p><code>privacy.protocol</code> is DES, TRIDES, AES128, AES192, AES256</p>
+</li>
+<li>
+<p><code>private.passphrase</code> is the password/passphrase to use</p>
+</li>
+<li>
+<p><code>snmp.context.engine.id</code> is optional</p>
+</li>
+<li>
+<p><code>snmp.context.name</code> is optional</p>
+</li>
+<li>
+<p><code>snmp.community</code> is the community to use, <code>public</code> by
default</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_druid">1.2.27. Druid</h4>
+<div class="paragraph">
+<p>Karaf Decanter Druid collector schedules execution of queries on Apache
Druid broker.</p>
+</div>
+<div class="paragraph">
+<p>It allows to easily create analytics on data and schedule execution with
Decanter. Then, the query result is sent to the dispatcher.</p>
+</div>
+<div class="paragraph">
+<p>The <code>karaf-collector-druid</code> feature installs the Druid
collector:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-collector-druid</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The location of the Apache Druid broker and Druid queries to execute are
configured in <code>etc/org.apache.karaf.decanter.collector.druid.cfg</code>
configuration file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Druid broker query API location
+#
+druid.broker.location=http://localhost:8888/druid/v2/sql/
+
+# Druid queries set, using syntax: query.id
+query.foo=select sum_operatingSystem_threadCount from decanter
+
+# Unmarshaller to use
+unmarshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The <code>druid.broker.location</code> is the URL of the Apache Druid
broker.</p>
+</div>
+<div class="paragraph">
+<p>Then, we can add the Druid queries using the format
<code>query.ID=QUERY</code>.</p>
+</div>
+<div class="paragraph">
+<p>Decanter Druid collector schedules the queries and send the results in the
dispatcher.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_openstack">1.2.28. OpenStack</h4>
+<div class="paragraph">
+<p>Karaf Decanter OpenStack collector periodically request OpenStack API to
get details about openstack ecosystem.</p>
+</div>
+<div class="paragraph">
+<p>The <code>karaf-collector-openstack</code> feature installs the OpenStack
collector:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-collector-openstack</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs
<code>etc/org.apache.karaf.decanter.collector.openstack.cfg</code>
configuration file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter Openstack collector
+#
+# Openstack services API locations
+#
+
+#openstack.identity=http://localhost/identity
+#openstack.project=2c7be0bac05c4144a328d4ab3dfac379
+#openstack.username=admin
+#openstack.password=secret
+#openstack.domain=default
+
+#openstack.compute.enabled=true
+#openstack.compute=http://localhost/compute/v2.1
+#openstack.block.storage.enabled=true
+#openstack.block.storage=http://localhost/volume/v3
+#openstack.image.enabled=true
+#openstack.image=http://localhost/image
+#openstack.metric.enabled=true
+#openstack.metric=http://localhost/metric
+
+# Unmarshaller to use
+unmarshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>You have to define the locations of the OpenStack APIs and if you enabled
requesting the APIs or not.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_customizing_properties_in_collectors">1.2.29. Customizing properties
in collectors</h4>
<div class="paragraph">
<p>You can add, rename or remove properties collected by the collectors before
sending it to the dispatcher.</p>
</div>
@@ -4202,9 +4511,22 @@ It transforms the data as a json documen
</div>
</div>
<div class="paragraph">
-<p>By default, the file appender stores the collected data in
<code>${karaf.data}/decanter</code> file. You can change the file where to
store the data
+<p>By default, the file appender stores the collected data in
<code>${karaf.data}/decanter/appender.csv</code> file. You can change the file
where to store the data
using the <code>filename</code> property in
<code>etc/org.apache.karaf.decanter.appender.file.cfg</code> configuration
file.</p>
</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Note</div>
+</td>
+<td class="content">
+The default file changed from <code>${karaf.data}/decanter</code> to
<code>${karaf.data}/decanter/appender.csv</code> in verson 2.7.0 due to a
+conflict with the Alerting Service.
+</td>
+</tr>
+</table>
+</div>
<div class="paragraph">
<p>You can also change the marshaller to use. By default, the marshaller used
is the CSV one. But you can switch to the JSON one
using the <code>marshaller.target</code> property in
<code>etc/org.apache.karaf.decanter.appender.file.cfg</code> configuration
file.</p>
@@ -4590,7 +4912,61 @@ destination.uri=direct-vm:decanter</pre>
</div>
</div>
<div class="sect3">
-<h4 id="_redis_2">1.3.8. Redis</h4>
+<h4 id="_loki">1.3.8. Loki</h4>
+<div class="paragraph">
+<p>Loki (<a href="https://grafana.com/oss/loki/"
class="bare">https://grafana.com/oss/loki/</a>) is a log aggregation system.
The Decanter Loki appender is able to push collected data
+to Loki via the Push API.</p>
+</div>
+<div class="paragraph">
+<p>The Decanter Loki appender converts any kind of collected data (coming from
the dispatcher) as a log string that can be stored in Loki.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-loki</code> feature installs the Loki
appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-appender-loki</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also adds
<code>etc/org.apache.karaf.decanter.appender.loki.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>######################################
+# Decanter Loki Appender Configuration
+######################################
+
+# Loki push API location
+#loki.url=http://localhost:3100/loki/api/v1/push
+
+# Loki tenant
+#loki.tenant=my-tenant
+
+# Loki basic authentication
+#loki.username=
+#loki.password=
+
+# Marshaller
+#marshaller.target=(dataFormat=raw)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>loki.url</code> is the location of the Loki push API</p>
+</li>
+<li>
+<p><code>loki.tenant</code> is optional and define the tenant used to push
data</p>
+</li>
+<li>
+<p><code>loki.username</code> and <code>loki.password</code> are used for
basic authentication</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_redis_2">1.3.9. Redis</h4>
<div class="paragraph">
<p>The Decanter Redis appender sends the data (collected by the collectors) to
a Redis broker.</p>
</div>
@@ -4678,7 +5054,7 @@ map=Decanter
</div>
</div>
<div class="sect3">
-<h4 id="_mqtt_2">1.3.9. MQTT</h4>
+<h4 id="_mqtt_2">1.3.10. MQTT</h4>
<div class="paragraph">
<p>The Decanter MQTT appender sends the data (collected by the collectors) to
a MQTT broker.</p>
</div>
@@ -4718,7 +5094,7 @@ map=Decanter
</div>
</div>
<div class="sect3">
-<h4 id="_cassandra">1.3.10. Cassandra</h4>
+<h4 id="_cassandra">1.3.11. Cassandra</h4>
<div class="paragraph">
<p>The Decanter Cassandra appender allows you to store the data (coming from
the collectors) into an Apache Cassandra database.</p>
</div>
@@ -4771,7 +5147,7 @@ cassandra.port=9042</pre>
</div>
</div>
<div class="sect3">
-<h4 id="_influxdb">1.3.11. InfluxDB</h4>
+<h4 id="_influxdb">1.3.12. InfluxDB</h4>
<div class="paragraph">
<p>The Decanter InfluxDB appender allows you to store the data (coming from
the collectors) as a time series into a InfluxDB database.</p>
</div>
@@ -4820,7 +5196,7 @@ database=decanter</pre>
</div>
</div>
<div class="sect3">
-<h4 id="_mongodb">1.3.12. MongoDB</h4>
+<h4 id="_mongodb">1.3.13. MongoDB</h4>
<div class="paragraph">
<p>The Decanter MongoDB appender allows you to store the data (coming from the
collectors) into a MongoDB database.</p>
</div>
@@ -4867,7 +5243,7 @@ containing:</p>
</div>
</div>
<div class="sect3">
-<h4 id="_network_socket_2">1.3.13. Network socket</h4>
+<h4 id="_network_socket_2">1.3.14. Network socket</h4>
<div class="paragraph">
<p>The Decanter network socket appender sends the collected data to a remote
Decanter network socket collector.</p>
</div>
@@ -4895,7 +5271,16 @@ containing:</p>
#host=localhost
# Port number where to send the collected data
-#port=34343</pre>
+#port=34343
+
+# If connected is true, the socket connection is created when the appender
starts and
+# collected data are "streamed" to the socket.
+# If connected is false (default), a new socket connection is created for each
data
+# to send to the socket.
+#connected=false
+
+# Marshaller to use
+marshaller.target=(dataFormat=json)</pre>
</div>
</div>
<div class="ulist">
@@ -4906,11 +5291,17 @@ containing:</p>
<li>
<p>the <code>port</code> property contains the port number of the remote
network socket collector</p>
</li>
+<li>
+<p>the <code>connected</code> property defines if the socket connection is
created when the appender starts, or for each data event.</p>
+</li>
+<li>
+<p>the <code>marshaller.target</code> property defines the data format to
use.</p>
+</li>
</ul>
</div>
</div>
<div class="sect3">
-<h4 id="_orientdb">1.3.14. OrientDB</h4>
+<h4 id="_orientdb">1.3.15. OrientDB</h4>
<div class="paragraph">
<p>The Decanter OrientDB appender stores the collected data into OrientDB
Document database.</p>
</div>
@@ -5054,14 +5445,14 @@ of the OrientDB database to use:</p>
</div>
</div>
<div class="sect3">
-<h4 id="_dropwizard_metrics_2">1.3.15. Dropwizard Metrics</h4>
+<h4 id="_dropwizard_metrics_2">1.3.16. Dropwizard Metrics</h4>
<div class="paragraph">
<p>The Dropwizard Metrics appender receives the harvested data from the
dispatcher and pushes to a Dropwizard Metrics
<code>MetricRegistry</code>. You can register this <code>MetricRegistry</code>
in your own application or use a Dropwizard Metrics Reporter
to "push" these metrics to some backend.</p>
</div>
<div class="paragraph">
-<p>The <code>decanter-appender-dropwizard</code> feature provides the Decanter
event handler registering the harvested data ino the
+<p>The <code>decanter-appender-dropwizard</code> feature provides the Decanter
event handler registering the harvested data into the
<code>MetricRegistry</code>:</p>
</div>
<div class="listingblock">
@@ -5071,7 +5462,7 @@ to "push" these metrics to some backend.
</div>
</div>
<div class="sect3">
-<h4 id="_timescaledb">1.3.16. TimescaleDB</h4>
+<h4 id="_timescaledb">1.3.17. TimescaleDB</h4>
<div class="paragraph">
<p>The Decanter TimescaleDB appender stores the collected data into
TimescaleDB database.</p>
</div>
@@ -5086,8 +5477,6 @@ to "push" these metrics to some backend.
<pre class="CodeRay highlight"><code>docker run -d --name timescaledb -p
5432:5432 -e POSTGRES_PASSWORD=decanter -e POSTGRES_USER=decanter -e
POSTGRES_DATABASE=decanter timescale/timescaledb</code></pre>
</div>
</div>
-<div class="sect4">
-<h5 id="_timescaledb_appender">TimescaleDB appender</h5>
<div class="paragraph">
<p>The <code>decanter-appender-timescaledb</code> feature installs the
TimescaleDB appender.</p>
</div>
@@ -5145,8 +5534,8 @@ The table is simple and contains just tw
</ul>
</div>
</div>
-<div class="sect4">
-<h5 id="_websocket_servlet">WebSocket Servlet</h5>
+<div class="sect3">
+<h4 id="_websocket_servlet">1.3.18. WebSocket Servlet</h4>
<div class="paragraph">
<p>The <code>decanter-appender-websocket-servlet</code> feature exposes a
websocket on which clients can register. Then, Decanter will send the collected
data to the connected clients.</p>
</div>
@@ -5189,8 +5578,8 @@ ID â Servlet â�
</div>
</div>
</div>
-<div class="sect4">
-<h5 id="_prometheus_2">Prometheus</h5>
+<div class="sect3">
+<h4 id="_prometheus_2">1.3.19. Prometheus</h4>
<div class="paragraph">
<p>The <code>decanter-appender-prometheus</code> feature collects and exposes
metrics on prometheus:</p>
</div>
@@ -5272,6 +5661,168 @@ You just have to import <code>io.prometh
<p>That’s the only thing you need: your metrics will be available on the
Decanter Prometheus servlet (again on
<code>http://localhost:8181/decanter/prometheus</code> by default).</p>
</div>
</div>
+<div class="sect3">
+<h4 id="_rest_2">1.3.20. Rest</h4>
+<div class="paragraph">
+<p>Decanter Rest appender send collected data to a remote REST service.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-rest</code> feature installs the Rest
appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-appender-rest</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The feature also installs
<code>etc/org.apache.karaf.decanter.appender.rest.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>###############################
+# Decanter Appender REST Configuration
+###############################
+
+# Mandatory URI where the REST appender connects to
+uri=
+
+#request.method=POST (the REST verb)
+#user= (for basic authentication)
+#password= (for basic authentication)
+#content.type=application/json (the message content type sent)
+#charset=utf-8 (the message charset)
+#header.foo= (HTTP header prefixed with header.)
+#payload.header= (if set the Decanter collected data is sent as HTTP header
instead of body)
+
+# Marshaller to use (json is recommended)
+marshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>uri</code> is mandatory and contains the location of the Rest service
to call</p>
+</li>
+<li>
+<p><code>user</code> and <code>password</code> are used if the Rest service
uses basic authentication</p>
+</li>
+<li>
+<p><code>content.type</code> is the message type sent to the Rest service
(default is <code>application/json</code>)</p>
+</li>
+<li>
+<p><code>charset</code> is the message encoding (default is
<code>utf-8</code>)</p>
+</li>
+<li>
+<p><code>header.</code> allows you to add any custom HTTP headers (parameters)
to the request (prefixed by <code>header.</code>)</p>
+</li>
+<li>
+<p><code>payload.header</code> allows you to use a HTTP header to send the
collected data instead of directly the "body".</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_hdfs">1.3.21. HDFS</h4>
+<div class="paragraph">
+<p>Decanter HDFS appender stores collected data into a HDFS file.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-hdfs</code> feature installs the HDFS
appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay highlight"><code>karaf@root()> feature:install
decanter-appender-hdfs</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The feature also installs
<code>etc/org.apache.karaf.decanter.appender.hdfs.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>######################################
+# Decanter HDFS Appender Configuration
+######################################
+
+# Optional HDFS configuration
+#hdfs.configuration=
+
+# File mode (create or append)
+#hdfs.mode=create|append|overwrite
+
+# Path location
+#hdfs.path=
+
+# Marshaller
+marshaller.target=(dataFormat=csv)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>hdfs.configuration</code> is the location of the hdfs configuration
file (core or site)</p>
+</li>
+<li>
+<p><code>hdfs.mode</code> defines the way of populating the file on HDFS
(creating a new one, appending to an existing one, overwriting an existing
one)</p>
+</li>
+<li>
+<p><code>hdfs.path</code> defines the location and name of the file on HDFS</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_amazon_s3">1.3.22. Amazon S3</h4>
+<div class="paragraph">
+<p>Decanter Amazon S3 appender stores collected data as objects in a S3
bucket.</p>
+</div>
+<div class="paragraph">
+<p>The <code>decanter-appender-s3</code> feature installs the S3 appender:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-appender-s3</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The feature also installs
<code>etc/org.apache.karaf.decanter.appender.hdfs.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>###############################
+# Decanter Appender S3 Configuration
+###############################
+
+# AWS credentials
+accessKeyId=
+secretKeyId=
+
+# AWS Region (optional)
+#region=
+
+# S3 bucket name
+bucket=
+
+
+# Marshaller to use
+marshaller.target=(dataFormat=json)</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>accessKeyId</code> property is required, containing your AWS access
key</p>
+</li>
+<li>
+<p><code>secretKeyId</code> property is required, containing your AWS secret
key</p>
+</li>
+<li>
+<p><code>region</code> property is optional and allows you to define the
Amazon region to use</p>
+</li>
+<li>
+<p><code>bucket</code> property is required, containing the name of the S3
bucket where to add objects</p>
+</li>
+</ul>
+</div>
</div>
</div>
<div class="sect2">
@@ -5291,7 +5842,7 @@ the alert rules:</p>
</div>
<div class="listingblock">
<div class="content">
-<pre>rule.my="{'condition':'message:*','level':'ERROR'}</pre>
+<pre>rule.my="{'condition':'message:*','level':'ERROR'}"</pre>
</div>
</div>
<div class="paragraph">
@@ -5376,6 +5927,9 @@ If recoverable, you will have a single a
<li>
<p><code>alertTimestamp</code> is the alert timestamp added by the alert
service</p>
</li>
+<li>
+<p><code>decanter.collector.name</code> is the name of the origintating
Decanter collector</p>
+</li>
</ul>
</div>
</div>
@@ -5403,6 +5957,19 @@ If recoverable, you will have a single a
<div class="paragraph">
<p>This alerter doesn’t need any configuration.</p>
</div>
+<div class="admonitionblock caution">
+<table>
+<tr>
+<td class="icon">
+<div class="title">Caution</div>
+</td>
+<td class="content">
+Use the Alerter Log with caution when also using the Log Collector,
decanter-collector-log, as you can create a loop. Specifically a
+log event will generate an alert event that will generate a log
event…​..
+</td>
+</tr>
+</table>
+</div>
</div>
<div class="sect4">
<h5 id="_e_mail">E-mail</h5>
@@ -5686,7 +6253,7 @@ data to <code>decanter/process/second</c
<p>By default, the "merged" event is sent every minute. You can change this
using the <code>period</code> configuration.</p>
</div>
<div class="paragraph">
-<p>You can provisiong
<code>etc/org.apache.karaf.decanter.processor.aggregate.cfg</code>
configuration file with:</p>
+<p>You can provision
<code>etc/org.apache.karaf.decanter.processor.aggregate.cfg</code>
configuration file with:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -5720,6 +6287,163 @@ target.topics=decanter/process/aggregate
<p>Then, if a property already exist in the aggregator, its value will be
overwritten by the new event value received in the aggregator.</p>
</div>
</div>
+<div class="sect3">
+<h4 id="_groupby">1.5.3. GroupBy</h4>
+<div class="paragraph">
+<p>This processor "groups" events containing same properties values during a
period.</p>
+</div>
+<div class="paragraph">
+<p>For instance, you configure the GroupBy processor to group events using
<code>foo</code> and <code>bar</code> properties. Then you receive
+the following three events:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>first event containing: <code>{ "foo":"foo","bar":"bar","first":"value1"
}</code></p>
+</li>
+<li>
+<p>second event containing: <code>{ "hello":"world","second":"value2"
}</code></p>
+</li>
+<li>
+<p>third event containing: <code>{
"foo":"foo","bar":"bar","third":"value3"}</code></p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>The groupBy processor will create (and send) one event containing:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>if you choose to "flatten" the properties, the event will contain: <code>{
"foo":"foo", "bar":"bar", "first":"value1","third":"value3" }</code></p>
+</li>
+<li>
+<p>if you chosse not to "flatten" the properties, the event will contain:
<code>{ "events":[ { "foo":"foo","bar":"bar","first":"value1" }, {
"foo":"foo","bar":"bar","third":"value3" } ] }</code></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>You can install this processor using the
<code>decanter-processor-groupby</code> feature:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-processor-groupby</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>By default, the "merged" event is sent every minute. You can change this
using the <code>period</code> configuration.</p>
+</div>
+<div class="paragraph">
+<p>The GroupBy processor is configured via
<code>etc/org.apache.karaf.decanter.processor.groupby.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter GroupBy processor
+#target.topics=decanter/process/groupby
+
+#
+# Aggregation period in seconds
+#
+#period=60
+
+#
+# List of grouping properties
+#
+#groupBy=first,second
+
+#
+# If true, grouped events properties are flatten (all properties in the event)
aka Map<String,Object>
+# If false, grouped events properties are inner grouped map aka Map<int,
Map<String,Object>>
+#
+#flatten=true</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The <code>target.topics</code> property defines the list of Decanter topics
(separated by <code>,</code>) where the resulting events will be sent.</p>
+</li>
+<li>
+<p>The <code>period</code> property defines the retention period to accumulate
the incoming events</p>
+</li>
+<li>
+<p>The <code>groupBy</code> property defines the property names (separated by
<code>,</code>) as grouping term</p>
+</li>
+<li>
+<p>The <code>flatten</code> property defines the way the resulting event will
be created. If <code>true</code>, all events properties will be store directly
(flat) in the resulting event. If <code>false</code>, the resulting event will
contain an array of properties (from the original grouped events).</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_apache_camel">1.5.4. Apache Camel</h4>
+<div class="paragraph">
+<p>It’s also possible you implement your own event processor using
Apache Camel.</p>
+</div>
+<div class="paragraph">
+<p>Decanter Camel Processor delegates event processing to your Camel route.
Your route just has to callback Decanter (on a dedicated Camel endpoint)
+to send the processed event back in the dispatcher.</p>
+</div>
+<div class="paragraph">
+<p>By default, Decanter Camel processor send the events to
<code>direct-vm:decanter-delegate</code> endpoint, and
+expects the processed event back on
<code>direct-vm:decanter-callback</code>.</p>
+</div>
+<div class="paragraph">
+<p>The Camel message body is <code>Map<String,Object></code> (it’s
what Decanter is sending into your Camel route and expects on
+the callback endpoint).</p>
+</div>
+<div class="paragraph">
+<p>You can install the Camel processor with the
<code>decanter-processor-camel</code> feature:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-processor-camel</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs
<code>etc/org.apache.karaf.decanter.processor.camel.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter Camel processor
+#
+
+#
+# Destination dispatcher topics where to send the aggregated events
+#
+#target.topics=decanter/process/camel
+
+#
+# This is the Camel endpoint URI where Decanter is sending the events
+# (using event Map<String, Object> as body)
+#
+#delegate.uri=direct-vm:decanter-delegate
+
+#
+# This is the Camel endpoint URI where user Camel route should call to be
"back" in Decanter
+# The user Camel route is supposed to do "to uri=[CALLBACK]" with a
Map<String, Object> body
+# resulting of the route processing.
+# Decanter uses this body to send a new Event to the dispatcher target topics.
+#
+#callback.uri=direct-vm:decanter-callback</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>target.topics</code> property is the list of Decanter dispatcher
topics (separated by <code>,</code>) where the processor will "forward" the
processed events.</p>
+</li>
+<li>
+<p>the <code>delegate.uri</code> property is the Camel endpoint URI where
Decanter Camel Processor will send events (as
<code>Map<String,Object></code>). It’s basically the
<code>from</code> endpoint of your route.</p>
+</li>
+<li>
+<p>the <code>callback.uri</code> property is the Camel endpoint URI where
Decanter Camel Processor is waiting from your processed events. Basically,
it’s where your route should send processed events (<code>to</code> of
your route).</p>
+</li>
+</ul>
+</div>
+</div>
</div>
</div>
</div>
Modified: karaf/site/production/manual/decanter/latest-2/html/introduction.html
URL:
http://svn.apache.org/viewvc/karaf/site/production/manual/decanter/latest-2/html/introduction.html?rev=1886565&r1=1886564&r2=1886565&view=diff
==============================================================================
--- karaf/site/production/manual/decanter/latest-2/html/introduction.html
(original)
+++ karaf/site/production/manual/decanter/latest-2/html/introduction.html Tue
Feb 16 06:45:00 2021
@@ -2612,16 +2612,30 @@ provides appenders depending on the back
</div>
<div class="listingblock">
<div class="content">
-<pre>karaf@root()> feature:repo-add
mvn:org.apache.karaf.decanter/apache-karaf-decanter/2.0.0/xml/features</pre>
+<pre>karaf@root()> feature:repo-add
mvn:org.apache.karaf.decanter/apache-karaf-decanter/2.x.x/xml/features <b
class="conum">(1)</b></pre>
</div>
</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>Substitute the desired version, i.e. 2.8.0-SNAPSHOT, for 2.x.x</p>
+</li>
+</ol>
+</div>
<div class="paragraph">
<p>Or</p>
</div>
<div class="listingblock">
<div class="content">
-<pre>karaf@root()> feature:repo-add decanter 2.0.0</pre>
+<pre>karaf@root()> feature:repo-add decanter 2.x.x <b
class="conum">(1)</b></pre>
+</div>
</div>
+<div class="colist arabic">
+<ol>
+<li>
+<p>Substitute the desired version, i.e. 2.8.0-SNAPSHOT, for 2.x.x</p>
+</li>
+</ol>
</div>
<div class="paragraph">
<p>Now, you have to install the collectors, appenders, and eventually alerters
feature to match your need.</p>
@@ -2630,7 +2644,7 @@ provides appenders depending on the back
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2020-03-30 11:05:30 CEST
+Last updated 2021-01-17 07:32:42 CET
</div>
</div>
</body>
Modified: karaf/site/production/manual/decanter/latest-2/html/processors.html
URL:
http://svn.apache.org/viewvc/karaf/site/production/manual/decanter/latest-2/html/processors.html?rev=1886565&r1=1886564&r2=1886565&view=diff
==============================================================================
--- karaf/site/production/manual/decanter/latest-2/html/processors.html
(original)
+++ karaf/site/production/manual/decanter/latest-2/html/processors.html Tue Feb
16 06:45:00 2021
@@ -2623,7 +2623,7 @@ data to <code>decanter/process/second</c
<p>By default, the "merged" event is sent every minute. You can change this
using the <code>period</code> configuration.</p>
</div>
<div class="paragraph">
-<p>You can provisiong
<code>etc/org.apache.karaf.decanter.processor.aggregate.cfg</code>
configuration file with:</p>
+<p>You can provision
<code>etc/org.apache.karaf.decanter.processor.aggregate.cfg</code>
configuration file with:</p>
</div>
<div class="listingblock">
<div class="content">
@@ -2657,11 +2657,168 @@ target.topics=decanter/process/aggregate
<p>Then, if a property already exist in the aggregator, its value will be
overwritten by the new event value received in the aggregator.</p>
</div>
</div>
+<div class="sect3">
+<h4 id="_groupby">GroupBy</h4>
+<div class="paragraph">
+<p>This processor "groups" events containing same properties values during a
period.</p>
+</div>
+<div class="paragraph">
+<p>For instance, you configure the GroupBy processor to group events using
<code>foo</code> and <code>bar</code> properties. Then you receive
+the following three events:</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>first event containing: <code>{ "foo":"foo","bar":"bar","first":"value1"
}</code></p>
+</li>
+<li>
+<p>second event containing: <code>{ "hello":"world","second":"value2"
}</code></p>
+</li>
+<li>
+<p>third event containing: <code>{
"foo":"foo","bar":"bar","third":"value3"}</code></p>
+</li>
+</ol>
+</div>
+<div class="paragraph">
+<p>The groupBy processor will create (and send) one event containing:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>if you choose to "flatten" the properties, the event will contain: <code>{
"foo":"foo", "bar":"bar", "first":"value1","third":"value3" }</code></p>
+</li>
+<li>
+<p>if you chosse not to "flatten" the properties, the event will contain:
<code>{ "events":[ { "foo":"foo","bar":"bar","first":"value1" }, {
"foo":"foo","bar":"bar","third":"value3" } ] }</code></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>You can install this processor using the
<code>decanter-processor-groupby</code> feature:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-processor-groupby</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>By default, the "merged" event is sent every minute. You can change this
using the <code>period</code> configuration.</p>
+</div>
+<div class="paragraph">
+<p>The GroupBy processor is configured via
<code>etc/org.apache.karaf.decanter.processor.groupby.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter GroupBy processor
+#target.topics=decanter/process/groupby
+
+#
+# Aggregation period in seconds
+#
+#period=60
+
+#
+# List of grouping properties
+#
+#groupBy=first,second
+
+#
+# If true, grouped events properties are flatten (all properties in the event)
aka Map<String,Object>
+# If false, grouped events properties are inner grouped map aka Map<int,
Map<String,Object>>
+#
+#flatten=true</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The <code>target.topics</code> property defines the list of Decanter topics
(separated by <code>,</code>) where the resulting events will be sent.</p>
+</li>
+<li>
+<p>The <code>period</code> property defines the retention period to accumulate
the incoming events</p>
+</li>
+<li>
+<p>The <code>groupBy</code> property defines the property names (separated by
<code>,</code>) as grouping term</p>
+</li>
+<li>
+<p>The <code>flatten</code> property defines the way the resulting event will
be created. If <code>true</code>, all events properties will be store directly
(flat) in the resulting event. If <code>false</code>, the resulting event will
contain an array of properties (from the original grouped events).</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_apache_camel">Apache Camel</h4>
+<div class="paragraph">
+<p>It’s also possible you implement your own event processor using
Apache Camel.</p>
+</div>
+<div class="paragraph">
+<p>Decanter Camel Processor delegates event processing to your Camel route.
Your route just has to callback Decanter (on a dedicated Camel endpoint)
+to send the processed event back in the dispatcher.</p>
+</div>
+<div class="paragraph">
+<p>By default, Decanter Camel processor send the events to
<code>direct-vm:decanter-delegate</code> endpoint, and
+expects the processed event back on
<code>direct-vm:decanter-callback</code>.</p>
+</div>
+<div class="paragraph">
+<p>The Camel message body is <code>Map<String,Object></code> (it’s
what Decanter is sending into your Camel route and expects on
+the callback endpoint).</p>
+</div>
+<div class="paragraph">
+<p>You can install the Camel processor with the
<code>decanter-processor-camel</code> feature:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>karaf@root()> feature:install decanter-processor-camel</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>This feature also installs
<code>etc/org.apache.karaf.decanter.processor.camel.cfg</code> configuration
file:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>#
+# Decanter Camel processor
+#
+
+#
+# Destination dispatcher topics where to send the aggregated events
+#
+#target.topics=decanter/process/camel
+
+#
+# This is the Camel endpoint URI where Decanter is sending the events
+# (using event Map<String, Object> as body)
+#
+#delegate.uri=direct-vm:decanter-delegate
+
+#
+# This is the Camel endpoint URI where user Camel route should call to be
"back" in Decanter
+# The user Camel route is supposed to do "to uri=[CALLBACK]" with a
Map<String, Object> body
+# resulting of the route processing.
+# Decanter uses this body to send a new Event to the dispatcher target topics.
+#
+#callback.uri=direct-vm:decanter-callback</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>the <code>target.topics</code> property is the list of Decanter dispatcher
topics (separated by <code>,</code>) where the processor will "forward" the
processed events.</p>
+</li>
+<li>
+<p>the <code>delegate.uri</code> property is the Camel endpoint URI where
Decanter Camel Processor will send events (as
<code>Map<String,Object></code>). It’s basically the
<code>from</code> endpoint of your route.</p>
+</li>
+<li>
+<p>the <code>callback.uri</code> property is the Camel endpoint URI where
Decanter Camel Processor is waiting from your processed events. Basically,
it’s where your route should send processed events (<code>to</code> of
your route).</p>
+</li>
+</ul>
+</div>
+</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2020-04-20 14:54:31 CEST
+Last updated 2020-12-13 07:30:46 CET
</div>
</div>
</body>