בדף הזה מתוארות שיטות לפתרון בעיות נפוצות שלפעמים נתקלים בהן במהלך השימוש ב-Cloud Storage.
בלוח הבקרה של סטטוס שירותי Google Cloud אפשר למצוא מידע על אירועים אזוריים או גלובליים שמשפיעים על שירותי Google Cloud, כמו Cloud Storage.
רישום בקשות גולמיות ביומן
בעבודה עם כלים כמו gcloud
או ספריות הלקוח של Cloud Storage, הכלי מטפל ברוב המידע על הבקשות והתשובות. אבל לפעמים צריך לדעת פרטים שיכולים לעזור לפתור בעיות, או כשרוצים לפרסם שאלות בפורומים כמו Stack Overflow. אפשר להיעזר בהוראות הבאות כדי לקבל את הכותרות של הבקשות והתשובות בכלי שלכם:
המסוף
ההצגה של פרטי הבקשות והתשובות משתנה בהתאם לדפדפן שדרכו אתם נכנסים למסוף Google Cloud. בדפדפן Google Chrome:
לוחצים על לחצן התפריט הראשי של Chrome ().
בוחרים באפשרות More Tools.
לוחצים על Developer Tools.
בחלונית שמופיעה, לוחצים על הכרטיסייה Network.
שורת הפקודה
gcloud
משתמשים בדגלים גלובליים לניפוי באגים בבקשה. לדוגמה:
gcloud storage ls gs://my-bucket/my-object --log-http --verbosity=debug
gsutil
משתמשים בדגל -D
הגלובלי בבקשה. לדוגמה:
gsutil -D ls gs://my-bucket/my-object
ספריות לקוח
C++
מגדירים את משתנה הסביבה
CLOUD_STORAGE_ENABLE_TRACING=http
כדי לקבל את כל תעבורת ה-HTTP.מגדירים את משתנה הסביבה CLOUD_STORAGE_ENABLE_CLOG=yes כדי לקבל רישומי יומן של כל RPC.
C#
מוסיפים יומן דרך ApplicationContext.RegisterLogger
ומגדירים אפשרויות רישום ביומן ב-handler של הודעת HttpClient
. מידע נוסף אפשר למצוא בסעיף השאלות הנפוצות.
Go
מגדירים את משתנה הסביבה GODEBUG=http2debug=1
. מידע נוסף אפשר למצוא ב-Go package net/http.
אם רוצים להכניס ליומן הרישום גם את גוף הבקשה, צריך להשתמש בצד לקוח HTTP מותאם אישית.
Java
יוצרים קובץ בשם logging.properties עם התוכן הבא:
# Properties file which configures the operation of the JDK logging facility. # The system will look for this config file to be specified as a system property: # -Djava.util.logging.config.file=${project_loc:googleplus-simple-cmdline-sample}/logging.properties # Set up the console handler (uncomment "level" to show more fine-grained messages) handlers = java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level = CONFIG # Set up logging of HTTP requests and responses (uncomment "level" to show) com.google.api.client.http.level = CONFIG
משתמשים ב-log.properties עם Maven
mvn -Djava.util.logging.config.file=path/to/logging.properties insert_command
מידע נוסף אפשר למצוא במאמר שעוסק ב-Pluggable HTTP Transport.
Node.js
צריך להגדיר את משתנה הסביבה NODE_DEBUG=https
לפני קריאה לסקריפט של הצומת.
PHP
מציינים handler HTTP משלכם ללקוח באמצעות httpHandler
, ומגדירים תווכה לרישום הבקשה והתשובה ביומן.
Python
משתמשים במודול הרישום ביומן. לדוגמה:
import logging import http.client logging.basicConfig(level=logging.DEBUG) http.client.HTTPConnection.debuglevel=5
Ruby
בחלק העליון של .rb file
אחרי require "google/cloud/storage"
, מוסיפים:
ruby Google::Apis.logger.level = Logger::DEBUG
הוספת כותרות מותאמות אישית
הוספת כותרות מותאמות אישית לבקשות היא כלי מקובל לניפוי באגים, למשל לצורך הפעלת כותרות של ניפוי באגים או לצורך מעקב אחר בקשות. בדוגמה הבאה אפשר לראות איך מגדירים כותרות של בקשות לכלים שונים של Cloud Storage:
שורת הפקודה
gcloud
משתמשים בדגל --additional-headers
, שזמין לרוב הפקודות.
לדוגמה:
gcloud storage objects describe gs://my-bucket/my-object --additional-headers=HEADER_NAME=HEADER_VALUE
כש-HEADER_NAME
ו-HEADER_VALUE
מגדירים את הכותרת שמוסיפים לבקשה.
gsutil
משתמשים בדגל -h
הגלובלי בבקשה. לדוגמה:
gsutil -h "HEADER_NAME:HEADER_VALUE" stat gs://my-bucket/my-object
כש-HEADER_NAME
ו-HEADER_VALUE
מגדירים את הכותרת שמוסיפים לבקשה.
ספריות לקוח
C++
namespace gcs = google::cloud::storage;
gcs::Client client = ...;
client.AnyFunction(... args ..., gcs::CustomHeader("header-name", "value"));
C#
בדוגמה הבאה רואים הוספה של כותרת מותאמת אישית לכל בקשה של ספריית הלקוח.
using Google.Cloud.Storage.V1;
var client = StorageClient.Create();
client.Service.HttpClient.DefaultRequestHeaders.Add("custom-header", "custom-value");
var buckets = client.ListBuckets("my-project-id");
foreach (var bucket in buckets)
{
Console.WriteLine(bucket.Name);
}
Go
כדי להוסיף כותרות מותאמות אישית לבקשות של ספריית הלקוח של Go, צריך
לתחום את התעבורה המשמשת את הלקוח באמצעות RoundTripper
בהתאמה אישית.
הדוגמה הבאה מראה שליחת כותרות של ניפוי באגים ורישום הכותרות של התשובות התואמות ביומן:
package main
import (
"context"
"io/ioutil"
"log"
"net/http"
"cloud.google.com/go/storage"
"google.golang.org/api/option"
raw "google.golang.org/api/storage/v1"
htransport "google.golang.org/api/transport/http"
)
func main() {
ctx := context.Background()
// Standard way to initialize client:
// client, err := storage.NewClient(ctx)
// if err != nil {
// // handle error
// }
// Instead, create a custom http.Client.
base := http.DefaultTransport
trans, err := htransport.NewTransport(ctx, base, option.WithScopes(raw.DevstorageFullControlScope),
option.WithUserAgent("custom-user-agent"))
if err != nil {
// Handle error.
}
c := http.Client{Transport:trans}
// Add RoundTripper to the created HTTP client.
c.Transport = withDebugHeader{c.Transport}
// Supply this client to storage.NewClient
client, err := storage.NewClient(ctx, option.WithHTTPClient(&c))
if err != nil {
// Handle error.
}
// Use client to make a request
}
type withDebugHeader struct {
rt http.RoundTripper
}
func (wdh withDebugHeader) RoundTrip(r *http.Request) (*http.Response, error) {
headerName := "X-Custom-Header"
r.Header.Add(headerName, "value")
resp, err := wdh.rt.RoundTrip(r)
if err == nil {
log.Printf("Resp Header: %+v, ", resp.Header.Get(headerName))
} else {
log.Printf("Error: %+v", err)
}
return resp, err
}
Java
import com.google.api.gax.rpc.FixedHeaderProvider;
import com.google.api.gax.rpc.HeaderProvider;
import com.google.cloud.WriteChannel;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.io.IOException;
import java.nio.ByteBuffer;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Example {
public void main(String args[]) throws IOException {
HeaderProvider headerProvider =
FixedHeaderProvider.create("custom-header", "custom-value");
Storage storage = StorageOptions.getDefaultInstance()
.toBuilder()
.setHeaderProvider(headerProvider)
.build().getService();
String bucketName = "example-bucket";
String blobName = "test-custom-header";
// Use client with custom header
BlobInfo blob = BlobInfo.newBuilder(bucketName, blobName).build();
byte[] stringBytes;
try (WriteChannel writer = storage.writer(blob)) {
stringBytes = "hello world".getBytes(UTF_8);
writer.write(ByteBuffer.wrap(stringBytes));
}
}
}
Node.js
const storage = new Storage();
storage.interceptors.push({
request: requestConfig => {
Object.assign(requestConfig.headers, {
'X-Custom-Header': 'value',
});
return requestConfig;
},
});
PHP
כל הפעלות ה-method שמפעילות בקשות http מקבלות גם ארגומנט $restOptions
בתור הארגומנט האחרון. אפשר לתת כותרות מותאמות אישית לכל בקשה בנפרד או לכל לקוח בנפרד.
use Google\Cloud\Storage\StorageClient;
$client = new StorageClient([
'restOptions' => [
'headers' => [
'x-foo' => 'bat'
]
]
]);
$bucket = $client->bucket('my-bucket');
$bucket->info([
'restOptions' => [
'headers' => [
'x-foo' => 'bar'
]
]
]);
Python
בשלב הזה, אין תמיכה בהוספת כותרות מותאמות אישית לבקשות של ספריית הלקוח של Python.
Ruby
require "google/cloud/storage"
storage = Google::Cloud::Storage.new
storage.add_custom_headers { 'X-Custom-Header'=> 'value' }
קודי שגיאה
הרשימה הבאה כוללת קודי מצב נפוצים של HTTP שאולי תתקלו בהם.
301: Moved Permanently
הבעיה: אתם מגדירים אתר סטטי, וניסיונות גישה לנתיב ספרייה מחזירים אובייקט ריק וקוד תגובת HTTP 301
.
הפתרון: אם הדפדפן מוריד אובייקט של אפס בייט, ומקבלים קוד תגובת HTTP 301
בניסיון גישה לספרייה, כמו http://www.example.com/dir/
, כנראה שבקטגוריה יש אובייקט ריק בשם הזה. כדי לבדוק אם זאת הבעיה ולפתור אותה:
- במסוף Google Cloud, נכנסים לדף Buckets ב-Cloud Storage.
- לוחצים על הלחצן Activate Cloud Shell בחלק העליון של מסוף Google Cloud.
- מריצים את
gcloud storage ls --recursive gs://www.example.com/dir/
. אם בפלט ישhttp://www.example.com/dir/
, במיקום הזה יש אובייקט ריק. - מסירים את האובייקט הריק באמצעות הפקודה:
gcloud storage rm gs://www.example.com/dir/
עכשיו יש לכם גישה אל http://www.example.com/dir/
כדי שיחזיר את הקובץ index.html
של הספרייה הזו במקום את האובייקט הריק.
400: Bad Request
הבעיה: כשביצעתם העלאה שניתן להמשיך, קיבלתם את השגיאה הזו ואת ההודעה Failed to parse Content-Range header.
הפתרון: הערך שבו השתמשתם בכותרת Content-Range
לא תקין. לדוגמה,
הערך Content-Range: */*
לא תקין ובעצם הוא צריך להיות Content-Range: bytes */*
. אם השגיאה הזו מופיעה, ההעלאה הנוכחית שניתן להמשיך כבר לא פעילה וצריך להתחיל העלאה חדשה שניתן להמשיך.
401: Unauthorized
הבעיה: בקשות ישירות לקטגוריה ציבורית או דרך Cloud CDN נכשלות, ומתקבלות התשובות HTTP 401: Unauthorized
ו-Authentication Required
.
הפתרון: מוודאים שהלקוח, או כל שרת proxy מתווך, לא מוסיפים את הכותרת Authorization
לבקשות ל-Cloud Storage. כל בקשה עם הכותרת Authorization
, גם אם היא ריקה, מאומתת כאילו הייתה ניסיון לאימות.
403: Account Disabled
הבעיה: ניסיתם ליצור קטגוריה, אבל קיבלתם את הודעת השגיאה 403 Account Disabled
.
הפתרון: השגיאה הזו מציינת שעדיין לא הפעלתם את החיוב בפרויקט המשויך. במאמר הפעלת החיוב בפרויקט אנחנו מסבירים איך מפעילים את החיוב.
אם החיוב פועל והודעת השגיאה הזו ממשיכה להופיע, אפשר לפנות לתמיכה, לציין את מזהה הפרויקט ולתאר את הבעיה.
403: Forbidden
הבעיה: אמורה להיות לכם הרשאת גישה לקטגוריה או לאובייקט מסוים, אבל כשאתם מנסים להשתמש בה, מופיעה הודעת השגיאה 403 - Forbidden
עם הודעה שדומה לזו: example@email.com does not have storage.objects.get access to the
Google Cloud Storage object
.
הפתרון: חסרה הרשאת IAM לקטגוריה או לאובייקט, שנדרשת להשלמת הבקשה. אם אמורה להיות לכם אפשרות לבצע את הבקשה אבל אתם לא מצליחים, צריך לבצע את הבדיקות הבאות:
האם בהודעת השגיאה מופיעים הפרטים הנכונים של מקבל ההרשאה? אם בהודעת השגיאה מצוינת כתובת אימייל לא צפויה או מצוין Anonymous caller, פרטי הכניסה בבקשה לא נכונים. זה יכול לקרות כשבהגדרת הכלי שבאמצעותו יצרתם את הבקשה יש פרטי כניסה של ישות או כתובת אימייל אחרת, או שהבקשה נוצרה מטעמכם על ידי חשבון שירות.
האם ההרשאה שמצוינת בהודעת השגיאה היא ההרשאה שאתם צריכים? אם לא ציפיתם להרשאה הזו, כנראה שלכלי שבו אתם משתמשים נדרשת הרשאת גישה נוספת כדי להשלים את הטיפול בבקשה. לדוגמה, כדי למחוק בבת אחת כמות גדולה של אובייקטים בקטגוריה,
gcloud
צריך קודם ליצור רשימה של אובייקטים למחיקה בקטגוריה. לחלק הזה של פעולת המחיקה בכמות גדולה נדרשת הרשאתstorage.objects.list
, וזה מפתיע כי למחיקת אובייקט בדרך כלל נדרשת רק הרשאתstorage.objects.delete
. אם זו הסיבה להודעת השגיאה, בדקו אם קיבלתם את תפקידי ה-IAM עם ההרשאות הנדרשות הנוספות.האם קיבלתם את תפקיד ה-IAM במשאב המיועד או במשאב המקור? לדוגמה, אם קיבלתם תפקיד
Storage Object Viewer
בפרויקט ואתם מנסים להוריד אובייקט, ודאו שהאובייקט נמצא בקטגוריה שנמצאת בפרויקט. יכול להיות שבטעות יש לכם הרשאתStorage Object Viewer
בפרויקט אחר.
403: Forbidden
הבעיה: אתם מורידים את התוכן שלכם מ-storage.cloud.google.com
, ומקבלים את הודעת השגיאה 403: Forbidden
כשאתם מנסים להגיע לאובייקט דרך הדפדפן באמצעות כתובת ה-URL:
https://storage.cloud.google.com/BUCKET_NAME/OBJECT_NAME
הפתרון: הורדות של אובייקטים באמצעות storage.cloud.google.com
נקראות הורדות דפדפן מאומתות, והאימות בהורדות מהסוג הזה מבוסס על קובצי Cookie.
אם הגדרתם את יומני בקרת הרשאות הגישה לנתונים ביומני הביקורת של Cloud למעקב אחר הגישה לאובייקטים, אחת מהמגבלות של התכונה היא שלא ניתן להשתמש בהורדות המאומתות של הדפדפן כדי להוריד אובייקט במעקב, אלא אם האובייקט ניתן לקריאה באופן ציבורי. כשמנסים להוריד אובייקטים לא ציבוריים בהורדה מאומתת של דפדפן, מתקבלת התשובה 403
. ההגבלה הזו נועדה למנוע פישינג של מזהי Google שמשמשים לאימות באמצעות קובצי Cookie.
כדי למנוע מראש את הבעיה נסו אחד מהפתרונות הבאים:
- השתמשו בקריאות API ישירות, שתומכות בהורדות לא מאומתות, במקום בהורדות דפדפן מאומתות.
- השביתו את יומני בקרת הרשאות הגישה לנתונים של Cloud Storage שעוקבים אחרי הגישה לאובייקטים המושפעים. שימו לב שיומני בקרת הרשאות הגישה לנתונים מוגדרים ברמת הפרויקט או ברמה גבוהה יותר, ואפשר להפעיל אותם בו-זמנית במספר רמות.
- מגדירים חריגים כדי לא לכלול משתמשים ספציפיים במעקב ביומן בקרת הרשאות הגישה לנתונים, וכך לאפשר למשתמשים האלה לבצע הורדות מאומתות של דפדפנים.
- כדי שכולם יוכלו לקרוא את האובייקטים המושפעים, צריך לתת להם הרשאות קריאה
allUsers
אוallAuthenticatedUsers
. יומני בקרת הרשאות הגישה לנתונים לא מתעדים את הגישה לאובייקטים ציבוריים.
409: Conflict
הבעיה: ניסיתם ליצור קטגוריה, אבל קיבלתם את השגיאה:
409 Conflict. Sorry, that name is not available. Please try a different one.
הפתרון: שם הקטגוריה שבו ניסיתם להשתמש (למשל, gs://cats
או gs://dogs
) כבר תפוס. ל-Cloud Storage יש מרחב שמות גלובלי, כך שאי אפשר לתת לקטגוריה שם של קטגוריה שכבר קיימת. בחרו שם שלא נמצא בשימוש.
429: Too Many Requests
הבעיה: הבקשות שלכם נדחות עם שגיאת 429 Too Many Requests
.
הפתרון: אתם מגיעים למגבלה של מספר הבקשות שאפשר לבצע ב-Cloud Storage במשאב נתון. מידע נוסף על המגבלות ב-Cloud Storage אפשר למצוא במאמר בנושא המכסות של Cloud Storage. במאמר בנושא הנחיות לקצב בקשות ולחלוקת גישה תוכלו למצוא דיון על שיטות מומלצות, כולל הגדלה הדרגתית של עומס העבודה והימנעות משמות קבצים רציפים אם עומס העבודה כולל אלפי בקשות לשנייה לקטגוריה.
429: Too Many Requests
הבעיה: הבקשות שלכם נדחות עם השגיאה הבאה:
429 Too Many Requests. This workload is drawing too much egress bandwidth from Cloud Storage and has exceeded the InternetEgressBandwidth Quota. Please reduce the rate of request or contact Google Cloud Support if you want to increase your bandwidth quota.
הבעיה: הבקשות שלכם נדחות עם השגיאה הבאה:
429 Too Many Requests. This workload is drawing too much egress bandwidth from Cloud Storage and has exceeded the MultiregionInternetEgressBandwidth Quota. Please reduce the rate of request or contact Google Cloud Support if you want to increase your bandwidth quota.
הפתרון: יכול להיות שתעבורת הנתונים היוצאת (egress) לאינטרנט מוגבלת בגלל ההיסטוריה של הפרויקט. כדי לבקש הגדלה של מכסת רוחב הפס, פונים לתמיכה של Google Cloud.
אבחון שגיאות במסוף Google Cloud
הבעיה: כשמשתמשים במסוף Google Cloud כדי לבצע פעולה, מופיעה הודעת שגיאה גנרית. לדוגמה, הודעת שגיאה מופיעה כשמנסים למחוק קטגוריה, אבל אין פרטים על הסיבה לכך שהפעולה נכשלה.
הפתרון: בהתראות במסוף Google Cloud אפשר לראות מידע מפורט על הפעולה שנכשלה:
לוחצים על הלחצן Notifications בכותרת של מסוף Google Cloud.
הפעולות האחרונות שבוצעו במסוף Google Cloud יוצגו בתפריט נפתח.
לוחצים על הפריט שרוצים לקבל עליו מידע נוסף.
ייפתח דף שמציג מידע מפורט על הפעולה.
אפשר ללחוץ על כל שורה כדי להרחיב ולראות מידע מפורט על השגיאה.
בדוגמה הבאה אפשר לראות את פרטי השגיאה של פעולת מחיקת הקטגוריה שנכשלה, והסבר על כך שמדיניות שמירת הקטגוריה מנעה את מחיקת הקטגוריה.
תיקיות
הבעיה: מחקתם כמה אובייקטים בקטגוריה, ועכשיו התיקייה שמכילה אותם לא מופיעה במסוף Google Cloud.
הפתרון: במסוף Google Cloud התוכן של הקטגוריה מוצג באופן שנראה כאילו יש מבנה של ספרייה, אבל התיקיות בעצם לא קיימות ב-Cloud Storage. כתוצאה מכך, כשמסירים מקטגוריה את כל האובייקטים עם הקידומת המשותפת, סמל התיקייה שמייצג את קבוצת האובייקטים הזו לא יופיע יותר במסוף Google Cloud.
שגיאות באתר הסטטי
כאן אנחנו מציגים בעיות נפוצות שאפשר להיתקל בהן כשמגדירים קטגוריה לאירוח אתר סטטי.
מילוי בקשות HTTPS
הבעיה: אתם רוצים למלא בקשות תוכן ב-HTTPS בלי להשתמש במאזן עומסים.
הפתרון: אפשר למלא בקשות של תוכן סטטי דרך HTTPS באמצעות מזהי URI ישירים, כמו https://storage.googleapis.com/my-bucket/my-object
. יש עוד אפשרויות למילוי בקשות תוכן באמצעות דומיין מותאם אישית ב-SSL:
- משתמשים ברשת של צד שלישי להעברת תוכן עם Cloud Storage.
- אפשר למלא בקשות לתוכן סטטי של האתר מאירוח ב-Firebase במקום מ-Cloud Storage.
אימות הדומיין
הבעיה: לא ניתן לאמת את הדומיין.
הפתרון: בדרך כלל, תהליך האימות ב-Search Console מפנה אתכם להעלאת קובץ לדומיין, אבל לפעמים כדי לעשות זאת צריך קטגוריה משויכת, שאפשר ליצור רק אחרי אימות הדומיין.
במקרה כזה, מאמתים את הבעלות באמצעות שיטת האימות של ספק שם הדומיין. במאמר אימות בעלות אפשר למצוא הסבר איך לעשות זאת. אפשר לבצע את האימות הזה לפני יצירת הקטגוריה.
דף לא נגיש
הבעיה: מוצגת הודעת השגיאה Access denied
לגבי מילוי בקשה לדף אינטרנט על ידי האתר שלכם.
הפתרון: בודקים שהאובייקט משותף באופן ציבורי. אם הוא לא משותף, דרך הקישור אפשר לקבל הסבר איך להפוך נתונים לציבוריים.
אם בעבר העליתם ושיתפתם אובייקט, אבל אחר כך העליתם גרסה חדשה שלו, צריך לשתף אותו מחדש באופן ציבורי. הסיבה לכך היא שההרשאה הציבורית מוחלפת בהעלאה החדשה.
עדכון ההרשאות נכשל
הבעיה: כשמנסים לתת גישה ציבורית לנתונים מוצגת הודעת שגיאה.
הפתרון: מוודאים שיש לכם הרשאת setIamPolicy
לאובייקט או לקטגוריה. את ההרשאה הזו מקבלים גם בתפקיד Storage Admin
. אם יש לכם הרשאת setIamPolicy
ובכל זאת מופיעה הודעת שגיאה, יכול להיות שהגדרת מניעה של גישה ציבוריתחלה על הקטגוריה, ולכן לא מתאפשרת גישה ל-allUsers
או ל-allAuthenticatedUsers
מניעת גישה ציבורית מוגדרת ישירות בקטגוריה או במדיניות הארגון שמוגדרת ברמה גבוהה יותר.
הורדת תוכן
הבעיה: מוצגת בקשה להוריד את תוכן הדף, במקום להציג אותו בדפדפן.
הפתרון: אם קבעתם שסוג התוכן באובייקט MainPageSuffix
לא יהיה תוכן מהאינטרנט, המבקרים באתר יתבקשו להוריד את התוכן במקום להציג את הדף. כדי לפתור את הבעיה, צריך לעדכן את הערך סוג התוכן במטא-נתונים לערך מתאים, למשל text/html
. הסבר איך לעשות זאת אפשר למצוא במאמר בנושא עריכת המטא-נתונים של אובייקט.
זמן אחזור
ריכזנו כאן כמה בעיות נפוצות שקשורות לזמן האחזור. בנוסף, בלוח הבקרה של סטטוס שירותי Google Cloud אפשר למצוא מידע על אירועים אזוריים או גלובליים שמשפיעים על שירותי Google Cloud, כמו Cloud Storage.
זמן אחזור של העלאה או הורדה
הבעיה: זמן אחזור ארוך יותר בזמן ההעלאה או ההורדה.
הפתרון: מריצים את הפקודה gsutil perfdiag
כדי לאבחן את הביצועים בסביבה המושפעת. הגורמים הנפוצים הבאים משפיעים על זמן האחזור של העלאה והורדה:
מגבלות על המעבד (CPU) או על הזיכרון: במערכת ההפעלה של הסביבה המושפעת יש בדרך כלל כלים למדידת צריכת המשאבים המקומית, כמו שימוש במעבד (CPU) ושימוש בזיכרון.
אילוצים של קלט/פלט (IO) בדיסק: כחלק מהפקודה
gsutil perfdiag
, משתמשים בבדיקותrthru_file
ו-wthru_file
כדי לנטר את ההשפעה של הקלט/פלט המקומיים של הדיסק על הביצועים.מרחק גיאוגרפי: הפרדה פיזית בין קטגוריה של Cloud Storage לסביבה המושפעת יכולה לפגוע בביצועים, במיוחד כשהן נמצאות ביבשות שונות. בדיקה באמצעות קטגוריה שנמצאת באותו אזור שבו נמצאת הסביבה המושפעת מאפשרת להעריך את מידת ההשפעה של ההפרדה הגיאוגרפית על זמן האחזור.
- במקרים המתאימים, מקודד ה-DNS של הסביבה המושפעת צריך להשתמש בפרוטוקול EDNS(0) כדי שבקשות מהסביבה ינותבו דרך ממשק קצה מתאים של Google (GFE).
זמן אחזור של CLI או של ספריית לקוח
הבעיה: בגישה ל-Cloud Storage באמצעות gcloud storage
, gsutil או אחת מספריות הלקוח, זמן האחזור ארוך יותר.
הפתרון: במקרים של בקשות שכדאי לנסות לבצע שוב, ה-CLI וספריות הלקוח מנסים שוב באופן אוטומטי. הניסיונות האלה עלולים בסופו של דבר להאריך את זמן האחזור אצל משתמש הקצה. משתמשים במדד Cloud Monitoring storage.googleapis.com/api/request_count
כדי לבדוק אם ב-Cloud Storage מוצג באופן עקבי קוד תגובה של ניסיון חוזר כמו 429
או 5xx
.
שרתי Proxy
הבעיה: אתם מתחברים דרך שרת proxy. מה עושים?
הפתרון: כדי לגשת ל-Cloud Storage דרך שרת proxy, צריך לאפשר גישה לדומיינים הבאים:
-
accounts.google.com
ליצירת אסימוני אימות OAuth2 -
oauth2.googleapis.com
לביצוע החלפות אסימוני OAuth2 -
*.googleapis.com
לבקשות אחסון
אם שרת ה-proxy או מדיניות האבטחה לא תומכים בהוספת רשימות היתרים לפי דומיין, ובמקום זאת נדרשת הוספה לרשימת ההיתרים לפי חסימת רשת IP, מומלץ מאוד להגדיר את שרת ה-proxy לכל טווחי כתובות ה-IP של Google. תוכלו למצוא את טווחי הכתובות בעזרת שאילתות על נתוני WHOIS ב-ARIN. מומלץ לבדוק מדי פעם את ההגדרות של שרת ה-proxy כדי לוודא שהן תואמות לכתובות ה-IP של Google.
לא מומלץ להגדיר לשרת ה-proxy את כתובות ה-IP הספציפיות שמתקבלות מחיפושים חד-פעמיים של oauth2.googleapis.com
ו-storage.googleapis.com
. הגישה לשירותי Google היא באמצעות שמות DNS, הממופים למספר גדול של כתובות IP שיכולות להשתנות עם הזמן. לכן הגדרת שרת ה-proxy על סמך חיפוש חד-פעמי עלולה לגרום לכשלים בהתחברות ל-Cloud Storage.
אם הבקשות שלכם מנותבות דרך שרת proxy, יכול להיות שתצטרכו לפנות למנהל הרשת כדי לוודא ששרת ה-proxy לא מסיר את הכותרת Authorization
שמכילה את פרטי הכניסה שלכם. בלי הכותרת Authorization
, הבקשות נדחות ומקבלים את הודעת השגיאה MissingSecurityHeader
.
המאמרים הבאים
- מידע על אפשרויות התמיכה
- תשובות לשאלות נוספות אפשר למצוא בשאלות הנפוצות של Cloud Storage.
- איך Error Reporting יכול לעזור לכם לזהות ולהבין את השגיאות ב-Cloud Storage.