SB C&Sの最新技術情報 発信サイト

C&S ENGINEER VOICE

ネットワーク装置からチャットにメッセージを投稿 (SplunkとWebEx Teamsの連携例)

ネットワーク
2020.03.26

Splunkからチャットへメッセージを送る方法

前回までは、特定のネットワーク装置の機能を使って、チャットサービスへメッセージを投稿していましたが、ネットワーク装置が"Webhook"に対応していないとメッセージが投稿できないという問題があります。
すでに導入済みのものや、Webhookに対応していないものもたくさんありますので、今回はそういったケースでも対応できる方法です。
企業向けのネットワーク装置を想定しているのでSyslog機能が使えるはずなので、これをWebhookに変換し、チャットへメッセージ投稿するという方式の紹介です。

目標:ログをSplunk経由でWebex Teamsへメッセージを投稿します

今回はSyslog転送できるネットワーク装置を用意して、Splunkを介してWebhookを送ってみる例です。
001.png

ネットワーク装置環境

手元で管理しているネットワーク装置をいくつかピックアップしてみました。
ログ送信装置
- Cisco ASA
- AppGate SDP

ログ受信装置
- Splunk Enterprise 8.0

Webhookの受信と送信
- Zapier スターターエディション

チャットシステム
- Cisco Webex Teams

手順


1. Cisco Webexにスペースを作ります。(ルームIDの作成とBotアクセスキーの確認)

メッセージを投稿するためのスペース(ルーム)を作成し、
ボットを作成、参加させて、アクセストークンを取得してください。ボットの以前紹介していますので、そちらを参考にしてみてください。


ボットの作成
002.png

ルームIDの取得
003.png


2. メッセージの投稿先を再度確認します
Cisco WebexへWebhookからメッセージを投稿する場合は以下の情報が必要です。これらの情報はZapier側にセットする必要があります。

Cisco Webexの投稿先

https://api.ciscospark.com/v1/messages

ヘッダー情報

Authorization: bearer <ボットのアクセストークン>
Content-type: application/json

ボディ情報

{
"roomId": <ルームID情報>,
"text": <投稿するメッセージの内容>
}
ルームIDやボットの作成はCisco Webex for Developerで取得してください。
textへ埋め込む内容は、Splunkで抽出されたフィールドの値を変数として利用します。


3. SplunkでSyslogを受信する
SplunkはSyslogだけでなく、さまざまなデータを取り込んで解析・分析できるのですが、今回はネットワーク装置のログをリアルタイムに取り込む必要があります。Splunkの基本的な操作はこちらを参照いただくか、メーカーのマニュアルサイトをご確認ください。


大まかな手順は以下の通りです。
Splunkの設定
設定 > データ入力 > UDP/TCPと進み、Syslogを受信するポートを作成
004.png


ネットワーク装置側の設定
各ネットワーク装置のリモートロギング設定
005.png


ネットワーク装置のログをSplunkで受信確認します。
適宜SPLサーチ文で、対象としている装置のログを表示してみてください。
なお、サーチした後は必ずフィールド抽出を使って、Webexへポストする際の変数を作成します。


私は以下のログを抽出しこの中から必要な情報をチャットにポストしようと思います。
006.png

ASAのログ

Mar 23 17:32:42 10.255.255.2 %ASA-4-722051: Group <Osaka-SE-GP-Password> User <xxx-xxx> IP <202.234.xxx.xxx> IPv4 Address <10.254.11.1> IPv6 address <::> assigned to session
AppGate SDPのログ

<13>Mar 23 11:28:33 sol-sdp.xxx.xxx cz-vpnd: [AUDIT] {"client_ip":"180.42.xxx.xxx","client_port":61689,"collective_id":"d8304006-5b71-xxx-xxx-xxx-xxx","distinguished_name":"CN=a45cf59aea1xxxxxxxxxxxxxx,CN=xxx-xxx,OU=local","distinguished_name_device_id":"a45cf59aea1xxxxxxxxxxxxxx","distinguished_name_ou":"local","distinguished_name_user":"xxx-xxx","event_type":"tunnel_established","geoip":{"ip":"180.42.xxx.xxx","time_zone":"Asia/Tokyo","continent_code":"AS","city_name":"Kobe","country_name":"Japan","country_code2":"JP","country_code3":"JP","region_code":"28","region_name":"Hyōgo","postal_code":"650-xxxx","location":{"lon":135.xxxx,"lat":34.xxxx},"latitude":34.xxxx,"longitude":135.xxxx,"cordinates":[135.xxxx,34.xxxx]},"id":"8ebf588f-a780-4bf0-xxxx-xxxxxxxxx","pool_v4_ip":"192.168.100.14","pool_v6_ip":"fd00:0:0:0:0:ffff:xxxx:xxxx","timestamp":"2020-03-23T11:28:33.633Z","tunnel_protocol":"TLS","version":9}
この中から、ユーザー名、送信元IP、VPN用に割り当てた仮想IPをWebexにポストします。

すこし余談ですが、上記は同じようにVPNでアクセスしているログです。装置によって出力されるログが大きく異なります。
見ての通りAppGate SDPは非常に多くの情報を出力しています。また、Splunkを使うことで、フィールドの値を自由に抜き出したりすることができます。


4. Splunkでアラートを作成する
  • Splunk上でサーチ文からASAとAppGateのアラートを作成します。
  • 対象のログをサーチし、右上の「名前をつけて保存」からアラートを作成します。
  • アラートタイプを「リアルタイム」に変更します。
  • アクション追加から「Webhook」を選択します。
  • WebhookのURLにはZapierのCatch HookのURLを貼り付けます。(後ほど)

008.png

5. ZapierでZapを作成
  • Make a Zapから新規のZapを作成
  • Webhooks by Zapierを選択
  • When this happens..ではCatch Hookを選択
  • Customize hookをコピー
  • Skip test(この時点でログを飛ばしても問題なし)
  • Do thisでもWebhook by Zapierを選択
  • Postを選択
  • URLを入力(https://api.ciscospark.com/v1/messages)
  • Payload Typeを選択(JSON)
  • Dataは"roomId"と"text"の値を入力
  • Headerには、authorization: bearer <botのアクセストークン>

When this happens..の作り方例

009.png

010.png

Do this..の作り方例

011.png

014.png

を入力し完了です。上記の画面ではすでに変数がセットしてありますが、最初は変数が取れないので次の6,7の手順でテストを実施してください。

6. Splunkのアラート設定に戻ります。

アクションの編集からWebhookのURLへ、5の手順で取得したZapierのWebhook URLを入力。

7. Zapierへ変数の設定

  • 先程作成したZapのFind DataからTest&Contineし、この間にネットワーク装置からログを送信します。
  • Zapier上で受信したログのサンプルを選択。
  • Do thisのPostのData部分に、Splunkから受信した情報をメッセージに埋め込みます。

8. テストの実施

ここまでの過程ですでにチャットにはいくつかメッセージがポストされているはずですので、再確認の意味で再びログを発生させてポストされたメッセージを確認しましょう。意図した情報がメッセージの中に含まれていれば成功です。

ログを発生させてみましょう。

020.png

021.png

もちろん同様にASA側もセットすることで

018.png

022.png

もちろん通知が煩わしいことも多いので、私はZapier側でAppGateとASAのアップを管理できるようにしています。

023.png

まとめ

計3回にわたってネットワーク装置からチャットへメッセージ投稿する方法を紹介しましたが、最後ということで少し手順が多く、複雑になってしまいましたが、やっていることは1回目、2回目とほとんど同じです。
また細かい設定方法などがわかりにくいところもあると思いますが各マニュアルを見ながら進めれば大丈夫だと思います。
意外と社内でチャットツール入れたけど、同僚のと簡単な会話しか使えてないことも多いので、このようにWebhookを使ってどんどんチャットシステムに情報を集めていくと自然とコミュニケーションの中心にチャットシステムが向かっていって、情報が集約されてくると考えています。ネットワークログだけでなく、カレンダー情報や在籍情報なども同じようにチャットに流すことも可能ですので、メールでは難しかったリアルタイムな情報をすぐに共有することができます。

リモートワークが今後一般的になると考えると、システム監視する方法もオンデマンドで見える状態にしておくことが重要になってくると考えています。ぜひ活用してみてください。

著者紹介

SB C&S株式会社
技術統括部 第3技術部 2課
宮本 世華

釣りが好きです。