[ https://issues.apache.org/jira/browse/GOBBLIN-1639?focusedWorklogId=771561&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-771561 ]
ASF GitHub Bot logged work on GOBBLIN-1639: ------------------------------------------- Author: ASF GitHub Bot Created on: 17/May/22 20:18 Start Date: 17/May/22 20:18 Worklog Time Spent: 10m Work Description: Will-Lo commented on code in PR #3500: URL: https://github.com/apache/gobblin/pull/3500#discussion_r875227464 ########## gobblin-runtime/src/main/java/org/apache/gobblin/runtime/metrics/ServiceGobblinJobMetricReporter.java: ########## @@ -0,0 +1,67 @@ +/* + * 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. + */ + +package org.apache.gobblin.runtime.metrics; + +import com.codahale.metrics.MetricRegistry; +import com.google.common.base.Optional; +import java.util.concurrent.TimeUnit; +import org.apache.gobblin.configuration.ConfigurationKeys; +import org.apache.gobblin.metrics.ContextAwareGauge; +import org.apache.gobblin.metrics.MetricContext; +import org.apache.gobblin.metrics.ServiceMetricNames; +import org.apache.gobblin.metrics.event.JobEvent; +import org.apache.gobblin.metrics.event.TimingEvent; +import org.apache.gobblin.runtime.JobState; + + +/** + * A metrics reporter to report job-level metrics to Gobblin-as-a-Service + * Metrics should have the name FLOW_GROUP.FLOW_NAME.EDGE_ID.METRIC_NAME + * If edge ID does not exist due to a different flowgraph being used, use the jobName as default + */ +public class ServiceGobblinJobMetricReporter implements GobblinJobMetricReporter { + static String FLOW_EDGE_ID_KEY = "flow.edge.id"; + private Optional<MetricContext> metricContext; + + public ServiceGobblinJobMetricReporter(Optional<MetricContext> metricContext) { + this.metricContext = metricContext; + } + + public void reportWorkUnitCreationTimerMetrics(TimingEvent workUnitsCreationTimer, JobState jobState) { + if (!this.metricContext.isPresent() || !jobState.getPropAsBoolean(ConfigurationKeys.GOBBLIN_OUTPUT_JOB_LEVEL_METRICS, true)) { + return; + } + String workunitCreationGaugeName = MetricRegistry.name(ServiceMetricNames.GOBBLIN_SERVICE_PREFIX, jobState.getProp(ConfigurationKeys.FLOW_GROUP_KEY), + jobState.getProp(ConfigurationKeys.FLOW_NAME_KEY), jobState.getProp(FLOW_EDGE_ID_KEY, jobState.getJobName()), TimingEvent.LauncherTimings.WORK_UNITS_CREATION); + long workUnitsCreationTime = workUnitsCreationTimer.getDuration() / TimeUnit.SECONDS.toMillis(1); + ContextAwareGauge<Integer> workunitCreationGauge = + this.metricContext.get().newContextAwareGauge(workunitCreationGaugeName, () -> (int) workUnitsCreationTime); + this.metricContext.get().register(workunitCreationGaugeName, workunitCreationGauge); + } + + public void reportWorkUnitCountMetrics(int workUnitCount, JobState jobState) { + if (!this.metricContext.isPresent() || !jobState.getPropAsBoolean(ConfigurationKeys.GOBBLIN_OUTPUT_JOB_LEVEL_METRICS, true)) { + return; + } + String workunitCountGaugeName = MetricRegistry.name(ServiceMetricNames.GOBBLIN_SERVICE_PREFIX, jobState.getProp(ConfigurationKeys.FLOW_GROUP_KEY), + jobState.getProp(ConfigurationKeys.FLOW_NAME_KEY), jobState.getProp(FLOW_EDGE_ID_KEY, jobState.getJobName()), JobEvent.WORK_UNITS_CREATED); + ContextAwareGauge<Integer> workunitCountGauge = this.metricContext.get() + .newContextAwareGauge(workunitCountGaugeName, () -> Integer.valueOf(workUnitCount)); Review Comment: workUnitsCreationTime is a long so it isn't supported in `Integer.valueOf` Issue Time Tracking ------------------- Worklog Id: (was: 771561) Time Spent: 2.5h (was: 2h 20m) > Remove adhoc job metric emission and also provide a more uniform way of > emitting per pipeline metrics on Gobblin > ---------------------------------------------------------------------------------------------------------------- > > Key: GOBBLIN-1639 > URL: https://issues.apache.org/jira/browse/GOBBLIN-1639 > Project: Apache Gobblin > Issue Type: Task > Components: gobblin-service > Reporter: William Lo > Assignee: Abhishek Tiwari > Priority: Major > Time Spent: 2.5h > Remaining Estimate: 0h > > Gobblin flows still emit certain metrics by default. > 1. GaaS flows which are adhoc should not be emitting metrics outside of GTE > 2. Per pipeline metrics are too disorganized right now, need to unify them > and this can be the first step. -- This message was sent by Atlassian Jira (v8.20.7#820007)