Cisco ASAをPrometheus + Grafanaでスループットを可視化したメモ


この記事の目的

Cisco Catalystシリーズにおいて、snmp_exporterを利用したスループット計測を行う記事はよく見かけましたが
Cisco ASAシリーズにて、スループット計測を行おうとしたとき、少しだけハマったので備忘録としてメモを残しておきます。

なお、Grafana Labsで提供されているこちらをだいぶ改変させてもらっています。

結論

Grafanaのダッシュボード生成時、Variablesで定義した変数の中に特殊文字(空白やシングルクォート)が入っていると、グラフの描画に失敗します。
正しくデータを抜き出せるように正規表現を頑張る。

環境および前提

  • Prometheus
  • Grafana
  • snmp_exporter

上記のアプリケーションはそれぞれ稼働しているものとします。
Grafanaでダッシュボードを作成する前に、Prometheus(snmp_expoter)で正しく値が取得できているかどうか確認しておきましょう。

また、一部私の環境に特化している箇所があるかもしれませんが、適宜読み替えていただけると助かります。

ダッシュボード作成

Prometheus側の設定

ここではわかりやすいように、Prometheus側の設定(prometheus.yml)で、新しくjob_nameを定義しておきます。
job_name名はsnmp_asaとしました。

Variables

ダッシュボードのVariablesから以下のように定義しましょう。

具体的には以下のようなパラメータです。

$Host
* General
 * Name: Host
 * Type: Query
* Query Options
 * Query: query_result(sysName{job="snmp_asa"})
 * Regex: .*sysName="(.*?)".*
$Device
* General
 * Name: Device
 * Type: Query
* Query Options
 * Query: query_result(sysName{job="snmp_asa",sysName="$Host"})
 * Regex: .*instance="(.*?)".*
$Interface
* General
 * Name: Interface
 * Type: Query
* Query Options
 * Query: query_result(ifInOctets{job="snmp_asa",instance="$Device"})
 * Regex: .*ifDescr=.*'(.*?)'.*
* Selection Option
    * Multi-value

$Interface変数でインタフェース名の一部分を抜き出してあげる必要があります。
うまくインタフェース名が抜き出せると以下のようになります。

あとは、この抜き出せたインタフェース名を使い正規表現で抽出したいデータを引っ掛けていきましょう。

ダッシュボード側

Add Panelするか、最初に紹介したこちらのダッシュボードをインポートして、いじっていきましょう。

Legendはそれぞれ、InとOutを付与してみましょう。

### Input側
irate(ifInOctets{job='snmp_asa',instance='$Device',ifDescr=~'.*$Interface.*'}[5m]) * 8 

### Output側
irate(ifOutOctets{job='snmp_asa',instance='$Device',ifDescr=~'.*$Interface.*'}[5m]) * 8 

また、GeneralタブでTitleを Adaptive Security Appliance $Interface interface のようにしてあげれば以下の図のようになります。

また、GeneralタブのRepeating機能で複製すれば以下のようになるかと思います。