Skip to content

Commit e057445

Browse files
fix(asap-tools): require explicit cluster scrape intervals
1 parent f84d8f6 commit e057445

10 files changed

Lines changed: 30 additions & 40 deletions

‎asap-tools/experiments/config/experiment_type/cluster_data_alibaba_msresource_2021.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ exporters:
2828
data_type: "msresource"
2929
data_year: 2021
3030
parts_mode: "all-parts" # or "part-index" with part_index: 0
31-
scrape_interval: "10s"
31+
scrape_interval: "1s"
3232
# Optional configuration
3333
# log_level: "INFO" # DEBUG, INFO, WARN, ERROR (default: INFO)
3434
# memory_limit: "2g"

‎asap-tools/experiments/config/experiment_type/cluster_data_alibaba_msresource_2022.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ exporters:
2828
data_type: "msresource"
2929
data_year: 2022
3030
parts_mode: "all-parts" # or "part-index" with part_index: 0
31-
scrape_interval: "10s"
31+
scrape_interval: "1s"
3232
# Optional configuration
3333
# log_level: "INFO" # DEBUG, INFO, WARN, ERROR (default: INFO)
3434
# memory_limit: "2g"

‎asap-tools/experiments/config/experiment_type/cluster_data_alibaba_node_2021.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ exporters:
3535
parts_mode: "all-parts" # or "part-index" with part_index: 0
3636
#part-index: 0
3737
speedup: 3 # Speedup factor: 1=real-time (default), 10=10x faster, 100=100x faster
38-
scrape_interval: "10s"
38+
scrape_interval: "1s"
3939
# Optional configuration
4040
# log_level: "INFO" # DEBUG, INFO, WARN, ERROR (default: INFO)
4141
# memory_limit: "2g"

‎asap-tools/experiments/config/experiment_type/cluster_data_alibaba_node_2022.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ exporters:
3030
#parts_mode: "all-parts" # or "part-index" with part_index: 0
3131
parts_mode: "part-index"
3232
part_index: 0
33-
scrape_interval: "10s"
33+
scrape_interval: "1s"
3434
# Optional configuration
3535
# log_level: "INFO" # DEBUG, INFO, WARN, ERROR (default: INFO)
3636
# memory_limit: "2g"

‎asap-tools/experiments/config/experiment_type/cluster_data_google.yaml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ exporters:
4040
parts_mode: "part-index" # or "part-index" with part_index: 0
4141
part_index: 0
4242
# A Google task_usage scrape contains many active task series.
43-
scrape_interval: "60s"
44-
scrape_timeout: "30s"
43+
scrape_interval: "1s"
44+
scrape_timeout: "1s"
4545
# Optional configuration
4646
# log_level: "INFO" # DEBUG, INFO, WARN, ERROR (default: INFO)
4747
# memory_limit: "2g"

‎asap-tools/experiments/experiment_utils/config.py‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@
1414
from experiment_utils.providers.factory import create_provider
1515

1616

17-
DEFAULT_CLUSTER_DATA_SCRAPE_INTERVAL = "10s"
18-
19-
2017
def validate_basic_config(
2118
cfg: DictConfig,
2219
required_params: List[Tuple[str, str]],
@@ -527,9 +524,9 @@ def get_prometheus_data_ingestion_interval_ms(
527524
exporter_list = exporters.get("exporter_list", {})
528525
cluster_data_exporter = exporter_list.get("cluster_data_exporter")
529526
if cluster_data_exporter is not None:
530-
s = cluster_data_exporter.get(
531-
"scrape_interval", DEFAULT_CLUSTER_DATA_SCRAPE_INTERVAL
532-
)
527+
if "scrape_interval" not in cluster_data_exporter:
528+
raise ValueError("cluster_data_exporter requires 'scrape_interval'")
529+
s = cluster_data_exporter["scrape_interval"]
533530

534531
# ponytail: check ms before s — "100ms".endswith("s") is True and would misroute
535532
if s.endswith("ms"):

‎asap-tools/experiments/experiment_utils/core.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def read_exporter_config(experiment_params: DictConfig) -> Tuple[Optional[Dict],
4545
cde_config = exporters_config.exporter_list.cluster_data_exporter
4646

4747
# Check required keys
48-
required_keys = ["provider", "port"]
48+
required_keys = ["provider", "port", "scrape_interval"]
4949
missing_keys = [key for key in required_keys if key not in cde_config]
5050
if missing_keys:
5151
return (

‎asap-tools/experiments/generate_prometheus_config.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from omegaconf import DictConfig
66

77
import experiment_utils
8-
from experiment_utils.config import DEFAULT_CLUSTER_DATA_SCRAPE_INTERVAL
98
from utils import get_node_range
109

1110

@@ -281,11 +280,12 @@ def main(args, experiment_config=None):
281280
target_node_idx = args.node_offset + 2
282281
target = f"{args.node_ip_prefix}.{target_node_idx}:{port}"
283282

283+
if "scrape_interval" not in cde_config:
284+
raise ValueError("cluster_data_exporter requires 'scrape_interval'")
285+
284286
scrape_config = {
285287
"job_name": "cluster_data_exporter",
286-
"scrape_interval": cde_config.get(
287-
"scrape_interval", DEFAULT_CLUSTER_DATA_SCRAPE_INTERVAL
288-
),
288+
"scrape_interval": cde_config["scrape_interval"],
289289
"static_configs": [
290290
{
291291
"targets": [target],

‎asap-tools/experiments/tests/test_cluster_data_config.py‎

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ def test_google_scrape_interval_matches_controller_ingestion_interval(self):
5353
if job["job_name"] == "cluster_data_exporter"
5454
)
5555

56-
self.assertEqual(cde_job["scrape_interval"], "60s")
57-
self.assertEqual(cde_job["scrape_timeout"], "30s")
56+
self.assertEqual(cde_job["scrape_interval"], "1s")
57+
self.assertEqual(cde_job["scrape_timeout"], "1s")
5858
self.assertEqual(
5959
get_prometheus_data_ingestion_interval_ms(
6060
OmegaConf.create({"scrape_interval": "1s"}),
6161
OmegaConf.create(experiment_config),
6262
),
63-
60000,
63+
1000,
6464
)
6565

6666
def test_alibaba_scrape_interval_matches_controller_ingestion_interval(self):
@@ -77,16 +77,16 @@ def test_alibaba_scrape_interval_matches_controller_ingestion_interval(self):
7777
if job["job_name"] == "cluster_data_exporter"
7878
)
7979

80-
self.assertEqual(cde_job["scrape_interval"], "10s")
80+
self.assertEqual(cde_job["scrape_interval"], "1s")
8181
self.assertEqual(
8282
get_prometheus_data_ingestion_interval_ms(
8383
OmegaConf.create({"scrape_interval": "1s"}),
8484
OmegaConf.create(experiment_config),
8585
),
86-
10000,
86+
1000,
8787
)
8888

89-
def test_missing_cluster_data_interval_uses_shared_default(self):
89+
def test_missing_cluster_data_interval_fails_loudly(self):
9090
with open(
9191
EXPERIMENTS_DIR
9292
/ "config/experiment_type/cluster_data_alibaba_node_2022.yaml"
@@ -96,21 +96,13 @@ def test_missing_cluster_data_interval_uses_shared_default(self):
9696
"scrape_interval"
9797
]
9898

99-
prometheus_config = self._generate_config(experiment_config)
100-
cde_job = next(
101-
job
102-
for job in prometheus_config["scrape_configs"]
103-
if job["job_name"] == "cluster_data_exporter"
104-
)
105-
106-
self.assertEqual(cde_job["scrape_interval"], "10s")
107-
self.assertEqual(
99+
with self.assertRaisesRegex(ValueError, "scrape_interval"):
100+
self._generate_config(experiment_config)
101+
with self.assertRaisesRegex(ValueError, "scrape_interval"):
108102
get_prometheus_data_ingestion_interval_ms(
109103
OmegaConf.create({"scrape_interval": "1s"}),
110104
OmegaConf.create(experiment_config),
111-
),
112-
10000,
113-
)
105+
)
114106

115107

116108
if __name__ == "__main__":

‎docs/03-how-to-guides/operations/run-alibaba-cluster-data-experiment.md‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ sketchdb-cluster-data-exporter:latest
8989
The checked-in experiment configuration is
9090
`asap-tools/experiments/config/experiment_type/cluster_data_alibaba_node_2021.yaml`.
9191
It runs four global CPU quantiles, ten repetitions each, at 3x replay speed.
92-
Its cluster-data scrape interval is explicitly set to 10 seconds, and the
92+
Its cluster-data scrape interval is explicitly set to 1 second, and the
9393
controller uses that same interval for ingestion planning.
9494

9595
`controller.punting` is set to `false` in
@@ -159,10 +159,11 @@ python3 experiment_run_e2e.py \
159159

160160
This configuration runs both `sketchdb` and `baseline` modes. Google
161161
`task_usage` produces a much larger `/metrics` response than the Alibaba
162-
Node trace, so the Google config sets the cluster-data scrape interval to
163-
60 seconds and timeout to 30 seconds. The Prometheus config generator honors
164-
these optional exporter settings. The Google query repetition delay is also
165-
60 seconds so repetitions do not outrun new scrapes.
162+
Node trace, but the Google and Alibaba configs currently use a 1-second
163+
cluster-data scrape interval so Prometheus and controller planning remain
164+
aligned. The Google config uses a 1-second scrape timeout as well; increase
165+
both values together only after validating the larger response against the
166+
available Prometheus capacity.
166167

167168
The default query is:
168169

0 commit comments

Comments
 (0)