概要
弊社では、SNMPトラップやSyslogを利用してネットワーク機器の監視を実行しており、インターフェース/OSPF/BGPのフラップや、パリティエラーなどのアラートが発報されるたびに、これらがすべてオンコール対応となっているため、休日夜間問わず対応が必要となっています。
そのため、都度対応をしているのですがこの確認のためにPCを起動してSSHで接続するなど対応に手間がかかるため、この部分を動的に対応できないかと考えました。
そこでSNMPトラップやSyslogをトリガーにしてネットワーク機器に対する操作を行いたかったが、自前でZabbixを立てるにもトリガーアクション以外の機能が不要だったため、FANNELというシステムを自前で作ることにしました。
開発に当たり、アーキテクチャを検討する際に、一つのアプリケーション(モノリシック アーキテクチャ)とアプリケーションを独立したサービスに分割したアーキテクチャ(マイクロサービスアーキテクチャ)を比較しました。
すべての処理をモノリシック アーキテクチャで行うと、下記のような課題が発生します。
・スケールが難しい
・小さな変更でも全体に影響するため、デプロイが複雑
・機能ごとの単体テストが難しい
・プロセスがコケると全体が停止する
・コードが肥大化し、開発速度が低下する
・過去の設計や技術的な制約が蓄積され、技術負債が増加する
これらを解決するため、マイクロサービスアーキテクチャを採用しました。
これにより下記を達成できました。
・機能ごとに分担することで開発の高速化
・変更の反映が容易になる
・負荷によって自動でスケールする仕組みの実装
・疎結合化によるトラブルの切り分けの高速化
開発について、体制としては専任チームではなく普段のネットワーク構築/運用業務と並行して進める形で実施し、自チーム的Agile開発で実施しています。
また、実際に開発した各機能としては下記のとおりとなります。
・SNMPトラップを受信して、HostnameとOSとMIBを解決する(snmpgetter)
・アラート条件に当てはまるものか判定する(handler)
・後続タスクの実行管理(attacker)
・タスク実行とアラート対象MIB、静観Hostの管理を行うDBとの中継(dber)
・実行結果のSlackへの投稿(exporter)
議論ポイント
このセッションでは、この運用基盤を開発する中で生じた下記について議論できればと思います。
・ネットワーク運用自動化ツールは、自分たちで造るものなのか / それ以外の方法を取るか
・造る場合はネットワークの検証や構築、運用と開発の両立はどうするべきか
・過去の設計や技術的な制約(技術負債)にどのように対応するべきか
・コード規約の策定、コード自体の保守についてどうすべきか
場所
第3展示場B
日時
Day1 2025年1月22日(水) 16:45~18:00(1時間15分)