2021年12月23日木曜日

【Checkmkプラグイン活用】第4回 Fortigate 60EのIPsec VPNダイアルアップユーザー数をカウントし時系列データを作成

第4回 Fortigate 60EのIPsec VPNダイアルアップユーザー数をカウントし時系列グラフを作成

本記事では、Checkmkのカスタムプラグインを使ってFortigate 60EのIPsec VPN数をカウントし、時系列グラフを作成するところまでをご紹介したいと思います。

文:ジュピターテクノロジー よしひろ

図1 作成したプラグインで表示されるIPsec VPNユーザー数の時系列グラフ

今回作成するプラグインですが、Checkmkドキュメントの分類では"Genuine Checkmk plug-in"といった分類にあたります。こちらは、100% Checkmkによりインテグレーションされ、自動サービス検出、グラフの閾値設定等をサポートします。プラグイン開発というとなんだか難しそうですが、簡単なpythonスクリプトを書くといった理解でお願いします。

今回作成したプラグイン名は、"fortigate_ipsec_vpn"とします。コピペで直ぐ使えるように、本記事に全文記載しますのでご活用ください。

  • "fortigate_ipsec_vpn"プラグインで出来るようになること

  • Fortigate 60EのIPsec VPNの接続ユーザー数(ダイヤルアップユーザ*1)がリアルタイムで分かり、時系列グラフで中長期分析が可能となります。
*1 Fortigate 60EのIPsecトンネル設定、"リモートゲートウェイ"が「ダイアルアップユーザ」を設定する環境でのIPsec VPN接続ユーザー数をカウントするプラグインを作ります。こちらの設定が、「スタティックIPアドレス」ですと本文中に記載するOIDが異なる可能性がありますのでご注意ください。

図2 IPsec VPNのリモートゲートウェイ設定

  • 監視対象

今回の"fortigate_ipsec_vpn"プラグインで監視する対象は、Fortigate 60Eのみです。Fortigate 60Eには、SNMPを設定する必要があります。こちらの設定手順に関しては、本記事の目的とする所ではありませんので省略します。ご了承ください。

  • Checkmkの"Genuine Checkmk plug-in"は、4つの関数を書くだけ

"fortigate_ipsec_vpn"は、4つの関数を書くだけです。いきなりですが、プラグイン全文を記載します。

"/opt/omd/sites/mysite/local/lib/check_mk/base/plugins/agent_based/fortigate_ipsec_vpn.py" ※mysiteは、ご自身が作成したサイト名に補完してください
from cmk.base.plugins.agent_based.agent_based_api.v1 import *
from pprint import pprint

register.snmp_section(
  name = "fortigate_ipsec_vpn",
  detect = exists(".1.3.6.1.2.1.1.1.0"),
  fetch = SNMPTree(
    base = '.1.3.6.1.4.1.12356.101.12.1.1',
    oids = [
      '0',
      ],
     ),
  )

def discover_fortigate_ipsec_vpn(section):
        yield Service()

def check_fortigate_ipsec_vpn(section):
    for num in section:
         nusers = int(num[0])
         yield Metric(
             "Fgusers",
             nusers,
             boundaries=(0, 100))
         nusers = int(num[0])
         print(nusers)
         s = State.OK
         yield Result(state = s, summary = f"{nusers} number of users are connected through IPsec VPN")
         return

register.check_plugin(
        name="fortigate_ipsec_vpn",
        service_name="FG IPsec VPN USERS",
        discovery_function=discover_fortigate_ipsec_vpn,
        check_function=check_fortigate_ipsec_vpn,
        )

 

register.snmp_section()

監視対象のOIDを指定します。Fortigate 60EのIPsec VPNユーザー数は、".1.3.6.1.4.1.12356.101.12.1.1.0"の値を取得するだけです。

discover_fortigate_ipsec_vpn()

サービスをdiscoverするための関数を定義します。複数の値を処理するプラグインでなければ、"yield Service()"と一行書くだけです。

check_fortigate_ipsec_vpn()

プラグインのメイン処理部です。取得した値をint()で数値に変換し、yield Metric()で時系列データ化、Result()でステータス表示をしています。本来であればこちらで値をとれなかった場合のエラー処理等を実装するべきですが、あくまでもサンプルプラグインとしての位置づけですので常にState.OKを返しています。

register.check_plugin()

各関数の宣言部分です。作成した関数名を設定するだけです。


  • プラグインの配置・デバック方法

プラグインの配置・デバック方法は、先日アップした記事【Checkmk KB】Checkmkプラグイン開発:プライベートMIB監視《バッファロー TeraStation》をご参照ください。


おわりに

Checkmkには公式プラグインが多数用意されていますが、もちろん対応していない機器も存在します。そういった場合は、独自に専用プラグインを開発してみましょう。4つの関数だけで、簡単にプラグインが作れることが分かっていただけたかと思います。


お問合せ

Checkmkにご興味のある方は、以下のリンクから弊社までお問い合わせください。
オンラインデモでは、Checkmkの操作感を体感いただくことができます




30日間無償でご利用いただける評価版も以下のダウンロードページにご用意しております。
簡単に検証が開始できますので、評価ガイド(PDF)を参考にぜひお試しください。