"Неверный родительский идентификатор!"при отправке трассировки - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть приложение, работающее на стандартном google app engine, python 2.7. GAE уже отслеживает вызовы в Datastore и Memcache, и я хочу добавить свои собственные следы.

Поскольку я нахожусь на python 2 google-cloud-python недоступно для моего приложения.

Я сделал что-то, чтобы преодолеть это, используя клиент discovery api. Это своего рода работа: я вижу свои следы, но они не связаны со следами GAE separate traces.

Я работаю над этим, проверил, как я могу получить здесь идентификатор основного диапазона, который покрывает весь запрос. Эта информация доступна в заголовке X-Cloud-Trace-Context ( source ).

Я обнаружил, что неправильно анализирую часть spanID этого заголовка.

Знайте, что я правильно прочитал его и установил в качестве родителя моего собственного диапазона. Я получил ошибку 400 http "Invalid parent id!" когда я пытаюсь раздвинуть промежуток

Вот пример того, что GAE уже автоматически заполняет трассировку Stackdriver, которую я извлекаю из API Stackdriver:

{
  "projectId": "my-project",
  "traceId": "7043814caa66c00a3fac3555e1d1e9d2",
  "spans": [
    {
      "spanId": "12635947902476947926",
      "name": "REDACTED",
      "startTime": "2018-09-18T11:44:46.666356Z",
      "endTime": "2018-09-18T11:45:02.926300478Z",
      "labels": {REDACTED}
    },
    {
      "spanId": "2895282594665317964",
      "name": "/remote_socket.CreateSocket",
      "startTime": "2018-09-18T11:44:50.469419110Z",
      "endTime": "2018-09-18T11:44:50.477561891Z",
      "parentSpanId": "12635947902476947926",
      "labels": {
        "g.co/gae/application_error": "6",
        "g.co/gae/error_message": "IP must be wildcard or be an IP returned by this RSG instance on a previous socket() call, received IP: ::1"
      }
    },
    {
      "spanId": "12635947904150929113",
      "name": "REDACTED",
      "startTime": "2018-09-18T11:44:49.588031056Z",
      "endTime": "2018-09-18T11:45:02.922000150Z",
      "parentSpanId": "12635947902476947926"
    },
    {
      "spanId": "18119035554219197767",
      "name": "/cloud_debugger.DebugletStarted",
      "startTime": "2018-09-18T11:44:49.605121020Z",
      "endTime": "2018-09-18T11:44:49.605863978Z",
      "parentSpanId": "12635947902476947926"
    },
    {
      "spanId": "12635947905824910300",
      "name": "/remote_socket.CreateSocket",
      "startTime": "2018-09-18T11:44:50.468409633Z",
      "endTime": "2018-09-18T11:44:50.478480133Z",
      "parentSpanId": "12635947904150929113"
    },
    {
      "spanId": "12635947904936909686",
      "name": "/urlfetch.Fetch",
      "startTime": "2018-09-18T11:44:52.761299204Z",
      "endTime": "2018-09-18T11:44:52.766834488Z",
      "parentSpanId": "12635947904150929113"
    },
    {
      "spanId": "4533572578254567247",
      "name": "/urlfetch.Fetch",
      "startTime": "2018-09-18T11:44:52.762846328Z",
      "endTime": "2018-09-18T11:44:52.766059416Z",
      "parentSpanId": "12635947902476947926",
      "labels": {
        "/http/method": "GET",
        "/http/response/size": "0",
        "/http/status_code": "0",
        "/http/url": "http://metadata.google.internal",
        "/http/host": "metadata.google.internal"
      }
    },
    {
      "spanId": "12635947904492451751",
      "name": "/user.GetOAuthUser",
      "startTime": "2018-09-18T11:45:02.857408315Z",
      "endTime": "2018-09-18T11:45:02.862760982Z",
      "parentSpanId": "12635947904150929113"
    },
    {
      "spanId": "2960740089906396384",
      "name": "/user.GetOAuthUser",
      "startTime": "2018-09-18T11:45:02.858548710Z",
      "endTime": "2018-09-18T11:45:02.862337765Z",
      "parentSpanId": "12635947902476947926"
    },
    {
      "spanId": "12635947905888909837",
      "name": "/memcache.Get",
      "startTime": "2018-09-18T11:45:02.872708349Z",
      "endTime": "2018-09-18T11:45:02.875247917Z",
      "parentSpanId": "12635947904150929113"
    },
    {
      "spanId": "2806170211922774912",
      "name": "/memcache.Get",
      "startTime": "2018-09-18T11:45:02.873653089Z",
      "endTime": "2018-09-18T11:45:02.874549693Z",
      "parentSpanId": "12635947902476947926",
      "labels": {
        "g.co/gae/memcache/count": "1",
        "g.co/gae/memcache/size": "26680"
      }
    },
    {
      "spanId": "12635947905612370518",
      "name": "/memcache.Get",
      "startTime": "2018-09-18T11:45:02.884082965Z",
      "endTime": "2018-09-18T11:45:02.885967828Z",
      "parentSpanId": "12635947904150929113"
    },
    {
      "spanId": "1403376319062964670",
      "name": "/memcache.Get",
      "startTime": "2018-09-18T11:45:02.884984835Z",
      "endTime": "2018-09-18T11:45:02.885727464Z",
      "parentSpanId": "12635947902476947926",
      "labels": {
        "g.co/gae/memcache/count": "1",
        "g.co/gae/memcache/size": "132"
      }
    },
    {
      "spanId": "12635947905900454375",
      "name": "/urlfetch.Fetch",
      "startTime": "2018-09-18T11:45:02.886823410Z",
      "endTime": "2018-09-18T11:45:02.907643995Z",
      "parentSpanId": "12635947904150929113"
    },
    {
      "spanId": "12992632058664043952",
      "name": "/urlfetch.Fetch",
      "startTime": "2018-09-18T11:45:02.887618043Z",
      "endTime": "2018-09-18T11:45:02.907269121Z",
      "parentSpanId": "12635947902476947926",
      "labels": {
        "/http/host": "cloudtrace.googleapis.com",
        "/http/method": "POST",
        "/http/request/size": "590",
        "/http/response/size": "165",
        "/http/status_code": "400",
        "/http/url": "https://cloudtrace.googleapis.com/v2/projects/lumsites-dev/traces:batchWrite?alt=json"
      }
    },
    {
      "spanId": "12635947904372387171",
      "name": "/logservice.Flush",
      "startTime": "2018-09-18T11:45:02.918746300Z",
      "endTime": "2018-09-18T11:45:02.920277782Z",
      "parentSpanId": "12635947904150929113"
    },
    {
      "spanId": "16196356337812692515",
      "name": "/logservice.Flush",
      "startTime": "2018-09-18T11:45:02.919606565Z",
      "endTime": "2018-09-18T11:45:02.919972451Z",
      "parentSpanId": "12635947902476947926"
    }
  ]
}

Заголовок из запроса: X-Cloud-Trace-Context : 7043814caa66c00a3fac3555e1d1e9d2/12635947902476947926;o=1 Итак, идентификатор трассировки: 7043814caa66c00a3fac3555e1d1e9d2 идентификатор родительского диапазона - 12635947902476947926, который выглядит как 64-разрядное целое число (трассировка API V1)

Вот содержание тела моего запроса к https://cloudtrace.googleapis.com/v2/projects/my-project/traces:batchWrite?alt=json (Trace api v2), который заканчивается 400

{"spans": [
    {
        'status': None,
        'childSpanCount': 0,
        'links': None,
        'startTime': '2018-09-18T11: 45: 02.876711Z',
        'spanId': '887188cf45b7461b',
        'stackTrace': None,
        'displayName': {
            'truncated_byte_count': 0,
            'value': 'manualSpan'
        },
        'name': 'projects/my-project/traces/7043814caa66c00a3fac3555e1d1e9d2/spans/887188cf45b7461b',
        'parentSpanId': '12635947902476947926',
        'attributes': {
            'attributeMap': {
                'g.co/agent': {
                    'string_value': {
                        'truncated_byte_count': 0,
                        'value': 'opencensus-python [
                            0.1.6
                        ]'
                    }
                }
            }
        },
        'timeEvents': None,
        'endTime': '2018-09-18T11: 45: 02.876915Z',
        'sameProcessAsParentSpan': None
    }
]}

Что поменялось между моей первой рабочей версией и этой версией parentSpanId: раньше я использовал сгенерированный spanID. Теперь я использую тот, который присутствует в шапке.

Как вы видите, parentSpanId, который я использую (12635947902476947926), существует в исходной трассировке. Это родитель всех последующих промежутков.

Сообщение об ошибке не задокументировано, насколько я мог искать. Я не видел ограничений на parentSpanID, например, возможно, что parentSpanID должен существовать и присутствовать в драйвере стека ДО ТОГО, как мы его отправим.

Может быть, я не могу смешать входящий spanID в формате V1 и отправлять свои пролеты в формате V2.

1 Ответ

0 голосов
/ 26 сентября 2018

API V2 ожидает, что parentSpanId будет шестнадцатеричной строкой из 16 символов, но вы все равно отправляете ее в виде десятичной дроби.Преобразуйте его в шестнадцатеричный код (например, af5be7ab4f7b11d6), и вызов batchWrite должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...