From 81e98e76fb03f5f323d0517020dc337c41dca05c Mon Sep 17 00:00:00 2001 From: Isala Piyarisi Date: Tue, 15 Feb 2022 18:06:05 +0530 Subject: [PATCH] feat(gazer): Added support for ClusterIPs --- gazer/config.py | 3 +- gazer/config/config.yaml | 12 -------- gazer/console.py | 2 +- gazer/deployment.yaml | 65 ++++++++++++++-------------------------- gazer/gazer.py | 9 ++++-- 5 files changed, 33 insertions(+), 58 deletions(-) delete mode 100644 gazer/config/config.yaml diff --git a/gazer/config.py b/gazer/config.py index af77d3f..9ff1ae8 100644 --- a/gazer/config.py +++ b/gazer/config.py @@ -16,7 +16,8 @@ def __init__(self, **kargs): def read_config(self): with open(r'config/config.yaml') as file: self.config = yaml.load(file, Loader=yaml.FullLoader) - self.config = dict(filter(lambda elem: elem[1]['node'] == NODE_NAME, self.config.items())) + self.config = dict(filter(lambda elem: elem[1]['isService'] or elem[1]['node'] == NODE_NAME, + self.config.items())) def process_IN_CLOSE_WRITE(self, evt): self.read_config() diff --git a/gazer/config/config.yaml b/gazer/config/config.yaml deleted file mode 100644 index de9f36e..0000000 --- a/gazer/config/config.yaml +++ /dev/null @@ -1,12 +0,0 @@ -10.244.1.9: - name: service-1 - namespace: default - node: minikube-0 -10.244.1.10: - name: service-2 - namespace: default - node: minikube-0 -10.244.11: - name: service-1 - namespace: default - node: minikube-1 diff --git a/gazer/console.py b/gazer/console.py index 2e7e684..3badac2 100644 --- a/gazer/console.py +++ b/gazer/console.py @@ -70,7 +70,7 @@ def draw_menu(stdscr: curses.window): k = stdscr.getch() -gazer = Gazer(console=True) +gazer = Gazer(console_mode=True) gazer.poll_data_in_bg() curses.wrapper(draw_menu) diff --git a/gazer/deployment.yaml b/gazer/deployment.yaml index 924f10f..c90bc20 100644 --- a/gazer/deployment.yaml +++ b/gazer/deployment.yaml @@ -3,6 +3,14 @@ kind: Namespace metadata: name: lazy-koala --- +apiVersion: v1 +kind: ConfigMap +metadata: + name: gazer-config + namespace: lazy-koala +data: + config.yaml: | +--- apiVersion: apps/v1 kind: DaemonSet metadata: @@ -19,7 +27,7 @@ spec: labels: name: gazer annotations: - lazy-koala/scrape: 'true' + lazy-koala/scrape: "true" spec: containers: - name: gazer @@ -80,7 +88,7 @@ spec: securityContext: privileged: true capabilities: - add: [ "SYS_ADMIN" ] + add: ["SYS_ADMIN"] volumeMounts: - name: lsb-release mountPath: /etc/lsb-release.host @@ -143,18 +151,19 @@ spec: spec: serviceAccountName: lazy-koala containers: - - name: prometheus - image: prom/prometheus:v2.33.1 - ports: - - containerPort: 9090 - name: default - volumeMounts: - - name: config-volume - mountPath: /etc/prometheus + - name: prometheus + image: prom/prometheus:v2.33.1 + ports: + - containerPort: 9090 + name: default + volumeMounts: + - name: config-volume + mountPath: /etc/prometheus + nodeName: minikube volumes: - - name: config-volume - configMap: - name: prometheus-config + - name: config-volume + configMap: + name: prometheus-config --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -167,7 +176,7 @@ rules: - nodes/metrics verbs: - get - - apiGroups: [ "" ] + - apiGroups: [""] resources: - nodes - services @@ -240,31 +249,3 @@ data: action: keep - source_labels: [__meta_kubernetes_pod_container_name] target_label: gazer ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: gazer-config - namespace: lazy-koala -data: - config.yaml: | - 10.244.1.15: - name: service-1-0de9ab8e-65bc59564d-f7rhp - serviceName: service-1 - namespace: default - node: minikube-m02 - 10.244.1.14: - name: service-2-0de9ab8e-6fff4f8956-r9qlt - serviceName: service-2 - namespace: default - node: minikube-m02 - 10.244.1.16: - name: service-3-0de9ab8e-75cc987cdc-ltcvr - serviceName: service-3 - namespace: default - node: minikube-m02 - 10.244.1.17: - name: service-4-0de9ab8e-79d69d9c99-vlpdv - serviceName: service-4 - namespace: default - node: minikube-m02 \ No newline at end of file diff --git a/gazer/gazer.py b/gazer/gazer.py index 5de9c7d..1d67514 100644 --- a/gazer/gazer.py +++ b/gazer/gazer.py @@ -12,7 +12,8 @@ ms = Histogram("request_duration_seconds", "TCP event latency", ["namespace", "serviceName", "podName"]) tx_kb = Histogram("transmitted_bytes", "Number of sent bytes during TCP event", ["namespace", "serviceName", "podName"]) -rx_kb = Histogram("acknowledged_bytes", "Number of received bytes during TCP event", ["namespace", "serviceName", "podName"]) +rx_kb = Histogram("acknowledged_bytes", "Number of received bytes during TCP event", + ["namespace", "serviceName", "podName"]) request_sent = Counter("requests_sent", "Total request sent", ["namespace", "serviceName", "podName"]) request_received = Counter("request_received", "Total request received", ["namespace", "serviceName", "podName"]) backlog = Gauge("backlog", "Request backlog", ["namespace", "serviceName", "podName", "level"]) @@ -68,6 +69,7 @@ def ipv4_request_event(self, cpu, data, size): # Write to prometheus if event['LADDR'] in config_watcher.config: pod = config_watcher.config[event['LADDR']] + ms.labels(pod['namespace'], pod['serviceName'], pod['name']).observe(event['MS'] / 1000000) tx_kb.labels(pod['namespace'], pod['serviceName'], pod['name']).observe(event['TX_KB']) rx_kb.labels(pod['namespace'], pod['serviceName'], pod['name']).observe(event['RX_KB']) @@ -75,7 +77,7 @@ def ipv4_request_event(self, cpu, data, size): if event['RADDR'] in config_watcher.config: rpod = config_watcher.config[event['RADDR']] - request_received.labels(rpod['namespace'], rpod['serviceName']).inc() + request_received.labels(rpod['namespace'], rpod['serviceName'], pod['name']).inc() if self.console_mode: self.request_df = self.request_df.append(event, ignore_index=True) @@ -88,6 +90,8 @@ def poll_requests(self): def poll_kube_api(self): for pod in config_watcher.config.values(): try: + if pod['isService']: + continue cpu_usage = 0 memory_usage = 0 r = requests.get( @@ -115,6 +119,7 @@ def poll_syn_backlog(self): # Write to prometheus if saddr in config_watcher.config: pod = config_watcher.config[saddr] + backlog.labels(pod['namespace'], pod['serviceName'], pod['name'], row[0].slot).set(row[1].value) if self.console_mode: