出于某种莫名其妙的原因,google没有为appengine提供stackdriver api,所以我只能实现一个。不用担心—我想—我已经和API构建器合作,与bigquery对话,所以我建立了一个客户机并开始尝试发送事件:
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()
我省略了traces_json的定义,因为无论我发送什么,服务总是以错误响应。如果traces_json='{}':
^{pr2}$但即使我使用的是googledocumentation制作的实体,我仍然会得到相同的错误。在
我在我尝试的机器上运行了一个包嗅探器,但很少看到它实际与googleapis.com网站. 在
所以问题是,真的,我缺少什么可以让我发送事件到stackdriver?在
更新
这是我最近使用的迭代,尽管逐字使用googledoc示例(除了更改项目id)会产生相同的结果。在
{
"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",
},
],
},
],
}
以及随之而来的错误信息:
{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'}}
第二次更新
在资源管理器中执行此操作会产生大致相同的结果。我不得不切换到一个数字span峎u id,因为尽管docs声明它必须是一个唯一的字符串,但在我提供任何其他内容时,我都会遇到一些错误,即需要一个64位整数。在
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"
}
]
}
]
}
回应:
{
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT"
}
}
问题出在你的数据格式上。你也不能发送空消息。探索如何使用API的最佳方法是转到StackDriver Trace API explorer,您将找到要发送的确切数据结构: https://cloud.google.com/trace/api/reference/rest/v1/projects/patchTraces#traces
特别注意traceId的格式。它需要像这样的32个字符的十六进制字符串:7d9d1a6e2d1f3f27484992f33d97e5cb
下面是一个工作的python示例,演示如何在github上使用StackDriver跟踪的3个方法:https://github.com/qike/cloud-trace-samples-python
复制粘贴代码如下:
已更新以回答从API explorer收到的错误
由于使用的是0位的API,所以应该使用0位而不是0位的API。在
我还注意到,您设置的span斨u id与您想要的span对象位于不同的span对象中。请确保您没有错误地单击“+”符号来添加新的span对象。在
以下是我通过API explorer向我的项目发送的成功修补程序请求:
^{pr2}$相关问题 更多 >
编程相关推荐