Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

サーバ管理の仕組みを作り始めた話

先日(10/9)、riywoさんさんの呼びかけにより、サーバ管理をどうやったらいい感じなるかを話し合う会がもたれました。僕は、直接サーバ管理をやっているわけではないのですが、社内でそういうの欲しいという話をしていて、ツールを作りたいといっていたので、参考になればというわけで、お誘いいただいて参加してきたのでした。

riywoさんから、叩き台としてホストのキーを元にした統合的なAPIの構想を図式化したスライドを提示していただいた後、管理システムの主なユースケースや、各社の実際の管理手法などをいろいろお話をうかがいました。僕など、インフラ的な知識に乏しいもので、これはなかなか大変なことだなあというのがあらためてわかりました。

  • 組織体制や経理ルールの複雑性が各社でだいぶ違う
  • サーバの情報として必要な属性が各社でだいぶ違う
  • そもそもサーバの情報が複雑
  • 既にあるなんらかの管理の仕組みとの整合性を取るのが大変

というわけで、全ての条件を満たすようなツールを作成するのは、かなり困難をともなうようです。とはいえ、なんらかの仕組みが必要であることには変わりないので、とりあえず最小限のものを作ってみようと思って、時間を取って少しづつ作り始めています。

主にアプリケーションを開発するエンジニアである僕にとってのサーバ管理システムのユースケースとは、上から次のようなものを挙げることができます。

  • 各サービスに属するサーバや、それぞれのロールをざっと一覧すること
  • デプロイ対象のホスト一覧のマスター
  • 各サーバの負荷状況などのチェック(muninなどで見られるようなあれ)

インフラや資産管理という文脈においては、

  • サーバのスペック
  • サーバのデータセンタでの位置
  • 経理情報
  • 保証期間についての情報

などなど、いろいろな要件があるようですが、それらはいったんおいといて、まずは、上記したユースケースに必要になるだろう最小限の情報のみを扱うようにしています。つまり、

  • サービス/ロールという区分
  • ホストには以下の情報のみを記録
    • 名前(キー)
    • IPアドレス
    • 概要
    • どのサービス/ロールに属するか

その上で、適宜APIを用意していくことにより、たとえば「ロリポップのappサーバの一覧」のような情報を取得できるというような感じです。また、この手のツールには操作ログが必要だろうということで、そういう機能も実装してあります。とりあえず、これだけの情報でも、少くとも上記したユースケースに必要なサーバ情報を一元管理できるメリットはあると思います。

その上で、各ホストの情報をさらに詳細にしたい場合は、このシステムから一覧をAPIで取得して、詳しい情報を記録・表示するようなものを作っていくのがよいのではないかと思っています(その際には、上述のriywoさんのスライドにあるような、疎結合な仕組み、サーバ情報のスキーマ化などが利用できると思います)。

たとえば、うちの会社では、capistranoをWebベースでラップした感じのwebistranoというデプロイツールを使っているのですが、サービス/ロール/サーバ情報をここで管理することにして、そのAPIを叩いてあれこれするようなデプロイツールを、まずは見本として作ろうと思っているところです。そんな感じで、いろいろ周辺ツールを作っていく土台になったらいいなあと思っているところ。この仕組みをマスターとして、各種サブシステムを作っていく感じで。

最低限とはいっても、こういう情報がないと「最低限」にすらならないとか、こうした方がいいとかありましたら、是非issueにお寄せください(日本語でよいです)。もちろん、pull requestも大歓迎です!!1 アプリケーションエンジニアとしての、こういうツールへの需要はあっても、実際のインフラ業務について、僕はあまり知識がないので、いろいろいってもらえると助かります ;)

ちなみに、実装はRailsです。すみません><