Я пытаюсь перенести пару панелей мониторинга с одного сервера на другой. Для этого sh я пишу довольно простой сценарий, используя библиотеки python
и requests
.
class Grafana:
def __init__(self, url, key):
self.headers = {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + key
}
self.url = url
def get_all_dashboard_uris(self):
return (dashboard['uri']
for dashboard in requests.get(self.url+'api/search?query=', headers=self.headers
).json())
def import_dashboard(self, dashboard_uri):
return requests.get(self.url+'api/dashboards/'+dashboard_uri, headers=self.headers).json()['dashboard']
def create_dashboard(self, dashboard_object):
dashboard_object['id'] = None #id = null to create a new dashboard
#(https://grafana.com/docs/grafana/v4.1/http_api/dashboard/)
return requests.post(self.url+'api/dashboards/db', headers=self.headers, json={'dashboard': dashboard_object})
if __name__ == '__main__':
initial_grafana = Grafana(url=URL, key=KEY)
final_grafana = Grafana(url=URL_TEST, key=KEY_TEST)
for dashboard_uri in initial_grafana.get_all_dashboard_uris():
dash = initial_grafana.import_dashboard(dashboard_uri)
print(dashboard_uri)
result = final_grafana.create_dashboard(initial_grafana.import_dashboard(dashboard_uri))
print(result.status_code, result.text)
print('')
Проблема в том, что при этом выводится 403 {"message":"Permission denied"}
для всех панелей мониторинга. Я сталкиваюсь с этой проблемой, даже если попытаться создать приборную панель с теми же параметрами, которые указаны в документации:
def create_test_dashboard(self):
dashboard_object = {
'dashboard': {
'id': None,
'title': 'Production Overview',
'tags': ['templated'],
'timezone': 'browser',
'rows': [{}],
'schemaVersion': 6,
'version': 0
},
'overwrite': False
}
return requests.post(self.url+'api/dashboards/db', headers=self.headers, json=dashboard_object)
if __name__ == '__main__':
final_grafana = Grafana(url=URL_TEST, key=KEY_TEST)
result = final_grafana.create_test_dashboard()
Несколько быстрых замечаний, которые я считаю важными:
1) нет проблем, если я использую метод import_dashboard
в объекте final_grafana
;
2) Нет проблем, если я создаю панель мониторинга вручную, используя файл .json
;
3) Я использую роль администратора;
4) Я использую Grafana 4.2.
Есть идеи, как решить эту проблему?