2016-03-15 28 views
1

我想用python腳本自動化在Kibana上創建可視化和儀表板。我能夠通過終端上的cURL命令完成此操作,將數據輸入'http://localhost:9200/.kibana/visualization/visualization_name'。如何使用REST請求使用python腳本加載Kibana可視化


但是,當我將這段代碼添加到我的python腳本時遇到了問題。

首先我想硬編碼我捲曲命令文檔字符串並將它傳遞給終端:

import subprocess 
command = '''curl -XPUT http://localhost:9200/.kibana/visualization/test_visual -d'{"title":"test_visual","visState":"{\"aggs\":[{\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"id\":\"2\",\"params\":{\"field\":\"SYSTEM\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":100},\"schema\":\"segment\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"addLegend\":true,\"addTooltip\":true,\"defaultYExtents\":false,\"shareYAxis\":true},\"type\":\"line\"}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"id_1\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}},\"filter\":[]}"}}' ''' 
output = subprocess.check_output(command, shell=True) 
print(output) 

這回:

% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 731 100 313 100 418 4012 5358 --:--:-- --:--:-- --:--:-- 6741 
b'{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failed to parse"}],"type":"mapper_parsing_exception","reason":"failed to parse","caused_by":{"type":"not_x_content_exception","reason":"Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes"}},"status":400}' 

我也使用請求庫嘗試:

import requests 
url = 'http://localhost:9200/.kibana/visualization/test_visual' 
data = '''{"title":"test_visual","visState":"{\"aggs\":[{\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"id\":\"2\",\"params\":{\"field\":\"SYSTEM\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":100},\"schema\":\"segment\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"addLegend\":true,\"addTooltip\":true,\"defaultYExtents\":false,\"shareYAxis\":true},\"type\":\"line\"}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"id_1\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}},\"filter\":[]}"}}''' 
response = requests.put(url, data=data) 
print(response) 

,它也返回400


我知道捲曲是正確的,因爲我能夠在 shell腳本 /終端運行此罰款,並能夠從Kibana儀表盤進行確認。請幫我理解我的錯誤。謝謝。
我使用ES 2.2.0和4.4.0 Kibana

編輯
我意識到,我不能在shell中運行它,要麼,如果我在一個變量保存命令...

回答

2

昨天我想到了這件事,所以我會回答我自己的問題,因爲我知道別人會在某個時間點與此糾纏。如果有更多知識的人偶然發現這一點,我需要對shell中不一致的行爲做更多的解釋。


工作代碼

import requests 
url = 'http://localhost:9200/.kibana/visualization/test_visual' 
data = """{"title":"test_visual","visState":"{\\"aggs\\":[{\\"id\\":\\"1\\",\\"params\\":{},\\"schema\\":\\"metric\\",\\"type\\":\\"count\\"},{\\"id\\":\\"2\\",\\"params\\":{\\"field\\":\\"SYSTEM\\",\\"order\\":\\"desc\\",\\"orderBy\\":\\"1\\",\\"size\\":100},\\"schema\\":\\"segment\\",\\"type\\":\\"terms\\"}],\\"listeners\\":{},\\"params\\":{\\"addLegend\\":true,\\"addTooltip\\":true,\\"defaultYExtents\\":false,\\"shareYAxis\\":true},\\"type\\":\\"line\\"}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\\"index\\":\\"id_1\\",\\"query\\":{\\"query_string\\":{\\"analyze_wildcard\\":true,\\"query\\":\\"*\\"}},\\"filter\\":[]}"}}""" 
response = requests.put(url, data=data) 
print(response) 

所以我已工作的變化是爲了躲避正斜槓以及在visState價值目標和價值searchSourceJSON對象中的雙引號。


該字符串將仍然無法與

os.popen(command).read() 

也不

subprocess.check_ouput(command, shell=True) 

另外要注意,我才意識到是該行爲將取決於你使用的shell轉變工作。我已經在MINGW64上完成了所有測試(針對Windows的Git bash)。

MINGW64,你可以複製粘貼此命令直接進入外殼:在Windows PowerShell中

curl -XPUT http://localhost:9200/.kibana/visualization/test_visual-d '{"title":"test_visual","visState":"{\"aggs\":[{\"id\":\"1\",\"params\":{},\"schema\":\"metric\",\"type\":\"count\"},{\"id\":\"2\",\"params\":{\"field\":\"SUBMITDATE\",\"order\":\"desc\",\"orderBy\":\"1\",\"size\":100},\"schema\":\"segment\",\"type\":\"terms\"}],\"listeners\":{},\"params\":{\"addLegend\":true,\"addTooltip\":true,\"defaultYExtents\":false,\"mode\":\"stacked\",\"shareYAxis\":true},\"type\":\"histogram\"}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"id_1\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"query\":\"*\"}},\"filter\":[]}"}}' 

但是(安裝捲曲),你必須三聯供內部數據的所有字符串引號:

curl -XPUT http://localhost:9200/.kibana/visualization/test_visual -d '{"""title""":"""test_visual""","""visState""":"""{\\"""aggs\\""":[{\\"""id\\""":\\"""1\\""",\\"""params\\""":{},\\"""schema\\""":\\"""metric\\""",\\"""type\\""":\\"""count\\"""},{\\"""id\\""":\\"""2\\""",\\"""params\\""":{\\"""field\\""":\\"""SYSTEM\\""",\\"""order\\""":\\"""desc\\""",\\"""orderBy\\""":\\"""1\\""",\\"""size\\""":100},\\"""schema\\""":\\"""segment\\""",\\"""type\\""":\\"""terms\\"""}],\\"""listeners\\""":{},\\"""params\\""":{\\"""addLegend\\""":true,\\"""addTooltip\\""":true,\\"""defaultYExtents\\""":false,\\"""shareYAxis\\""":true},\\"""type\\""":\\"""line\\"""}""","""description""":"""""","""version""":1,"""kibanaSavedObjectMeta""":{"""searchSourceJSON""":"""{\\"""index\\""":\\"""id_1\\""",\\"""query\\""":{\\"""query_string\\""":{\\"""analyze_wildcard\\""":true,\\"""query\\""":\\"""*\\"""}},\\"""filter\\""":[]}"""}}' 

這意味着您將不得不修改上述解決方案,根據您使用的shell輸出目標字符串。


總之,如果您使用的是Python,請堅持使用Python庫來處理請求。嘗試使用最接近Unix shell的shell。