いい感じにサーバの構成情報を出力してくれるツール、ohaiを使ってみた

サーバの構成情報の収集にはdmidecode、uname、/proc/*などなど、いろいろ駆使してると思うのですが
覚えるの大変・・・出力のパースめんどくさい・・・複数OS使ってる場合は特に・・・

というわけでいい感じにサーバの構成情報を出力してくれるツール、ohaiを紹介


(実はChefっていう構成管理ツールで内部的に使うためのものなのですが単体でも利用可能です)
http://wiki.opscode.com/display/chef/Ohai

インストール

Rubyで書かれたツールなのでgemで

[root@test01 ohai]# gem install ohai

※うまくインストールできない場合はgemをアップデートしてください。ruby-develも必要

実行例(コマンド)

ohaiコマンドを実行するとJSON形式でサーバの情報が出力されます

HPサーバ上のCentOS
[root@test01 ohai]# ohai
{
  "dmi": {
    "system": {
      "manufacturer": "HP",
      "product_name": "ProLiant DL360 G5",
      "serial_number": "CN77XXXXXX      "
...
  "kernel": {
    "machine": "x86_64",
    "name": "Linux",
    "os": "GNU/Linux",
    "version": "#1 SMP Wed Jun 23 18:42:01 JST 2010",
    "release": "2.6.18.8"
...
  "platform_version": "5.2",
  "platform": "centos",
...
  "cpu": {
    "real": 2,
    "total": 4,
    "0": {
...
      "model_name": "Intel(R) Xeon(R) CPU            5140  @ 2.33GHz",
...
  "memory": {
...
    "total": "4046944kB",
    "free": "40408kB",
...
    "swap": {
      "total": "2031608kB",
      "free": "1921044kB",
      "cached": "58584kB"
    },
...
  "filesystem": {
    "/dev/cciss/c0d0p1": {
      "kb_available": "71394",
      "mount": "/boot",
      "percent_used": "26%",
      "kb_used": "24473",
      "kb_size": "101086"
    },
...
  "languages": {
    "perl": {
      "archname": "x86_64-linux-thread-multi",
      "version": "5.8.8"
    },
...

HW、OS、言語などなど

VMWare Player上のDebian

仮想化関連の情報も取得できます

root@debian6:~# ohai
...
      "vendor": "Phoenix Technologies LTD",
...
      "manufacturer": "VMware, Inc.",
      "wake_up_type": "Power Switch",
      "product_name": "VMware Virtual Platform"
...
  "virtualization": {
    "role": "guest",
    "system": "vmware"
  },
...
  "platform": "debian"
  "platform_version": "6.0.2",
...
KVMゲストだとこんな感じ
[root@vm01 ~]# ohai
...
      "vendor": "QEMU",
...
      "manufacturer": "Red Hat",
      "product_name": "KVM",
      "serial_number": "Not Specified"
...
  "virtualization": {
    "role": "guest",
    "system": "kvm"
  },
...

実行例(プログラム)

JSONをパースしてもいいのですが(ohai入れるとRubyのYajlってライブラリがついてきます)
rubyでライブラリとして扱うこともできます。
※HPサーバだったらhpacucliを更新する例

#!/usr/bin/ruby
require 'rubygems'
require 'ohai'

ohai = Ohai::System.new
ohai.all_plugins

if ohai[:dmi][:system][:manufacturer] == 'HP'
  puts "HP!!!"
  system("yum -y update hpacucli")
end

バグ

Ruby1.8.7と現状gemでインストールされるohai0.6.4でdmiやカーネル等、いろいろ情報抜けがありました。
デバッグオプションをつけるとこんなエラーが

[root@test01 lib]# ohai -l debug
...
[Sat, 17 Sep 2011 19:03:58 +0900] DEBUG: Plugin kernel threw exception #<NameError: uninitialized constant Ohai::Mixin::Command::StringIO> /usr/lib/ruby/gems/1.8/gems/ohai-0.6.4/lib/ohai/mixin/command.rb:249:in `popen4'
...

バグっぽいです。
https://tickets.opscode.com/browse/OHAI-291


0.6.6で解決済みとのことで早くアップデートしてもらいたいところですが、
とりあえずohai.rbにrequire 'stringio'を追加すれば正常に動きます
(/usr/lib/ruby/gems/1.8/gems/ohai-0.6.4/libあたりにあります)

require 'ohai/version'
require 'ohai/config'
require 'ohai/system'

#追加
require 'stringio'

とりあえず

プラグインで機能追加もできそう。
なかなか便利そうなツールなのでChef導入への布石も兼ねてちょっと使ってみようと思います。