aboutsummaryrefslogtreecommitdiff
path: root/kamon-examples/kamon-fluentd-example/src
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-examples/kamon-fluentd-example/src')
-rw-r--r--kamon-examples/kamon-fluentd-example/src/main/resources/application.conf73
-rw-r--r--kamon-examples/kamon-fluentd-example/src/main/scala/KamonFluentdExample.scala60
2 files changed, 133 insertions, 0 deletions
diff --git a/kamon-examples/kamon-fluentd-example/src/main/resources/application.conf b/kamon-examples/kamon-fluentd-example/src/main/resources/application.conf
new file mode 100644
index 00000000..bb69abd3
--- /dev/null
+++ b/kamon-examples/kamon-fluentd-example/src/main/resources/application.conf
@@ -0,0 +1,73 @@
+# ===================================== #
+# Kamon-Fluentd Reference Configuration #
+# ===================================== #
+
+kamon {
+ metric.filters {
+ akka-actor {
+ includes = ["**"],
+ }
+
+ akka-dispatcher {
+ includes = ["**"]
+ }
+
+ akka-router {
+ includes = ["**"]
+ }
+ }
+
+ fluentd {
+ # Hostname and port of fluentd server to which kamon fluentd sends metrics.
+ hostname = "localhost"
+ port = 24224
+
+ # tag prefix of metrics data which is sent to fluentd server
+ tag = "kamon.fluentd"
+
+ # Interval between metrics data flushes to fluentd server.
+ # It's value must be equal or greater than the kamon.metric.tick-interval setting.
+ flush-interval = 10 seconds
+
+ # Your app name
+ application-name = "kamon-fluentd-example"
+
+ # Subscription patterns used to select which metrics will be pushed to Fluentd. Note that first, metrics
+ # collection for your desired entities must be activated under the kamon.metrics.filters settings.
+ subscriptions {
+ histogram = [ "**" ]
+ min-max-counter = [ "**" ]
+ gauge = [ "**" ]
+ counter = [ "**" ]
+ trace = [ "**" ]
+ trace-segment = [ "**" ]
+ akka-actor = [ "**" ]
+ akka-dispatcher = [ "**" ]
+ akka-router = [ "**" ]
+ system-metric = [ "**" ]
+ http-server = [ "**" ]
+ }
+
+ # statistic values to be reported for histogram type metrics
+ # (i.e. Histogram, MinMaxCounter, Gauge).
+ histogram-stats {
+ # stats values:
+ # "count", "min", "max", "average", "percentiles" are supported.
+ # you can use "*" for wildcards.
+ subscription = [ "count", "min", "max", "average", "percentiles" ],
+
+ # percentile points:
+ # this will be used when you set "percentiles" in "subscription" above.
+ # In this example, kamon-fluentd reports 50th 90th, 99th and 99.9th percentiles.
+ percentiles = [50.0, 90.0, 99.0, 99.9]
+ }
+ }
+
+ modules {
+ kamon-fluentd {
+ auto-start = yes
+ requires-aspectj = no
+ extension-class = "kamon.fluentd.Fluentd"
+ }
+ }
+} \ No newline at end of file
diff --git a/kamon-examples/kamon-fluentd-example/src/main/scala/KamonFluentdExample.scala b/kamon-examples/kamon-fluentd-example/src/main/scala/KamonFluentdExample.scala
new file mode 100644
index 00000000..bb1d0f7b
--- /dev/null
+++ b/kamon-examples/kamon-fluentd-example/src/main/scala/KamonFluentdExample.scala
@@ -0,0 +1,60 @@
+/* =========================================================================================
+ * Copyright © 2013-2015 the kamon project <http://kamon.io/>
+ *
+ * Licensed 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.
+ * =========================================================================================
+ */
+
+import akka.actor.ActorSystem
+import kamon.Kamon
+import spray.routing.SimpleRoutingApp
+import xerial.fluentd.{ FluentdConfig, FluentdStandalone }
+
+import scala.util.Properties
+
+object KamonFluentdExample extends App with SimpleRoutingApp {
+ // Start fluentd server only for this sample app
+ // In real usecase, you will spawn fluentd server independently.
+ val fluentdServer = FluentdStandalone.start(FluentdConfig(configuration =
+ """
+ |<source>
+ | type forward
+ | port 24224
+ |</source>
+ |<match **>
+ | type file
+ | path target/fluentd-out
+ |</match>
+ """.stripMargin))
+ sys.addShutdownHook {
+ fluentdServer.stop
+ }
+
+ // start Kamon
+ Kamon.start()
+
+ implicit val system = ActorSystem("kamon-fluentd-example")
+
+ // server endpoint
+ val interface = "0.0.0.0"
+ val port = Properties.envOrElse("PORT", "8080").toInt
+
+ // resource endpoints
+ startServer(interface = interface, port = port) {
+ path("hello") {
+ get {
+ complete {
+ <h1>Hello! Kamon Fluentd Example!</h1>
+ }
+ }
+ }
+ }
+}