ohai+ConsulでIT資産管理を便利にしよう

はじめまして。SEの香取です。

データホテルの「現場の工夫」などの情報をブログやイベントを通じて、提供していきたく思っています。こうした情報が、皆様にとって少しでもお役に立ちますと幸いです。

Ohai + Consul KVS

管理するサーバの台数が増えてくると、Excel などで作った台帳では更新が間に合わなくなってきます。更新を忘れて台帳とのズレが生じてしまい・・・などを防ぐために、台帳の動的な更新が出来ると良いですね。

今回は ohaiConsul の KVS 機能を利用して、管理対象の複数のサーバから台帳の元となるデータを取得するところまでを行います。取得したデータの利用、consul の別機能を使ったケーススタディについても、次回以降に書いて行く予定です。

概要

ohai で取得したデータを Consul の KVS に登録し、他のアプリケーション(サーバ管理台帳など)から利用出来る状態にします。

img-20150610-2

前提条件

  • Consulクラスタが既に組まれている。
  • クラスタ内の各サーバで Ruby が利用出来る。

ohai の準備

Chefと共にインストールされるツールです。単体でも利用することが出来ます。

インストール

# gem install --no-ri --no-doc ohai

インストールが終ったら、さっそく実行してみましょう。
JSON のデータが表示されると思います。本当に様々な情報が取得出来ますので、ぜひ一度、出力されるJSONの内容を確認してみてください。

# ohai

{
  "languages": {
    "ruby": {

    },
    "perl": {
      "version": "5.10.1",
      "archname": "x86_64-linux-thread-multi"
    },
    "php": {
      "version": "5.5.18",
      "builddate": "Oct 16 2014"
    },
…    

Consul KVS の利用

先ほどのデータは標準出力されるだけなので、そのままでは他のアプリケーションからの利用が出来ません。そこで、KVSにデータを登録してみます。

# ohai | curl http://localhost:8500/v1/kv/ohai/${HOSTNAME} -X PUT -d @-

Consulクライアントで実行する場合でも、登録する先は localhost でOKです。

確認

KVSに登録したデータを確認してみます。jq コマンドが無いとエラーになりますので、予めインストールしておいてください。
※ CentOS6 で実行しています。epel リポジトリから yum install しました。

# curl -s http://localhost:8500/v1/kv/ohai/${HOSTNAME} | jq '.[].Value | .' -r | base64 -d

{  "languages": {    "ruby": {      "platform": "x86_64-linux",
…

JSONとして認識出来るものが登録されていますね。

オーケストレーション

本当は「オーケストレーション」という言葉について、良く解っていません。言葉の使い方が間違っていたら、すみません。Consulクラスタ内の全サーバで、ohai を実行してKVSに登録する様な一括操作のことを言っています。

それでは、実行してみましょう。果たして一括実行は成功するでしょうか。

# consul exec 'ohai | curl http://localhost:8500/v1/kv/ohai/${HOSTNAME} -X PUT -d @-'

確認

登録されたキーの一覧を見てみます。ローカルでやっていたのと違い、少し緊張しますね。

# curl -s http://localhost:8500/v1/kv/ohai/?recurse | jq '.' | grep -v Value

[
  {
    "Flags": 0,
    "Key": "ohai/app.novalocal",
    "LockIndex": 0,
    "ModifyIndex": 25084,
    "CreateIndex": 25084
  },
  {
    "Flags": 0,
    "Key": "ohai/db1.novalocal",
    "LockIndex": 0,
    "ModifyIndex": 25093,
    "CreateIndex": 25093
  },
  {
    "Flags": 0,
    "Key": "ohai/db2.novalocal",
    "LockIndex": 0,
    "ModifyIndex": 25091,
    "CreateIndex": 25091
  },
…

成功です! たくさん登録されています!!

まったくの余談ですが、ホスト名の後ろに .novalocal と付いているのはテスト環境が OpenStack だからです。現在 OpenStack 関連にも力を入れていますので、いつかレポート出来たら良いなと思っています。

Consul UI

GUI でも確認をしてみましょう。

img-20150610-1

良い感じです!
先ほどの consul exec を cron で定期的に実行しておくと、構成変更があっても更新漏れを防ぐことが出来ます。

まとめ

今回はクラスタ内の全サーバの構成情報のデータ取得までを行いました。「このデータを変換して、便利に使ってみよう」というのが次回のテーマ(予定)です。

今後とも、よろしくお願いいたします。

AWS利用料$100ドル無料

あなたにおすすめの記事