運用情報更新のススメ

Pocket

インフラエンジニアの井上です。
これは TECHSCORE Advent Calendar 2015 の19日目の記事です。

今回はふとしたアイデアから「種を探す」を目的とした記事です。
運用は枯れた技術も新しい技術も活きる分野ですが、今回は枯れた技術を利用します。

私は「情報管理の難しさ」を日々感じています。
インフラエンジニアという立場では、「今のインフラはどうなっているの?」というところを整理できているかが運用負担を小さくできる要素だと考えます。
文字列で書き起こしても沢山説明しても読まれない為、図を描き起こすのですが、図も描いた人のセンスで使えるものになるのか否かが変わってきますし、図の作成時間も馬鹿になりません。

このあたりの問題をどのように和らげるかということをテーマとして、一般化された図の描き方を採用した上で何とか自動で図を作れないかという模索が今回ご紹介する内容です。
ここで私が着目したのがnwdiagです。nwdiagはブロック図生成ツールblockdiagのネットワーク図生成ツールの派生です。テキストフォーマットで記載し、このツールを通すことで、PNG/SVG/PDFといった形式で図を作成できるというもので、イメージ的にはTeXが近いと思います。

環境の用意と動作テスト

今回の環境は、CentOS7のインストーラで選択できる開発パッケージをすべて選んで構築しました。
次にnwdiag周りの環境整備ですが、以下の様に nwdiag とその周辺のパッケージをインストールしました。。

そしてサンプル定義として次のようなもので動作テストを実施しました。

nwdiagサンプル画像

nwdiagサンプル画像

 

サンプル定義をnwdiagコマンドに通すとサンプル画像のような図を生成することができます。使えるアイコン画像(blockdiagcontrib-ciscoの内容はこちら)は配布元などでご確認下さい。

サンプル定義を見ると、サーバ名、IPアドレスとネットワークセグメントの情報だけそろえば、最低限の図を自動で作成できるのではと考えたのが、今回の取り組みのきっかけです。

 

 

最初の一歩の取り組みについて

本音を言えば、管理サーバへ各サーバから定期的に最新の設定情報が集約されてきて、集約された情報を自動で組み立てることにより図ができれば助かるのですが、最初の一歩の取り組みでは、欲を出さず基本運用を思い返してみることにしました。最初に戦う相手として定めたのはスプレッドシート方式のデータです。先程のサンプル定義の内容を書き起こすと次の表のようになります。

簡素なアドレス表

簡素なアドレス表

この表をDBで管理できればデータは容易に扱え、示した表もWebアプリケーション上で表現することも、ここからnwdiagのデータファイル書き起こしも自動でできるのではないかと考えています。

 

簡素なテーブル構造

簡素なテーブル構造

例えば、DBのテーブル構成はシンプルに次のようにできるのではないかと考えました。構成は誰でも思いつくようなものです。シンプルにしておくことで、今回の取り組みが終わりDBだけ残っても、再利用性は残しておける上、自動化の内容を拡張しても対応できるというものです。簡素なアドレス表程度のものなら書き戻すのも楽なものです。

 

ということで、DBにデータを入れた後、抽出と、画像作成を行うだけのシェルスクリプトを書きます。スクリプトの内容が非常に雑ですが、今回は可能性さえ見つけられればよいので、このスクリプトで動作確認を実施します。
※今回の動作確認では、上記アドレス表の日本語部分を省く形で、DBへデータを事前投入しておきます。

 

実行した結果、下図のような想定通りのネットワーク図が出来上がりました。

サンプルスクリプト実行結果

サンプルスクリプト実行結果

 

 

 

 

 

 

これでDBに情報を登録し、スクリプトをcronなどでまわせば、とりあえず欲しいネットワーク図はできる状態になりました。

一歩を踏み出せば

今回はさわりしか着手できていないのですが、発展形として、DBへのデータ自動登録、更新検知時のネットワーク図自動更新、その他管理ツールを含めた統合開発など、やればやるほど運用は楽になるのかもしれません。さらに、運用性・機能性ともに、より良くするためには、運用・開発両面での知識と経験が必要だと感じたので、精進していきたいと思います。日々の運用を愚直に行うだけでなく、それを改善し、効率的に行うための検討材料の1つとして知見を得られたという意味では「種を探す」という最初の狙いには到達できたのではないかと思います。

 

Pocket

Advent Calendar 2015の連載記事

  1. TECHSCORE Advent Calendar 2015
  2. Redshift と PostgreSQL に同時に JDBC 接続する
  3. Lombok で Spice up your Java!
  4. 画像を指定するだけ!非デザイナーでも簡単にそれっぽい配色ができるツールを作ってみた
  5. 新卒文系エンジニアの記録:配属半年間の失敗を振り返ってみた
  6. 非同期処理のすすめ
  7. ioDrive2の導入で支える、そのIOPS - 導入検討編.
  8. GoでパイプラインからSlackに通知する
  9. fuse でオレオレファイルシステムを作ってみた (Haskell で)
  10. Erlang はじめました
  11. ちょっと地味なビルドとリリースの話 (レガシーシステム改革、はじめの一歩)
  12. Java8 最速 boolean[] to Stream 選手権
  13. Google Apps の Directory API にてWebブラウザを介さずに認証する
  14. 風データをビジュアルに表現する
  15. マイクロフレームワーク「Ninja」を使ってみる
  16. 赤ちゃんvimmerからよちよちvimmerにクラスチェンジを果たすためのTips
  17. PostgreSQL FDW を作ってSQLでログ検索してみた
  18. Goで偽名ジェネレータを作りました
  19. 書き込み中に削除されたファイルを救出する
  20. 運用情報更新のススメ
  21. ちゃんと読んでくれましたか?
  22. Presto コネクターを実装する 第三回
  23. Ruby2.3を触ってみる
  24. Git 困ったときのtips集
  25. 5分で読む入門編:Java 8 ラムダ式 コレクション編(2)リストの検索
  26. CloudFront (+ S3) + JWPLAYER で様々なデバイスのブラウザから動画をストリーミング再生する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です