1
0

[Dynatrace] NetFlow の情報をDynatraceに取り込み可視化する

Posted at

ご無沙汰しております

人生初のQiita投稿からちょうど2週間が経過しました。やはいですね。。。ゆえに、そろそろ次のネタを書こうと思います。今回のテーマは、前回のTelegrafを使ったPing監視のデータの取り込みに続き、ネットワーク関連です。Dynatraceは、ObservabilityのPlatformとしては有名ですが(多分)、一方でネットワーク監視に関してはでは少し出遅れている、もしくはいろいろ制約があり、使えないのでは?という印象をお持ちの方が多いのではないかと思います。確かに、Dynatraceが提供する純正のソフトウェア(OneAgentやActiveGate)を介して、ネットワーク関連の監視をしようとすると少しハードルが高いですが、その代わり、Metrics Ingest APIやLog Ingest APIが提供されているため、そこから自由にデータを取り込めるので、Open source tools と組み合わせると、以外と何でもできちゃいます。今日は、ネットワーク監視でひろく使用されている「NetFlow」のデータをDynatraceに取り込み、Dashboardで可視化したいと思います。

NetFlowとは?

Netflowとは、SNMPとは異なりネットワークトラフィックをIPのパケット単位で、データの送信元、送信先などの細かい情報を集計する仕組みのこを言います。SNMPは各ルータやインターフェイス単位で、データの総量を計測することしかできませんが、NetFlowはその中身を細かく分析できるのが大きな特徴です。イメージは下図のように、Hop-by-hopでパケットが転送された際、NetFlowを有効にしたあるルータが当該ルータを経由するパケットの各種詳細データ(IPアドレス、プロトコル、ポート番号、データ量、パケット数など)を集計して、NetFlowサーバにデータを転送してくれる仕組みです。なお、NetFlowの説明は、Ciscoのこちらのページを参照して下さい。
image.png

NetFlow on Dynatrace

準備するもの

では、実際にNetFlowデータをDynatraceへ取り込んで行きましょう。準備するものは、下記3点です。

  1. DynatraceのPlatform
    Dynatraceのテナントをお持ちでない方は、フリートライアルのリンクからテナントを作成しましょう。--> https://www.dynatrace.com/ja/trial/

  2. DynatraceでNetFlowデータを取り込むためのLogstash
    Elastic社のLogshtashのInputとしてNetFlowデータを受け付け、OutputとしてDynatraceのPluginを指定して、DynatraceのLog Ingest APIへデータを転送
    Logstash
    Dyntrace ouput plugin

  3. NetFlowデータを生成するGenerator
    Generatorは世の中沢山あると思いますが、今回のブログではこちらで紹介されているツールを使用しました。
    nflow-generator

なお、netflow module for logstash は、logstash version 7.4.0 から depreciated になっていますので、正しくは filebeat >> logstash という順番で NetFlow data を取り込む必要があります。ゴメンナサイ、ここではそのやりかたを割愛します。

Logstashの設定

まずは、logstash をインストールします。今回は、自分のLaptop上でWSL2(Ubuntu 22.04/jammy)を起動させ、それにインストールしています。私の環境は、Ubuntuので、Elastic社のページのaptSectionに記載されている手順に従い最新版をインストールしています。

WSL2
yasusuzu@test:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy

無事にインストール出来たら、logstashが active(running) で稼働しているか確認しておきましょう。

systemctl
yasusuzu@test:~$ systemctl status logstash
 logstash.service - logstash
     Loaded: loaded (/lib/systemd/system/logstash.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-05-20 09:00:14 JST; 2h 24min ago
   Main PID: 205 (java)
      Tasks: 115 (limit: 38256)
     Memory: 1.5G
     CGroup: /system.slice/logstash.service
             └─205 /usr/share/logstash/jdk/bin/java -Xms1g -Xmx1g -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djruby.compile.invokedynamic=true -XX:+HeapDumpOnOutOfMemoryError -D>

で、ここからが具体的な設定です。まずは、/etc/logstash/conf.d に netflow.conf というファイルを作成し、ここで input と output の設定を行います。以下、私の netflow.conf ファイルです。Dynatrace 側で、LogstashからのデータをLogとして取り込む際に必要なTokenのPermissionは Ingest logs のみです。

netflow.conf
input {
  udp {
    port  => 9995 ### これはこの後の netflow generator が送信するUDPポート番号を合わせましょう
    codec => netflow ### udp port 9995 に入ってきたデータをNetFlowデータとして認識、parseできるよう、codec を netflow に指定
  }
}

output {
  dynatrace {
    id => "dynatrace_output"  ### 任意の名称
    ingest_endpoint_url => "https://i<tenant id>.live.dynatrace.com/api/v2/logs/ingest" ### 自身のDynatraceのテナントURL
    api_key => "dt0c01.<your own token>" ### Log としてNetfFlowデータを取り込むためのトークン
  }
}

netflow.conf の設定が終わったら、systemctl restart logstash で logstash プロセスを再起動させます。その後、logstash が UPD port 9995 を listen しているか、ss コマンド確認します。OKですね。

ssコマンド
yasusuzu@test:~$ ss -apun src :9995
State                Recv-Q                Send-Q                               Local Address:Port                               Peer Address:Port               Process
UNCONN               0                     0                                          0.0.0.0:9995                                    0.0.0.0:*

netflow generator を起動

Logshtashの準備が整ったので、さっそく netflow generator を動かしていきます。Github から clone して、build していきます。

netflow generator
git clone https://github.com/nerdalert/nflow-generator.git 
cd nflow-generator
go build

Buildが終わったら、実際に起動させます。あて先のIPアドレスは、自分のWSL2が持っているIPアドレスを指定しましょう。Port番号は、logstash の udp port で指定した番号と一致させます。今回は、9995を使用します。

nflow-generator
yasusuzu@test:/mnt/c/Users/yasuyuki.suzuki/src/blogs/netflow/nflow-generator$ ./nflow-generator -t 192.168.1.18 -p 9995
INFO[0000] sending netflow data to a collector ip: 192.168.1.18 and port: 9995. 
Use ctrl^c to terminate the app.

Dynatrace側での確認

さっそく、logstash 経由でDynatraceの自分のテナントに log として ingest されているか確認したいと思います。Dynatraceの新しいプラットフォームの「Logs and Events」メニューで、ログとして NetFlow が取り込まれているか見てみます。おっ、いいですね。JSON形式でちゃんとNetFlowのRaw DataがParseされていますね。
image.png
Advanced mode に変更して、DQL(Dynatrace Query Language)でもデータが取れるか、念のため確認します。
image.png

Grailでデータ集計できているので、あとは見やすくDashboardでVisualizeしていきます。ドドン!こんな感じに仕上げてみました。パチパチパチ👏👏👏

  • プロトコル単位(TCP、UDP、ICMP)でのトラフィック量の可視化
  • TCPのポート番号単位でのトラフィック量の可視化
  • 送信元IPアドレス、あて先IPアドレスごとのセッション数、パケット数、データ量のトップ10位
  • それらを円グラフで可視化
    image.png

まとめ

如何だったでしょうか? Dynatrace の新しいデータレイクハウスの Grail に、外部から logstash を使って、NetFlowデータをJSON形式で取り込んでみました。欲を言うと、ダッシュボードで Worldmap と Bubble chart を組み合わせ、カッコよく表示させたいところですが、これは今年後半のお楽しみということで!(多分)😄

まだ、Dynatraceを触ったことがない方、このブログを見てやってみたいと思われた方は、下記フリートライアルにてお試し下さい。↓↓↓

Dynatraceフリートライアル → https://www.dynatrace.com/ja/trial/

参考資料

1.(英語)Logshtash の NetFlow module
2.(英語)NetFlow Generator
3.(英語)Cisco IOSのNetFlowの説明
4.(英語)Dynatrace の Generic log ingestion API
5.(英語)Dynatrace の Logstash の Output plugin(OSSツール)

警告
このブログで紹介した Dynatrace Logshtash output plugin は、OSS(Open source software)として提供されているため、弊社のサポートセンタへのお問い合わせ対象外です。ご注意下さい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0