gpt4 book ai didi

Docker 和 gcplogs : message as json

转载 作者:行者123 更新时间:2023-12-02 18:21:03 27 4
gpt4 key购买 nike

我运行一个使用 docker-compose 部署的项目使用 gcplogs司机。我想知道是否可以转换以 stdout 编写的消息字符串到复杂的 JSON 负载。

实际上我必须使用以下特定的日志格式来检索 stackdriver 中的日志,因此有效负载在 Stackdriver 中如下所示:

{
"container": {…}
"instance": {…}
"message": "service:php type:NOTICE message:\"The message I want to log\""
}

我试图将消息格式化为 JSON,但最终得到包含字符串化 JSON 的消息属性:

{
"container": {…}
"instance": {…}
"message": "{\"service\":\"php\",\"type\":\"NOTICE\",\"message\":\"The message I want to log\"}"
}
docker-compose中是否有任何配置自动将消息字符串解析为 JSON 有效负载?喜欢选项 --payload-type=json将 gcloud 与 CLI 一起使用时?也许它可能与 fluentd驱动程序,但它是否由 gcp 正确处理?

谢谢各位!

最佳答案

您可以使用 谷歌 的版本流利它已经预先配置为与 Stackdriver 一起使用(例如,它在从 GCP 虚拟机内部运行时自动发现凭据)。

  • Install google-fluentd直接在您的 VM 上(在 Docker 之外)
    $ curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
    $ sudo bash install-logging-agent.sh
  • 您可以从 fluentd 配置文件(在 Ubuntu 上为 etc/google-fluentd/google-fluentd.conf)中删除所有默认样板配置,只需为您的特定服务添加配置(前提是您不需要将 google-fluentd 用于其他任何事情)。为此,请删除所有内容 之前 <match **> 开头的部分并插入以下配置:
    <source>
    @type forward
    port 24225
    bind 127.0.0.1
    </source>

    <filter **>
    @type add_insert_ids
    </filter>

    <filter **>
    @type parser
    key_name message
    <parse>
    @type json
    </parse>
    </filter>
  • 重新加载流利:$ sudo systemctl reload google-fluentd
  • 将 fluentd 设置为 日志驱动程序 与目的地 localhost:24225为您的应用程序容器,或只需更改 默认日志驱动程序 用于 /etc/docker/daemon.json 中的整个 Docker 引擎:
    {
    "log-driver": "fluentd",
    "log-opts": {
    "fluentd-address": "localhost:24225"
    }
    }
    并重新加载 Docker:$ sudo systemctl reload docker

  • 从现在开始,您应该会在 Stackdriver Logging 查看器中看到您的应用程序日志被很好地解析出来。如果不这样做,请检查 fluentd 日志(Ubuntu 上的 /var/log/google-fluentd/google-fluentd.log)以了解 JSON 解析可能存在的问题。

    关于Docker 和 gcplogs : message as json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53187841/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com