我在Kubernetes集群中运行一个c++应用程序。在GCE StackDriver和fluentd-gcp的帮助下,我能够看到我的应用程序日志。现在,我希望通过GCE StackDriver接口看到代码转储(如果我的应用程序崩溃就会生成)。使用FluentD可以实现这一点吗??如果是,则显示执行此工作的任何推荐的FluentD插件。
谢谢,
发布于 2018-08-05 06:13:51
我最近在思考类似的问题-如何让崩溃的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’包是必要的,在我的例子中,这只是额外的8MB。
正如您所看到的,这个想法是运行一个进程(与我的应用程序一起),它定期检查任何核心。对于找到的核心转储,它使用'gdb‘获取回溯,并以'jq’工具创建的json格式将其打印到stdout。
我们的服务器有forking模型,所以服务器本身和容器崩溃的可能性很小。但是,如果发生这种情况,则可以将核心转储存储在卷中,并在重新创建容器时打印回溯。
可能有更好的解决方案,但到目前为止我还没有遇到任何解决方案。还要注意的是,我仍然是clound :)的新手,而且我们没有使用GCE。
https://stackoverflow.com/questions/48863517
复制相似问题