/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

Welcome to Apache Karaf Decanter
================================
Apache Karaf Decanter is a complete monitoring platform for Apache Karaf.
It is very extensible, flexible, easy to install and use.

Apache Karaf Decanter is composed into:
    * Collectors and SLA Policies
      The collectors are OSGi services responsible of harvesting monitoring data.
      Two kinds of collectors are available:
      - the polling collectors are invoked periodically by a scheduler
      - the event driven collectors react to some events.
      It's very dynamic (thanks to the OSGi services), so it's possible to add
      a new custom collector (user/custom implementations).
      The collectors are also responsible of checking the SLA, and delegate to
      a notifier.
    * Scheduler
      The scheduler service is responsible to call the Polling Collectors,
      gather the harvested data, and delegate to the dispatcher.
    * Dispatcher
      The dispatcher is called by the scheduler or the event driven collectors
      to dispatch the collected data to the appenders.
    * Appenders
      The appenders are responsible to send/store the collected data to target
      systems.
    * Notifier
      The notifier is called by the collectors' SLA. The notifier uses external
      system to "publish" the SLA alert.
    * Console & Web UI
      The console is responsible of both SLA configuration and dashboard view.

Getting Started
===============
Apache Karaf Decanter is available as a Karaf features. The commands below start 
the jmx collector, log collector and an appender to a local elasticsearch instance
on the default port. Prerquisite is a running elasticsearch instance.

feature:repo-add decanter 1.3.0

Depending of what you want to monitor and collect, you have to install the corresponding features
using feature:install command.

Features
========

See user guide for the details of Decanter features:

Collectors
-----------
* decanter-collector-log
* decanter-collector-log-socket
* decanter-collector-file
* decanter-collector-eventadmin
* decanter-collector-jms
* decanter-collector-jmx
* decanter-collector-kafka
* decanter-collector-rest
* decanter-collector-jmx-activemq
* decanter-collector-jmx-camel
* decanter-collector-camel
* decanter-collector-mqtt
* decanter-collector-rest
* decanter-collector-rest-servlet
* decanter-collector-socket
* decanter-collector-system
* decanter-collector-process

Appenders
---------
* decanter-appender-log
* decanter-appender-elasticsearch-rest
* decanter-appender-elasticsearch-native-1.x
* decanter-appender-elasticsearch-native-2.x
* decanter-appender-jdbc
* decanter-appender-jms
* decanter-appender-camel
* decanter-appender-mqtt
* decanter-appender-kafka
* decanter-appender-cassandra
* decanter-appender-mongodb
* decanter-appender-socket
* decanter-appender-redis
* decanter-appender-rest

SLA/Alerters
------------
* decanter-sla-log
* decanter-sla-email
* decanter-sla-camel

Additional features
-------------------
* elasticsearch 1.7.4
* elasticsearch 2.2.0
* elasticsearch-head 1.7.4
* elasticsearch-head 2.2.0
* kibana 3.1.1
* kibana 4.1.2

Thanks for using Apache Karaf Decanter !

--
The Karaf Team
