#この文書はなに?
http://qiita.com/advent-calendar/2014/softlayer
http://qiita.com/advent-calendar/2014/softlayer2
に参加するのに書いたものです。是非、他のURLもご参照ください!
xenstoreって?
xenstoreは、xenstored を通じて、dom0とdomU間で情報をやり取りするための仕組みです。
それが SoftLayer にどう関係するの?
SoftLayerで利用されているハイパーバイザーは、XenServer です。各ゲストVMには、xentools がインストール済みの状態で引き渡されますが、この中に、xenstoreコマンドが含まれます。
この xenstoreコマンドを利用すると、ハイパーバイザー側の情報を少し引っ張ってこれるので、どんな情報が取れるのかをご紹介。
xenstoreコマンドの実際
私が知らないだけだと思いますが、ゲスト側から叩く場合には、あまり参考になるドキュメントが見当たらないのですが、下記のように実行することで、いくつか情報を得ることができます。
VMのuuidを知る
[root@vm ~]# xenstore-read vm
/vm/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ここで表示される xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
が XenServer上での管理用の UUID になります。
VM名を知る
先ほどのコマンドの結果をそのまま xenstore-ls の引数として指定します。
[root@vm ~]# xenstore-ls /vm/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
uuid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
name = "999999-labs.kunitake.org"
ここで表示される name が、XenServer上で設定されている仮想マシン名になります。
先頭の6桁の数字に、SL をつけると、SoftLayerでのユーザ名になります。
なので、SoftLayerでは、仮想マシン名を
6桁の数字(アカウント番号)
+ -
+ 最初に設定したホスト名
で管理しているようですね。なお、途中でSoftLayerの管理画面やゲストOS側でホスト名を変更しても、XenServer上でのVM名は変わらないようです。
VMに割り当てられたCPU個数を知る
[root@vm ~]# xenstore-ls cpu
0 = ""
availability = "online"
この場合だと、1つです。
VMに割り当てられたメモリ情報を知る
XenServerは、メモリをオーバコミットする仕組みを持ってますが、ちゃんと 1GBしっかりと割り当てられていることが確認できます。
[root@vm ~]# xenstore-ls memory
initial-reservation = "1058816"
static-max = "1048576"
target = "1048576"
dynamic-min = "1048576"
dynamic-max = "1048576"
memory-offset = "0"
VMのデバイス情報を知る
xenstore-ls device
を実行することで、そのVMにアタッチされている Disk/NIC情報が得られます。
[root@vm ~]# xenstore-ls device
vbd = ""
51712 = ""
backend = "/local/domain/0/backend/vbd/67/51712"
protocol = "x86_64-abi"
state = "4"
backend-id = "0"
device-type = "disk"
virtual-device = "51712"
ring-ref = "8"
event-channel = "8"
51728 = ""
backend = "/local/domain/0/backend/vbd/67/51728"
protocol = "x86_64-abi"
state = "4"
backend-id = "0"
device-type = "disk"
virtual-device = "51728"
ring-ref = "9"
event-channel = "9"
vif = ""
0 = ""
backend = "/local/domain/0/backend/vif/67/0"
backend-id = "0"
state = "4"
handle = "0"
mac = "06:1e:9f:XX:XX:XX"
disconnect = "0"
protocol = "x86_64-abi"
tx-ring-ref = "768"
rx-ring-ref = "769"
event-channel = "10"
request-rx-copy = "1"
feature-rx-notify = "1"
feature-sg = "1"
feature-gso-tcpv4 = "1"
1 = ""
backend = "/local/domain/0/backend/vif/67/1"
backend-id = "0"
state = "4"
handle = "1"
mac = "06:99:cf:YY:YY:YY"
disconnect = "0"
protocol = "x86_64-abi"
tx-ring-ref = "1280"
rx-ring-ref = "1281"
event-channel = "11"
request-rx-copy = "1"
feature-rx-notify = "1"
feature-sg = "1"
feature-gso-tcpv4 = "1"
OS情報を知る
下記コマンドで、XenServerから見えているゲストOSのメモリ、OS、uptime などの情報が得られます。
[root@vm ~]# xenstore-ls data
meminfo_total = "1016228"
meminfo_free = "859048"
os_name = "CentOS release 6.6 (Final)"
os_majorver = "6"
os_minorver = "6"
os_uname = "2.6.32-504.1.3.el6.x86_64"
os_distro = "centos"
updated = "Sun Nov 30 19:44:29 CST 2014"
XenServerとしてサポートされている機能を知る
知ったところで意味ないですが
[root@vm ~]# xenstore-ls control
platform-feature-multiprocessor-suspend = "1"
feature-balloon = "1"
XenToolsのバージョン情報およびアドレス情報を知る
ゲストOSにインストールされたXenToolsのバージョン情報と、ホスト側に見えているゲストOSのIPアドレス(IPv4/IPv6)の情報を知ることができます。
attr = ""
PVAddons = ""
MajorVersion = "6"
MinorVersion = "2"
MicroVersion = "0"
BuildVersion = "83676"
Installed = "1"
eth0 = ""
ip = "192.0.2.1"
ipv6 = ""
0 = ""
addr = "fe80::41e:9fff:feXX:XXXX"
eth1 = ""
ip = "203.0.113.1"
ipv6 = ""
0 = ""
addr = "fe80::499:cfff:feYY:YYYY"
コンソール情報を知る
これも知ったところで意味ないですが、SoftLayerの管理画面のコンソールがどう動いているか、ポート番号に思いを馳せることができます。
[root@vm ~]# xenstore-ls console
port = "2"
ring-ref = "16784082"
tty = "/dev/pts/1"
vnc-port = "5902"
tc-port = "9502"
domidを知る
ゲストOSが稼働しているホスト上内でのみユニークな ID になります。再起動するたびに変わったりします。
[root@vm ~]# xenstore-read domid
67
unique-domain-id を知る
多分プール内でユニークな domid。これも再起動のたびに変わる値です。
[root@vm ~]# xenstore-read unique-domain-id
yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
VMのUUIDとは異なります。
起動オプション
xenstoreではないですが
[root@vm ~]# cat /proc/cmdline
ro root=UUID=AAAAAAA-BBBB-XXXX-YYYY-ZZZZZZZZZZZZ console=hvc0 SYSFONT=latarcyrheb-sun16 LANG=en_US.UTF-8 KEYTABLE=us
BIOS関連
[root@vm ~]# xenstore-ls bios-strings
bios-vendor = "Xen"
bios-version = ""
system-manufacturer = "Xen"
system-product-name = "HVM domU"
system-version = ""
system-serial-number = ""
hp-rombios = ""
oem-1 = "Xen"
oem-2 = "MS_VM_CERT/SHA1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
その他もろもろ
こんな感じでガッツリ、いままで上に挙げたような自身のゲストOSに関する情報が取得できます。
[root@vm ~]# xenstore-ls /local/domain/`xenstore-read domid`
vm = "/vm/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
vss = "/vss/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
name = "999999-labs.kunitake.org"
cpu = ""
0 = ""
availability = "online"
memory = ""
initial-reservation = "1058816"
static-max = "1048576"
target = "1048576"
dynamic-min = "1048576"
dynamic-max = "1048576"
memory-offset = "0"
device = ""
vbd = ""
51712 = ""
backend = "/local/domain/0/backend/vbd/67/51712"
protocol = "x86_64-abi"
state = "4"
backend-id = "0"
device-type = "disk"
virtual-device = "51712"
ring-ref = "8"
event-channel = "8"
51728 = ""
backend = "/local/domain/0/backend/vbd/67/51728"
protocol = "x86_64-abi"
state = "4"
backend-id = "0"
device-type = "disk"
virtual-device = "51728"
ring-ref = "9"
event-channel = "9"
vif = ""
0 = ""
backend = "/local/domain/0/backend/vif/67/0"
backend-id = "0"
state = "4"
handle = "0"
mac = "06:1e:9f:XX:XX:XX"
disconnect = "0"
protocol = "x86_64-abi"
tx-ring-ref = "768"
rx-ring-ref = "769"
event-channel = "10"
request-rx-copy = "1"
feature-rx-notify = "1"
feature-sg = "1"
feature-gso-tcpv4 = "1"
1 = ""
backend = "/local/domain/0/backend/vif/67/1"
backend-id = "0"
state = "4"
handle = "1"
mac = "06:99:cf:YY:YY:YY"
disconnect = "0"
protocol = "x86_64-abi"
tx-ring-ref = "1280"
rx-ring-ref = "1281"
event-channel = "11"
request-rx-copy = "1"
feature-rx-notify = "1"
feature-sg = "1"
feature-gso-tcpv4 = "1"
error = ""
drivers = ""
control = ""
platform-feature-multiprocessor-suspend = "1"
feature-balloon = "1"
attr = ""
PVAddons = ""
MajorVersion = "6"
MinorVersion = "2"
MicroVersion = "0"
BuildVersion = "83676"
Installed = "1"
eth0 = ""
ip = "10.66.201.130"
ipv6 = ""
0 = ""
addr = "fe80::41e:9fff:feXX:XXXX"
eth1 = ""
ip = "119.81.117.2"
ipv6 = ""
0 = ""
addr = "fe80::499:cfff:feYY:YYYY"
data = ""
meminfo_total = "1016228"
meminfo_free = "812424"
os_name = "CentOS release 6.6 (Final)"
os_majorver = "6"
os_minorver = "6"
os_uname = "2.6.32-504.1.3.el6.x86_64"
os_distro = "centos"
updated = "Sun Nov 30 20:22:32 CST 2014"
messages = ""
platform = ""
viridian = "true"
nx = "false"
acpi = "true"
apic = "true"
pae = "true"
vcpu = ""
number = "1"
current = "1"
bios-strings = ""
bios-vendor = "Xen"
bios-version = ""
system-manufacturer = "Xen"
system-product-name = "HVM domU"
system-version = ""
system-serial-number = ""
hp-rombios = ""
oem-1 = "Xen"
oem-2 = "MS_VM_CERT/SHA1/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
unique-domain-id = "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
domid = "67"
store = ""
port = "1"
ring-ref = "33752022"
serial = ""
0 = ""
limit = "65536"
console = ""
port = "2"
ring-ref = "16784082"
tty = "/dev/pts/1"
vnc-port = "5902"
tc-port = "9502"
vncterm-pid = "11509"
で、なんの役に立つの?
いや、特に役には立たないですねぇ…大昔、XenServerではゲストOS側から稼働しているホスト名が取得できた気がしてたんですが、もしSoftLayerでそれができるなら、収容先が変わった、変わらないが見えるかと思ったんですが、ちょっと調べたかぎりでは無理そう。残念。