从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件
  • 首页
  • 监控
  • 从jumpserver拉取机器生成prometheus配置文件

从jumpserver拉取机器生成prometheus配置文件

发布:蔺要红01-01分类: 监控

# pip install requests drf-httpsig
import requests
import json
import hashlib
import os


class JumpServer:
    """
    jumpserver APi接口哦
    定时任务:每隔 10 分钟执行 把 jumpserver里的机器自动注册到 prometheus
    待优化:
        如果jumpserver机器 > 1000 请重写 assets 获取接口, 必须分页

    """

    def __init__(self):
        self.jms_url = 'http://xxxxxxx'
        self.username = "xxxxx"
        self.password = "xxxxxx"
        self.headers = {
            "Authorization": 'Bearer ' + self.get_token(),
            'X-JMS-ORG': '00000000-0000-0000-0000-000000000002'
        }

    @staticmethod
    def get_file_md5(filename):
        if not os.path.isfile(filename):
            return
        my_hash = hashlib.md5()
        f = open(filename, 'rb')
        while True:
            b = f.read(8096)
            if not b:
                break
            my_hash.update(b)
        f.close()
        return my_hash.hexdigest()

    def get_token(self):
        url = self.jms_url + '/api/v1/authentication/auth/'
        query_args = {
            "username": self.username,
            "password": self.password
        }
        response = requests.post(url, data=query_args)
        return json.loads(response.text)['token']

    def get_user_info(self):
        url = self.jms_url + '/api/v1/users/users/'
        response = requests.get(url, headers=self.headers)
        return json.loads(response.text)

    def get_assets_label(self, labels_id):
        url = self.jms_url + '/api/v1/assets/labels/' + labels_id + '/'
        response = requests.get(url, headers=self.headers)
        data_json = json.loads(response.text)
        label = {
            data_json.get("name"): data_json.get("value")
        }
        return label

    def get_assets_list(self):
        """
        :return: prometheus jons配置文件
        """
        url = self.jms_url + '/api/v1/assets/assets/'
        response = requests.get(url, headers=self.headers)
        data_json = json.loads(response.text)
        all_list = []
        for i in data_json:
            hostname = i.get("hostname")
            instance_ip = i.get("ip")
            instance = instance_ip + ":9100"
            targets_value = [instance]
            prom_data = {
                "targets": targets_value,
            }
            labels_ids = i.get("labels")
            labels = {}
            for la in labels_ids:
                label = self.get_assets_label(la)
                for k in label:
                    v = label.get(k)
                    labels[k] = v
            labels["instance"] = hostname
            labels["addr"] = instance_ip
            prom_data["labels"] = labels

            # 判断非Linux机器:
            if "system" in labels:
                continue
            #if labels.get("dept") != "qz":
            #  continue
            print(prom_data)
            all_list.append(prom_data)
            # return prom_data
        return all_list


jms = JumpServer()
data = jms.get_assets_list()
json_str = json.dumps(data, ensure_ascii=False)

with open('/data/prometheus/conf.d/jumpserver_new.json', 'w', encoding='utf-8') as json_file:
    json_file.write(json_str)
    json_file.close()

jumpserver_md5 = jms.get_file_md5("/data/prometheus/conf.d/jumpserver.json")
jumpserver_new_md5 = jms.get_file_md5("/data/prometheus/conf.d/jumpserver_new.json")
if jumpserver_md5 == jumpserver_new_md5:
    print("no update")
else:
    with open('/data/prometheus/conf.d/jumpserver.json', 'w', encoding='utf-8') as json_file:
        print("reload jumpserver.json")
        json_file.write(json_str)
        json_file.close()
 
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站