為 Amazon EC2 Linux 執行個體開發 EC2Rescue 模組 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

為 Amazon EC2 Linux 執行個體開發 EC2Rescue 模組

模組是使用 YAML (資料序列化標準) 撰寫。模組的 YAML 檔案是由單一文件組成,代表模組及其屬性。

新增模組屬性

下表列出可用的模組屬性。

屬性

描述

name

模組的名稱。此名稱長度應小於或等於 18 個字元。

version

模組的版本編號。

title

模組的簡述標題。此值長度應小於或等於 50 個字元。

helptext

模組的延伸描述。各行長度應小於或等於 75 個字元。如果模組使用引數 (無論必要或選用),請以 helptext 值包含它們。

例如:

helptext: !!str | Collect output from ps for system analysis Consumes --times= for number of times to repeat Consumes --period= for time period between repetition

placement

應該執行模組的階段。支援的值為:

  • prediagnostic

  • run

  • postdiagnostic

語言

撰寫模組程式碼的語言。支援的值為:

  • bash

  • Python

注意

Python 程式碼必須與 Python 2.7.9+ 和 Python 3.2+ 都相容。

remediation

指出模組是否支援修補。支援的值為 TrueFalse

如果無此屬性,模組將預設為 False,讓其成為不支援修補之模組的選用屬性。

content

完整的指令碼程式碼。

限制條件

包含限制值的物件名稱。

domain

說明模組如何分組或分類的描述項。包含的模組集使用下列網域:

  • application

  • net

  • os

  • performance

class

模組執行的任務類型描述項。包含的模組集使用下列類別:

  • collect (收集程式的輸出)

  • diagnose (根據條件集通過/失敗)

  • gather (複製檔案並寫入特定檔案)

distro

此模組支援的 Linux 發行版本清單。包含的模組集使用下列發行版本:

  • alami (Amazon Linux)

  • rhel

  • ubuntu

  • suse

必要

模組從 CLI 選項使用的必要引數。

選擇性

模組可以使用的選用引數。

software

在模組中使用的軟體可執行檔。此屬性旨在指定非預設安裝的軟體。適用於 Linux 的 EC2Rescue 邏輯在執行模組前會確保這些程式存在並可執行。

package

可執行檔的來源軟體套件。此屬性旨在提供套件有關軟體的延伸詳細資料,包括下載或取得未來資訊的 URL。

sudo

指出是否一定要有根存取才能執行模組。

您不必在模組指令碼中實作 sudo 檢查。如果此值為 true,則當執行使用者有根存取時,適用於 Linux 的 EC2Rescue 邏輯只會執行模組。

perfimpact

指出模組是否會顯著影響其執行所在環境的效能。如果此值為 true 且無 --perfimpact=true 引數,則跳過模組。

parallelexclusive

指定需要互斥的程式。例如,所有指定 "bpf" 的模組都依序執行。

新增環境變數

下表列出可用的環境變數。

環境變數 描述

EC2RL_CALLPATH

ec2rl.py 的路徑。此路徑可用以尋找 lib 目錄及使用經過廠商處理的 Python 模組。

EC2RL_WORKDIR

診斷工具的主要 tmp 目錄。

預設值:/var/tmp/ec2rl

EC2RL_RUNDIR

存放所有輸出的目錄。

預設值:/var/tmp/ec2rl/<date&timestamp>

EC2RL_GATHEREDDIR

放置所收集模組資料的根目錄。

預設值:/var/tmp/ec2rl/<date&timestamp>/mod_out/gathered/

EC2RL_NET_DRIVER

執行個體上按字母順序第一個非虛擬網路界面使用的驅動程式。

範例:

  • xen_netfront

  • ixgbevf

  • ena

EC2RL_SUDO

如果適用於 Linux 的 EC2Rescue 執行為根,即為 true;否則為 false。

EC2RL_VIRT_TYPE

如執行個體中繼資料所提供的虛擬化類型。

範例:

  • default-hvm

  • default-paravirtual

EC2RL_INTERFACES

系統上的界面列舉清單。值是包含名稱的字串,例如 eth0eth1 等等。這是透過 functions.bash 產生的,僅供其來源模組使用。

使用 YAML 語法

建構您的模組 YAML 檔案時,應該注意下列各點:

  • 三個連字號 (---) 表示文件的明確開頭。

  • 從資料串流建立物件時,!ec2rlcore.module.Module 標籤會告訴 YAML 剖析器要呼叫哪個建構函數。您可於 module.py 檔案中找到建構函數。

  • !!str 標籤會告訴 YAML 剖析器不要嘗試判斷資料類型,改將內容解譯為字串常值。

  • 管道字元 (|) 會告訴 YAML 剖析器此值為常值型純量。在本例中,剖析器包含所有空格。這對模組而言很重要,因為會保留縮排和換行字元。

  • YAML 標準會縮排兩格,如下列範例所示。請確定您的指令碼保持標準縮排 (例如,Python 四格),然後在模組檔案中將完整內容縮排兩格。

範例模組

範例一 (mod.d/ps.yaml):

--- !ec2rlcore.module.Module # Module document. Translates directly into an almost-complete Module object name: !!str ps path: !!str version: !!str 1.0 title: !!str Collect output from ps for system analysis helptext: !!str | Collect output from ps for system analysis Requires --times= for number of times to repeat Requires --period= for time period between repetition placement: !!str run package: - !!str language: !!str bash content: !!str | #!/bin/bash error_trap() { printf "%0.s=" {1..80} echo -e "\nERROR: "$BASH_COMMAND" exited with an error on line ${BASH_LINENO[0]}" exit 0 } trap error_trap ERR # read-in shared function source functions.bash echo "I will collect ps output from this $EC2RL_DISTRO box for $times times every $period seconds." for i in $(seq 1 $times); do ps auxww sleep $period done constraint: requires_ec2: !!str False domain: !!str performance class: !!str collect distro: !!str alami ubuntu rhel suse required: !!str period times optional: !!str software: !!str sudo: !!str False perfimpact: !!str False parallelexclusive: !!str