>
> I would be in favor of replacing the existing Gauge.set(long) API with the
> String version and removing the old one. This would be a breaking change.
> However this is a relatively new API and is still marked @Experimental.
> Keeping the old API would retain the potential confusion. It's better to
> simplify the API surface: having two APIs makes it less clear which one
> users should choose.


Supporting additional data types sounds good. But the above states string
API will replace the existing API. I do not see how string API makes the
semantics more clear.  Semantically both are same to the user.

On Fri, Apr 6, 2018 at 9:31 AM Pablo Estrada <pabl...@google.com> wrote:

> Hi Ben : D
>
> Sure, that's reasonable. And perhaps I started the discussion in the wrong
> direction. I'm not questioning the utility of Gauge metrics.
>
> What I'm saying is that Beam only supports integers,, but Gauges are
> aggregated by dropping old values depending on their update times; so it
> might be desirable to not restrict the data type to just integers.
>
> -P.
>
> On Fri, Apr 6, 2018 at 9:19 AM Ben Chambers <bchamb...@apache.org> wrote:
>
>> See for instance how gauge metrics are handled in Prometheus, Datadog and
>> Stackdriver monitoring. Gauges are perfect for use in distributed systems,
>> they just need to be properly labeled. Perhaps we should apply a default
>> tag or allow users to specify one.
>>
>> On Fri, Apr 6, 2018, 9:14 AM Ben Chambers <bchamb...@apache.org> wrote:
>>
>>> Some metrics backend label the value, for instance with the worker that
>>> sent it. Then the aggregation is latest per label. This makes it useful for
>>> holding values such as "memory usage" that need to hold current value.
>>>
>>> On Fri, Apr 6, 2018, 9:00 AM Scott Wegner <sweg...@google.com> wrote:
>>>
>>>> +1 on the proposal to support a "String" gauge.
>>>>
>>>> To expand a bit, the current API doesn't make it clear that the gauge
>>>> value is based on local state. If a runner chooses to parallelize a DoFn
>>>> across many workers, each worker will have its own local Gauge metric and
>>>> its updates will overwrite other values. For example, from the API it looks
>>>> like you could use a gauge to implement your own element count metric:
>>>>
>>>> long count = 0;
>>>> @ProcessElement
>>>> public void processElement(ProcessContext c) {
>>>>   myGauge.set(++count);
>>>>   c.output(c.element());
>>>> }
>>>>
>>>> This looks correct, but each worker has their own local 'count' field,
>>>> and gauge metric updates from parallel workers will overwrite each other
>>>> rather than get aggregated. So the final value would be "the number of
>>>> elements processed on one of the workers". (The correct implementation uses
>>>> a Counter metric).
>>>>
>>>> I would be in favor of replacing the existing Gauge.set(long) API with
>>>> the String version and removing the old one. This would be a breaking
>>>> change. However this is a relatively new API and is still marked
>>>> @Experimental. Keeping the old API would retain the potential confusion.
>>>> It's better to simplify the API surface: having two APIs makes it less
>>>> clear which one users should choose.
>>>>
>>>> On Fri, Apr 6, 2018 at 8:28 AM Pablo Estrada <pabl...@google.com>
>>>> wrote:
>>>>
>>>>> Hello all,
>>>>> As I was working on adding support for Gauges in Dataflow, some noted
>>>>> that Gauge is a fairly unusual kind of metric for a distributed
>>>>> environment, since many workers will report different values and stomp on
>>>>> each other's all the time.
>>>>>
>>>>> We also looked at Flink and Dropwizard Gauge metrics [1][2], and we
>>>>> found that these use generics, and Flink explicitly mentions that a
>>>>> toString implementation is required[3].
>>>>>
>>>>> With that in mind, I'm thinking that it might make sense to 1) expand
>>>>> Gauge to support string values (keep int-based API for backwards
>>>>> compatibility), and migrate it to use string behind the covers.
>>>>>
>>>>> What does everyone think about this?
>>>>>
>>>>> Best
>>>>> -P.
>>>>>
>>>>> 1 -
>>>>> https://ci.apache.org/projects/flink/flink-docs-release-1.3/monitoring/metrics.html#metric-types
>>>>> 2 - https://metrics.dropwizard.io/3.1.0/manual/core/#gauges
>>>>> 3 -
>>>>> https://github.com/apache/flink/blob/master/docs/monitoring/metrics.md#gauge
>>>>> JIRA issue for Gauge metrics -
>>>>> https://issues.apache.org/jira/browse/BEAM-1616
>>>>> --
>>>>> Got feedback? go/pabloem-feedback
>>>>> <https://goto.google.com/pabloem-feedback>
>>>>>
>>>> --
>>>>
>>>>
>>>> Got feedback? http://go/swegner-feedback
>>>>
>>> --
> Got feedback? go/pabloem-feedback
> <https://goto.google.com/pabloem-feedback>
>

Reply via email to