sFlowによるKVM仮想スイッチ（Linux Bridge）フローモニタリングと仮想マシン性能管理

#sFlowによるKVM仮想スイッチ（Linux Bridge）フローモニタリングと仮想マシン性能管理

###構成
　ホスト・仮想マシンの構成は、
　　ホストOS（trafficsentinelkvm.flownetsecure.com）：192.168.10.51
　上に、２つの仮想マシン
　　compute-vm01：192.168.10.52　
　　compute-vm02：192.168.10.53　
　を作成
　本構成の作成方法は、
 　 [CentOS8KVM及び仮想マシンのセットアップ](https://qiita.com/Shinya_IDENO/items/9c93c132f737b1b71a51)
　を参照

###ホストOS上の設定
sFlowによるKVM仮想スイッチ（Linux Bridge）フローモニタリングと仮想マシン性能管理を実現するために [Host sFlow](https://sflow.net/) をホストOSにインストールする
sFlow（厳密には,「Host sFlow」）によってフロー情報と仮想マシン性能情報がコレクタ（この例では、TrafficSentinel:192.168.10.111）に送出される

#####現在のネットワーク構成
```
[root@trafficsentinelkvm ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 9c:5c:8e:c0:0a:d2 brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 9c:5c:8e:c0:0a:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.51/24 brd 192.168.10.255 scope global noprefixroute br0
       valid_lft forever preferred_lft forever
    inet6 2400:4150:9020:b00:63d5:a6ad:6606:2f50/64 scope global dynamic noprefixroute
       valid_lft 289sec preferred_lft 289sec
    inet6 fe80::483e:9fae:62e6:5175/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:52:d6:e5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:52:d6:e5 brd ff:ff:ff:ff:ff:ff
6: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:54:bd:55 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe54:bd55/64 scope link
       valid_lft forever preferred_lft forever
7: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:f4:1c:43 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fef4:1c43/64 scope link
       valid_lft forever preferred_lft forever
```

#####SNMPのインストール
```
[root@trafficsentinelkvm ~]# dnf install net-snmp
[root@trafficsentinelkvm ~]# dnf install net-snmp-utils
```
######snmpd.confの設定
基本的にはインターフェース関連の情報があれば問題無いが、
全体監視項目全体を利用可能にする為、以下を設定；

```
[root@trafficsentinelkvm ~]# vi /etc/snmp/snmpd.conf 
# Make at least  snmpwalk -v 1 localhost -c public system fast again.
# name           incl/excl     subtree         mask(optional)
view    systemview    included   .1
```
######適用
```
[root@trafficsentinelkvm ~]# systemctl enable snmpd
Created symlink /etc/systemd/system/multi-user.target.wants/snmpd.service → /usr/lib/systemd/system/snmpd.service.
[root@trafficsentinelkvm ~]# systemctl start snmpd
[root@trafficsentinelkvm ~]# systemctl status snmpd -l
● snmpd.service - Simple Network Management Protocol (SNMP) Daemon.
   Loaded: loaded (/usr/lib/systemd/system/snmpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2021-05-04 09:51:11 JST; 1min 10s ago
 Main PID: 5677 (snmpd)
    Tasks: 1 (limit: 99689)
   Memory: 17.3M
   CGroup: /system.slice/snmpd.service
           mq5677 /usr/sbin/snmpd -LS0-6d -f

 5月 04 09:51:11 trafficsentinelkvm.flownetsecure.com systemd[1]: Starting Simple Network Management Protocol (SNMP) Daemon....
 5月 04 09:51:11 trafficsentinelkvm.flownetsecure.com snmpd[5677]: NET-SNMP version 5.8
 5月 04 09:51:11 trafficsentinelkvm.flownetsecure.com systemd[1]: Started Simple Network Management Protocol (SNMP) Daemon..
```
######ファイアウォールポート設定
```
[root@trafficsentinelkvm etc]# sudo firewall-cmd --add-port 161/udp --permanent
success
[root@trafficsentinelkvm etc]# sudo firewall-cmd --add-port 162/udp --permanent
success
[root@trafficsentinelkvm etc]# sudo firewall-cmd --reload
success
```
######SNMPWALKにて動作確認
```
[root@trafficsentinelkvm ~]# snmpwalk -v 2c -c public -O e 127.0.0.1
インターフェース単位のMIB値の応答
```
###Host Flowのインストール
https://sflow.net/downloads.php
よりダウンロード

```
[root@trafficsentinelkvm ~]# rpm -i hsflowd-centos8-<version>.x86_64.rpm
[root@trafficsentinelkvm ~]# sudo systemctl enable hsflowd
Synchronizing state of hsflowd.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable hsflowd
Created symlink /etc/systemd/system/multi-user.target.wants/hsflowd.service → /usr/lib/systemd/system/hsflowd.service.
[root@trafficsentinelkvm ~]# sudo vi /etc/hsflowd.conf
編集箇所抜粋；
sflow {
     agent.cidr = 192.168.0.0/16
     agent = br0
     polling = 30
     sampling = 400
     sampling.http = 50
     sampling.app.myapp = 100
     collector { ip=192.168.10.111 udpport=6343 }
     pcap { dev = br0 }
     pcap { dev = lo }
     pcap { speed=0- }
     kvm { }
     tcp { }
}
[root@trafficsentinelkvm ~]# service hsflowd start
Starting hsflowd (via systemctl):                          [  OK  ]
```

設定適用内容は、以下で確認

```
[root@trafficsentinelkvm ~]# cat /etc/hsflowd.auto
# WARNING: Do not edit this file. It is generated automatically by hsflowd.
rev_start=1
hostname=trafficsentinelkvm.flownetsecure.com
sampling=400
header=128
datagram=1400
polling=30
sampling.app.myapp=100
sampling.http=50
agentIP=192.168.10.51
agent=br0
ds_index=1
collector=192.168.10.111 6343
rev_end=1
```

サンプリングレートの変更は、/etc/hsflowd.conf の
  #   sampling N on interfaces with ifSpeed:
  #     sampling.100M = 100
  #     sampling.1G = 1000
  #     sampling.10G = 10000
  #     sampling.40G = 40000
 で設定するようだが、うまく適用できない。
この部分にバグがあるようなので、
サンプリングレートを変更したい場合は、 
 https://github.com/sflow/host-sflow/commit/ac45d20cf93ea057b37ece423341021fbfbb3918
で、SourceからのBuildになる（Source版でBugFix済）。

###TrafficSentinelでの表示例

######インターフェース情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/a2d7afbc-34fd-bb94-88be-fc9d98e1324a.png)

######フロー情報
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/66eaed5d-89bf-d762-62be-b78c483e63d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/114e5346-000f-f7c9-308c-b22531cbe6b2.png)

######仮想マシン情報（ホスト＋仮想マシン）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/d28e160e-1e0b-66e7-f702-a65351842baf.png)

######ホストマシン性能情報：trafficsentinelkvm.flownetsecure.com
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/af8a54b4-7198-89f9-0637-4658532950e3.png)

######仮想マシン性能情報：compute-vm01
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/2cf89d7b-59cc-2705-f466-bc6e44ca83e0.png)

######仮想マシン性能情報：compute-vm02
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/705452/5e21fa3e-08cc-bd23-067c-9f1ce3863dc2.png)

コレクタは、無償版のsFlowTrendでも同等の情報表示が可能
参照：[sFlowTrendのインストール](https://qiita.com/Shinya_IDENO/items/43f412fd30754fc1eaff)