はじめに
FRAME Studio に必要なのは、消えてしまう端末表示ではなく、作業セッションの短い記録です。この独立したインスタンスではリソースサンプラーは完成済みです。観測を明確な警告に変換し、以前のオペレーター記録を失わずに追記します。
測定値を分類する、完全な行を記録する、準備済みの測定処理を繰り返す、という三つの関数を実装します。Bash の変数、関数、条件分岐、ループの基礎が前提です。指標は最初のラボで説明していますが、そのファイルは不要です。しきい値はこの教材のローカルな方針であり、汎用の本番推奨値ではありません。所要時間は著者の見積もりです。
各測定値に明確な状態を付ける
このステップでは、割合としきい値を、再利用可能な警告判断に変えます。
Terminal から始めます。この独立したインスタンスには、動作する metrics.sh がすでにあります。以前のファイルは不要です。作業場所に入ります。
cd /home/labex/project/resource-watch
現在の値を観察します。
bash snapshot.sh
四つのタブ区切りフィールドは、UTC タイムスタンプ、CPU 非アイドル、メモリ逼迫度、対象ファイルシステム使用率です。本番のマシン群ではなく、このインスタンスを表します。リソースの警告は写真の書き出し失敗を証明しません。
cat は方針を変更せずに表示します。
cat policy.sh
三つのしきい値と、対象・ログの完全なパスを読みます。この単元では CPU とメモリが 80、ディスクが 50 です。これらは教材用の設定です。ルールは 各測定値が自身のしきい値以上なら WARN、それ以外は OK です。等しい場合も重要です。提供された方針とサンプラーを保持してください。
nano で未完成の関数を開きます。
このラボは、準備済みで動作する測定関数ファイルから新しく始まります。前の測定ファイルをコピーせず、次のコマンドで指定される監視関数ファイルを編集してください。方針の三つの LIMIT 値は整数の割合、TARGET は観測ディレクトリ、LOG は履歴の保存先です。方針を読んでも内容は変わりません。
nano monitor-functions.sh
classify だけを次に置き換えます。
classify() {
if (( $1 >= $2 )); then
echo WARN
else
echo OK
fi
}
第 1 引数は測定値、第 2 引数はしきい値です。((...)) は数値を比較し、>= は等しい場合も含めます。両方の分岐で状態を表示します。正常値も無出力ではなく OK です。Ctrl+O、Enter、Ctrl+X で保存します。
source は定義を読み込みます。対話シェルは Zsh なので、テストは bash -c 内で実行します。単一引用符は Bash 用のコマンドをそのまま保持します。
bash -c 'source ./monitor-functions.sh; classify 79 80; classify 80 80; classify 81 80'
OK
WARN
WARN
指定された測定値はルールのテストであり、現在の CPU 測定値ではありません。常に WARN または OK を返す関数は、今日のワークステーションが偶然その状態でも誤りです。
完全な監視レコードを追記する
このステップでは、履歴を置き換えずに、すべての測定値とそれぞれ独立した状態を記録します。
Terminal の /home/labex/project/resource-watch に留まります。まずオペレーター履歴を読みます。
cat history.tsv
元の行は、先頭にバイト単位でそのまま保持する必要があります。history.tsv は手で埋める報告書ではなく、実際の成果物です。新しい各行には、UTC タイムスタンプ、CPU、メモリ、ディスク、続いて CPU、メモリ、ディスクの各状態という順で、タブ区切りの七つのフィールドを含めます。
関数を開きます。
nano monitor-functions.sh
record_sample だけを置き換えます。
record_sample() {
local stamp=$1 cpu=$2 memory=$3 disk=$4 logfile=$5
printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \
"$stamp" "$cpu" "$memory" "$disk" \
"$(classify "$cpu" "$CPU_LIMIT")" \
"$(classify "$memory" "$MEMORY_LIMIT")" \
"$(classify "$disk" "$DISK_LIMIT")" >> "$logfile"
}
printf は各 %s を置き換え、\t はタブ、\n は改行を書き込みます。行末のバックスラッシュは同じコマンドを次行に続けます。$(...) は関数の出力を取得します。二重引用符は各値と、空白を含むログパスを保持します。>> は追記で、> を使うと以前の記録を壊します。Ctrl+O、Enter、Ctrl+X で保存します。
別の練習ファイルで、用意されたレコードをテストします。source ./policy.sh はこの Bash プロセスにしきい値を読み込みます。別の端末や、後の bash -c 呼び出しに自動では残りません。
bash -c 'source ./policy.sh; source ./monitor-functions.sh; record_sample 2026-01-02T03:04:05Z 10 85 20 practice.tsv'
cat practice.tsv
2026-01-02T03:04:05Z 10 85 20 OK WARN OK
メモリ警告は 85 と 80 を比較したもので、ほかの状態まで WARN にしません。繰り返すと練習用の行が追加されます。history.tsv に例を加えないでください。このファイルは実測専用です。
練習例の七フィールドを左から読みます。
| フィールド | 例 | 意味 |
|---|---|---|
| 1 | 2026-01-02T03:04:05Z | UTC 時刻。Z は UTC を表す |
| 2 | 10 | CPU 非アイドル率 |
| 3 | 85 | メモリ逼迫率 |
| 4 | 20 | 対象ファイルシステム使用率 |
| 5 | OK | CPU 10 は自身のしきい値 80 未満 |
| 6 | WARN | メモリ 85 は自身のしきい値 80 以上 |
| 7 | OK | ディスク 20 は自身のしきい値 50 未満 |
Terminal ではタブが幅の違う空白に見えることがあります。関数が出力する本物のタブを保持し、実際の履歴を手で空白揃えしないでください。元のオペレーター行は用意された背景なので、日付が古いのは正常です。この入力例を書き込むのは別の練習ファイルだけです。
回数を限定して観測し履歴を保持する
このステップでは、実測を繰り返し、結果を確認し、進捗を失わず再実行します。
Terminal の /home/labex/project/resource-watch に留まります。準備済みの monitor.sh は capture_once target logfile を提供します。新しい観測を取り、記録関数を呼び、保存した行を表示します。run_monitor はパスをそのまま渡し、要求された回数だけ処理を呼ぶ必要があります。各測定は新しい 1 秒間の CPU 区間を含みます。これは回数を限定した観測であり、精密なスケジューラーではありません。
nano monitor-functions.sh
関数だけを次に置き換えます。
run_monitor() {
local count=$1 target=$2 logfile=$3
local n
for ((n = 0; n < count; n++)); do
capture_once "$target" "$logfile"
done
}
算術ループは 0 から始まり、n が count 未満の間続き、測定ごとに n を増やします。引用符は両パスを保持します。同等の while ループも有効です。Ctrl+O、Enter、Ctrl+X で保存します。
三回の実測を実行します。
bash monitor.sh 3
プロンプトに戻る前に三行表示されます。UTC タイムスタンプは前のものより後になる必要があります。実際の値は変動し、通常の実行で警告が出ないこともあります。プログラムは 1〜30 回を受け付けます。長い観測では Ctrl+C で前面のスクリプトを止め、追記済みの行を保持できます。ほかのプロセスを終了する必要はありません。
結果を読み、行数を数えます。wc -l は改行で終わる行を数えます。
cat history.tsv
wc -l history.tsv
上記の最初の実行後は、元の一行と新しい三行で計四行です。追加測定をした場合は多くなります。有効な観測は保持してください。
一回の測定で続けます。
bash monitor.sh 1
wc -l history.tsv
合計が一つ増えます。記録関数は置き換えず追記するので、安全に繰り返せます。各状態を対応する測定値と policy.sh のしきい値に照らして確認します。
よくある入力エラーを意図的に試します。0 は測定前に拒否されます。
bash monitor.sh 0
Use a sample count from 1 to 30.
これは想定された失敗で、終了状態は 2、履歴は変わりません。VM をリセットしたり履歴を編集したりせず、有効な回数で復帰します。
bash monitor.sh 1
新しい行が追記されます。準備済みのサンプラーは、不完全な指標も拒否します。もっともらしく見える空の観測を記録することはありません。
結果の確認
- 元のオペレーター行が先頭に残り、その後に新しい観測が続きます。
- 最初の実行で三行、続けて一回測定すると一行増えます。コマンドを繰り返して有効な行が増えてもかまいません。
- まず三つの割合を読み、それぞれ自身のしきい値と比較します。三つとも OK でも正常です。警告を出すために負荷を作ったりファイルを消したりする必要はありません。
- 各測定は新しい CPU 区間を待ちます。短い待ち時間は正常なので、測定中に Enter を連打しないでください。プロンプトが戻れば回数を限定した実行は終了です。Terminal を閉じても連続監視が動き続けるわけではありません。
まとめ
等しい場合も含む警告ルールを実装し、独立した三つの状態を含む完全なレコードを追記し、履歴を保ちながら実測を繰り返しました。短い観測を実行し、その証拠を読み、続行できます。独立したチャレンジでは、教わった道具と契約を使い、対象と方針を変更します。



