プロダクトに新機能を追加したのでポエムを書く

株式会社デベルアップジャパンというド零細企業を経営しています。
社内LANのドライブレコーダーとして、流れる通信をパケットレベルで保存し、経験豊富なオペレータが遠隔でサポートする、Sonarman(ソナーマン)という製品(サービス)を売っています。

僕自身、企業の情報システム部門(情シス)で長く勤めた経験があり、社内LANというものが、日々非常に小さいトラブルに見舞われることを知っています。
例えば、WEB会議が固まる、インターネットが遅い、無線LANがよく切れる等ですね。

一つ一つ取り出してみれば極小さいトラブルで、無視しても特に問題なかったりしますが、日々積み重なると管理者にとってはストレスですし、ユーザーの方も「報告したのに全然改善されない!」と不満がたまってくるものです。

余談ですが、僕はかつて情シスから社内の開発部署に異動したことがあり、会議室のゲスト用有線ネットワークが止まっていることを古巣の情シスに報告したとき2週間放置されたことに激怒した経験があります。(ゲストと共同で技術試験する予定があり、どうしても有線が必要でした)

一方で、社内LANの不具合というのは基本的に原因を突き止めることがかなり難しいので、怪しいところにあたりを付けて、交換で直すことが多かったりします。
交換するとなると、元の機能がきちんと動くことを検証して、今動いているネットワークを止めて入れ替えすることになりますので、「なんとなく調子悪そう」みたいな理由ではなかなか上司の承認が下りません。
交換機材のコストもありますし、止めるためにはユーザーにアナウンスしなければならないからです。

そうすると「致命的な問題が出るまで放置」という最もコストのかからない方法を選択する事になるケースがあるわけです。
そのお気持ちは大変よくわかります。情シスは忙しいですからね。

で、その場しのぎを繰り返しているうちに、いつの間にかユーザーからの不満が一定水準を超え、信頼感の低下による支障があちらこちらに出てきて情シスを縛るみたいなことが起きてきたりします。
「情シスに言っても動かないから自分たちで回線を引こう」みたいな不幸なアイデアが爆誕するわけですね。

では情シスを楽にするために、どこから手を付けるか?という問題に対して、すべてのシステム、すべてのユーザーが電気信号を通す「ネットワーク」に着目しようというのが弊社の発想です。
監視カメラを設置して全部記録すれば、何が悪いか必ず残るので、証跡を示せばベンダーサポートや、ユーザーへの説明、交換の申請もスムーズにいくので情シスの仕事が減ると考えています。

冒頭、ドライブレコーダーという言葉を使ったのですが、ドライブレコーダー(ドラレコ)、もうかなり一般的になりましたよね。
僕はドラレコこそ、ある種の偉大なイノベーションだったと考えています。

例えば交差点で事故を起こしてしまったときに、自分の進行方向は青信号だった、みたいなことを当事者同士が言い争ったりするわけです。
その時信号の故障は本当になかったのか、いろんな角度から証言を集め、状況を再現し、時間をかけて原因を探っていきますよね。
人の記憶は曖昧なものですし、事故直後は気が動転しているため、証言を二転三転させる人もいるでしょう。
最終的に行政処分を確定させるまでの膨大な時間を含めたコストを考えると気が遠くなります。
交通事故にかかわる関係者、弁護士、保険屋、警察、裁判官など全ての人がドラレコがない時代に絶対戻りたくないと思っているはずです。

画像4

話をもとに戻すと、ネットワークにドラレコを設置して、管理者がいつでも見に行けるようにすれば、システム関係者はすごく助かる場面が増えます。
これは実際にネットワークのドラレコ運用を長年やった経験から断言できます。(体感ですが僕は9割がた、最低でも切り分けまではできると思っています)

ただし、ここで一つ問題があります。
ネットワークの記録というのはドラレコと違い、誰が見てもわかるデータではないのです。
もっと言うと、「問題が起きたときのデータを見てもよくわからない」というケースがあり得ます。
ではどうするか。
前置きが長く申し訳ありません。ここで今回開発した新機能の話になります。

「問題が起きたときのデータを見てもよくわからない」ときにどうすべきか。正解は「正常なパターンと比較する」です。

SSHのような単体のTCPコネクションであれば探し出して単純に比較することが出来ますが、昨今のクラウドサービスなどではもっと複雑な仕組みになっており、問題の原因が単体ではとらえられないことがあります。
その時のトラフィックの全体像や同じタイミングで発生する複数コネクションをそれぞれ比較して追いかける事が必要です。
具体的にはクラウドサービスにおける認証系の通信と、サービス通信を一緒に過去のものと比較するケースです。
例えるなら、交差点全体を常時撮影しておき、正常な交差点と、問題のおきた交差点の違いを分析するイメージです。

この比較作業において、「過去の正常な同じケースを探すこと」が意外と手間でした。
なんとなくここにありそうだなという範囲のデータをダウンロードして探しても、欲しい交差点が写っていない(データが含まれていない)ケースがあり、それを繰り返す事で時間がかかることがあったのです。

そこで、ネットワークの記録と対応したメタデータをデータベースに保存しておき、メタデータ同士を比較して、目的の交差点を素早く探し出す機能を実装したわけです。

画像1

こんな感じでIPを指定してざっとメタデータを抽出します。

画像2

これと同じデータが含まれた過去のキャプチャを探すため右端のボタンを押します。

画像3

過去の別のキャプチャが出てくるので、ファイルの日付などを見ながらダウンロードしてWiresharkなどのアナライザで比較します。

メタデータ抽出のバッチ処理が意外と負荷が高く、かなりチューニングしました。結果として満足のいく処理速度で走るようになったので、しばらくテスト運用してみようと思います。


この記事が気に入ったらサポートをしてみませんか?