ネットワークトラフィックの可視化


めも；書きかけ

# 前提
- バージョン v2c
- Community abc-abc


# snmp のインストール
## net-snmp のインストール
```tcsh
# apt install snmp
```

## mib ファイルのインストール
`/etc/apt/sources.list` に `non-free` があることを確認してから snmp-mibs-downloader をインストール。
```tcsh:
# apt -y install snmp-mibs-downloader
# download-mibs
```
これで `/etc/snmp-mibs-downloader/snmp-mibs-downloader.conf` に定義されている mib ファイルがインストールされます。
`/etc/snmp-mibs-downloader` の下に他の定義ファイルもありますので、必要に応じて追加可能です。

## Net-SNMP のページから追加 mib ファイルをダウンロード
Net-SNMP のページに mib ファイルがありますので [Net-SNMP Distributed MIBs](http://www.net-snmp.org/docs/mibs/) からダウンロード。
```tcsh:
# cd /usr/share/snmp
# mkdir netsnmp-mibs && cd netsnmp-mibs
# wget -r -N -nH -nd -A txt -np -l 2 http://www.net-snmp.org/docs/mibs/
```

# これらの mib ファイルを読み込むように設定
`download-mibs` でインストールされたディレクトリは追加されていますが `/usr/share/snmp/netsnmp-mibs` がないので追加します。
mib ファイルを入れたディレクトリを mibdirs の行に 「:」 で繋いで書きます。
行を分けるときは mibdirs の後の +を忘れると最後の行しか有効になりません注意。
```config:/etc/snmp/snmp.conf
mibs all

mibdirs /usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf
mibdirs +/usr/share/snmp/netsnmp-mibs
mibdirs +/usr/share/snmp/Aruba-mibs
mibdirs +/usr/share/snmp/FortiGate-mibs

# デフォルトのバージョンと、コミュニティー名 (いちいちコマンドラインで指定しなくて良くなる)
defVersion v2c
defCommunity abc-abc
strictCommentTerm false

```

# grafana, telegraf, influxdb のインストール
## リポジトリと、その PGP 署名キーの追加
- [Grafana 公式ページのインストール方法](https://grafana.com/docs/grafana/latest/setup-grafana/installation/debian/)
- [influxdb 公式ページのインストール方法](https://archive.docs.influxdata.com/influxdb/v1.2/introduction/installation/)

### Grafana
```
apt install -y apt-transport-https
apt install -y software-properties-common wget

wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | tee /etc/apt/sources.list.d/grafana.list
```

### telegraf, influxdb
```
wget -q -O /usr/share/keyrings/influxdata.key https://repos.influxdata.com/influxdata-archive_compat.key
source /etc/os-release
echo "deb [signed-by=/usr/share/keyrings/influxdata.key] https://repos.influxdata.com/debian stable main" | tee /etc/apt/sources.list.d/influxdb.list
```

## grafana telegraf influxdb のインストール
```
apt update
apt install grafana telegraf influxdb2
```

## バージョン確認
```
# grafana -v
Incorrect Usage: flag provided but not defined: -homepath
...(略)
VERSION:
   10.0.1
...(略)

# telegraf --version
Telegraf 1.27.1 (git: HEAD@a830df8f)

# influx version
Influx CLI dev (git: none) build_date: 2023-04-28T14:24:14Z
```

取りあえず無事にインストール完了



telegraf のデフォルトの config ファイルを生成する
```telegraf.conf の生成
% telegraf config > /etc/telegraf/telegraf.conf

% telegraf config --input-filter cpu:mem:net:swap --output-filter influxdb_v2 > /etc/telegraf/telegraf.conf
```

基本的には config は、これで生成するより Telegraf の Web 画面から作成するのが良いように思える。

複数の機器を監視する場合 `/etc/telegraf/telegraf.conf` に全て書くことも出来るが、`/etc/telegraf/telegraf.conf` を空にして `/etc/telegraf/telegraf.d/` の下に機器ごとにファイルを作成するとよい。
ただ、ファイル毎に独立している訳ではなく cat で繋げて読み込まれるようなものなので、無理に分割する必要は無い。
```config ファイルの位置
/etc/telegraf/telegraf.conf　起動時に指定されているファイル。無いとエラーになる。
/etc/telegraf/telegraf.d/*.conf　あると追加で読み込まれるファイル。拡張子は .conf。
```

```conifg:agent部分 (google 翻訳)
[agent]
  ## デフォルトの収集間隔
  interval = "60s"
  ## 収集間隔の丸め
  ## 例えば、interval="10s" とした場合、:00、:10、:20 に収集します。
  ## 0 秒, 0分から interval の計算をします。
  round_interval = true

  ## Telegraf は、最大で metric_batch_size メトリックのバッチでメトリックを出力に送信します。
  ## Telegraf が出力プラグインに送信する書き込みのサイズの指定です。
  metric_batch_size = 1000

  ## 出力あたりの未書き込みメトリックの最大数。この値を大きくすると、
  ## 最大メモリ使用量が増えるという犠牲を払ってメトリックをドロップすることなく、
  ## 出力のダウンタイムを長くすることができます。
  metric_buffer_limit = 10000

  ## コレクションのジッターは、ランダムな量でコレクションをジッターするために使用されます。
  ## 各プラグインは、収集する前にジッター内でランダムな時間スリープします。
  ## これは、多くのプラグインが sysfs のようなものをクエリするのを避けるために使用できます。
  ## 同時に、システムに測定可能な影響を与える可能性があります。
  collection_jitter = "0s"

  ## すべての出力のデフォルトのフラッシング間隔。最大 flush_interval は、
  ## flush_interval + flush_jitter になります
  flush_interval = "60 秒"
  ## ランダムな量だけフラッシュ間隔を揺らします。これは主に、多数の
  ## Telegraf インスタンスを実行しているユーザーの大きな書き込みスパイクを回避するためです。
  ## つまり、5 秒のジッターと 10 秒の間隔は、フラッシュが 10 ～ 15 秒ごとに発生することを意味します
  flush_jitter = "0s"

  ## デフォルトまたは「0s」に設定されている場合、精度は収集間隔と同じ
  ## タイムスタンプの順序に設定され、最大値は 1 秒です。
  ##   例えば, interval = "10s" の場合、精度は "1s" になります。
  ##          interval = "250ms" の場合、精度は "1ms" になります。
  ## 精度はサービス入力には使用されません。適切な精度でタイムスタンプを
  ## 設定するのは、個々のサービス入力次第です。
  ## 有効な時間単位は、「ns」、「us」(または「µs」)、「ms」、「s」です。
  precision = ""

  ## デバッグレベルのログを記録するか。
  debug = true
  ## エラー レベルのメッセージのみをログに記録するか。
  quiet = false

  ## ログ ターゲットはログの宛先を制御し、「file」、「stderr」、
  ## または Windows では「eventlog」のいずれかになります。
  ## 「file」に設定すると、出力ファイルは「logfile」設定によって決定されます。
  # logtarget = "file"

  ## "file" ログターゲットを使用する場合にログに記録されるファイルの名前。
  ## 空の文字列に設定すると、ログは stderr に書き込まれます。
  # logfile = ""

  ## ログファイルは、指定された時間間隔の後にローテーションされます。
  ## 0 に設定すると、時間ベースのローテーションは実行されません。
  ## ログは書き込まれたときにのみローテーションされます。
  ## ログ アクティビティがない場合、ローテーションが遅れる可能性があります。
  # logfile_rotation_interval = "0d"

  ## 指定したサイズよりも大きくなると、ログファイルはローテーションされます。
  ## 0 に設定すると、サイズ ベースのローテーションは実行されません。
  logfile_rotation_max_size = "100MB"

  ## 保持するローテーション アーカイブの最大数。古いログは削除されます。
  ## -1 に設定すると、アーカイブは削除されません。
  logfile_rotation_max_archives = 30

  ## ログ記録時に使用するタイムゾーンを選択するか、現地時間に「local」と入力します。
  ## 例: アメリカ/シカゴ
  # log_with_timezone = ""

  ## デフォルトのホスト名をオーバーライドします。空の場合は os.Hostname() を使用します
  hostname = ""
  ## true に設定すると、telegraf エージェントに「host」タグを設定しません。
  omit_hostname = false
```


## 各社のプライベート mib の入手先
- Cisco の mib は [github](https://github.com/cisco/cisco-mibs) からもダウンロードできます。機種毎の mib は [supportlists](https://github.com/cisco/cisco-mibs/tree/main/supportlists) で、パスを確認し https://cisco.github.io/cisco-mibs/supportlists/[product]/[product]supportlist.html を
```
wget -O- <URL> | sed -ne 's/.*"\([^"]*.my\)".*/\1/p' | xargs -n 1 wget
```
で取ってくることができます。
- Fortigate は Fortigate の WebUI からダウンロード
- PaloAlto の [TECH DOCS](https://docs.paloaltonetworks.com/resources/snmp-mib-files)
- Aruba AP/Switch は [Aruba サポートPortal](https://asp.arubanetworks.com/) (ユーザ登録が必要)
- [NEC IX ルータ](https://jpn.nec.com/univerge/ix/download.html)、そのほか L2/L3 Switch, QX (Wi-Fi AP) などは[製品ページ](https://jpn.nec.com/bbnet/list/network.html#anc-switch)のダウンロードから
- Allied Telesis (CentreCOM) は、[各機種のファームのダウンロードページ](https://www.allied-telesis.co.jp/support/list/router/index.html)から
- [Apresia (日立関連企業)](https://www.apresia.jp/products/ent/np/manual.html)
- [YAMAHA](http://www.rtpro.yamaha.co.jp/RT/docs/mib/index.php)
- Alaxala [ファームと一緒に CD で供給？](https://www.alaxala.com/jp/techinfo/archive/manual/AX2400S/HTML/11_7/MIBREF/0008.HTM)

Kapacitor を telegraf と influxdb の間に挟むとデータの前処理ができるらしい。