如何从 GCE 实例中的容器优化操作系统获取启动脚本日志?

如何解决如何从 GCE 实例中的容器优化操作系统获取启动脚本日志?

我正在使用这个启动脚本运行一个容器优化的计算实例:

#!/bin/bash

mkdir /home/my-app
cd /home/my-app
export HOME=/home/my-app

docker-credential-gcr configure-docker


docker run --rm --log-driver=gcplogs --name my-app --security-opt seccomp=./config.json gcr.io/my-project/my-app:latest

--log-driver--name 标志是根据 GCP community guidedocker docs 设置的。

但是我没有看到容器启动的日志。

此外,当我通过 SSH 连接到实例并运行命令 logger "hello from logger" 时,我没有看到它显示在云记录器中。我已尝试将其转换为高级过滤器并删除除“hello from logger”字符串过滤器之外的所有过滤器。

如何正确设置日志记录?我在我的 NodeJS 应用程序中使用 bunyan,但是当应用程序失败时,我完全看不到?我希望在云记录器中拥有来自 journalctl 的所有日志。或者,至少是 startup-scriptjournalctl 部分。现在我正在通过 SSH 连接到实例并运行 journalctl -r | grep startup-script 来检索它们。

更新

访问范围设置正确:

Stackdriver Logging API: Write Only
Stackdriver Logging API: Write Only

我使用的是默认计算引擎服务帐户。这是我创建此 VM 的命令:

gcloud compute instance-templates create $APP_ID-template \
    --scopes=bigquery,default,compute-rw,storage-rw \
    --image-project=cos-cloud \
    --image-family=cos-77-lts \
    --machine-type=e2-medium \
    --metadata-from-file=startup-script=./start.sh \
    --tags=http-server,https-server

gcloud compute instance-groups managed create $APP_ID-group \
    --size=1 \
    --template=$APP_ID-template

启动脚本:

#!/bin/bash

mkdir /home/startDir
cd /home/startDir
export HOME=/home/startDir

docker-credential-gcr configure-docker

docker run --log-driver=gcplogs --name my-app --security-opt seccomp=./config.json gcr.io/project-id/app:latest

这个运行 NodeJS 脚本的虚拟机。我没有为我的 NodeJS 脚本提供 JSON 密钥。 bunyan 记录器正确地将日志发送到云记录器。只有在服务器完全崩溃时才会发送日志。

日志 API 已启用。我得到这个:

● stackdriver-logging.service - Fluentd container for Stackdriver Logging
   Loaded: loaded (/usr/lib/systemd/system/stackdriver-logging.service; static; vendor preset: disabled)
   Active: inactive (dead)

在虚拟机中运行 sudo systemctl status stackdriver-logging 命令时

解决方法

Google Compute Engine Container-Optimize OS 默认启用操作日志记录(以前称为 Stackdriver)。

在我的问题和解决方案列表中,问题 3 是我经验中最常见的。

可能的问题 #1:

默认情况下,新实例启用以下范围:

  • Stackdriver Logging API:只写
  • Stackdriver Monitoring API:只写

如果您修改了实例的访问范围,请确保已启用 Stackdriver 范围。这需要停止实例以修改范围。

可能的问题 #2:

如果您为此实例使用自定义服务帐户,请确保该服务帐户至少具有角色 roles/logging.logWriter。如果没有此角色或类似角色,记录器将失败。

可能的问题 #3:

一个常见的问题是项目负责人没有启用“云日志API”。如果不启用这个API,实例记录器就会失败。

要验证实例中的记录器是否出现故障,请通过 SSH 进入实例并执行以下命令:

sudo systemctl status stackdriver-logging

如果您看到与日志记录 API 相关的错误消息,请启用 Cloud Logging API。

通过 CLI 启用 Cloud Logging API:

gcloud services enable logging.googleapis.com --project=<PROJECT_ID>

或通过 Google Cloud Console:

https://console.cloud.google.com/apis/library/logging.googleapis.com

可能的问题 #4:

通过 CLI 创建实例时,您需要指定以下命令行选项,否则日志服务将不会启动:

--metadata=google-logging-enabled=true

[更新 01/22/2021]

OP 有两个问题。 1) Stackdriver 服务没有运行。以上步骤解决了这个问题。 2) 启动脚本部分不会进入 Stackdriver。

Container OS 的当前配置将日志级别设置得太低,无法将启动脚本日志发送到 Stackdriver。

日志级别由文件 /etc/stackdriver/logging.config.d/fluentd-lakitu.conf 设置。

查找“收集所有优先级 >= 警告的日志日志”部分。 PRIORITY 为 0 -> 4。如果将“5”和“6”添加到列表中,则启动脚本将记录在操作日志中。

您可以更改日志级别,但此更改不会在重新启动后持续存在。我还没有找到使更改永久化的解决方案。

,

我可以使用以下高级过滤器日志查看 Cloud Logging 中的启动脚本日志:

resource.type="gce_instance"
resource.labels.instance_id="1234567890"
protoPayload.metadata.instanceMetadataDelta.addedMetadataKeys="startup-script"

根据 GCP doc 查看启动脚本日志,您需要登录到实例并能够看到启动脚本输出写入以下日志文​​件:

  • CentOS 和 RHEL:/var/log/messages
  • Debian:/var/log/daemon.log
  • Ubuntu:/var/log/syslog
  • SLES:/var/log/messages

为了节省一些时间,您可以使用此命令查看日志:

gcloud compute ssh instance-id --project your-project --zone us-central1-a --command="sudo journalctl -r | grep startup-script"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res