Skip to content

Commit b0e0e92

Browse files
authored
Merge pull request #2290 from HubSpot/metrics_exposure
Add a class of scheduler-related metrics to expose more easily
2 parents a4251e3 + 3b0b2cd commit b0e0e92

File tree

4 files changed

+82
-2
lines changed

4 files changed

+82
-2
lines changed

SingularityService/src/main/java/com/hubspot/singularity/mesos/SingularityMesosModule.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public void configure() {
3636
bind(SingularitySchedulerLock.class).in(Scopes.SINGLETON);
3737
bind(SingularityMesosSchedulerClient.class).in(Scopes.SINGLETON);
3838
bind(TaskLagGuardrail.class).in(Scopes.SINGLETON);
39+
bind(SingularitySchedulerMetrics.class).in(Scopes.SINGLETON);
3940

4041
Multibinder.newSetBinder(binder(), DeployAcceptanceHook.class);
4142
}

SingularityService/src/main/java/com/hubspot/singularity/mesos/SingularityMesosOfferScheduler.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public class SingularityMesosOfferScheduler {
8282
private final DisasterManager disasterManager;
8383
private final SingularityMesosSchedulerClient mesosSchedulerClient;
8484
private final OfferCache offerCache;
85+
private final SingularitySchedulerMetrics metrics;
8586

8687
private final double normalizedCpuWeight;
8788
private final double normalizedMemWeight;
@@ -108,7 +109,8 @@ public SingularityMesosOfferScheduler(
108109
SingularityManagedThreadPoolFactory threadPoolFactory,
109110
DisasterManager disasterManager,
110111
SingularityMesosSchedulerClient mesosSchedulerClient,
111-
OfferCache offerCache
112+
OfferCache offerCache,
113+
SingularitySchedulerMetrics metrics
112114
) {
113115
this.defaultResources =
114116
new Resources(
@@ -142,6 +144,7 @@ public SingularityMesosOfferScheduler(
142144
this.usageManager = usageManager;
143145
this.deployManager = deployManager;
144146
this.lock = lock;
147+
this.metrics = metrics;
145148

146149
double cpuWeight = mesosConfiguration.getCpuWeight();
147150
double memWeight = mesosConfiguration.getMemWeight();
@@ -331,6 +334,8 @@ public void resourceOffers(List<Offer> uncached) {
331334
throw t;
332335
}
333336

337+
metrics.getOfferLoopTime().update(System.currentTimeMillis() - start);
338+
334339
LOG.info(
335340
"Finished handling {} new offer(s) {} from cache ({}), {} accepted, {} declined/cached",
336341
uncached.size(),
@@ -624,6 +629,7 @@ Collection<SingularityOfferHolder> checkOffers(
624629
bestOffer.getSanitizedHost()
625630
);
626631
acceptTask(bestOffer, taskRequestHolder);
632+
metrics.getTasksScheduled().inc();
627633
tasksScheduled.getAndIncrement();
628634
updateAgentUsageScores(
629635
taskRequestHolder,
@@ -651,6 +657,9 @@ Collection<SingularityOfferHolder> checkOffers(
651657
)
652658
.join();
653659

660+
metrics.getOfferLoopTasksRemaining().update(numDueTasks - tasksScheduled.get());
661+
metrics.getOfferLoopOverLoadedHosts().update(overloadedHosts.size());
662+
metrics.getOfferLoopNoMatches().update(noMatches.get());
654663
LOG.info(
655664
"{} tasks scheduled, {} tasks remaining after examining {} offers ({} overloaded hosts, {} had no offer matches)",
656665
tasksScheduled,
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.hubspot.singularity.mesos;
2+
3+
import com.codahale.metrics.Counter;
4+
import com.codahale.metrics.Histogram;
5+
import com.codahale.metrics.MetricRegistry;
6+
import com.google.inject.Inject;
7+
import com.google.inject.Singleton;
8+
9+
@Singleton
10+
public class SingularitySchedulerMetrics {
11+
private final Histogram offerLoopTime;
12+
private final Counter tasksScheduled;
13+
private final Histogram offerLoopTasksRemaining;
14+
private final Histogram deployPollerTime;
15+
private final Histogram lbUpdateTime;
16+
private final Histogram offerLoopOverLoadedHosts;
17+
private final Histogram offerLoopNoMatches;
18+
19+
@Inject
20+
SingularitySchedulerMetrics(MetricRegistry metricRegistry) {
21+
this.offerLoopTime = metricRegistry.histogram("offer-loop.time");
22+
this.tasksScheduled = metricRegistry.counter("tasks-scheduled");
23+
this.offerLoopTasksRemaining = metricRegistry.histogram("offer-loop.tasks-remaining");
24+
this.deployPollerTime = metricRegistry.histogram("deploy-poller-time");
25+
this.lbUpdateTime = metricRegistry.histogram("lb-update-time");
26+
this.offerLoopOverLoadedHosts =
27+
metricRegistry.histogram("offer-loop.overloaded-hosts");
28+
this.offerLoopNoMatches = metricRegistry.histogram("offer-loop.no-matches");
29+
}
30+
31+
public Histogram getOfferLoopTime() {
32+
return offerLoopTime;
33+
}
34+
35+
public Counter getTasksScheduled() {
36+
return tasksScheduled;
37+
}
38+
39+
public Histogram getOfferLoopTasksRemaining() {
40+
return offerLoopTasksRemaining;
41+
}
42+
43+
public Histogram getDeployPollerTime() {
44+
return deployPollerTime;
45+
}
46+
47+
public Histogram getLbUpdateTime() {
48+
return lbUpdateTime;
49+
}
50+
51+
public Histogram getOfferLoopOverLoadedHosts() {
52+
return offerLoopOverLoadedHosts;
53+
}
54+
55+
public Histogram getOfferLoopNoMatches() {
56+
return offerLoopNoMatches;
57+
}
58+
}

SingularityService/src/main/java/com/hubspot/singularity/scheduler/SingularityDeployChecker.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.hubspot.singularity.expiring.SingularityExpiringScale;
4545
import com.hubspot.singularity.hooks.LoadBalancerClient;
4646
import com.hubspot.singularity.mesos.SingularitySchedulerLock;
47+
import com.hubspot.singularity.mesos.SingularitySchedulerMetrics;
4748
import com.hubspot.singularity.scheduler.SingularityDeployHealthHelper.DeployHealth;
4849
import java.util.ArrayList;
4950
import java.util.Collection;
@@ -77,6 +78,7 @@ public class SingularityDeployChecker {
7778
private final UsageManager usageManager;
7879
private final SingularityDeployAcceptanceManager deployAcceptanceManager;
7980
private final ExecutorService deployCheckExecutor;
81+
private final SingularitySchedulerMetrics metrics;
8082

8183
@Inject
8284
public SingularityDeployChecker(
@@ -90,7 +92,8 @@ public SingularityDeployChecker(
9092
SingularitySchedulerLock lock,
9193
UsageManager usageManager,
9294
SingularityManagedThreadPoolFactory threadPoolFactory,
93-
SingularityDeployAcceptanceManager deployAcceptanceManager
95+
SingularityDeployAcceptanceManager deployAcceptanceManager,
96+
SingularitySchedulerMetrics metrics
9497
) {
9598
this.configuration = configuration;
9699
this.lbClient = lbClient;
@@ -104,9 +107,11 @@ public SingularityDeployChecker(
104107
this.deployAcceptanceManager = deployAcceptanceManager;
105108
this.deployCheckExecutor =
106109
threadPoolFactory.get("deploy-checker", configuration.getCoreThreadpoolSize());
110+
this.metrics = metrics;
107111
}
108112

109113
public int checkDeploys() {
114+
long start = System.currentTimeMillis();
110115
final List<SingularityPendingDeploy> pendingDeploys = deployManager.getPendingDeploys();
111116
final List<SingularityDeployMarker> cancelDeploys = deployManager.getCancelDeploys();
112117
final List<SingularityUpdatePendingDeployRequest> updateRequests = deployManager.getPendingDeployUpdates();
@@ -138,6 +143,7 @@ public int checkDeploys() {
138143
cancelDeploys.forEach(deployManager::deleteCancelDeployRequest);
139144
updateRequests.forEach(deployManager::deleteUpdatePendingDeployRequest);
140145

146+
metrics.getDeployPollerTime().update(System.currentTimeMillis() - start);
141147
return pendingDeploys.size();
142148
}
143149

@@ -1589,6 +1595,12 @@ private SingularityDeployResult processLbState(
15891595
lbUpdate,
15901596
lbUpdateHolder
15911597
);
1598+
metrics
1599+
.getLbUpdateTime()
1600+
.update(
1601+
System.currentTimeMillis() -
1602+
lbUpdateHolder.getLoadBalancerUpdate().getTimestamp()
1603+
);
15921604
updatePendingDeploy(pendingDeploy, DeployState.WAITING, updatedProgress);
15931605
// All tasks for current step are launched and in the LB if needed
15941606
return markStepLaunchFinished(

0 commit comments

Comments
 (0)