Настройка отчетов об ошибках Stackdriver для отображения подробной информации

У меня есть базовая настройка, в которой я отправляю логи из GKE и форматирую их в соответствии с правилами из отчетов об ошибках Stackdriver.

Я могу видеть трассировки стека, но дополнительная информация, такая как пользователь, версия,... отсутствует. Вот что я вижу: подробный отчет об ошибках

Когда я нажимаю на "Показать журналы", я вижу отформатированную запись журнала, и мне кажется, что она в правильном формате... Запись журнала в журнале Stackdriver для примера выглядит следующим образом:

{
insertId: "vd0zy9g5mw3iof"
jsonPayload: {
    message: {
        context: {
            reportLocation: {
                functionName: "error_router"
                filePath: "/usr/local/lib/python2.7/site-packages/flask_restplus/api.py"
                lineNumber: 554
            }
            httpRequest: {
            method: "POST"
            remoteIp: "213.47.170.171"
            referrer: "https://api-staging.smaxtec.com/api/v1/"
            userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
            url: "https://api-staging.smaxtec.com/api/v1/device/update_name"
            responseStatusCode: 404
            }
            user: "569e0bcda80a5f1c07b542be"
        }
        message: "Traceback (most recent call last):
        File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
            rv = self.dispatch_request()
        File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
            return self.view_functions[rule.endpoint](**req.view_args)
        File "/usr/local/lib/python2.7/site-packages/flask_restplus/api.py", line 313, in wrapper
            resp = resource(*args, **kwargs)
        File "/usr/local/lib/python2.7/site-packages/flask/views.py", line 84, in view
            return self.dispatch_request(*args, **kwargs)
        File "/usr/local/lib/python2.7/site-packages/flask_restplus/resource.py", line 44, in dispatch_request
            resp = meth(*args, **kwargs)
        File "/usr/local/lib/python2.7/site-packages/webargs/core.py", line 445, in wrapper
            return func(*new_args, **kwargs)
        File "/app/anthilldata/core/restapi/namespace.py", line 154, in dump_wrapper
            response = func(*args, **kwargs)
        File "/app/anthilldata/api/publicv1/base.py", line 144, in decorated
            return f(*args, auth=auth, **kwargs)
        File "/app/anthilldata/api/publicv1/device.py", line 98, in post
            dev = devices.getById(device_id)
        File "/app/anthilldata/devices/__init__.py", line 102, in getById
            device = self._getById(id)
        File "/app/anthilldata/core/__init__.py", line 171, in _getById
            self.__model__.__name__, id))
        NotFoundError: Device(strisdfsdfsdfsdfsdfsdfng) not found
        "
        serviceContext: {
            version: "v1.20-25-gf94b2b7"
            service: "anthilldata"
        }
        }
        thread: 140663840671488
}
resource: {
    type: "container"
    labels: {
    pod_id: "api-staging-deployment-3325000162-npq9r"
    zone: "europe-west1-d"
    project_id: "smaxtec-system"
    cluster_name: "kuhbernetes1"
    container_name: "anthilldata"
    namespace_id: "default"
    instance_id: "4882784730069069317"
    }
}
timestamp: "2017-04-07T08:06:30.247392892Z"
severity: "ERROR"
labels: {
    container.googleapis.com/container_name: "anthilldata"
    compute.googleapis.com/resource_name: "fluentd-cloud-logging-gke-kuhbernetes1-default-pool-b875e508-7x"
    container.googleapis.com/instance_id: "4882784730069069317"
    container.googleapis.com/pod_name: "api-staging-deployment-3325000162-npq9r"
    container.googleapis.com/stream: "stderr"
    container.googleapis.com/namespace_name: "default"
    compute.googleapis.com/resource_type: "instance"
    compute.googleapis.com/resource_id: "4882784730069069317"
    container.googleapis.com/cluster_name: "kuhbernetes1"
}
logName: "projects/smaxtec-system/logs/anthilldata"
}

Пользователь, httpContext и другие атрибуты контекста находятся в журнале json. Чего мне не хватает, чтобы получить результат, показанный в примере, где вы можете увидеть действующего пользователя и запрос http?

1 ответ

Решение

Полезная нагрузка записи в вашем примере имеет такую ​​структуру

jsonPayload: {
    message: {
        context: {...},
        message: "...",
        serviceContext: {...}
    }
}

и промежуточный message структура вызывает проблемы. Вы хотите что-то вроде

jsonPayload: {
    context: {...},
    message: "...",
    serviceContext: {...}
}

Отчеты об ошибках все еще могут анализировать сообщение об исключении, но ожидают другие поля в определенных путях JSON.

Я попытался написать два сообщения в журнале Stackdriver, с и без message вложенности. Оба появились в Отчете об ошибках, но только один, в который не включены служба, версия, пользователь и т. Д. В примере.

Другие вопросы по тегам