stk*_*flw 2 google-compute-engine google-cloud-platform stackdriver google-cloud-stackdriver google-container-optimized-os
我正在使用这个启动脚本运行一个容器优化的计算实例:
#!/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
Run Code Online (Sandbox Code Playgroud)
在--log-driver和--name标志根据设定GCP社会导向和搬运工文档。
但是我看不到容器启动的日志。
此外,当我通过 SSH 连接到实例并运行 command 时logger "hello from logger",我没有看到它显示在云记录器中。我尝试将其转换为高级过滤器并删除除“来自记录器的hello”字符串过滤器之外的所有过滤器。
如何正确设置日志记录?我bunyan在我的 NodeJS 应用程序中使用,但是当应用程序失败时,我完全看不到?我很想拥有journalctl云记录器中的所有日志。或者,至少startup-script是journalctl. 现在我正在通过 SSH 连接到实例并运行journalctl -r | grep startup-script.
访问范围设置正确:
Stackdriver Logging API: Write Only
Stackdriver Logging API: Write Only
Run Code Online (Sandbox Code Playgroud)
我正在使用默认的计算引擎服务帐户。这是我使用以下命令创建此 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
Run Code Online (Sandbox Code Playgroud)
启动脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
此 VM 运行 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)
Run Code Online (Sandbox Code Playgroud)
sudo systemctl status stackdriver-logging在 VM 中运行命令时
默认情况下,Google Compute Engine Container-Optimize OS 已启用操作日志记录(以前称为 Stackdriver)。
在我的问题和解决方案列表中,问题 #3 是我经验中最常见的。
可能的问题 #1:
默认情况下,新实例启用以下范围:
如果您修改了实例的访问范围,请确保已启用 Stackdriver 范围。这需要停止实例以修改范围。
可能的问题#2:
如果您为此实例使用自定义服务帐户,请确保该服务帐户至少具有角色roles/logging.logWriter。如果没有此角色或类似角色,记录器将失败。
可能的问题 #3:
一个常见的问题是Project Owner没有开启`Cloud Logging API'。如果没有开启这个API,实例记录器会失败。
要验证实例中的记录器是否出现故障,请通过 SSH 进入实例并执行以下命令:
sudo systemctl status stackdriver-logging
Run Code Online (Sandbox Code Playgroud)
如果您看到与日志记录 API 相关的错误消息,请启用 Cloud Logging API。
通过 CLI 启用 Cloud Logging API:
gcloud services enable logging.googleapis.com --project=<PROJECT_ID>
Run Code Online (Sandbox Code Playgroud)
或通过 Google Cloud Console:
https://console.cloud.google.com/apis/library/logging.googleapis.com
可能的问题#4:
通过 CLI 创建实例时,您需要指定以下命令行选项,否则日志服务将不会启动:
--metadata=google-logging-enabled=true
Run Code Online (Sandbox Code Playgroud)
[更新 01/22/2021]
OP有两个问题。1) Stackdriver 服务没有运行。以上步骤解决了这个问题。2) 启动脚本部分不会进入 Stackdriver。
Container OS 的当前配置将日志级别设置得太低,无法将启动脚本日志发送到 Stackdriver。
日志级别由文件设置/etc/stackdriver/logging.config.d/fluentd-lakitu.conf。
查找“收集所有优先级 >= 警告的日志日志”部分。优先级是 0 -> 4。如果您将“5”和“6”添加到列表中,则启动脚本将记录在操作日志中。
您可以更改日志级别,但此更改不会在重新启动后持续存在。我还没有找到使更改永久化的解决方案。
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |