如何在使用gcloud计算实例更新容器时设置日志驱动程序gcplogs或强制其使用默认驱动程序?

时间:2019-04-27 00:12:16

标签: docker google-cloud-platform google-compute-engine gcloud google-cloud-stackdriver

问题

如果此容器是使用

部署的,则如何将日志从docker容器标准输出发送到GCP Stackdriver
gcloud compute instances update-container

命令?

最新发现

gcloud compute instances update-container VM_INSTANCE --container-image IMG
  • 抛出一个不遵守默认日志驱动程序(在/etc/docker/daemon.json中设置)的容器
  • gcloud .. update-container在VM_INSTANCE上使用“ docker run”,并允许将ARGS和COMMAND提供给“ docker run”,但没有可以放置--log-driver = gcplogs的选项 < / li>

上下文

我的元数据“用户数据”部分:

#cloud-config
write_files:
  - path: /etc/docker/daemon.json
    content: '{"log-driver":"gcplogs"}'

runcmd:
  - systemctl restart docker

提供正确的daemon.json文件:

p**a@f**i ~ $ cat /etc/docker/daemon.json
{"log-driver":"gcplogs"}p**a@f**i ~ $

我用gcloud update-container命令部署了一个容器:

p**a@f**i ~ $ docker container ls
CONTAINER ID        IMAGE                                                                                   COMMAND                  CREATED             STATUS              PORTS               NAMES
425be3c47e2d        eu.gcr.io/a**i/f**e:9fa641db8491def826eef4f8f288ddbd62f2be1b   "yarn start --enviro…"   6 minutes ago       Up 3 minutes                            klt--xuyd

再次检查已应用配置:

sudo journalctl -u docker.service
Apr 26 23:51:10 f**i systemd[1]: Started Docker Application Container Engine.
Apr 26 23:51:10 f**i dockerd[1464]: time="2019-04-26T23:51:10.036117615Z" level=info msg="API listen on /var/run/docker.sock"
Apr 26 23:30:21 f**i dockerd[711]: time="2019-04-26T23:30:21.903908969Z" level=debug msg="Using default logging driver gcplogs"

然后,当我尝试检查什么是记录器类型时,它仍然是json文件:

p**a@f**i ~ $ docker inspect -f '{{.HostConfig.LogConfig.Type}}' klt--xuyd
json-file

缺少堆栈驱动程序中的日志。我的过滤器值为:

resource.type="gce_instance"

我所看到的只是与Compute Engine启动和停止实例相关的日志。

如果我停止docker容器并使用

运行它
docker run -d --log-driver=gcplogs --log-opt gcp-log-cmd=true IMG

然后检查记录器类型会得出结果:

docker inspect -f '{{.HostConfig.LogConfig.Type}}' klt--xuyd
gcplogs

并且日志在GCP Stackdriver中可见。

但是我无法执行docker run ...,因为此VM是我的CI / CD环境的一部分。容器使用

更新
gcloud compute instances update-container ${VM_INSTANCE_NAME} --container-image IMG

container_vm:cos-stable-74-11895-86-0

我希望日志是可见的,而无需停止和启动容器,因为它是默认设置。

2 个答案:

答案 0 :(得分:0)

我发现了这个tutorial,可以帮助您在COS映像上配置Google Cloud日志记录驱动程序。

似乎here中所述,在COS映像上不能选择安装Stackdriver Agent。

但是,您似乎需要遵循此link中指示的配置,以使配置在重新启动后保持不变。

答案 1 :(得分:0)

您已经正确配置了。但是,如此link上的从Cloud Platform Console中写入元数据的步骤5所述,您需要重新引导VM实例以使更改生效。我相信这是您唯一丢失的东西,因为您在重新启动它时并未在问题中指出。