Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id BF6B9200B26 for ; Mon, 27 Jun 2016 13:50:25 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id BDD51160A5B; Mon, 27 Jun 2016 11:50:25 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 11EA9160A3C for ; Mon, 27 Jun 2016 13:50:24 +0200 (CEST) Received: (qmail 65162 invoked by uid 500); 27 Jun 2016 11:50:24 -0000 Mailing-List: contact issues-help@flink.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@flink.apache.org Delivered-To: mailing list issues@flink.apache.org Received: (qmail 65151 invoked by uid 99); 27 Jun 2016 11:50:24 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Jun 2016 11:50:24 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id C6057180E24 for ; Mon, 27 Jun 2016 11:50:23 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -5.446 X-Spam-Level: X-Spam-Status: No, score=-5.446 tagged_above=-999 required=6.31 tests=[KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx2-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id mIlqsNp50_Th for ; Mon, 27 Jun 2016 11:50:19 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx2-lw-eu.apache.org (ASF Mail Server at mx2-lw-eu.apache.org) with SMTP id 00CBE5F642 for ; Mon, 27 Jun 2016 11:50:18 +0000 (UTC) Received: (qmail 65131 invoked by uid 99); 27 Jun 2016 11:50:18 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 27 Jun 2016 11:50:18 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 043A7DFDC3; Mon, 27 Jun 2016 11:50:17 +0000 (UTC) From: tillrohrmann To: issues@flink.incubator.apache.org Reply-To: issues@flink.incubator.apache.org References: In-Reply-To: Subject: [GitHub] flink pull request #2158: [FLINK-4116] Metrics documentation Content-Type: text/plain Message-Id: <20160627115018.043A7DFDC3@git1-us-west.apache.org> Date: Mon, 27 Jun 2016 11:50:17 +0000 (UTC) archived-at: Mon, 27 Jun 2016 11:50:25 -0000 Github user tillrohrmann commented on a diff in the pull request: https://github.com/apache/flink/pull/2158#discussion_r68563243 --- Diff: docs/apis/common/index.md --- @@ -1350,3 +1350,211 @@ You may specify program arguments before the job is executed. The plan visualiza the execution plan before executing the Flink job. {% top %} + +Metrics +------------------- + +Flink exposes a metric system that allows users gather and expose metrics to external systems. + +### Registering metrics + +You can access the metric system from any user function that extends [RichFunction]({{ site.baseurl }}/apis/common/index.html#rich-functions) by calling getRuntimeContext().getMetricGroup(). +This method returns a MetricGroup object on which you can create and register new metrics. + +If you want to count the number of records your user function has received you could use a Counter like this: + +{% highlight java %} + +public class MyMapper extends RichMapFunction { + private Counter counter; + + @Override + public void open(Configuration config) { + // create and register a counter + this.counter = getRuntimeContext().getMetricGroup().counter("myCounter"); + ... + } + + @public Integer map(String value) throws Exception { + // increment counter + this.counter.inc(); + ... + } +} + +{% endhighlight %} + +### Metric types + +Flink supports Counters, Gauges and Histograms. + +A Counter is used to count something. The current value can be in- or decremented using `inc([long n])` or `dec([long n])`. +You can create and registers a Counter by calling `counter(String name)` on a MetricGroup. Alternatively, you can pass an instance of your own Counter implementation along with the name. + +A Gauge provides a value of any type on demand. In order to use a Gauge you must first create a class that implements the `org.apache.flink.metrics.Gauge` interface. +There is not restriction for the type of the returned value. +You can register a gauge by calling `gauge(String name, Gauge gauge)` on a MetricGroup. + +A Histogram measure the distribution of long values. +You can register one by calling histogram(String name, Histogram histogram) on a MetricGroup. + +Flink only provides an interface for Histograms, but offers a Wrapper that allows usage of Codahale/DropWizard Histograms. (org.apache.flink.dropwizard.metrics.DropWizardHistogramWrapper) + +### Scope + +Every registered metric has an automatically assigned scope which represent the entities it is tied to. By default a metric that is registered in a user function will be scoped to the Operator in which the function runs, the Task/Job it belongs to and the TaskManager/Host it is executed on. This is referred to as the "system scope". + +You can define an additonal "user scope" by calling the MetricGroup#addGroup((int/String) name) method. + +{% highlight java %} + +counter2 = getRuntimeContext().getMetricGroup().addGroup("MyMetrics").counter("myCounter2"); + +{% endhighlight %} + +The name under which a metric is exported is based on both scopes and the name passed in the `counter() call. The order is always \\\. --- End diff -- Don't we insert a scope separating character in between the system, user and name scope? --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastructure@apache.org or file a JIRA ticket with INFRA. ---