Aus unerklärlichen Gründen, Google bietet keine Stackdriver API für appengine, also bin ich fest, eine zu implementieren. Keine Sorge - ich dachte - ich habe bereits mit den API-Builder gearbeitet, um BigQuery zu sprechen, also baute ich einen Client und fing an zu versuchen, Ereignisse zu senden:In Python, Kommunikation mit Stackdriver immer Erfolg, sendet nichts
credentials = SignedJwtAssertionCredentials(STACKDRIVER_AUTH_GOOGLE_CLIENT_EMAIL,
STACKDRIVER_AUTH_GOOGLE_PRIVATE_KEY,
scope='https://www.googleapis.com/auth/trace.append')
http = httplib2.Http()
credentials.refresh(http) #Working around an oauth2client bug
credentials = credentials.authorize(http)
service = build('cloudtrace', 'v1', http=http)
batch = service.new_batch_http_request()
batch.add(service.projects().patchTraces(
body=traces_json,
projectId=STACKDRIVER_AUTH_GOOGLE_PROJECT_ID))
print batch.execute()
ich die Definition von traces_json weggelassen, denn egal was Ich sende, der Dienst antwortet immer mit einem Fehler. Wenn traces_json = ‚{}‘:
{u'error': {u'code': 400,
u'errors': [{u'domain': u'global',
u'message': u'Invalid value at \'traces\' (type.googleapis.com/google.devtools.cloudtrace.v1.Traces), "{}"',
u'reason': u'badRequest'}],
u'message': u'Invalid value at \'traces\' (type.googleapis.com/google.devtools.cloudtrace.v1.Traces), "{}"',
u'status': u'INVALID_ARGUMENT'}}
Aber selbst wenn ich einen Körper verwenden, in Handarbeit aus dem Google documentation, ich immer noch die gleichen Fehler.
Ich führe einen Paket-Sniffer auf der Maschine, wo ich dies versuche, und sehe es nur sehr selten tatsächlich mit googleapis.com kommunizieren.
Also ist die Frage, wirklich, was fehlt mir das wird mich Ereignisse an Stackdriver schicken?
UPDATE
Hier ist die neueste Iteration von dem, was ich mit, gearbeitet hatte produziert das Google-Dokument Beispiel wörtlich obwohl mit (mit Ausnahme der Änderung des Projekts id) das gleiche Ergebnis.
{
"traces": [
{
"projectId": "projectname",
"traceId": "1234123412341234aaaabb3412347890",
"spans": [
{
"kind": "RPC_SERVER",
"name": "trace_name",
"labels": {"label1": "value1", "label2": "value2"},
"spanId": "spanId1",
"startTime": "2016-06-01T05:01:23.045123456Z",
"endTime": "2016-06-01T05:01:23.945123456Z",
},
],
},
],
}
Und die Fehlermeldung, die mit ihm kommt:
{u'error': {u'code': 400,
u'errors': [{u'domain': u'global',
u'message': u'Invalid value at \'traces\' (type.googleapis.com/google.devtools.cloudtrace.v1.Traces), "MY ENTIRE JSON IS REPEATED HERE"',
u'reason': u'badRequest'}],
u'message': u'Invalid value at \'traces\' (type.googleapis.com/google.devtools.cloudtrace.v1.Traces), "MY ENTIRE JSON IS REPEATED HERE"',
u'status': u'INVALID_ARGUMENT'}}
SECOND UPDATE
Dadurch im Explorer erzeugt etwa das gleiche Ergebnis. Ich musste zu einer numerischen span_id wechseln, weil ich trotz der Anweisung der Dokumentation, dass es nur eine eindeutige Zeichenkette sein muss, Fehler erhalte, wenn ich eine 64-Bit-Ganzzahl benötige, immer wenn ich etwas anderes zur Verfügung stelle.
PATCH https://cloudtrace.googleapis.com/v1/projects/[number or name]/traces?key={YOUR_API_KEY}
{
"traces": [
{
"projectId": "[number or name]",
"traceId": "1234123412341234aaaabb3412347891",
"spans": [
{
"kind": "RPC_SERVER",
"name": "trace_name",
"labels": {
"label1": "value1"
},
"startTime": "2016-06-01T05:01:23.045123456Z",
"endTime": "2016-06-01T05:01:25.045123456Z"
},
{
"spanId": "0"
}
]
}
]
}
Antwort:
{
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
}
Ihre Fehler zu sagen, es ist eine falsch formatierte Anfrage. Wenn Sie die [formale Definition] (https://cloud.google.com/trace/api/reference/rest/v1/projects/patchTraces#traces) der JSON-Anfrage betrachten, gibt es Einschränkungen für die Daten, die Sie als Stichprobe verwenden verknüpft mit erfüllt nicht. Haben Sie versucht, Werte festzulegen, die exakt der Spezifikation entsprechen? Wenn ja, wie sieht Ihre Anfrage aus und welcher Fehler ist aufgetreten? –