您可以使用 Google Cloud CLI 中的 gcloud compute instances ops-agents policies
指令群組或 ops-agent-policy
Terraform 模組,建立及管理代理程式政策。代理程式政策會使用 Compute Engine 中的 VM 管理員 工具套件來管理 OS 政策,自動部署及維護軟體設定 (例如 Ops 代理程式)。這些政策不適用於舊版 Monitoring 代理程式或舊版 Logging 代理程式。
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 模組建立代理程式政策前,請完成下列步驟:
如果您要使用
gcloud compute instances ops-agents policies
指令,且尚未安裝 Google Cloud CLI,請先安裝。如果您要使用 Terraform 模組,請執行下列步驟:
如要瞭解如何安裝 Terraform,請參閱「安裝及設定 Terraform」一文。Cloud Shell 已安裝 Terraform。
複製
terraform-google-cloud-operations
存放區,其中包含ops-agent-policy
模組:git clone https://github.com/terraform-google-modules/terraform-google-cloud-operations
下載並執行
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 的 osShortName
和 osVersion
欄位值,請使用下列指令:
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 的預期狀態。有效值為installed
和removed
。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'
如要瞭解如何找出作業系統值,請參閱「找出作業系統資訊」。
- VM 上的標籤 (納入或排除):
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」(作業系統政策) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「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 執行個體資訊主頁) 頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「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 plan
或 terraform apply
指令時,系統會提示您輸入下列值:
- PROJECT_ID:您的 Google Cloud 專案 ID
範例:ops_agent_policy_install_all_in_region
這個範例會在指定區域 (例如 us-west1
) 中,為所有符合資格的 VM 安裝最新版作業套件代理程式。一個區域包含多個可用區,在本例中為 us-west-1a
、us-west-1b
和 us-west-1c
。
執行 terraform plan
或 terraform apply
指令時,系統會提示您輸入下列值:
- PROJECT_ID:您的 Google Cloud 專案 ID
- REGION:要在 VM 上安裝代理程式的區域
範例:ops_agent_policy_install_all_in_zone
這個範例會在指定區域 (例如 us-central1-a
) 中,為所有符合資格的 VM 安裝最新版作業套件代理程式。
執行 terraform plan
或 terraform 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 設定政策角色:
-
OSPolicyAssignment 管理員
(
roles/osconfig.osPolicyAssignmentAdmin
): 提供 OS 政策指派作業的完整存取權。
-
OSPolicyAssignment 編輯者
(
roles/osconfig.osPolicyAssignmentEditor
): 允許使用者取得、更新及列出 OS 政策指派項目。
-
OSPolicyAssignment 檢視者
(
roles/osconfig.osPolicyAssignmentViewer
): 提供唯讀存取權,可取得及列出 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
describe
、update
或 delete
指令中使用的 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 設定代理程式是否已安裝,請執行下列步驟:
使用遠端桌面協定或類似工具連線至執行個體,並登入 Windows。
開啟 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
使用遠端桌面協定或類似工具連線至執行個體,並登入 Windows。
開啟「事件檢視器」應用程式,然後依序選取「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 管理員
(
roles/osconfig.osPolicyAssignmentAdmin
): 提供 OS 政策指派作業的完整存取權。
-
OSPolicyAssignment 編輯者
(
roles/osconfig.osPolicyAssignmentEditor
): 允許使用者取得、更新及列出 OS 政策指派項目。
-
OSPolicyAssignment 檢視者
(
roles/osconfig.osPolicyAssignmentViewer
): 提供唯讀存取權,可取得及列出 OS 政策指派項目。
執行指令碼時,您可以將 OSPolicyAssignment 角色指定為
admin
、editor
或viewer
。指令碼會將這些值對應至roles/osconfig.osPolicyAssignment*
角色名稱。-
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 管理員,則可能會產生費用。