Skip to content

Instantly share code, notes, and snippets.

@krzysztofantczak
Created February 7, 2024 07:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krzysztofantczak/1cd438e4cf60a44af6e5711bdd83c986 to your computer and use it in GitHub Desktop.
Save krzysztofantczak/1cd438e4cf60a44af6e5711bdd83c986 to your computer and use it in GitHub Desktop.
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