Quantcast
Channel: しのぶら!!! » sawanoboly
Viewing all articles
Browse latest Browse all 15

SmartOSの各種情報を取得する

$
0
0

JoyentのSmartOSで各種情報を取得するツールの案内。

smartos-blue

ちなみにここで紹介しているツールはbase64の1.8.xで確認、1.7以前のSmartOSには多分無いです。

sm-summaryを叩く

以前はイマイチ環境情報を取りにくかったSmartOSですが、sm-*コマンドの実装により相当扱いやすくなっています。

そのひとつがsm-summary

$ sm-summary 
* Gathering SmartMachine summary..
SM UUID             0ec33864-49ce-4674-bf01-976b8e771cdc
SM ID               246
Hostname            test01.example.com
SmartOS build       joyent_20120614T001014Z 
Image               base64 1.8.4
Pkgsrc              http://pkgsrc.joyent.com/sdc6/2012Q2/x86_64/All
Processes           31
Memory (RSS) Cap    1024M
Memory (RSS) Used   128M
Memory (RSS) Free   896M
Swap Cap            1024M
Swap Used           101M
/tmp Used           12K
Disk Quota          31G
% Disk Used         13%

準仮想のコンテナにありがちな、リソース上限と現状リソースの相関がつかみにくいといった悩みが結構解消します。

sm-summaryスクリプトの中身

sm-summaryコマンドはただのBashスクリプトなので中身を確認します、

#!/usr/bin/bash
#
# Provides SmartMachine summary of information.
# Joyent 2012.

PATH="/opt/local/bin:/opt/local/gnu/bin:/opt/local/sbin:/usr/bin:/usr/sbin";

echo "* Gathering SmartMachine summary..";
SM_UUID=$(zonename);
SM_ID=$(zoneadm list -p | awk -F: '{ print $1 }');
SM_HOSTNAME=$(hostname);
[[ -f /etc/product ]] && SM_IMAGE=$(cat /etc/product | grep Image | awk '{ print $2 " " $3 }') || SM_IMAGE="NA";
[[ -f /etc/product ]] && SM_IMAGE=${SM_IMAGE:-$(cat /etc/product | grep Dataset | awk '{ print $2 " " $3 }')} || SM_IMAGE="NA";
[[ -f /etc/product ]] && SM_IMAGE=${SM_IMAGE:-NA} || SM_IMAGE="NA";
[[ -f /opt/local/etc/pkg_install.conf ]] && SM_PKGSRC=$(cat /opt/local/etc/pkg_install.conf | awk -F= '{ print $2 }') || SM_PKGSRC="Not installed";
SM_BUILD=$(uname -v);
SM_NPROCS=$(kstat -p -n nprocs_zone_${SM_ID} -s usage | awk '{ print $2 }');
SM_MEMCAP=$(kstat -p -c zone_caps -n lockedmem_zone_${SM_ID} -s value | awk '{print $2/1024/1024 }');
SM_MEMUSED=$(prstat -Z -s rss 1 1 | awk -v zone=${SM_UUID} '$8 ~ zone { printf("%d", $4 ) }');
SM_MEMFREE=$(echo "${SM_MEMCAP}-${SM_MEMUSED}" | bc);
SM_SWAPCAP=$(kstat -p -c zone_caps -n swapresv_zone_${SM_ID} -s value | awk '{ print $2/1024/1024 }');
SM_SWAPUSED=$(kstat -p -c zone_caps -n swapresv_zone_${SM_ID} -s usage | awk '{ printf("%d", $2/1024/1024) }');
SM_TMPUSED=$(du -hs /tmp | awk '{ print $1 }');
SM_DISKQUOTA=$(df -h / | tail -1 | awk '{ print $2 }');
SM_DISKUSED=$(df -P -h / | tail -1 | awk '{ print $5 }');

cat << EOF
SM UUID             ${SM_UUID}
SM ID               ${SM_ID}
Hostname            ${SM_HOSTNAME}
SmartOS build       ${SM_BUILD} 
Image               ${SM_IMAGE}
Pkgsrc              ${SM_PKGSRC}
Processes           ${SM_NPROCS}
Memory (RSS) Cap    ${SM_MEMCAP}M
Memory (RSS) Used   ${SM_MEMUSED}M
Memory (RSS) Free   ${SM_MEMFREE}M
Swap Cap            ${SM_SWAPCAP}M
Swap Used           ${SM_SWAPUSED}M
/tmp Used           ${SM_TMPUSED}
Disk Quota          ${SM_DISKQUOTA}
% Disk Used         ${SM_DISKUSED}
EOF

結構泥臭い事をやっているという印象と共に、なるほどこうやって各種情報が取得できるのだなあと実感します。

マシンのUUIDなんかは、zoneadm list -p | awk -F: '{ print $1 }' とすればKVSのような感覚で取得できる。
知ってればできるけど、知らなきゃどうすりゃいいのか全然分からない事のリファレンスにもなって一石二鳥な感じ。

SmartOS

テスト用とはいえ、httpやamqp等いくらかのデーモンを上げていてもMemory (RSS) Used:128Mぽっち。
このリソース効率の良さは上手く活用するとサービスプロバイダ、ユーザともに案外魅力があるものです。

よく見受けられるOSに使われているような感覚の環境構築ではなく、なるべくスマートに使いこなしたいですね。


Viewing all articles
Browse latest Browse all 15

Trending Articles