我正在我的 Kubernetes 集群中运行一个 c++ 应用程序。在 GCE StackDriver 和 fluentd-gcp 的帮助下,我可以看到我的应用程序日志。现在,我想通过 GCE StackDriver 界面查看代码转储(如果我的应用程序崩溃时生成)。是否可以使用 FluentD 实现这一点?如果是,任何推荐的 FluentD 插件都可以完成这项工作..
谢谢,
我正在我的 Kubernetes 集群中运行一个 c++ 应用程序。在 GCE StackDriver 和 fluentd-gcp 的帮助下,我可以看到我的应用程序日志。现在,我想通过 GCE StackDriver 界面查看代码转储(如果我的应用程序崩溃时生成)。是否可以使用 FluentD 实现这一点?如果是,任何推荐的 FluentD 插件都可以完成这项工作..
谢谢,
我最近在考虑类似的问题 - 如何获取在我无权访问的集群中运行的崩溃 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。