為 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

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

package

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

sudo

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

您不必在模組指令碼中實作 sudo 檢查。如果值為 true,那麼 EC2Rescue for Linux 邏輯僅在執行中的使用者具有 root 存取權限時才會執行模組。

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