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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
1 import json
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
2 from pathlib import Path
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
3 import subprocess
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
4
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
5
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
6 def jobConfig(name, targets, scrape_interval=None, ping_job=False, metrics_path=None, params=None):
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
7 """one scrape job config"""
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
8 ret = {
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
9 "job_name": name,
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
10 "static_configs": [{
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
11 "targets": targets,
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
12 }],
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
13 "relabel_configs": [
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
14 {
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
15 "target_label": "namespace",
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
16 "replacement": "default"
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
17 },
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
18 {
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
19 "source_labels": ["__meta_kubernetes_pod_node_name"],
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
20 "target_label": "node"
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
21 },
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
22 ]
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
23 }
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
24
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
25 if metrics_path:
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
26 ret['metrics_path'] = metrics_path
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
27
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
28 if scrape_interval:
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
29 ret['scrape_interval'] = scrape_interval
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
30
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
31 if params:
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
32 ret['params'] = params
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
33
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
34 if ping_job:
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
35 ret['metrics_path'] = '/probe'
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
36 ret['params'] = {'module': ['icmp']}
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
37 ret["relabel_configs"] = [
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
38 {
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
39 "source_labels": ["__address__"],
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
40 "target_label": "__param_target"
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
41 },
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
42 {
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
43 "source_labels": ["__param_target"],
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
44 "target_label": "instance"
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
45 },
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
46 {
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
47 "target_label": "__address__",
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
48 "replacement": "prober"
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
49 },
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
50 ]
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
51
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
52 return ret
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
53
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
54
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
55 def current_deployments():
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
56 deploys = json.loads(subprocess.check_output(['kubectl', 'get', 'deploy', '-o=json']))
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
57 for deploy in deploys['items']:
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
58 name = deploy['metadata']['name']
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
59 yield name
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
60
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
61
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
62 def scrape_deployments(deploy_doesnt_serve_metrics, forever_jobs):
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
63 ret = []
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
64 for name in current_deployments():
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
65 if name in deploy_doesnt_serve_metrics:
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
66 continue
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
67 if name in [j['job_name'] for j in forever_jobs]:
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
68 continue
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
69 targets = [name]
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
70 ret.append(jobConfig(name=name, targets=targets))
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
71 return ret
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
72
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
73
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
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
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
76 filenames_written = []
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
77 for job in jobConfs:
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
78 filename = f'job_{job["job_name"]}.yaml'
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
79 (outDir / filename).write_text(json.dumps([job], indent=2, sort_keys=True))
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
80 filenames_written.append(filename)
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
81
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
82 (outDir / f'scrape_{retention}.yaml').write_text(json.dumps({
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
83 "global": {
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
84 "scrape_interval": "1m",
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
85 "scrape_timeout": "10s"
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
86 },
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
87 "scrape_config_files": filenames_written,
fb0519859645 better py configs
drewp@bigasterisk.com
parents:
diff changeset
88 }, indent=2))