Доброго времени суток коллеги. Хочу мониторить статус своих Нод и передавать данные в Zabbix , т.к. у меня уже есть Rancher и он видит статус ноды, решил не плодить агентов в kubernetes, а обращаться к rancher, сканировать список Кластеров, а так же их Ноды и отправлять мне ИП ноды, которая не активна. Написал python скрипт(работает):
Дальше хочу так же динамически запихнуть все это в Zabbix и настроить уведомления + возможно дашборды.
Далее по плану сохранять результаты скрипта в JSON, создать Zabbix Trapper Item и передавать в него инфу с помощью Zabbix-Sender....
Вопрос:
Не придумываю ли я велосипед и возможно, кто то сможет подсказать другое решение, хотя бы, что касается Zabbix части.
Спасибо.
Code:
import requests
import base64
RANCHER_URL = ваши данные
RANCHER_ACCESS_KEY = ваши данные
RANCHER_SECRET_KEY = ваши данные
def are_nodes_active(cluster_id):
credentials = f'{RANCHER_ACCESS_KEY}:{RANCHER_SECRET_KEY}'
base64_credentials = base64.b64encode(credentials.encode()).decode()
headers = {
'Content-Type': 'application/json',
'Authorization': f'Basic {base64_credentials}',
}
try:
nodes_response = requests.get(f'{RANCHER_URL}/clusters/{cluster_id}/nodes', headers=headers, verify=True)
if nodes_response.status_code == 200:
nodes = nodes_response.json()['data']
active_nodes = [node for node in nodes if node['state'] == 'active']
inactive_nodes = [node for node in nodes if node['state'] != 'active']
return active_nodes, inactive_nodes
else:
print(f"Failed to get nodes in cluster {cluster_id}. Status Code:", nodes_response.status_code)
return None, None
except requests.exceptions.RequestException as e:
print(f"An error occurred during the request: {e}")
return None, None
def get_clusters(headers):
try:
clusters_response = requests.get(f'{RANCHER_URL}/clusters', headers=headers, verify=True)
if clusters_response.status_code == 200:
clusters = clusters_response.json()['data']
return clusters
else:
print("Failed to get clusters. Status Code:", clusters_response.status_code)
return None
except requests.exceptions.RequestException as e:
print(f"An error occurred during the request: {e}")
return None
if __name__ == '__main__':
headers = {
'Content-Type': 'application/json',
'Authorization': f'Basic {base64.b64encode((RANCHER_ACCESS_KEY + ":" + RANCHER_SECRET_KEY).encode()).decode()}',
}
clusters = get_clusters(headers)
if clusters is not None:
for cluster in clusters:
cluster_id = cluster['id']
print(f"Scanning cluster {cluster_id}...")
active_nodes, inactive_nodes = are_nodes_active(cluster_id)
if active_nodes is not None and inactive_nodes is not None:
if not inactive_nodes:
print(f"Cluster {cluster_id}: All nodes are active.")
else:
print(f"Cluster {cluster_id}: Some nodes are not active:")
for node in inactive_nodes:
print(f" Node ID: {node['id']}, IP: {node['ipAddress']}")
Дальше хочу так же динамически запихнуть все это в Zabbix и настроить уведомления + возможно дашборды.
Далее по плану сохранять результаты скрипта в JSON, создать Zabbix Trapper Item и передавать в него инфу с помощью Zabbix-Sender....
Вопрос:
Не придумываю ли я велосипед и возможно, кто то сможет подсказать другое решение, хотя бы, что касается Zabbix части.
Спасибо.
Comment