Cloud Monitoring feature is enabled for your Vertex AI
More Info:
Ensure that Cloud Monitoring feature is enabled for your Vertex AI notebook instances
Risk Level
Medium
Address
Monitoring
Compliance Standards
- CIS GCP
Triage and Remediation
- Remediation
Remediation
Using Console
Below are the concise, console-based steps to ensure Cloud Monitoring is enabled for Vertex AI Workbench notebook instances.
1. Verify Cloud Monitoring & APIs
- Go to Google Cloud console: https://console.cloud.google.com
- In the top-left, select the correct Project.
- In the left menu, go to APIs & Services → Library.
- Confirm the following APIs are Enabled (enable if they are not):
- Cloud Monitoring API
- Vertex AI API
2. Enable Monitoring on a New Vertex AI Workbench Notebook
- Go to Vertex AI → Workbench in the console.
- Click New notebook → choose the type (e.g., Managed notebooks).
- Fill in the basic details (name, region, machine type, etc.).
- Expand Advanced Settings (or similar section, wording may slightly differ).
- Find the Monitoring or Operations section:
- Check/enable Cloud Monitoring / Ops Agent / Enable monitoring option.
- Complete the rest of the configuration as desired.
- Click Create.
Cloud Monitoring will now collect metrics from that notebook VM.
3. Enable Monitoring on an Existing Notebook Instance
You typically need to stop the instance to edit some settings.
- Go to Vertex AI → Workbench.
- Locate your notebook instance in the list.
- If it’s Running, click the three‑dot menu (⋮) → Stop and wait until status is Stopped.
- Again click the three‑dot menu (⋮) → Edit.
- In the edit page, expand Advanced Settings.
- Locate the Monitoring / Ops Agent / Enable Cloud Monitoring section and:
- Check/enable the monitoring option.
- Save the changes (e.g., Save, Update, or Save & Continue depending on UI).
- Once updated, click Start to start the notebook instance again.
4. Confirm Metrics in Cloud Monitoring
- Go to Monitoring → Metrics explorer in the console.
- In Resource type, select:
VM InstanceorVertex AI Workbench(depending on what appears for your setup).
- Check that you see metrics (CPU, memory, disk, etc.) for your notebook VM.
This ensures Cloud Monitoring is enabled and collecting data for your Vertex AI notebook instances via the GCP console.
Using CLI
Below is a practical CLI-based way to ensure Vertex AI notebook instances are sending metrics to Cloud Monitoring. The approach is different for:
- Managed Notebooks (Vertex AI Workbench managed) – monitoring is on by default; you mainly need APIs enabled.
- User-Managed Notebooks (Vertex AI Workbench user-managed / legacy AI Platform Notebooks) – these are GCE VMs; you enable monitoring by installing the Ops Agent on the VM.
1. Prerequisites (all Vertex AI notebooks)
1.1. Set default project and region/zone
PROJECT_ID="your-project-id"
REGION="us-central1" # for managed notebooks
ZONE="us-central1-b" # for user-managed (VM-based) notebooks
gcloud config set project "$PROJECT_ID"
1.2. Enable required APIs
gcloud services enable \
notebooks.googleapis.com \
monitoring.googleapis.com
2. Managed Notebooks (Vertex AI Workbench – Managed)
For managed notebooks, Google manages the underlying infra and Cloud Monitoring integration is enabled by default. The main remediation is just ensuring the APIs are on (done above).
To verify instances:
gcloud notebooks instances list --location="$REGION"
If you are only using managed notebooks, there is nothing more to “turn on” for Monitoring via CLI.
3. User-Managed Notebooks (VM-based) – Install Ops Agent
For user-managed notebooks, each notebook is a Compute Engine VM. To enable Cloud Monitoring, install the Ops Agent on those VMs.
3.1. List user-managed notebook instances
gcloud notebooks instances list --location="$ZONE" --format="table(name, state, proxyUri)"
Note: For user-managed notebooks, the instance name is typically the same as the underlying GCE VM name and uses the same zone.
3.2. Enable OS Login (recommended, if not already)
gcloud compute instances add-metadata "INSTANCE_NAME" \
--zone="$ZONE" \
--metadata=enable-oslogin=TRUE
Replace INSTANCE_NAME with your notebook VM name.
3.3. SSH into the notebook VM
gcloud compute ssh "INSTANCE_NAME" --zone="$ZONE"
3.4. Install the Ops Agent (Cloud Monitoring + Logging)
Once logged into the VM:
Debian/Ubuntu (most Vertex AI notebook images are Debian-based):
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install
RHEL/CentOS:
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
sudo bash add-google-cloud-ops-agent-repo.sh --also-install --distribution=el
The agent will automatically send system metrics and logs to Cloud Monitoring/Logging.
Exit the VM when done:
exit
3.5. (Optional) Verify the Ops Agent status
From the VM:
sudo systemctl status google-cloud-ops-agent
You should see the service as active (running).
4. Verify in Cloud Monitoring
After a few minutes, verify metrics:
# List monitored resource types
gcloud monitoring resource-descriptors list --format="value(type)" | grep notebook
Then check metrics in the console:
- Go to Monitoring → Metrics explorer
- Resource type:
gce_instance - Filter by instance name of your notebook VM.
This ensures Cloud Monitoring is receiving metrics for your Vertex AI notebook instances.
Using Python
Below is a practical way to ensure Vertex AI Workbench (user‑managed) notebook VMs are correctly configured for Cloud Monitoring using Python.
For Vertex AI Workbench user‑managed notebooks, monitoring is essentially:
- The VM must have the Cloud Monitoring and Cloud Logging OAuth scopes.
- The Ops Agent / Monitoring agent must be installed (on current images it usually is by default).
Important: Scopes on a VM cannot be changed in-place. If an instance was created without monitoring scopes, you must recreate it with the right config. The code below shows how to:
- Check scopes for existing notebook VMs.
- Create/recreate a notebook instance with Monitoring & Logging enabled.
1. Setup
pip install google-cloud-notebooks google-api-python-client
gcloud auth application-default login
Ensure your default credentials have roles/notebooks.admin and roles/compute.viewer at least.
2. Check if existing notebook instances have Monitoring enabled
Vertex AI Workbench user-managed notebooks are backed by Compute Engine VMs. We’ll:
- List notebook instances via the Notebooks API.
- For each, find the underlying VM and inspect its OAuth scopes.
- Flag instances missing
monitoring.writeandlogging.write.
from google.cloud import notebooks_v1
from googleapiclient import discovery
from google.auth import default
PROJECT_ID = "your-project-id"
LOCATION = "us-central1" # change as needed
PARENT = f"projects/{PROJECT_ID}/locations/{LOCATION}"
def list_notebook_instances():
client = notebooks_v1.NotebookServiceClient()
for inst in client.list_instances(parent=PARENT):
yield inst
def get_compute_client():
creds, _ = default()
return discovery.build("compute", "v1", credentials=creds, cache_discovery=False)
def check_monitoring_for_instance(instance, compute):
# User-managed notebooks have a single VM behind them.
# The VM name is usually the same as the notebook instance ID.
# The zone is in instance.gce_setup.zone (or instance.vm_image.gce_zone on some versions).
try:
gce_setup = instance.gce_setup
zone = gce_setup.zone.split("/")[-1] # e.g. "projects/.../zones/us-central1-b"
vm_name = gce_setup.vm_name or instance.name.split("/")[-1]
except AttributeError:
# Fallback: parse zone from instance.name if needed
# Adjust if your instances look different
print(f"Could not determine VM info for {instance.name}")
return
vm = compute.instances().get(project=PROJECT_ID, zone=zone, instance=vm_name).execute()
service_accounts = vm.get("serviceAccounts", [])
if not service_accounts:
print(f"{instance.name}: NO service account configured – monitoring/ logging are disabled")
return
scopes = set()
for sa in service_accounts:
scopes.update(sa.get("scopes", []))
needs_monitoring = not any("monitoring.write" in s for s in scopes)
needs_logging = not any("logging.write" in s for s in scopes)
if needs_monitoring or needs_logging:
print(f"{instance.name}: missing scopes -> "
f"{'monitoring' if needs_monitoring else ''} "
f"{'logging' if needs_logging else ''}")
else:
print(f"{instance.name}: OK (Monitoring & Logging scopes present)")
def main():
compute = get_compute_client()
for inst in list_notebook_instances():
check_monitoring_for_instance(inst, compute)
if __name__ == "__main__":
main()
Any instance printed as missing scopes should be recreated with the correct scopes.
3. Create (or recreate) a notebook with Cloud Monitoring enabled
The simplest way to “enable Cloud Monitoring” is to ensure the notebook’s underlying VM has:
https://www.googleapis.com/auth/logging.write
https://www.googleapis.com/auth/monitoring.write
and that you’re using a recent Vertex AI Workbench image (which includes the Ops Agent).
from google.cloud import notebooks_v1
from google.protobuf import field_mask_pb2
PROJECT_ID = "your-project-id"
LOCATION = "us-central1-b" # zone; user-managed notebooks are zonal
PARENT = f"projects/{PROJECT_ID}/locations/{LOCATION}"
INSTANCE_ID = "my-monitored-notebook"
SERVICE_ACCOUNT_EMAIL = "my-sa@your-project-id.iam.gserviceaccount.com" # or default
def create_notebook_with_monitoring():
client = notebooks_v1.NotebookServiceClient()
instance = notebooks_v1.Instance(
name=f"{PARENT}/instances/{INSTANCE_ID}",
machine_type=f"projects/{PROJECT_ID}/zones/{LOCATION}/machineTypes/n1-standard-4",
service_account=SERVICE_ACCOUNT_EMAIL,
service_account_scopes=[
"https://www.googleapis.com/auth/cloud-platform", # superset
"https://www.googleapis.com/auth/logging.write",
"https://www.googleapis.com/auth/monitoring.write",
],
vm_image=notebooks_v1.VmImage(
project="deeplearning-platform-release",
image_family="common-cpu-notebooks", # pick an appropriate family
),
install_gpu_driver=False,
no_public_ip=True,
)
op = client.create_instance(
parent=PARENT,
instance_id=INSTANCE_ID,
instance=instance,
)
print("Creating instance...")
result = op.result()
print(f"Created instance: {result.name}")
if __name__ == "__main__":
create_notebook_with_monitoring()
If you want to recreate an existing instance:
- Export current settings (machine type, disks, network, etc.).
- Delete the old instance.
- Call
create_instancewith the same settings plus the Monitoring & Logging scopes as above.
4. (Optional) Verify in Cloud Monitoring
After the instance is running:
- In the console: Monitoring → Metrics Explorer → find
agent.googleapis.commetrics for the VM. - Or via API, list time series for
agent.googleapis.com/agent/uptimefor that VM.
If you can share whether you’re using user‑managed or managed notebooks and what your current instance config looks like (or a sample Instance JSON), I can adjust the Python exactly to your environment.
Using Terraform
# Enabling the built‑in “Cloud Monitoring” feature on Vertex AI Workbench
# notebook instances is not currently exposed as a Terraform argument on
# google_notebooks_instance / google_notebooks_runtime, so it cannot be
# remediated directly in Terraform.
# You must turn this on via the GCP Console or API:
# Console:
# Vertex AI → Workbench → (select notebook instance) → Edit →
# Monitoring → Enable Cloud Monitoring → Save.
#
# Or via the Notebooks/Vertex AI API using the corresponding field, outside
# of Terraform control.
# No valid Terraform arguments exist today that map to this specific toggle,
# so any Terraform change here would not actually satisfy the check.
After this, terraform plan should show no changes related to Cloud Monitoring for the notebook instances, because the setting is not managed by the provider.