使用代理程式政策 (GA)

您可以使用 Google Cloud CLI 中的 gcloud compute instances ops-agents policies 指令群組或 ops-agent-policy Terraform 模組,建立及管理代理程式政策。代理程式政策會使用 Compute Engine 中的 VM 管理員 工具套件來管理 OS 政策,自動部署及維護軟體設定 (例如 Ops 代理程式)。這些政策不適用於舊版 Monitoring 代理程式或舊版 Logging 代理程式。

正式發布的代理程式政策會使用 OS Config API 中的 OS 政策指派資源。雖然有一般 gcloud CLI 指令群組可管理 OS 政策指派作業,但 gcloud compute os-config os-policy-assignments 指令群組專為本文所述的代理程式政策設計。gcloud compute instances ops-agents policies

事前準備

ops-agent-policy Terraform 模組是以 Google Cloud SDK 的 gcloud compute instances ops-agents policies 指令為基礎建構而成。如要瞭解 Terraform 的運作方式,請參閱「使用 Terraform」一文。

使用 Google Cloud CLI 或 Terraform 模組建立代理程式政策前,請完成下列步驟:

  1. 如果您要使用 gcloud compute instances ops-agents policies 指令,且尚未安裝 Google Cloud CLI,請先安裝。

  2. 如果您要使用 Terraform 模組,請執行下列步驟:

    1. 如要瞭解如何安裝 Terraform,請參閱「安裝及設定 Terraform」一文。Cloud Shell 已安裝 Terraform。

    2. 複製 terraform-google-cloud-operations 存放區,其中包含 ops-agent-policy 模組:

      git clone https://github.com/terraform-google-modules/terraform-google-cloud-operations
      
  3. 下載並執行 prepare-for-ops-agents-policies.sh 指令碼,啟用必要 API,並設定使用 Google Cloud CLI 或 Terraform 的適當權限。

    如要瞭解指令碼,請參閱「指令碼」。prepare-for-ops-agents-policies.sh

解除安裝舊版 Monitoring 代理程式和 Logging 代理程式

如果您要為作業套件代理程式建立政策,請確保 VM 未安裝舊版 Logging 代理程式或 Monitoring 代理程式。在同一部 VM 上執行作業套件代理程式和舊版代理程式,可能會導致重複擷取記錄或指標擷取衝突。如有必要,請先解除安裝 Monitoring 代理程式解除安裝 Logging 代理程式,再建立政策來安裝 Ops Agent。

確認已安裝 OS 設定代理程式

如果 VM 早於 OS 設定推出,您可能需要手動安裝及設定 OS 設定代理程式。如要瞭解如何手動安裝及驗證 OS 設定代理程式,請參閱 VM 管理工具驗證檢查清單

找出作業系統資訊的值

如要將代理程式政策套用至特定作業系統或版本,您必須瞭解 OS Config 用來參照這些項目的值。

如要找出 VM 的 osShortNameosVersion 欄位值,請使用下列指令:

gcloud compute instances os-inventory describe INSTANCE_NAME \
--zone ZONE | grep "^ShortName: "
gcloud compute instances os-inventory describe INSTANCE_NAME \
--zone ZONE | grep "^Version: "

如要執行這些指令,必須在 VM 上安裝 OS 設定代理程式。

建立代理程式政策來管理作業套件代理程式

指令列

如要建立代理程式政策,請使用 gcloud compute instances ops-agents policies create 指令。這項指令的結構如下:

gcloud compute instances ops-agents policies create POLICY_ID \
  --zone ZONE \
  --file path/to/policy-description-file.yaml \
  --project PROJECT_ID

使用這項指令時,請按照下列方式替換變數:

  • POLICY_ID 是指政策名稱。
  • ZONE 是 Compute Engine 區域。代理程式政策只會套用至指定可用區中的 VM;如要在多個可用區套用政策,您必須建立多項政策。
  • path/to/policy-description-file.yaml 是說明政策的 YAML 檔案路徑。 如要瞭解這個檔案的結構,請參閱「說明代理程式政策」。
  • PROJECT_ID 是 Google Cloud 專案 ID。

如要瞭解指令群組中的其他指令和可用選項,請參閱 gcloud compute instances ops-agents policies 說明文件。

說明代理程式政策

您需要建立 YAML 檔案來描述政策,並將該檔案做為 --file 選項的值傳遞至指令,藉此向 gcloud compute instances ops-agents policies create 提供政策資訊。

本節說明政策說明檔案的結構。詳情請參閱政策說明檔案範例

YAML 政策說明檔案的格式

代理程式政策的說明檔案必須包含兩組欄位:

  • agentsRule,可告知代理程式政策是否要安裝或移除作業套件代理程式,並指定要使用的作業套件代理程式版本。

  • instanceFilter,說明要套用政策的 VM。

agentsRule 欄位群組的結構

agentsRule 欄位群組的結構如下:

agentsRule:
  packageState: installed|removed
  version: latest|2.*.*|2.x.y
  • packageState 欄位會向政策說明 Ops Agent 的預期狀態。有效值為 installedremoved
  • version 欄位表示要安裝或移除的 Ops Agent 版本。您可以指定下列值:

    • latest 是最新版的作業套件代理程式。
    • 2.*.* 是作業套件代理程式主要版本 2 的最新版本。
    • 2.x.y 表示主要版本 2 的特定發布版本。

    如要瞭解 Ops Agent 的可用版本,請參閱該代理程式的 GitHub 存放區

instanceFilter 欄位群組的結構

instanceFilter 欄位群組會指出篩選器套用的區域 VM。這個欄位群組是 OSPolicyAssignment 資源在 OS Config API 中使用的 InstanceFilter 結構的 YAML 表示法。

instanceFilter 欄位群組的結構如下:

  • 如要將代理程式政策套用至可用區中的所有 VM,請使用下列指令:

    instanceFilter:
      all: True
    

    如果使用 all: True 篩選器,就無法指定任何其他條件。

  • 如要將代理程式政策套用至可用區中的特定 VM 集,請使用下列任一組合來描述 VM:

    • VM 上的標籤 (納入或排除):
      • inclusionLabels:
      • exclusionLabels:
    • 作業系統:inventories:

    舉例來說,下列篩選器會將代理程式政策套用至具有「env=prod」標籤,且沒有「app=web」標籤的 VM,並指定作業系統:

    instanceFilter:
      inclusionLabels:
      - labels:
          env: prod
      exclusionLabels:
      - labels:
          app: web
      inventories:
      - osShortName: rhel
        osVersion: '7.*'
      - osShortName: debian
        osVersion: '11'
    

    如要瞭解如何找出作業系統值,請參閱「找出作業系統資訊」。

Terraform

如要建立完全自訂的代理程式政策,請使用 terraform-google-cloud-operations 存放區 modules 目錄中的 ops-agent-policy 模組。這個模組需要與 gcloud compute instances ops-agents policies create 指令相同的資訊。如要查看用於描述代理程式政策的所有欄位說明,請選取「指令列」分頁。

terraform-google-cloud-operations 存放區中的 examples 目錄包含許多檔案,可為您提供 ops-agent-policy 模組所需的許多變數。詳情請參閱政策設定範例

如要瞭解如何套用或移除 Terraform 設定,請參閱基本 Terraform 指令。如要瞭解 Terraform 的運作方式,請參閱「使用 Terraform」。

驗證代理程式政策的狀態

本節說明如何檢查已建立的政策狀態,以及 Ops 代理程式的安裝狀態。這項資訊也有助於排解代理程式政策問題。

Compute Engine OS 政策頁面

Compute Engine 的「OS policies」(作業系統政策) 頁面會提供管理作業套件代理程式的代理程式政策相關資訊,以及「VM instances」(VM 執行個體) 分頁中的 VM 相關資訊。例如:

  • 「狀態」欄會指出政策是否已成功安裝 (「符合規定」)、安裝中 (「待處理」)、可能失敗 (「不明」) 或缺少政策 (「沒有政策」)。
  • 「受監控的 VM」欄會指出作業套件代理程式是否由 OS 設定管理 (「受監控」),或不是由 OS 設定管理 (「未受監控」)。

    如果政策狀態為「符合規定」,但 VM 顯示「未監控」,則可能是安裝作業套件代理程式時發生問題。舉例來說,您可能已安裝舊版代理程式

前往 Google Cloud 控制台的「OS policies」(作業系統政策) 頁面:

前往「OS policies」(作業系統政策)

如果您是使用搜尋列尋找這個頁面,請選取子標題為「Compute Engine」的結果

Compute Engine「OS policies」(作業系統政策) 分頁中的「VM instances」(VM 執行個體),會顯示Google Cloud 專案中所有作業系統政策所管理代理程式的相關資訊。這些政策標示為「goog-ops-agent-policy」。

  • goog-ops-agent-policy 指標包含多種政策:
    • 使用 gcloud compute instances ops-agents policies 指令建立的政策。
    • 如果您在建立 VM 時要求安裝作業套件代理程式,系統會為您建立政策。
    • 使用 Terraform 建立的政策,用於管理作業套件代理程式。

    如要區分政策,請使用頁面上的「作業系統政策指派」分頁,查看專案中所有政策指派的政策 ID。 Google Cloud

  • 如果透過其他方式 (例如手動安裝或透過Beta 版代理程式政策) 安裝作業套件代理程式,這個「受監控的 VM」資料欄不會反映這類安裝作業。

Cloud Monitoring「VM 執行個體」頁面

Cloud Monitoring 的「VM Instances」(VM 執行個體) 頁面包含「Agent」(代理程式) 欄,其中列出每個 VM 安裝的代理程式,如果是作業套件代理程式,則會顯示安裝的代理程式是否為最新版本。

前往 Google Cloud 控制台的「VM Instances dashboard」(VM 執行個體資訊主頁) 頁面

前往 VM 執行個體資訊主頁

如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

政策設定範例

本節說明使用 Google Cloud SDK 或 Terraform 時,設定代理程式政策的範例。

指令列

政策說明檔案範例

本節提供各種情境的 YAML 政策說明檔範例。範例假設您將 YAML 放在名為 agent-policy-description.yaml 的檔案中,並使用下列指令在 us-central1-a 區域中建立政策:

gcloud compute instances ops-agents policies create POLICY_ID \
  --zone us-central1-a \
  --file agent-policy-description.yaml \
  --project PROJECT_ID

在所有 VM 上安裝

如要在 us-central1-a 可用區的所有 VM 上安裝最新版作業套件代理程式,請使用下列政策說明:

agentsRule:
  packageState: installed
  version: latest
instanceFilter:
  all: True

從所有 VM 中移除

如要移除 us-central1-a 區域中所有 VM 的最新版作業套件代理程式,請使用下列政策說明:

agentsRule:
  packageState: removed
  version: latest
instanceFilter:
  all: True

根據標籤在 VM 上安裝

如要在可用區中,為標籤為「env=prod」或「app=web」的所有 VM 安裝最新版作業套件代理程式,請使用下列政策說明:us-central1-a

agentsRule:
  packageState: installed
  version: latest
instanceFilter:
  inclusionLabels:
  - labels:
      env: prod
  - labels:
      app: web

指定多個納入或排除項目時,只要 VM 包含任一標籤,就會視為相符;也就是說,納入或排除的標籤集會視為邏輯 OR 運算,而非邏輯 AND 運算。labels:

根據其他標籤在 VM 中安裝

如要在 us-central1-a 區域中執行 Debian 11 的所有 VM 上安裝最新版 Ops Agent,但標籤為「env=prod」和「app=web6」的 VM 除外,請使用下列政策說明:

agentsRule:
  packageState: installed
  version: latest
instanceFilter:
  exclusionLabels:
  - labels:
      env: prod
      app: web6
  inventories:
  - osShortName: debian
    osVersion: '11'

如果您在單一 labels: 項目下指定多個鍵/值組合,以納入或排除虛擬機器,則虛擬機器必須包含所有標籤才會相符;也就是說,標籤會以邏輯 AND 運算 (而非邏輯 OR 運算) 方式比對。

根據作業系統在 VM 上安裝

如要在 us-central1-a 可用區中,所有執行 Debian 11 或 RHEL 7.* 的 VM 上安裝最新版作業套件代理程式 2,請使用下列政策說明:

agentsRule:
  packageState: installed
  version: 2.*.*
instanceFilter:
  inventories:
  - osShortName: rhel
    osVersion: '7.*'
  - osShortName: debian
    osVersion: '11'

Terraform

本節將說明 terraform-google-cloud-operations 存放區 examples 目錄中的範例。這些範例包含的檔案會為您設定 ops-agent-policy 模組所需的許多變數。您也可以複製及修改範例。舉例來說,以下範例都會安裝作業套件代理程式,但您可以修改這些範例,改為刪除代理程式。

如要瞭解如何套用或移除 Terraform 設定,請參閱基本 Terraform 指令

範例:ops_agent_policy_install_all

這個範例會在 Google Cloud 專案中所有符合資格的 VM 上,安裝最新版本的作業套件代理程式。

執行 terraform planterraform apply 指令時,系統會提示您輸入下列值:

  • PROJECT_ID:您的 Google Cloud 專案 ID

範例:ops_agent_policy_install_all_in_region

這個範例會在指定區域 (例如 us-west1) 中,為所有符合資格的 VM 安裝最新版作業套件代理程式。一個區域包含多個可用區,在本例中為 us-west-1aus-west-1bus-west-1c

執行 terraform planterraform apply 指令時,系統會提示您輸入下列值:

  • PROJECT_ID:您的 Google Cloud 專案 ID
  • REGION:要在 VM 上安裝代理程式的區域

範例:ops_agent_policy_install_all_in_zone

這個範例會在指定區域 (例如 us-central1-a) 中,為所有符合資格的 VM 安裝最新版作業套件代理程式。

執行 terraform planterraform apply 指令時,系統會提示您輸入下列值:

  • PROJECT_ID:您的 Google Cloud 專案 ID
  • ZONE:要在 VM 上安裝代理程式的可用區

排解 GA 代理程式政策問題

本節提供相關資訊,協助您解決 Ops Agent 的 GA 代理程式政策問題。您也可以參閱「確認服務專員政策狀態」一文。

ops-agents policy 指令失敗

如果 gcloud compute instances ops-agents policies 指令失敗,回應會顯示驗證錯誤。請按照錯誤訊息的建議修正指令引數和標記,藉此修正錯誤。

除了驗證錯誤,您也可能會看到指出下列情況的錯誤:

下列各節將詳細說明這些條件。

IAM 權限不足

如果 gcloud compute instances ops-agents policies 指令因權限錯誤而失敗,請確認您已按照「事前準備」一節的說明執行 prepare-for-ops-agents-policies.sh 指令碼,設定 OS 設定政策角色:

如要進一步瞭解 prepare-for-ops-agents-policies.sh 指令碼,請參閱「prepare-for-ops-agents-policies.sh 指令碼」。

OS Config API 未啟用

錯誤範例如下:

API [osconfig.googleapis.com] not enabled on project PROJECT_ID.
Would you like to enable and retry (this will take a few minutes)?
(y/N)?

您可以輸入 y 啟用 API,也可以執行「事前準備」一節所述的 prepare-for-ops-agents-policies.sh 指令碼,授予所有必要權限。如果在錯誤訊息的提示中輸入 y,您仍須執行 prepare-for-ops-agents-policies.sh 指令碼來設定所需權限。

如要確認專案已啟用 OS Config API,請執行下列指令:

gcloud services list --project PROJECT_ID | grep osconfig.googleapis.com

預期的輸出內容如下:

osconfig.googleapis.com    Cloud OS Config API

已有相同政策

錯誤範例如下:

ALREADY_EXISTS: Requested entity already exists

這項錯誤表示已有同名、專案 ID 和區域的政策。您可以使用 gcloud compute instances ops-agents policies describe 指令確認這項資訊。

政策不存在

錯誤範例如下:

NOT_FOUND: Requested entity was not found

這項錯誤可能表示政策從未建立、政策已刪除,或是指定的政策 ID 不正確。請確認 gcloud compute instances ops-agents policies describeupdatedelete 指令中使用的 POLICY_ID 對應至現有政策。如要取得代理程式政策清單,請使用 gcloud compute instances ops-agents policies list 指令。

政策已建立,但似乎沒有任何作用

OS Config 代理程式會部署至每個 Compute Engine 執行個體,管理 Logging 和 Monitoring 代理程式的套件。如果未安裝基礎 OS Config 代理程式,這項政策可能不會生效。

Linux

如要確認 OS Config 代理程式是否已安裝,請執行下列指令:

gcloud compute ssh instance-id \
    --project project-id \
    -- sudo systemctl status google-osconfig-agent

輸出範例如下:

    google-osconfig-agent.service - Google OSConfig Agent
    Loaded: loaded (/lib/systemd/system/google-osconfig-agent.service; enabled; vendor preset:
    Active: active (running) since Wed 2020-01-15 00:14:22 UTC; 6min ago
    Main PID: 369 (google_osconfig)
     Tasks: 8 (limit: 4374)
    Memory: 102.7M
    CGroup: /system.slice/google-osconfig-agent.service
            └─369 /usr/bin/google_osconfig_agent

Windows

如要確認 OS 設定代理程式是否已安裝,請執行下列步驟:

  1. 使用遠端桌面協定或類似工具連線至執行個體,並登入 Windows。

  2. 開啟 PowerShell 終端機,然後執行下列 PowerShell 指令。您不需要管理員權限。

    Get-Service google_osconfig_agent
    

輸出範例如下:

    Status   Name               DisplayName
    ------   ----               -----------
    Running  google_osconfig_a… Google OSConfig Agent

如果未安裝 OS Config 代理程式,您可能使用的作業系統不支援 VM 管理工具。如要瞭解各 Compute Engine 作業系統支援哪些 VM 管理器功能,請參閱 Compute Engine 的作業系統詳細資料文件。

如果作業系統支援 VM 管理員,您可以手動安裝 OS Config 代理程式

OS 設定代理程式已安裝,但未安裝作業套件代理程式

如要確認 OS 設定代理程式套用政策時是否發生錯誤,可以查看 OS 設定代理程式的記錄。您可以透過記錄檢視器,或使用 SSH 或遠端桌面協定檢查個別 Compute Engine 執行個體,完成這項作業。

如要在記錄檔探索工具中查看 OS 設定代理程式記錄,請使用下列篩選器:

resource.type="gce_instance"
logId(OSConfigAgent)

如要查看 OS 設定代理程式記錄,請執行下列操作:

CentOS、RHEL、
SLES、SUSE

執行下列指令:

gcloud compute ssh INSTANCE_ID \
    --project PROJECT_ID \
    -- sudo cat /var/log/messages \
       | grep "OSConfigAgent\|google-fluentd\|stackdriver-agent"

Debian、Ubuntu

執行下列指令:

gcloud compute ssh INSTANCE_ID \
    --project PROJECT_ID \
    -- sudo cat /var/log/syslog \
       | grep "OSConfigAgent\|google-fluentd\|stackdriver-agent"

Windows

  1. 使用遠端桌面協定或類似工具連線至執行個體,並登入 Windows。

  2. 開啟「事件檢視器」應用程式,然後依序選取「Windows 記錄」 >「應用程式」,並搜尋 Source 等於 OSConfigAgent 的記錄。

如果無法連線至 OS 設定服務,請務必按照「事前準備」一節所述,執行 prepare-for-ops-agents-policies.sh 指令碼來設定 OS 設定中繼資料。

如要確認 OS Config 中繼資料是否已啟用,請執行下列指令:

gcloud compute project-info describe \
    --project PROJECT_ID \
    | grep "enable-osconfig\|enable-guest-attributes" -A 1

預期的輸出內容如下:

- key: enable-guest-attributes
  value: 'TRUE'
- key: enable-osconfig
  value: 'TRUE'

Ops Agent 已安裝完畢,但無法正常運作

如要進一步瞭解如何偵錯作業套件代理程式問題,請參閱「排解作業套件代理程式問題」。

啟用 OS 設定代理程式的偵錯層級記錄

回報問題時,啟用 OS 設定代理程式的偵錯層級記錄功能可能會有幫助。

您可以設定 osconfig-log-level: debug 中繼資料,為 OS 設定代理程式啟用偵錯層級記錄。收集到的記錄包含更多資訊,有助於調查。

如要為整個專案啟用偵錯層級記錄功能,請執行下列指令:

gcloud compute project-info add-metadata \
    --project PROJECT_ID \
    --metadata osconfig-log-level=debug

如要為單一 VM 啟用偵錯層級記錄功能,請執行下列指令:

gcloud compute instances add-metadata INSTANCE_ID \
    --project PROJECT_ID \
    --metadata osconfig-log-level=debug

輔助指令碼

本節提供本文所述輔助指令碼的額外資訊:

prepare-for-ops-agents-policies.sh 指令碼

下載 prepare-for-ops-agents-policies.sh 指令碼後,您可以根據提供的引數,使用指令碼執行下列動作:

  • 為專案啟用 Cloud Logging API、Cloud Monitoring API 和 OS Config API。

    如果 OS Config API 尚未啟用,系統會以功能受限模式啟用該 API,這足以管理代理程式政策。詳情請參閱「定價」。

  • 將「記錄寫入者」(roles/logging.logWriter)和「監控指標寫入者」(roles/monitoring.metricWriter) Identity and Access Management 角色授予 Compute Engine 預設服務帳戶,讓代理程式能將記錄和指標寫入 Logging 和 Cloud Monitoring API。

  • 為專案啟用 OS 設定中繼資料,讓每個 VM 上的 OS 設定代理程式都能運作。

  • 將下列其中一個 IAM 角色授予非擁有者使用者、使用者或服務帳戶,以便建立及管理政策。專案擁有者有權建立及管理政策;其他使用者或服務帳戶必須獲得下列其中一個角色:

    執行指令碼時,您可以將 OSPolicyAssignment 角色指定為 admineditorviewer。指令碼會將這些值對應至 roles/osconfig.osPolicyAssignment* 角色名稱。

以下範例顯示指令碼的一些常見叫用方式。 詳情請參閱指令碼本身的註解。

如要啟用 API、將必要角色授予預設服務帳戶,並為專案啟用 OS Config 中繼資料,請執行下列指令碼:

bash prepare-for-ops-agents-policies.sh --project=PROJECT_ID

如要將其中一個 OS Config 角色授予專案中沒有擁有者 (roles/owner) 角色的使用者,請依下列方式執行指令碼:

bash prepare-for-ops-agents-policies.sh --project=PROJECT_ID \
  --iam-user=USER_EMAIL \
  --iam-policy-access=[admin|editor|viewer]

如要將其中一個 OS Config 角色授予非預設服務帳戶,請執行下列指令碼:

bash prepare-for-ops-agents-policies.sh --project=PROJECT_ID \
  --iam-service-account=SERVICE_ACCT_EMAIL \
  --iam-policy-access=[admin|editor|viewer]

diagnose_policies.sh 指令碼

只要提供專案 ID、Compute Engine 執行個體 ID、Compute Engine 可用區和代理程式政策 ID,diagnose_policies.sh 指令碼就會自動收集必要資訊,協助診斷政策問題:

  • OS 設定代理程式版本
  • 基礎 OS 政策指派作業
  • 適用於這個 Compute Engine 執行個體的 OS 政策指派項目
  • 這個 Compute Engine 執行個體的說明

如要叫用指令碼,請執行下列指令:

bash diagnose_policies.sh --project-id=PROJECT_ID \ 
  --gce-instance-id=INSTANCE_ID \
  --policy-id=POLICY_ID \
  --zone=ZONE

定價

gcloud compute instances ops-agents policies 指令是透過 VM 管理員OS 政策指派資源實作。如「事前準備」所述,prepare-for-ops-agents-policies.sh 指令碼會在功能受限模式 (OSCONFIG_B) 下設定 VM 管理員,足以建立及管理代理程式政策。在受限模式下使用 VM 管理員不須支付任何費用。

如果您已在全功能模式 (OSCONFIG_C) 下設定 VM 管理員,則可能會產生費用。