繁体   English   中英

如何让 Google Cloud Logging 以正确的警报级别显示我的 flask + gunicorn 应用程序的日志?

[英]How can I get Google Cloud Logging to show my flask + gunicorn app's logs with the correct alert level?

我有一个用 python 编写的 GCP Cloud Run 服务,它使用 Flask 提供 API。 API 使用 gunicorn 在 docker 容器中运行,如下所示:

CMD exec gunicorn --bind :$PORT --workers 8 --threads 8 --timeout 0 --log-level=info main:app

然后将该容器部署到 Cloud Run。 在 API 中,我使用 Flask 的内置记录器记录消息,如下所示:

app.logger.critical("Example message")

我已经按照 GCP 文档的建议设置了谷歌云客户端库,如下所示:

logging_client = google.cloud.logging.Client()
logging_handler = logging_client.setup_logging()

我在main.py中创建 flask 应用程序之前执行此操作。 具体来说:

logging_client = google.cloud.logging.Client()
logging_handler = logging_client.setup_logging()
dictConfig(
    {
        "version": 1,
        "formatters": {
            "default": {
                "format": "[%(asctime)s] %(levelname)s in %(module)s: %(message)s",
            }
        },
        "handlers": {
            "wsgi": {
                "class": "logging.StreamHandler",
                "stream": "ext://flask.logging.wsgi_errors_stream",
                "formatter": "default",
            },
            "gcp_logging": {
                "class": "google.cloud.logging.handlers.CloudLoggingHandler",
                "client": logging_client,
            },
        },
        "root": {"level": "INFO", "handlers": ["wsgi", "gcp_logging"]},
    }
)

app = Flask(__name__)

当我在 Cloud Run 中运行服务时,会显示日志消息,但警报级别为空。

如何配置 flask + gunicorn + GCP 云日志记录,以便我的日志消息在日志控制台中显示时显示正确的日志级别?

您可能会遇到正在使用的处理程序的问题。 您调用logging_client.setup_logging() ,它应该根据代码运行的环境自动配置处理程序,但是您似乎也在dictConfig中手动设置新的处理程序。

严重性不正确的日志可能来自StreamHandler Cloud Run 将自动从环境中捕获标准输出日志,但内置StreamHandler无法正确格式化日志,以便自动捕获严重性等元数据。 您附加的CloudLoggingHandler应该显示正确的严重性,但它在无服务器环境中可能会出现问题,因为它会尝试通过网络批量发送日志。 当环境停止运行时,未发送的日志批次可能会丢失。

相反,我们建议使用StructuredLogHandler ,它将日志作为结构化 JSON 输出到 stdout,然后由 GCP 代理捕获并发送到 Cloud Logging。 如果您运行logging_client.setup_logging()而不覆盖处理程序,则应该自动为您设置它。

可以在此 GitHUb 线程库文档中找到更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM