首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过FluentD查看Docker容器内部生成的C++应用程序核心转储

如何通过FluentD查看Docker容器内部生成的C++应用程序核心转储
EN

Stack Overflow用户
提问于 2018-02-19 17:56:52
回答 1查看 421关注 0票数 0

我在Kubernetes集群中运行一个c++应用程序。在GCE StackDriver和fluentd-gcp的帮助下,我能够看到我的应用程序日志。现在,我希望通过GCE StackDriver接口看到代码转储(如果我的应用程序崩溃就会生成)。使用FluentD可以实现这一点吗??如果是,则显示执行此工作的任何推荐的FluentD插件。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2018-08-05 06:13:51

我最近在思考类似的问题-如何让崩溃的c++应用程序在我没有访问权限的集群中运行。

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

代码语言:javascript
复制
#!/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’包是必要的,在我的例子中,这只是额外的8MB。

正如您所看到的,这个想法是运行一个进程(与我的应用程序一起),它定期检查任何核心。对于找到的核心转储,它使用'gdb‘获取回溯,并以'jq’工具创建的json格式将其打印到stdout。

我们的服务器有forking模型,所以服务器本身和容器崩溃的可能性很小。但是,如果发生这种情况,则可以将核心转储存储在卷中,并在重新创建容器时打印回溯。

可能有更好的解决方案,但到目前为止我还没有遇到任何解决方案。还要注意的是,我仍然是clound :)的新手,而且我们没有使用GCE。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48863517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档