我在Kubernetes Cluster中运行了一个c ++应用程序。在GCE StackDriver和fluentd-gcp的帮助下,我能够看到我的应用程序日志。现在,我希望看到代码转储(如果我的应用程序崩溃时生成)通过GCE StackDriver接口。是否有可能使用FluentD实现这一点?如果是,任何推荐的FluentD插件都可以完成这项工作..
谢谢,
答案 0 :(得分: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。
您可以看到,这个想法是运行一个进程(与我的应用程序一起),该进程定期检查任何coredum。对于找到的coredump,它使用'gdb'获取回溯,并以'jq'工具创建的json格式将其打印到stdout。
我们的服务器具有分叉模型,因此服务器本身以及容器崩溃的可能性很小。但是,如果仍然发生这种情况,则可以将coredumps存储在一个卷中,并在重新创建容器时打印回溯记录。
也许有更好的解决方案,但到目前为止我还没有遇到。另外请注意,我对clound还不熟悉:),我们不使用GCE。