我如何使用 Python 从 Google Cloud Logging 获取请求 IP 地址?

How can i get request IP address from Google Cloud Logging using Python?

使用 Python 的 google-cloud-logging 模块,我可以遍历我的 GAE 应用程序的日志消息,我想在请求日志中列出每个项目的请求 IP 地址。 The official docs 别提怎么做了,破解源代码并没有给我太大希望,因为日志条目大多是 TextEntry,只有很少的对象属性。

我的代码是这样的:

logging_client = logging.Client()
logger = logging_client.logger('projects/MYPROJECT/logs/appengine.googleapis.com%2Frequest_log')
for entry in logging_client.list_entries():
    timestamp = entry.timestamp.isoformat()
    print("* {}, {}: {}".format(timestamp, type(entry), entry))

在 Google Cloud Console 中查看相同的日志时,我看到每个日志条目都有一个 protoPayload.ip 字段 - 这正是我希望提取的字段。

目前这是不可能的,因为 Python client library for Stackdriver Logging doesn't support this feature yet. As you can check in the documentation for the Entry object and its code 无法检索包含调用方 IP 的部分。

但是,您可以通过在每次调用您的 App Engine 服务时自己记录此值来做一个技巧,因此您可以检索它。来电IP的值在'X-Appengine-User-Ip'header中。您可以使用此代码作为获取方法的示例:

from flask import Flask
from flask import request

app = Flask(__name__)


@app.route('/')
def hello_world():
    ip = request.headers['X-Appengine-User-Ip']