Erschließung von Annotationen im Grafana per "grafannotate"

wo landen wohl die annotations per grafannotate? das werd ich demnächst ausprobieren…

Das interessiert uns ebenfalls sehr. Also vor allem, ob die Erzeugung per "grafannotate" - A command line tool to create annotations in Grafana gut mit Ereignisse interaktiv im Grafana annotieren zusammengeht, also links und rechts ganz an der hier beschriebenen Möglichkeit vorbei, die wir damals selbst aufgebaut hatten, als es noch keine Möglichkeit zur interaktiven Annotation gab.

Das heißt wir könnten das bei Annotationen im Grafana über die HTTP/MQTT API implementierte Verfahren in die Tonne treten und nur das Teilfeature erhalten, die Annotationen weiterhin über unser Hausprotokoll MQTT einkippen zu können - vielleicht dann sogar als optionale Möglichkeit im neuen Programm GitHub - devopsmakers/python-grafannotate: A CLI tool to add annotations to Grafana selbst?

langsam mit der tonne! erst muss was ankommen. derzeit produziere ich nur sowas:

mois@weidenteich:~$ grafannotate --uri https://swarm.hiveeyes.org/api/hiveeyes/27041c2a-8afd-4a1e-b3ae-44233fa1f06b/mois/yun/annotation --tag my_tag --title "Event Title" --description "Some longer description<br />with newlines<br />and <a href=\"https://something.com/\">links</a>" --start 1559822475
 [ERROR] Received 405 response, sending event failed
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/grafannotate/cli.py", line 42, in main
    result = this_annotation.send(annotate_uri)
  File "/usr/local/lib/python2.7/dist-packages/grafannotate/annotation.py", line 63, in send
    return self.send_to_web(url_parts)
  File "/usr/local/lib/python2.7/dist-packages/grafannotate/annotation.py", line 87, in send_to_web
    raise Exception('Received %s response, sending event failed' % post_result.status_code)
Exception: Received 405 response, sending event failed
mois@weidenteich:~$ grafannotate --uri https://swarm.hiveeyes.org/api/annotation --tag my_tag --title "Event Title" --description "Some longer description<br />with newlines<br />and <a href=\"https://something.com/\">links</a>" --start 1559822475
 [ERROR] Received 405 response, sending event failed
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/grafannotate/cli.py", line 42, in main
    result = this_annotation.send(annotate_uri)
  File "/usr/local/lib/python2.7/dist-packages/grafannotate/annotation.py", line 63, in send
    return self.send_to_web(url_parts)
  File "/usr/local/lib/python2.7/dist-packages/grafannotate/annotation.py", line 87, in send_to_web
    raise Exception('Received %s response, sending event failed' % post_result.status_code)
Exception: Received 405 response, sending event failed
mois@weidenteich:~$

was ist überhaupt der korrekte pfad für --uri? liege ich da halbwegs richtig mit meinem versuch?

Du müsstest eher gegen die Grafana API gehen. Grafana

nee, ich krieg da nichts durch. grafannotate ist auf jeden fall kein plug’n’play. das vielleicht als zwischenergebnis. ich nehms auf die liste fürs zusammen gucken.

1 Like

Danke fürs Ausprobieren!

Dann halt inzwischen weiterhin plain old HTTPie, ja?

genau. leidensdruck(mein)=0

Haste da nicht schon nen wrapper?

nee, ich nehm das immer aus meiner bash-history und pass es an. angenehm daran: im gegensatz zu den unix-timestamps bei grafannotate gehts da ja mit einem menschenlesbaren datumsformat.

1 Like

oh, ich sehe gerade bei mir eine pip-fehlermeldung:
ERROR: grafannotate 0.1.1 has requirement requests==2.21.0, but you'll have requests 2.18.4 which is incompatible.
dann kann das ja gar nicht klappen, oder?
da muss ich mich wohl um ein update von requests kümmern. bin zu wenig pip-erfahren, um das auf anhieb hinzukriegen. muss und werd ich mich wohl erstmal mit sowas beschäftigen.

Das ginge z.B. mit

sudo -H pip install --upgrade requests

…aber wenn Du dann 2.22.0 bekommst, klappst auch wieder nicht. @andreas wird Dir gleich wieder vorschlagen, das nicht über die repos Deiner distro zu machen (also solche Dinge global zu installieren wie üblich), sondern es in einem venv anzulegen…

Exakt ;]. Also

mkdir testdrive
cd testdrive
virtualenv .
./bin/pip install grafannotate

Dann sollte jenes hier klappen

./bin/grafannotate --help?

Tja, da würde ich viel lieber gerne mal von Dir wissen, warum da dann immer “requirement requests==2.18.4” und nicht “mindestens 2.18” steht - das bricht vielleicht in zwanzig Versionen, aber beschert bis dahin (geschätzte fünf Jahre) upgrade-Fähigkeit. Die distros bringen häufig genug ausreichend neue oder eben neuere Versionen mit, deren benötigte Funktionalität eine Untermenge des jeweils Implementierten ist. Die API ändert sich bei den minor updates nicht ™. ;)

Also: warum legen die Pythoniker so ein requirement nicht viel häufiger mit “mindestens Version bla” an, sondern leider mit “muß sein: Version==blub” ? Umso weniger venv-Kram bräuchte es… 8/

Better safe than sorry. Sonst gäbe es mehr kaputte Software, weil die Autoren selbst transitive Dependencies nicht auf dem Schirm haben können, die durch menschliches Einwirken in die Ökosysteme entstehen, was an der Stelle nichts mehr mit der designierten Versionssemantik des Hauptpakets zu tun hat.

Dann hätte man mehr kaputte Software.

Mittlerweile von den wichtigeren Paketen ja. Gerade bei requests könnte das besser laufen und genau dort tritt es ja auch am häufigsten auf, dieser Konflikt. Sollte wohl mal jemand nen RFC raustun.

Die Frage sollte andersrum lauten: Warum nicht viel häufiger mit “maximal Version bla”. Deswegen nageln die meisten nämlich auf die Version, wegen dem Schutz gegen Upgrades durch die Distro und weil sie “max-Syntax” nicht kennen oder nutzen. Sonst hätte man viel mehr kaputte Software. Check?

tut es, vielen dank!
habs dann gleich auch noch - in einer eigenen venv - für phenodata gemacht.
klappt jetzt auch.
die inflation der venv-en ist das, worauf @weef abgeht, richtig? die debatte überlass ich jetzt mal euch ;-)
und begeb mich ans neue python spielzeug. darf nur beim nächsten mal nicht vergessen, dass ich nicht nur in den ordner der richtigen venv wechseln muss, sondern auch noch mit ./bin/[befehl] aufrufen muss…

ja, schon vor der zweiten Wiederholung.

Das ist es ja, das mich ärgert: daß nicht häufiger gegen die libs der distros gebaut wird, sondern wegen fancy features eine extraordinäre lib geholt wird (oder eine, deren neuere Version ‘nur’ noch nicht in den updates der distro ist), die beim nächsten update bricht. Aber: ich werde das hier nicht weiter vertiefen wollen! ;)

Schön, daß es jetzt klappt, @mois !

So in der Art:

Please use requests>=2.18,<2.20.

1 Like

jetzt krieg ich immerin schon sowas:

mois@weidenteich:~/.venvs/annotest$ ./bin/grafannotate -t test -s 1559822475 -u https://swarm.hiveeyes.org/grafana -T test_titel --debug
 [DEBUG] Starting new HTTPS connection (1): swarm.hiveeyes.org
 [DEBUG] https://swarm.hiveeyes.org:443 "POST /grafana HTTP/1.1" 301 185
 [DEBUG] https://swarm.hiveeyes.org:443 "GET /grafana/ HTTP/1.1" 200 None
 [ERROR] No JSON object could be decoded
Traceback (most recent call last):
  File "/home/mois/.venvs/annotest/local/lib/python2.7/site-packages/grafannotate/cli.py", line 42, in main
    result = this_annotation.send(annotate_uri)
  File "/home/mois/.venvs/annotest/local/lib/python2.7/site-packages/grafannotate/annotation.py", line 63, in send
    return self.send_to_web(url_parts)
  File "/home/mois/.venvs/annotest/local/lib/python2.7/site-packages/grafannotate/annotation.py", line 89, in send_to_web
    if 'message' in post_result.json():
  File "/home/mois/.venvs/annotest/local/lib/python2.7/site-packages/requests/models.py", line 892, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/lib/python2.7/json/__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
mois@weidenteich:~/.venvs/annotest$

bzw. mit einem slash mehr an der url:

mois@weidenteich:~/.venvs/annotest$ ./bin/grafannotate -t test -s 1559822475 -u https://swarm.hiveeyes.org/grafana/ -T test_titel --debug
 [DEBUG] Starting new HTTPS connection (1): swarm.hiveeyes.org
 [DEBUG] https://swarm.hiveeyes.org:443 "POST /grafana/ HTTP/1.1" 404 None
 [ERROR] Received 404 response, sending event failed
Traceback (most recent call last):
  File "/home/mois/.venvs/annotest/local/lib/python2.7/site-packages/grafannotate/cli.py", line 42, in main
    result = this_annotation.send(annotate_uri)
  File "/home/mois/.venvs/annotest/local/lib/python2.7/site-packages/grafannotate/annotation.py", line 63, in send
    return self.send_to_web(url_parts)
  File "/home/mois/.venvs/annotest/local/lib/python2.7/site-packages/grafannotate/annotation.py", line 87, in send_to_web
    raise Exception('Received %s response, sending event failed' % post_result.status_code)
Exception: Received 404 response, sending event failed
mois@weidenteich:~/.venvs/annotest$

A post was split to a new topic: Ereignisse nicht-interaktiv im Grafana annotieren

I hear you.

Ich hab die Installationsbeschreibung bei Ereignisse nicht-interaktiv im Grafana annotieren ein wenig komprimiert und als Komfortmerkmal dazugetan, dass "grafannotate" trotz Installation in einem Python virtualenv innerhalb Deines Benutzerkontexts global und gleichermaßen minimal-invasiv zur Verfügung steht.

Der Schlüssel dazu ist:

1 Like