0

我正在我的 Kubernetes 集群中运行一个 c++ 应用程序。在 GCE StackDriver 和 fluentd-gcp 的帮助下,我可以看到我的应用程序日志。现在,我想通过 GCE StackDriver 界面查看代码转储(如果我的应用程序崩溃时生成)。是否可以使用 FluentD 实现这一点?如果是,任何推荐的 FluentD 插件都可以完成这项工作..

谢谢,

4

1 回答 1

0

我最近在考虑类似的问题 - 如何获取在我无权访问的集群中运行的崩溃 C++ 应用程序的回溯。

我想出了一个想法,用这样的脚本运行/包装我的应用程序:

#!/bin/bash

function coredumps_monitor
{
    EXECUTABLE=$1
    COREDIR=$2

    while true; do
        sleep 2

        for f in $(find $COREDIR -type f -name 'core*'); do
            sleep 2

            BT=$(gdb -batch -ex 'thread apply all bt' $EXECUTABLE $f)

            jq -nc \
                --arg bt "${BT}" \
                --arg file "${f}" \
                '{event: "coredump", bt: $bt, file: $file}'

            mv $f latest-core
        done
    done
}

coredumps_monitor /my-cpp-server /dir-with-coredumps &

exec /my-cpp-server

安装 'gdb-minimal' 和 'jq' 软件包是必要的,在我的情况下这只是额外的 8 MB。

如您所见,这个想法是运行一个进程(与我的应用程序一起),它会定期检查任何核心。对于发现的核心转储,它使用“gdb”获取回溯,并以使用“jq”工具创建的 json 格式将其打印到标准输出。

我们的服务器具有分叉模型,因此服务器本身以及容器崩溃的可能性很小。但是,如果无论如何都发生这种情况,则可以将核心转储存储在一个卷中,并在再次重新创建容器时打印回溯。

可能有更好的解决方案,但到目前为止我还没有遇到过。另请注意,我还是 clound 的新手 :) 我们不使用 GCE。

于 2018-08-04T22:13:51.443 回答