Created
February 7, 2024 07:39
-
-
Save krzysztofantczak/1cd438e4cf60a44af6e5711bdd83c986 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
class PrometheusAnalyzer: | |
def __init__(self, prometheus_url): | |
self.prometheus_url = prometheus_url | |
def query(self, query, duration='5m', interval='1m'): | |
params = {'query': query, 'time': duration, 'step': interval} | |
response = requests.get(self.prometheus_url + '/api/v1/query_range', params=params) | |
data = response.json() | |
return data['data']['result'] | |
def get_node_memory_cpu_usage(self): | |
query_memory = 'avg_over_time(node_memory_MemTotal_bytes[5m])' | |
query_cpu = 'rate(node_cpu_seconds_total[5m])' | |
memory_results = self.query(query_memory) | |
cpu_results = self.query(query_cpu) | |
node_memory_cpu_usage = {} | |
for memory_result, cpu_result in zip(memory_results, cpu_results): | |
node_name = memory_result['metric']['instance'] | |
memory_usage = int(memory_result['values'][-1][1]) # Using the last value | |
cpu_usage = float(cpu_result['values'][-1][1]) # Using the last value | |
node_memory_cpu_usage[node_name] = {'memory_usage': memory_usage, 'cpu_usage': cpu_usage} | |
return node_memory_cpu_usage | |
def get_java_process_memory_cpu_usage(self): | |
query_memory = 'avg_over_time(jvm_memory_bytes_used[5m])' | |
query_cpu = 'rate(process_cpu_seconds_total[5m])' | |
memory_results = self.query(query_memory) | |
cpu_results = self.query(query_cpu) | |
java_process_memory_cpu_usage = {} | |
for memory_result, cpu_result in zip(memory_results, cpu_results): | |
process_name = memory_result['metric']['process_name'] | |
node_name = memory_result['metric']['instance'] | |
memory_usage = int(memory_result['values'][-1][1]) # Using the last value | |
cpu_usage = float(cpu_result['values'][-1][1]) # Using the last value | |
if node_name not in java_process_memory_cpu_usage: | |
java_process_memory_cpu_usage[node_name] = {} | |
java_process_memory_cpu_usage[node_name][process_name] = {'memory_usage': memory_usage, 'cpu_usage': cpu_usage} | |
return java_process_memory_cpu_usage | |
def analyze_placement(self): | |
node_memory_cpu_usage = self.get_node_memory_cpu_usage() | |
java_process_memory_cpu_usage = self.get_java_process_memory_cpu_usage() | |
for node, process_info in java_process_memory_cpu_usage.items(): | |
print(f"Node: {node}") | |
for process, usage_info in process_info.items(): | |
print(f"Process: {process}, Memory Usage: {usage_info['memory_usage']}, CPU Usage: {usage_info['cpu_usage']}") | |
print() | |
if __name__ == "__main__": | |
prometheus_url = 'http://your-prometheus-url.com' | |
prometheus_analyzer = PrometheusAnalyzer(prometheus_url) | |
prometheus_analyzer.analyze_placement() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment