in gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/GobblinMetrics.java [641:725]
private void buildGraphiteMetricReporter(Properties properties)
throws MultiReporterException {
List<MetricReporterException> reporterExceptionList = Lists.newArrayList();
boolean metricsEnabled = PropertiesUtils
.getPropAsBoolean(properties, ConfigurationKeys.METRICS_REPORTING_GRAPHITE_METRICS_ENABLED_KEY,
ConfigurationKeys.DEFAULT_METRICS_REPORTING_GRAPHITE_METRICS_ENABLED);
if (metricsEnabled) {
LOGGER.info("Reporting metrics to Graphite");
}
boolean eventsEnabled = PropertiesUtils
.getPropAsBoolean(properties, ConfigurationKeys.METRICS_REPORTING_GRAPHITE_EVENTS_ENABLED_KEY,
ConfigurationKeys.DEFAULT_METRICS_REPORTING_GRAPHITE_EVENTS_ENABLED);
if (eventsEnabled) {
LOGGER.info("Reporting events to Graphite");
}
if (!metricsEnabled && !eventsEnabled) {
return;
}
try {
Preconditions.checkArgument(properties.containsKey(ConfigurationKeys.METRICS_REPORTING_GRAPHITE_HOSTNAME),
"Graphite hostname is missing.");
} catch (IllegalArgumentException exception) {
reporterExceptionList.add(new MetricReporterException("Missing Graphite configuration(s).", exception, ReporterType.METRIC_EVENT, ReporterSinkType.GRAPHITE));
throw new MultiReporterException("Failed to start one or more Graphite reporters", reporterExceptionList);
}
String hostname = properties.getProperty(ConfigurationKeys.METRICS_REPORTING_GRAPHITE_HOSTNAME);
int port = Integer.parseInt(properties.getProperty(ConfigurationKeys.METRICS_REPORTING_GRAPHITE_PORT,
ConfigurationKeys.DEFAULT_METRICS_REPORTING_GRAPHITE_PORT));
GraphiteConnectionType connectionType;
String type = properties.getProperty(ConfigurationKeys.METRICS_REPORTING_GRAPHITE_SENDING_TYPE,
ConfigurationKeys.DEFAULT_METRICS_REPORTING_GRAPHITE_SENDING_TYPE).toUpperCase();
String prefix = properties.getProperty(ConfigurationKeys.METRICS_REPORTING_GRAPHITE_PREFIX,
ConfigurationKeys.DEFAULT_METRICS_REPORTING_GRAPHITE_PREFIX);
try {
connectionType = GraphiteConnectionType.valueOf(type);
} catch (IllegalArgumentException exception) {
LOGGER
.warn("Graphite Reporter connection type " + type + " not recognized. Will use TCP for sending.", exception);
connectionType = GraphiteConnectionType.TCP;
}
if (metricsEnabled) {
try {
GraphiteReporter.Factory.newBuilder().withConnectionType(connectionType)
.withConnection(hostname, port).withMetricContextName(
this.metricContext.getName()) //contains the current job id
.withMetricsPrefix(prefix)
.build(properties);
} catch (IOException e) {
reporterExceptionList.add(new MetricReporterException("Failed to create Graphite metrics reporter.", e, ReporterType.METRIC, ReporterSinkType.GRAPHITE));
}
}
if (eventsEnabled) {
boolean emitValueAsKey = PropertiesUtils
.getPropAsBoolean(properties, ConfigurationKeys.METRICS_REPORTING_GRAPHITE_EVENTS_VALUE_AS_KEY,
ConfigurationKeys.DEFAULT_METRICS_REPORTING_GRAPHITE_EVENTS_VALUE_AS_KEY);
String eventsPortProp = properties.getProperty(ConfigurationKeys.METRICS_REPORTING_GRAPHITE_EVENTS_PORT);
int eventsPort = (eventsPortProp == null) ? (metricsEnabled ? port
: Integer.parseInt(ConfigurationKeys.METRICS_REPORTING_GRAPHITE_PORT)) : Integer.parseInt(eventsPortProp);
try {
GraphiteEventReporter eventReporter =
GraphiteEventReporter.Factory.forContext(RootMetricContext.get())
.withConnectionType(connectionType)
.withConnection(hostname, eventsPort)
.withPrefix(prefix)
.withEmitValueAsKey(emitValueAsKey)
.build();
this.codahaleScheduledReporters.add(this.codahaleReportersCloser.register(eventReporter));
}
catch (IOException e) {
reporterExceptionList.add(new MetricReporterException("Failed to create Graphite event reporter.", e, ReporterType.EVENT, ReporterSinkType.GRAPHITE));
}
}
if (!reporterExceptionList.isEmpty()) {
throw new MultiReporterException("Failed to create one or more Graphite Reporters", reporterExceptionList);
}
}