Mercurial > code > home > repos > victoriametrics
annotate next/scrape_job.py @ 62:8134cd480817
make next/ a complete standalone setup dir- no deps on ./
author | drewp@bigasterisk.com |
---|---|
date | Thu, 02 May 2024 20:33:29 -0700 |
parents | config/scrape_job.py@fb0519859645 |
children | def1aa2bfa3f |
rev | line source |
---|---|
61 | 1 import json |
2 from pathlib import Path | |
3 import subprocess | |
4 | |
5 | |
6 def jobConfig(name, targets, scrape_interval=None, ping_job=False, metrics_path=None, params=None): | |
7 """one scrape job config""" | |
8 ret = { | |
9 "job_name": name, | |
10 "static_configs": [{ | |
11 "targets": targets, | |
12 }], | |
13 "relabel_configs": [ | |
14 { | |
15 "target_label": "namespace", | |
16 "replacement": "default" | |
17 }, | |
18 { | |
19 "source_labels": ["__meta_kubernetes_pod_node_name"], | |
20 "target_label": "node" | |
21 }, | |
22 ] | |
23 } | |
24 | |
25 if metrics_path: | |
26 ret['metrics_path'] = metrics_path | |
27 | |
28 if scrape_interval: | |
29 ret['scrape_interval'] = scrape_interval | |
30 | |
31 if params: | |
32 ret['params'] = params | |
33 | |
34 if ping_job: | |
35 ret['metrics_path'] = '/probe' | |
36 ret['params'] = {'module': ['icmp']} | |
37 ret["relabel_configs"] = [ | |
38 { | |
39 "source_labels": ["__address__"], | |
40 "target_label": "__param_target" | |
41 }, | |
42 { | |
43 "source_labels": ["__param_target"], | |
44 "target_label": "instance" | |
45 }, | |
46 { | |
47 "target_label": "__address__", | |
48 "replacement": "prober" | |
49 }, | |
50 ] | |
51 | |
52 return ret | |
53 | |
54 | |
55 def current_deployments(): | |
56 deploys = json.loads(subprocess.check_output(['kubectl', 'get', 'deploy', '-o=json'])) | |
57 for deploy in deploys['items']: | |
58 name = deploy['metadata']['name'] | |
59 yield name | |
60 | |
61 | |
62 def scrape_deployments(deploy_doesnt_serve_metrics, forever_jobs): | |
63 ret = [] | |
64 for name in current_deployments(): | |
65 if name in deploy_doesnt_serve_metrics: | |
66 continue | |
67 if name in [j['job_name'] for j in forever_jobs]: | |
68 continue | |
69 targets = [name] | |
70 ret.append(jobConfig(name=name, targets=targets)) | |
71 return ret | |
72 | |
73 | |
74 def writeJobConfigs(outDir: Path, jobConfs: list, retention: str): | |
62
8134cd480817
make next/ a complete standalone setup dir- no deps on ./
drewp@bigasterisk.com
parents:
61
diff
changeset
|
75 outDir.mkdir(exist_ok=True, parents=True) |
61 | 76 filenames_written = [] |
77 for job in jobConfs: | |
78 filename = f'job_{job["job_name"]}.yaml' | |
79 (outDir / filename).write_text(json.dumps([job], indent=2, sort_keys=True)) | |
80 filenames_written.append(filename) | |
81 | |
82 (outDir / f'scrape_{retention}.yaml').write_text(json.dumps({ | |
83 "global": { | |
84 "scrape_interval": "1m", | |
85 "scrape_timeout": "10s" | |
86 }, | |
87 "scrape_config_files": filenames_written, | |
88 }, indent=2)) |