ich eine ähnliche Abfrage Elasticsearch haben:Wie Sie sich richtig Argumente übergeben GNU parallel in BASH kräuseln mit
printf "${DATES[@]}" | \
perl -pne 's/_/\n/g' | \
parallel --jobs $i --load 6 curl -s -u user:pass \
-XPOST 'https://127.0.0.1/_search' \
-d "{\"query\":{\"filtered\":{\"query\":{\"query_string\":{\"query\":\"_type:some_logs AND webapp_domain:${DOMAIN}\",\"analyze_wildcard\":false}},\"filter\":{\"bool\":{\"must\":[{\"range\":{\"@timestamp\":{\"gte\":\"{}T00:00:00.001Z\",\"lte\":\"{}T23:59:59.999Z\"}}}],\"must_not\":[]}}}},\"size\":1}"
Ich habe prodlems mit dem JSON, die übergeben wird:
, wenn ich tun (Doppel qoutes):
-d "query"
ich:
+ parallel --jobs 4 --load 6 curl -s -u user:pass -XPOST https://127.0.0.1/_search -d '{"query":{"filtered":{"query":{"query_string":{"query":"_type:some_logs AND webapp_domain:www.some.tk","analyze_wildcard":false}},"filter":{"bool":{"must":[{"range":{"@timestamp":{"gte":"{}T00:00:00.001Z","lte":"{}T23:59:59.999Z"}}}],"must_not":[]}}}},"size":1}'
{"error":"SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[3YqwKjGDTaKREWzQdxIjzA][%{index_name}][0]: RemoteTransportException[[elasticsearch5][inet[/1.1.1.1:9300]][indices:data/read/search[phase/query]]]; nested: SearchParseException[[%{index_name}][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [query:{filtered:query:{query_string:query:_type:some_logs AND webapp_domain:www.some.tk}}]]]; nested: JsonParseException[Unrecognized token 'query': was expecting ('true', 'false' or 'null')\n at [Source: UNKNOWN; line: 1, column: 7]]; }{[3YqwKjGDTaKREWzQdxIjzA][.jsp][0]: RemoteTransportException[[elasticsearch5][inet[/1.1.1.1:9300]][indices:data/read/search[phase/query]]]; nested: SearchParseException[[.jsp][0]: from[-1],size[-1]: Parse Failure [...
Wenn ich (Einzel qoutes):
-d 'query'
ich:
/bin/bash: -c: line 0: `curl -s -u user:pass -XPOST https://172.0.0.1/_search -d {\"query\":{\"filtered\":{\"query\":{\"query_string\":{\"query\":\"_type:some_logs AND webapp_domain:${DOMAIN}\",\"analyze_wildcard\":false}},\"filter\":{\"bool\":{\"must\":[{\"range\":{\"@timestamp\":{\"gte\":\"2016-03-22T00:00:00.001Z\",\"lte\":\"2016-03-22T23:59:59.999Z\"}}}],\"must_not\":[]}}}},\"size\":1}'
/bin/bash: -c: line 0: syntax error near unexpected token `('
So die Termine korrekt aufgefüllt werden, aber die Abfrage der ${DOMAIN}
Parameter nicht interpoliert wird. Dies wird erwartet, da der ''
den Interpreter anweist, den Stich buchstäblich zu behandeln (keine Interpolation).
FRAGE:
Wie kann und ob ich es tun? Kann ich die ${DATES[@]}
1 auf einmal mit Parallelen übergeben und die ${DOMAIN}
aus dem umgebenden Bereich im selben Aufruf übergeben?
UPDATE (2016.03.29) # 1:
Ich hatte einige richtig arbeiten Locken ES von BASH - so provozierte ich den gleichen Fehler zu überprüfen, wie die Abfrage von ES Perspektive sieht. Die Ergebnisse:
Initial Syntax der Abfrage von ES-Protokolle:
[Failed to parse source [query:{filtered:query:{query_string:query:_type:some_logs AND webapp_domain:www.some.tk}}]]];
Dies ist, wie die qoutery aussieht, wenn die Anweisung korrekt ausgeführt wird:
[Failed to parse source [{\"query\":{\"filtered\":{\"query\":
ich sehen, dass es kritische Zeichen fehlt in der Abfrage.
Kann es sein, dass die Weitergabe der Domäne nicht korrekt erfolgt, wenn doppelte Qoutes verwendet werden: 'Fehler beim Analysieren der Quelle [Abfrage: {filtered: query: {query_string: query: _type: some_logs UND webapp_domain: www.some.tk }}]]] '... das ist definitiv nicht korrekt, kann jemand Rat geben? Danke –