Splunk + Meraki/Catalyst Cnter 連携  でリアルタイムモニタリング＆アラートを可視化してみよう

# 🎄はじめに
この記事は Cisco Systems Japan の有志による Advent Calendar 2024 のシリーズ 2 の
15日目として投稿しています。

< 過去の記事 >
2017年: https://qiita.com/advent-calendar/2017/cisco
2018年: https://qiita.com/advent-calendar/2018/cisco
2019年: https://qiita.com/advent-calendar/2019/cisco
2020年(1枚目): https://qiita.com/advent-calendar/2020/cisco
2020年(2枚目): https://qiita.com/advent-calendar/2020/cisco2
2021年(1枚目):https://qiita.com/advent-calendar/2021/cisco
2021年(2枚目)https://qiita.com/advent-calendar/2021/cisco2
2022年: https://qiita.com/advent-calendar/2022/cisco
2023年: https://qiita.com/advent-calendar/2023/cisco
2024年:https://qiita.com/advent-calendar/2024/cisco （シリーズ1と2）--> 今ここ

# 🎄この記事で書くこと
Meraki/Catalyst製品から得られるネットワークテレメトリをSplunkに連携させるには、Splunkbaseで提供されている [Splunk Add-on for Cisco Meraki](https://splunkbase.splunk.com/app/5580) 等のAppを使う、SyslogサーバとしてSplunkを設定する、などの方法もありますが、今回はWebhookを設定してリアルタイムのアラートをSplunkへ連携させ可視化することを試してみました。

![スクリーンショット 2024-12-11 0.18.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/1de63942-572b-057f-342f-8c9631b310da.png)


###### STEP1. WebhookレシーバとしてSplunk HTTP Event Collector (HEC)を設定
###### STEP2. MerakiとCatalyst CenterのWebhookを設定
###### STEP3. Splunkでデータ検索＆ダッシュボードカスタマイズ


# 環境
1. Meraki Dashboard + MR44
2. Cataltst Center v2.3.7.6
2. Splunk Enterprise v9.3.0 

Splunk Enterprise/Cloud環境については、アカウントを作成いただくと、どなたでも下記よりフリートライアルを申し込み可能です。

https://www.splunk.com/en_us/download.html


# STEP1. Splunk HTTP Event Collector (HEC) の設定
Splunk がデータを取り込む方法はたくさんありますが、一般的な方法の 1 つは HTTP Event Collector (HEC) を使用することです。

HECは、HTTPS経由でSplunk Enterprise/Cloudにデータを送信できるようにする機能です。HECが Webhookレシーバーとなり、データを取り込んでインデックスを作成します。今回はこのHECを利用します。それではSplunkにログインしてHECを設定していきましょう。

![splunk1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/fb1d149e-6221-6131-a4b7-eafe4c8ec70a.gif)


Splunkへログインし、右側の「設定」メニューをクリック、「データ」の下で「データ入力」をクリックします。

「HTTP イベント コレクター」 の「新規追加」をクリックし、次のページでトークンに名前を付けます。この例では、meraki-catalyst-collector という名前を付けています。

「次へ」をクリックし、入力設定をしていきます。
HEC の 2 つの重要な部分、インデックスとソースタイプを設定します。
ソースタイプは基本的に、送信する予定のデータのタイプを Splunk に伝えるものです。
これを指定しておくことにより、Splunk がデータの解析方法を理解するのに役立ちます。

:::note info
こちらのソースタイプの指定がなくとも基本的にSplunkはデータタイプを自動で解釈することができますが、同じJSON形式でもたとえばソース毎に名前を変えて指定しておくことにより、後述のインデックスと同様、後にサーチ機能を利用してのデータの検索と管理が容易にすることができます。
:::

MerakiやCatalyst CenterのwebhookではJSON形式でデータを送信しますので、ここではJSONのソースタイプを指定します。[選択] をクリックし、ドロップダウン メニューから "_json" を選択します。

インデックスは、Splunk 内でデータが保存される場所で、Splunk のデータベースと考えることができます。今回はインデックスとして ”main” を選択します。

「確認」をクリックしてから「送信」をクリックします。
これで、HECの設定は完了です:congratulations:

:::note info
Splunk に送信するデータの種類ごとに個別のインデックスを作成することをお勧めします。これにより、データの検索と管理が容易になります。
:::


これでSplunkのHECの設定は完了し、Webhookを受ける準備ができました。
下記の情報をメモしておきましょう。


#### :point_up_2:トークン値 : HEC エンドポイントに対して認証するためのトークン
#### :point_up:HEC URL : 送信先となる URL です。


通常、HEC URL は https://{splunk-server}:8088/services/collector/raw という形式になります。{splunk-server} は Splunk サーバーの IP アドレスまたはホスト名です。

では、curlコマンドで受信できるかテストしてみましょう！

```curl:curl　実行結果
% curl -k https://<splunk-server>:8088/services/collector/raw -H "Authorization: Splunk <token>" -d '{"event": "Hello, Splunk!"}'

{"text":"Success","code":0}                                                  
```
 Splunkのサーチで、検索コマンドは色々ありますが、例えば下記のように指定してデータを検索します。

```
source="http:meraki-catalyst-collector" (index="main") sourcetype="_json"
```
データを受信していることが確認できました！


![スクリーンショット 2024-12-11 1.48.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/cccc4e29-16d5-2400-62ea-c360a133a9a9.png)

# STEP2-1: Meraki のWebhook設定

データを Splunk に送信するように Meraki アラートを構成していきます。
Merakiダッシュボードにログインして、「オーガナイザーション」-> 「Webhooks&API」に移動します。
ここで、データをフォーマットするためのWebhook テンプレートを作成し、データを送信するために、レシーバーとしてSplunk HECを設定します。

リキッドボディで使用するテンプレートは下記を使用します。
```
{
"version": "0.1",
"sharedSecret": "{{sharedSecret}}",
"sentAt": "{{sentAt}}",
"organizationId": "{{organizationId}}",
"organizationName": "{{organizationName}}",
"organizationUrl": "{{organizationUrl}}",
"networkId": "{{networkId}}",
"networkName": "{{networkName}}",
"networkUrl": "{{networkUrl}}",
"networkTags": {{ networkTags | jsonify }},
"deviceSerial": "{{deviceSerial}}",
"deviceMac": "{{deviceMac}}",
"deviceName": "{{deviceName}}",
"deviceUrl": "{{deviceUrl}}",
"deviceTags": {{ deviceTags | jsonify }},
"deviceModel": "{{deviceModel}}",
"alertId": "{{alertId}}",
"alertType": "{{alertType}}",
"alertTypeId": "{{alertTypeId}}",
"alertLevel": "{{alertLevel}}",
"occurredAt": "{{occurredAt}}",
"alertData": {{ alertData | jsonify }}
}
```

![meraki2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/ee501ea6-4d08-5bf8-cfef-022ab3d340b7.gif)

リキッドヘッダで、 Splunk がデータの認証に使用するヘッダーを追加します。

```
Key: Authorization

Value: Splunk {{sharedSecret}}
```

テンプレートを保存して、レシーバー"splunk"を追加します。
ここにSTEP1でメモしたSplunk HEC URLとトークン値（共有シークレット）を貼り付け、テンプレートに先ほど作成した”splunk test"のテンプレートを指定し、「保存」します。

最後に、アラートを構成します。「ネットワーク全体」->「アラーム」に移動して、”デフォルトの受信者”に先ほど作成したレシーバ"Webook: splunk"を指定し、送信したいアラームを選択して設定を保存します。これでMerakiのWebhookの設定は完了です。

![スクリーンショット 2024-12-14 1.31.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/c0f357a0-6286-398f-45e2-53f992134ebc.png)



ではテストしてみましょう！

「ネットワーク全体」->「アラーム」設定の下段で、Webhook送信をテストすることができます。無事、SplunkでMerakiのWebhookを受信できることが確認できました。


![画面収録 2024-12-14 1.47.30.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/80546d1b-50d8-86bc-2e85-5135632299eb.gif)


![画面収録 2024-12-14 2.18.05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/0aecf8cd-3fa2-1b14-e36b-c3782e7e1626.gif)

## 💡ご注意
:::note warn
「オーガナイザーション」-> 「Webhooks&API」でも、Webhookの送信テストが可能ですが、現状ここから実施すると、sharedsecretを空で送信してしまうという不具合がございます🙇‍♀️ハマらないようにご注意ください。私はハマりました。。笑
:::

![スクリーンショット 2024-12-14 1.54.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/b908abe4-22fb-3bd1-1e87-687947ba9b6f.png)

Webhookの送信がFailする場合のトラシューは、HARキャプチャーが便利です。ご参考まで。今回もこの方法で、sharedsecretが空で送信されていることを発見できました。

![スクリーンショット 2024-12-14 2.05.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/050cce2d-46e9-542c-5626-b927b73cfd8f.png)



https://community.meraki.com/t5/Meraki-%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E8%A8%98%E4%BA%8B/HAR%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3%E3%83%BC%E5%8F%96%E5%BE%97%E6%96%B9%E6%B3%95-Chrome-Browser/ba-p/154194

# STEP2-2: Catalyst CenterのWebhook設定
データを Splunk に送信するように Catalyst Center のアラートを構成します。
Catalyst Center でアラートの送信先となる宛先(Splunk HEC)を作成し、Splunk に送信するアラートを設定します。

![catc.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/73df022e-ab91-1a17-5450-ab460a7e9c83.gif)


では、まずアラートの送信先となる宛先(Splunk HEC)を設定していきます。

[システム] > [設定] に移動し、「External Services」の欄で、「Destinations」を選択し、Webhook で [追加] をクリックします。

パネルが表示されるので、以下を追加して保存します。
```
Name: Splunk Collector（任意）
Description: 説明（任意）
URL: https://<splunk-server>:8088/services/collector/raw
Trust Certificate: No
Method: POST
Autentication: Basic
Proxy：Yes/No
Headers:

Header Name: Authorizarion

Header Value: Splunk <トークン値> 
```


宛先を作成できたら、Catalyst Center でアラートを構成します。
Catalyst Center では、様々なアラートを指定しAPI経由で発報することが可能です。 Splunk に送信するアラートをサブスクライブするため、アラートを設定していきます。

[プラットフォーム] > [開発者用ツールキット] に移動し、「Event Notifications」タブを選択、"Create New"をクリックします。
Event Nameから、サブスクライブするイベントを選択します。この例ではAPに関するイベントを選択しています。

次に、[Select Channels] で、イベントを HTTPS 経由で Splunk HEC に送信するため、"REST"を選択し、[次へ] をクリックします。ここで、先に作成したSplunk HECの宛先を選択し、「次へ」をクリックします。最後にとNotificationsの名前と説明を入力し、Summary画面で内容を確認し、「Finish」をクリックして完了です。

ではテストしてみましょう。
[プラットフォーム] > [開発者用ツールキット] に移動し、「Event Notifications」タブで特定のイベントを選び、"Try It Now"をクリックして”Publish”すると、Webhookのテスト送信が可能です。

![画面収録 2024-12-14 3.50.42.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/e7595962-6432-0041-2cd2-c26db45c3724.gif)


Splunkで受信できることが確認できました。

![スクリーンショット 2024-12-14 3.50.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/4669167a-3b7b-8a81-4cc4-80e8739681de.png)


# STEP3: Splunkで受信データをサーチ＆データをグラフ化してみる
Splunkは強力なサーチ機能を持っています。Splunkの検索処理言語（SPL（Search Processing Language）を使えば、大量のデータを迅速に検索し、特定のパターンやイベントを簡単に抽出できます。データのフィルタリング、集計、統計処理を柔軟に行えるため、複雑なデータ分析が可能です。
リアルタイムでのデータ検索が可能で、異常検知やインシデント対応が迅速に行えます。

https://www.splunk.com/ja_jp/resources/splunk-quick-reference-guide.html

https://www.splunk.com/ja_jp/blog/tips-and-tricks/search-commands-stats-chart-and-timechart.html

今回は、statsコマンドを使って、Webookの受信データname フィールドのイベント名ごとに件数をサーチ、グラフ化してみました。


![画面収録 2024-12-14 4.20.05.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/473232c5-5933-c7c7-d51c-63bd7c75df37.gif)


また、Splunkのダッシュボードはドラッグ＆ドロップで作成でき、ユーザーのニーズに応じて簡単にカスタマイズできます。複数のデータソースから得られた情報を一つの画面に統合し、視覚的にわかりやすく表示できます。インタラクティブな要素（フィルターやアクションボタンなど）を追加することで、ユーザーがデータをより深く探索できるようになります。

今回は、サーチコマンドで検索、グラフ化したものをダッシュボードに追加してみます。

![画面収録 2024-12-14 5.01.52.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217351/8cf9802f-9b0e-44d6-c454-be89114f3fa7.gif)


 サーチコマンドの使いこなしやダッシュボードのカスタマイズ機能の習得は奥深く、私もまだまだ時間がかかりそうですが、今回は上記のような簡単な作成例をまずはご紹介してみました。今後も様々なユースケースをご紹介していければと考えています。

# 終わりに
SplunkでCatalyst CenterやMerakiのテレメトリを可視化することで、ネットワーク全体の使用状況やパフォーマンスを包括的に把握できます。また、Splunkを使用することで、他のシステムやセキュリティインシデントのデータとも容易に統合できるため、相関分析による精度の高い脅威検出や迅速なインシデント対応が可能となり、運用効率の向上、予測分析によるプロアクティブな対策、そしてコンプライアンス対応の強化が期待できると考えています。今回の記事では、Catalyst CenterとMerakiのリアルタイムアラートを連携する例を紹介しましたが、次はセキュリティ製品も加えた統合監視の例なども紹介できればと考えています。最後まで読んでいただきありがとうございました。

# 参考サイト
[Turbocharge Your Network Monitoring with Cisco Meraki & Catalyst Center! (youtube)](https://www.youtube.com/watch?v=R1B-YuF-7M8)
[Integrate Splunk with Cisco Meraki for Network Monitoring (youtube)](https://www.youtube.com/watch?v=li0WVakTeSA)
[Cico U. Integrating Splunk with Cisco Enterprise Networking Platforms for Real-Time Monitoring and Alert](http://cs.co/splunk156)


# 免責事項
本サイトおよび対応するコメントにおいて表明される意見は、投稿者本人の個人的意見であり、シスコの意見ではありません。本サイトの内容は、情報の提供のみを目的として掲載されており、シスコや他の関係者による推奨や表明を目的としたものではありません。各利用者は、本Webサイトへの掲載により、投稿、リンクその他の方法でアップロードした全ての情報の内容に対して全責任を負い、本Web サイトの利用に関するあらゆる責任からシスコを免責することに同意したものとします。