我正在使用自结构的 JSON 有效负载从基于 Node.js/Express 的 Cloud Run 服务进行日志记录,但无法从同一请求中获取日志以使用该trace方法进行关联。
该文件说:
除非您使用 Stackdriver Logging 客户端库,否则容器日志不会自动与请求日志相关联。如果您希望在不使用客户端库的情况下进行这种关联,请使用结构化 JSON 日志行,其中包含带有传入 X-Cloud-Trace-Context 标头内容的跟踪字段。然后您的日志将与请求日志正确关联。
我知道我的结构化 JSON 日志正在按预期工作,level/severity并且message正在按预期提取和显示。
我传递的trace正是X-Cloud-Trace-Context我使用req.getExpress: 提供的方法获得的标头所传递的值req.get('X-Cloud-Trace-Context')。
这是正在记录的 JSON:
{
"message": "Create Query",
"level": "debug",
"severity": "DEBUG",
"trace": "40f...........................cc/131...............23;o=1"
}
Run Code Online (Sandbox Code Playgroud)
以下是该日志行在 Stackdriver Logging 中的显示方式示例。
我还尝试使用结构化负载文档logging.googleapis.com/trace中的特殊字段中提到的属性。我相当确定X-Cloud-Trace-Context标头的值对此属性无效,但我不确定如何设置标头值的格式以匹配此页面上记录的值。
综上所述,我的问题是:
trace?X-Cloud-Trace-Context标题的值正确格式化此属性的值?以下是 Stackdriver Logging 中显示的完整日志消息示例(已删除 ID):
{
"message": "Create Query", …Run Code Online (Sandbox Code Playgroud) 我正在尝试配置构建maven springboot项目然后部署到云运行的云构建触发器。当我没有指定要连接的云 sql 实例时,我遇到了一个问题,但是当我添加"--set-cloudsql-instances", "${_DATABASE_CONNECTION_NAME}"为参数之一时,它会在云构建中引发错误,如下所示:
Step #1: ERROR: (gcloud.beta.run.deploy) PERMISSION_DENIED: The caller does not have permission
Finished Step #1
ERROR
ERROR: build step 1 "gcr.io/cloud-builders/gcloud" failed: exit status 1
Run Code Online (Sandbox Code Playgroud)
以下是我的 cloudbuild.yml
steps:
- name: 'gcr.io/kaniko-project/executor:latest'
args:
- --destination=gcr.io/$PROJECT_ID/${_IMAGE_NAME}
- --cache=true
- name: 'gcr.io/cloud-builders/gcloud'
args: [
"beta", "run",
"deploy", "${_SERVICE_NAME}-${_PROFILE}",
"--image", "gcr.io/${PROJECT_ID}/${_IMAGE_NAME}",
"--region", "${_REGION}",
"--platform", "managed",
"--set-cloudsql-instances", "${_DATABASE_CONNECTION_NAME}",
"--allow-unauthenticated",
"--set-env-vars", "SPRING_PROFILES_ACTIVE=${_SPRING_PROFILE},DATABASE_CONNECTION_NAME=${_DATABASE_CONNECTION_NAME},DATABASE_NAME=${_DATABASE_NAME},DATABASE_USERNAME=${_DATABASE_USERNAME},DATABASE_PASSWORD=${_DATABASE_PASSWORD},MINIO_ACCESS_KEY=${_MINIO_ACCESS_KEY},MINIO_SECRET_KEY=${_MINIO_SECRET_KEY},MINIO_HOSTNAME=${_MINIO_HOSTNAME},MINIO_PORT=${_MINIO_PORT}"
]
images:
- gcr.io/${PROJECT_ID}/${_IMAGE_NAME}
Run Code Online (Sandbox Code Playgroud)
我已经为服务帐户设置了角色/权限,如下所示:
{PROJECT_ID}-compute@developer.gserviceaccount.com : 编辑器,Cloud Sql 客户端 <-- 默认 SA<Cloud run service …google-cloud-sql google-cloud-platform google-cloud-build google-cloud-run
我有一个 Angular Web 应用程序,我想使用 Google Cloud run 进行部署。但是,我只需要从预定义的 IP 地址列表中才能看到该应用程序。
我可以简单地在谷歌云平台防火墙下设置 ip 允许/拒绝规则还是需要其他方法?
提前致谢,
妮可
在编写 Cloud Run 服务时,我们开发了一个容器来侦听PORT环境变量以处理传入的 HTTP 请求。容器的一个实例启动并处理请求,然后在完成原始请求后存活一段时间,以防有进一步的请求到达。如果没有进一步的请求,GCP 会关闭容器。正是在这个领域,我有一个问题。
集装箱内是否有挂钩、信号或其他迹象表明集装箱正在关闭?
在我的示例中,我的容器想要干净地结束。也许它想关闭连接或执行一些缓存的快速刷新。
我无法将基本的 Angular 应用程序部署到 Google Cloud Run。该错误表明它未在端口 8080 上正确提供服务,但在我的机器上本地运行 localhost:8080 显示该应用程序。所以我可能需要一些额外的东西来运行云,如果有人有什么想法吗?
详细情况如下:
我创建了一个基本的角度应用程序
ng new test-app
Run Code Online (Sandbox Code Playgroud)
Dockerfile 如下
FROM node:latest as node
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build --prod
ENV PORT=8080
FROM nginx:latest
COPY --from=node /app/dist/test-app /usr/share/nginx/html
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)
在本地我运行构建的容器,我可以在 localhost:8080 看到它
docker container run -p 8080:80 gcr.io/$GOOGLE_PROJECT/test-app:$IMAGE
Run Code Online (Sandbox Code Playgroud)
然后我部署到 Google Cloud Run 托管。
gcloud run deploy test-app --image gcr.io/$GOOGLE_PROJECT/test-app:$IMAGE --platform managed
Run Code Online (Sandbox Code Playgroud)
但是,它无法以错误开头
Cloud Run error: Container failed to start. …Run Code Online (Sandbox Code Playgroud) 假设我会让用户上传一些 python 或 bash 脚本,在云运行中执行它并返回结果。为此,我将使用无权访问项目资源的服务帐户创建 Cloud Run 服务。我也想在嵌套容器中运行脚本,这样用户就不能干扰服务器代码并操纵来自其他用户的连续请求。
我如何让 gvisor runc 或其他一些沙箱运行时在 Cloud Run 上运行的容器内可用?
我发现一些资源提到在原始容器上使用特权标志,但这在 Cloud Run 中是不可能的。此外,我找不到有关如何使用 runc 运行无根容器的任何信息。让我知道我是否在正确的轨道上,或者这是否可以通过云运行实现,或者我应该使用其他服务吗?
谢谢你。
sandbox docker google-cloud-platform google-cloud-run gvisor
最近我的登台网站因 525 错误而关闭。
这意味着源服务器不信任 Cloudflare,但是我已经 6 个月没有接触 Cloud Run 和 Cloudflare 之间的任何东西了。
为了让它再次工作,我不得不将 Cloudflare 放入Full (Not strict) Mode.
您认为这个问题是由 Cloudflare 证书更新引起的吗?如果是这种情况,我需要将 Cloudflare Origin CA 放在 Cloud Run 上,但我找不到任何关于此的信息。
希望您能帮帮我,谢谢!
我在 Google Cloud 中部署了一个 PostgreSQL 数据库,我试图从 Cloud Run 实例连接到该数据库。我尝试了以下两个包,它们最终都导致了相同的异常:
我得到的例外是:
SocketException: Failed host lookup: '/cloudsql/{INSTANCE_CONNECTION_NAME}' (OS Error: Name or service not known, errno = -2)
我在尝试建立连接时两次都到这里,所以在第一个包的情况下:
connection = new PostgreSQLConnection(
'/cloudsql/{INSTANCE_CONNECTION_NAME}',
5432,
'postgres',
username: 'username',
password: 'password');
await connection.open(); // <-- exception thrown here
Run Code Online (Sandbox Code Playgroud)
我曾尝试将主机字符串更改为/cloudsql/INSTANCE_CONNECTION_NAME}/.s.PGSQL.5432,但这不起作用。我首先想到的是权限,Cloud Run 实例使用的服务帐户 (xxx-compute@developer.gserviceaccount.com) 具有该Cloud SQL Editor角色(也尝试过 Client 和 Admin)。
从 dart 控制台应用程序在本地运行相同的数据库代码,我可以通过它的公共 IP 地址连接到我的数据库作为带有两个包的主机,因此数据库本身已启动并正在运行。
有人可以通过此异常为我指出正确的方向/有上述任何包的示例代码,以展示如何将其从 Cloud Run 连接到 Cloud SQL 实例?
编辑:我尝试在本地设置代理以测试连接是否错误,如下所示:
.\cloud_sql_proxy.exe -instances={INSTANCE_CONNECTION_NAME}=tcp:5433 psql
Run Code Online (Sandbox Code Playgroud)
然后将代码中的连接主机值更改为localhost,并将端口更改为 …
假设我有一个cloudbuild.yaml像下面这样的文件。还假设我可以在gcloud用于单独的功能(构建和运行)时手动运行和部署有问题的容器。
部署的时候,第三步导致报错 ERROR: (gcloud.run.deploy) PERMISSION_DENIED: The caller does not have permission
steps:
# Build the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA', '.']
# Push the image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA']
# Deploy image to Cloud Run
- name: 'gcr.io/cloud-builders/gcloud'
args:
- 'run'
- 'deploy'
- '[SERVICE_NAME]'
- '--image'
- 'gcr.io/[PROJECT_ID]/[IMAGE]:$COMMIT_SHA'
- '--region'
- '[REGION]'
- '--platform'
- 'managed'
images:
- gcr.io/[PROJECT_ID]/[IMAGE]
Run Code Online (Sandbox Code Playgroud) 我正在 Django 中开发小型单用户应用程序。目前我使用 Heroku 这样做,效果很好。我想在 Google Cloud run 上部署应用程序,以便将来有更多的灵活性。
为了使开销尽可能小,我正在考虑使用 Sqlite。为了保持持久性,我只需要一个持久卷,它可以通过 Google Cloud 存储实现,该存储通过 gcsfuse 安装到 docker 容器中。但问题就在这里。我找不到带有 python 和 gcsfuse 的小图像。我不是码头工人。刚刚开始...
任何帮助表示赞赏。
google-cloud-run ×10
docker ×2
cloudflare ×1
dart ×1
django ×1
dockerfile ×1
gvisor ×1
logging ×1
postgresql ×1
sandbox ×1
ssl ×1
stackdriver ×1