Oracle Solaris 11のツールを使用した高度なネットワーク監視

Orgad Kimchi著

Oracle Solaris 11のネットワーク・ツールを使用してネットワーク統計を生成、観測、分析する方法


2013年9月公開


この記事では、Oracle Solaris 11のツールの機能を示すために、3つのユースケースを確認していきます。最初のユースケースでは、2つのシステム間のネットワーク帯域幅を測定する方法を説明します。2つ目のユースケースでは、特定のTCPポート上のネットワーク統計を観測する方法を説明します。さらに、最後のユースケースでは、特定の期間におけるネットワーク・リソース使用統計の履歴を収集し表示する方法について、例を使用して説明します。

この記事へのコメントがある場合は、FacebookのOTN Garageページにコメントへのリンクをご投稿ください。類似した記事を共有する場合は、FacebookまたはTwitterまでお知らせください。その話題について議論しましょう。

これらのツールを使用するメリットは次のとおりです。

  • ツールはOracle Solaris 11オペレーティング・システムに組み込まれているため、サード・パーティ・アプリケーションをインストールまたは購入する必要がありません。また、ネットワークの測定を実行するための専用のハードウェア機器を使用する必要もありません。
  • ネットワーク統計収集中のツールのパフォーマンス・オーバーヘッドは低い(約5%)ため、本番システムでも安全に使用でき、ネットワークのI/Oワークロードに対するパフォーマンス上の影響も最小限に抑えられます。また、ツールはOracle Solaris 11を再起動せずに有効化または無効化できます。
  • 物理ネットワークの要素や、マルチテナント・クラウド環境における仮想ネットワーク・インタフェース・カード(VNIC)、仮想オペレーティング・システム(例:Oracle Solaris Zones)などの仮想ネットワークの要素を監視できます。さらに、監視対象の特定の仮想要素に基づいて、非常に正確な観測結果を取得できます。
  • ネットワーク・アクティビティのベースラインを生成するために、ネットワーク統計の履歴を収集できます。このベースラインは、現在のネットワーク・アクティビティと以前のアクティビティとの比較、および今後の拡張に向けたキャパシティ・プランニングのために使用できます。加えて、特定の期間に基づいた統計レポートを生成して、ネットワーク・アクティビティを視覚化できます。

この記事で示す例では、すべての構成要素は、Oracle Solaris Zones、ZFS、ネットワーク仮想化テクノロジーを使用してインストールされます。そのアーキテクチャを図1に示します。

図1

図1

2つの環境間のネットワーク帯域幅測定

最初のユースケースでは、2つの環境間のネットワーク帯域幅を測定します。

:この記事で紹介するツールや手順は、物理システム間にも仮想システム(例:Oracle Solaris Zones)間にも使用できます。

パフォーマンス・ベンチマークの実行時には、ネットワーク帯域幅を測定することが望まれます。この測定は、その後のネットワーク・スケーラビリティの測定に役立ちます。また、ネットワークの処理能力をテストすることで、特定環境における制限要因となるネットワークを除去できます。

この種のタスクに役立つツールは、iperf(1)ツールです。このツールでは、ネットワークのパフォーマンスを測定できます。また、TCPまたはUDPのスループットを観測し、リアルタイム統計を取得できます。このツールを、2つのOracle Solaris Zones間の最大ネットワーク帯域幅を測定するために使用します。

Oracle Solaris 11のネットワーク仮想化機能を使用すれば、VNIC、仮想スイッチ(vSwitch)、高度なネットワーク・コンポーネント(例:ロードバランサルーターファイアウォール)などのあらゆる物理的なネットワーク・トポロジをOracle Solarisオペレーティング・システム内部に構築できます(図2を参照)。

このテクノロジーを使用するメリットとして、過剰なネットワーク機器への投資が不要になるため、インフラストラクチャ・コストが削減されます。また、すべてのネットワーク構成要素がハードウェアではなくソフトウェアに基づいたものになるため、インフラストラクチャの導入にかかる時間が大幅に短縮されます。

図2

図2

このユースケースでは、物理ネットワーク・カードの上層にVNICを作成する機能を利用します。

VNICの作成

まずは、VNICを作成しましょう(後の手順で、作成したVNICをOracle Solaris Zonesに関連付けます)。

root@global_zone:~# dladm create-vnic vnic0 -l net0
root@global_zone:~# dladm create-vnic vnic1 -l net0

dladm show-vnicコマンドを使用して、VNICが作成されたことを確認します。

root@global_zone:~# dladm show-vnic
LINK                OVER         SPEED  MACADDRESS        MACADDRTYPE       VID
vnic0               net0         1000   2:8:20:c0:c:d0    random            0
vnic1               net0         1000   2:8:20:7c:9:c6    random            0

vnic0vnic1という2つのVNICが作成されたことを確認できます。また、それらのMACアドレスと関連付けられた物理リンク(net0)も表示されます。

第1ゾーン(source_zone)の作成

Oracle Solaris Zonesは、Oracle Solarisで利用できる組込みの仮想化テクノロジーです。この最初のユースケースでは、Oracle Solaris Zonesにテスト環境を格納します。

source_zoneゾーンとtarget_zoneゾーン用のファイル・システムをまだ作成していない場合は、次のコマンドを実行します。

root@global_zone:~# zfs create -o mountpoint=/zones rpool/zones

zonecfgコマンドは、第1ゾーンsource_zoneを作成するために使用できます。ゾーンを作成するために必要となる最小限の情報は、名前とゾーンパスです。さらに、前項で作成したvnic0というVNICを追加します。

root@global_zone:~# zonecfg -z source_zone
Use 'create' to begin configuring a new zone.
zonecfg:source_zone> create
create:Using system default template 'SYSdefault'
zonecfg:source_zone> set zonepath=/zones/source_zone
zonecfg:source_zone> add net
zonecfg:source_zone:net> set physical=vnic0
zonecfg:source_zone:net> end
zonecfg:source_zone> verify
zonecfg:source_zone> commit
zonecfg:source_zone> exit

次に、ゾーンをインストールします。

root@global_zone:~# zoneadm -z source_zone install

この後、ゾーンを起動する必要があります。

root@global_zone:~# zoneadm -z source_zone boot

source_zoneにログインします。システム構成ツールを使用して、ゾーンのシステム構成を行います。

root@global_zone:~# zlogin -C source_zone

システム構成ツールの対話型画面で、次の情報を指定します。

  • Computer Name:source_zone
  • Network connection configured:Manually
  • Wired network connection to be configured during installation:vnic0
  • IP address:10.0.0.1
  • Netmask:255.255.255.0
  • DNS Name Service:Do not configure DNS
  • Alternative Name Service:None
  • Time Zone Region:Europe
  • Time Zone Location:Britain (UK)
  • Time Zone:GB

さらに、rootパスワードを指定します。

構成が終了したら、ゾーンの起動に関するメッセージが表示されます。ゾーン・コンソールのloginプロンプトで、rootとしてゾーンにログインします。

source_zone console login:root
Password:

ゾーンへのログイン後、ipadmコマンドを使用してネットワーク構成を確認します。

root@source_zone:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
vnic0/v4          static   ok           10.0.0.1/24
lo0/v6            static   ok           ::1/128
vnic0/v6          addrconf ok           fe80::8:20ff:fec0:cd0/10

この結果から分かるように、vnic0のIPアドレスは10.0.0.1です。

次に、リスト1のコマンドを使用して、source_zone内にiperfツールをインストールします。

root@source_zone:~# pkg install iperf

Packages to install:1
       Create boot environment:No
Create backup boot environment:No

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                1/1           6/6      0.0/0.0  942k/s

PHASE                                          ITEMS
Installing new actions                         20/20
Updating package state database                 Done
Updating image state                            Done
Creating fast lookup database                   Done

リスト1

"~."エスケープ・シーケンスを使用して、ゾーン・コンソールを終了します。

source_zone:~# ~.
[Connection to zone 'source_zone' console closed]

第2ゾーン(target_zone)の作成

次に、zonecfgコマンドを使用して、大域ゾーンからターゲット・ゾーンを設定します。

ゾーン構成時に、ゾーン名、ゾーンパス、VNIC名(vnic1)を入力します。

root@global_zone:~# zonecfg -z target_zone
Use 'create' to begin configuring a new zone.
zonecfg:target_zone> create
create:Using system default template 'SYSdefault'
zonecfg:target_zone> set zonepath=/zones/target_zone
zonecfg:target_zone> add net
zonecfg:target_zone:net> set physical=vnic1
zonecfg:target_zone:net> end
zonecfg:target_zone> verify
zonecfg:target_zone> commit
zonecfg:target_zone> exit

次に、ゾーンをインストールします。

root@global_zone:~# zoneadm -z target_zone install

その後、ゾーンを起動します。

root@global_zone:~# zoneadm -z target_zone boot

作成したゾーンのステータスを確認します。

root@global_zone:~# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              solaris  shared
   1 source_zone      running    /zones/source_zone             solaris  excl
   2 target_zone      running    /zones/target_zone             solaris  excl

target_zonesource_zoneのステータスがrunningになっています。

target_zoneにログインします。

root@global_zone:~# zlogin -C target_zone

システム構成ツールの対話型画面で、次の情報を指定します。

  • Computer Name:target_zone
  • Network connection configured:Manually
  • Wired network connection to be configured during installation:vnic1
  • IP address:10.0.0.2
  • Netmask:255.255.255.0
  • DNS Name Service:Do not configure DNS
  • Alternative Name Service:None
  • Time Zone Region:Europe
  • Time Zone Location:Britain (UK)
  • Time Zone:GB

さらに、rootパスワードを指定します。

ゾーン構成の終了後、ゾーン・コンソールのloginプロンプトで、rootユーザーとしてゾーンにログインします。

target_zone console login:root
Password:

ipadmコマンドを使用して、ネットワーク構成を確認します。

root@target_zone# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
vnic1/v4          static   ok           10.0.0.2/24
lo0/v6            static   ok           ::1/128
vnic1/v6          addrconf ok           fe80::8:20ff:fe7c:9c6/10

この結果から分かるように、vnic1のIPアドレスは10.0.0.2です。

次に、target_zoneから、source_zoneにpingできることを確認します。

root@target_zone:~# ping 10.0.0.1
10.0.0.1 is alive

:環境によっては、Oracle Solaris 11のファイアウォールによりネットワーク・トラフィックがブロックされることがあります。セキュリティ・ポリシー上の問題がなければ、ファイアウォール・サービスを無効化できます。そのためには、svcadm disable ipfilterコマンドを使用するか、2つの環境間のネットワーク・トラフィックを有効化するためのファイアウォール・ルールを追加します。Oracle Solarisのファイアウォールの例については、Securing the Network in Oracle Solaris 11.1を参照してください。

次のコマンドを使用して、iperfツールをインストールします。

root@target_zone:~# pkg install iperf

ネットワーク・パフォーマンス・ベンチマークの開始

iperfの測定を実行するには、ネットワーク・トラフィックを生成するサーバーとクライアントの両方を構築する必要があります。

そのため、ターゲット・ゾーンで、次のコマンドを使用してiperfコマンドをサーバー・モードで実行します。引数の意味は次のとおりです。

  • -s:サーバー・モードを指定する。
  • -l:読取り/書込みバッファ長(128K)を設定する。
root@target_zone:~# iperf -s -l 128k

iperfコマンドの実行後、ターミナルに次のメッセージが表示されます。

------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:125 KByte (default)
------------------------------------------------------------

次に、ソース・ゾーンでiperfクライアントを実行します。

別のターミナル・ウィンドウからソース・ゾーンにログインします。

global_zone# zlogin source_zone

ソース・ゾーンで、次のiperfコマンドをクライアント(つまりローダー)モードで実行します。引数の意味は次のとおりです。

  • -c:クライアント・モードでのコマンドを指定する。
  • -l:読取り/書込みバッファ長(128K)を指定する。
  • -P:クライアント・スレッドの並行実行数(4)を指定する。
  • -i n:周期的な帯域幅レポートの表示間隔(n秒、このケースでは1秒)。
  • -t:秒単位のデータ転送時間(180秒)を指定する。
root@source_zone:~# iperf -c 10.0.0.2 -l 128k -P 4 -i 1 -t 180

:10.0.0.2はtarget_zoneのIPアドレスです。

iperfコマンドの実行後、実行時統計の表示が開始されます。

------------------------------------------------------------
Client connecting to 10.0.0.2, TCP port 5001
TCP window size:48.0 KByte (default)
------------------------------------------------------------
[  6] local 10.0.0.1 port 54972 connected with 10.0.0.2 port 5001
[  4] local 10.0.0.1 port 64738 connected with 10.0.0.2 port 5001
[  5] local 10.0.0.1 port 60614 connected with 10.0.0.2 port 5001
[  3] local 10.0.0.1 port 57875 connected with 10.0.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0- 1.0 sec    316 MBytes  2.65 Gbits/sec 

ネットワーク統計の表示

target_zoneで、vnic1ネットワーク・インタフェースのネットワーク統計を表示するために、dlstat(1m)コマンドを使用します。dlstat(1m)コマンドは、物理データリンクまたは仮想データリンク(例:VNIC)に関する実行時のネットワーク使用統計をレポートします。

別のターミナルを開き、target_zoneにログインします。

次のコマンドは、vnic1の統計を1秒間隔で表示します。

root@target_zone:~# dlstat -i 1 vnic1
LINK IPKTS RBYTES OPKTS OBYTES
vnic1 144.51M 217.32G 18.69M 1.23G
vnic1 806.08K 1.21G 100.83K 6.66M
vnic1 813.68K 1.22G 101.72K 6.71M
vnic1 846.54K 1.27G 105.89K 6.99M
vnic1 868.58K 1.31G 108.63K 7.17M
^C

dlstatコマンドを停止するには、[Ctrl]キーを押しながら[c]キーを押します。

この結果から分かるように、dlstatコマンドにより次の情報が表示されます。

  • インバウンド・パケット数(IPKTS
  • 受信済みバイト数(RBYTES
  • アウトバウンド・パケット数(OPKTS
  • 送信済みバイト数(OBYTES

多数のOracle Solaris Zonesがさまざまなネットワーク・ワークロードを実行するマルチテナント・クラウド環境において、おもな課題の1つは、過負荷のシステム・リソースを見つけることです。

Oracle Solaris 11の監視ツールを使用すれば、ボトルネックを見つけるために、特定のゾーンおよび特定のVNICを指定してネットワーク測定を実行できます。例として、ある特定のゾーンと関連付けられたネットワーク・カードのネットワーク統計を表示しましょう。

観測を開始する前に、iperfネットワーク・ワークロードをsource_zoneから再実行する必要があります。

root@source_zone:~# iperf -c 10.0.0.2 -l 128k -P 4 -i 1 -t 180

target_zonesource_zoneのネットワーク統計を表示するには、大域ゾーンから次のコマンドを実行します。

root@global_zone:~# dlstat -i 1 -z target_zone,source_zone
LINK IPKTS RBYTES OPKTS OBYTES
source_zone/vnic0 16.07M 1.06G 4.62M 177.86G
target_zone/vnic1 123.48M 185.71G 16.06M 1.06G
^C

dlstatコマンドを停止するには、[Ctrl]キーを押しながら[c]キーを押します。

この結果から分かるように、両方のゾーンとそのVNICを同時に監視できました。

各ゾーンおよび関連付けられたVNICの送信済みバイト数(OBYTES)や受信済みバイト数(RBYTES)を観測できます。

マルチテナント・クラウド環境でネットワークを監視するために使用できる便利なコマンドには、他にもzonestat(1)コマンドがあります。

たとえば、ゾーンごとのネットワーク統計を、CPUやメモリの使用状況とともに監視できます。

root@global_zone:~# zonestat -z source_zone -z target_zone 1
Collecting data for first interval...
Interval:1, Duration:0:00:01
SUMMARY                   Cpus/Online:4/4   PhysMem:15.9G  VirtMem:17.9G
                    ---CPU----  --PhysMem-- --VirtMem-- --PhysNet--
               ZONE  USED %PART  USED %USED  USED %USED PBYTE %PUSE
            [total]  3.15 78.9% 1838M 11.2% 3857M 20.9%  484K 0.04%
           [system]  1.86 46.6% 1224M 7.47% 3430M 18.6%     -     -
        source_zone  0.59 14.7% 62.1M 0.37% 51.3M 0.27%  483K 0.04%
        target_zone  0.47 11.9% 62.4M 0.38% 51.5M 0.27%   132 0.00%
^C

zonestatコマンドを停止するには、[Ctrl]キーを押しながら[c]キーを押します。

source_zoneゾーンとtarget_zoneゾーンのCPU、メモリ、ネットワークに関するユーティリティ・レポートを表示できます。各ゾーンの使用状況は、システム・リソースおよびゾーンの構成済み上限値に対する割合(%)としてレポートされます。

特定のリソース(例:ネットワーク)の詳細を出力するために、-rオプションを使用できます。また、-xオプションを使用すれば、リスト2のような詳細情報を含む拡張ビューを表示できます。

root@global_zone:~# zonestat -z source_zone -z target_zone -r network -x 1
Collecting data for first interval...
Interval:1, Duration:0:00:01
NETWORK-DEVICE                  SPEED        STATE        TYPE
net0                         1000mbps           up        phys
        ZONE       LINK           TOBYTE  MAXBW %MAXBW PRBYTE %PRBYTE POBYTE %POBYTE
      [total]      net0            926M    -      -    300   0.00%   144K   0.11%
       global      net0            1368    -      -    300   0.00%    888   0.00%
     target_zone   vnic1            463M   -      -      0   0.00%      0   0.00%
     source_zone   vnic0            463M   -      -      0   0.00%   143K   0.11%  
     source_zone  source_zone/net0  120    -      -      0   0.00%      0   0.00% 
     target_zone  target_zone/net0  120    -      -      0   0.00%      0   0.00%

リスト2

zonestatコマンドを停止するには、[Ctrl]キーを押しながら[c]キーを押します。

リスト2の出力には次の情報が含まれています。

  • データリンク名(LINK
  • データリンクまたは仮想リンクにより送受信されたバイト数(TOBYTE
  • データリンクに構成されている最大帯域幅(MAXBW
  • 構成済みの最大帯域幅に対する送受信済みバイト数の合計の割合(%)(%MAXBW
  • 物理帯域幅を消費した受信済みバイト数(PRBYTE
  • 利用可能な物理帯域幅に対する、PRBYTEの受信に使用された帯域幅の割合(%)(%PRBYE
  • 物理帯域幅を消費した送信済みバイト数(POBYTE
  • 利用可能な物理帯域幅に対する、POBYTEの送信に使用された帯域幅の割合(%)(%POBYE

ベンチマークのサマリー

iperfベンチマーク結果のサマリーを作成しましょう。

ネットワーク・ロードの完了後、iperfによってベンチマーク結果のサマリーが出力されます。

target_zoneでは、次のようなベンチマーク結果のサマリーが表示されます。

...
...
[ ID] Interval Transfer Bandwidth
[SUM] 0.0-180.0 sec 32.2 GBytes 9.21 Gbits/sec

このiperfベンチマーク結果から分かるように、2つのOracle Solaris Zones間の最大ネットワーク帯域幅は9.21ギガビット/秒です。

その他の興味深い点として、この値は、複数のアプリケーションを異なるシステムにインストールするのではなく、1台のシステム上のOracle Solaris Zonesにインストールすることで大きなメリットが得られることを表しています。Oracle Solaris Zonesを使用する場合、ネットワーク・トラフィックをシステム外部のネットワークに送信する必要がありません。そのため、たとえば複数のシステムが1ギガビットの物理ネットワークで接続された環境と比較して、非常に短い待機時間で非常に高いスループットを達成できます。その他の例については、How to Control Your Application's Network Bandwidthを参照してください。

:ネットワーク・ベンチマークの結果は、サーバー・モデル、ネットワーク・カード、ネットワーク・インフラストラクチャ機器によって変動する可能性があります。

特定のTCPまたはUDPネットワーク・ポートにおける2つのシステム間のネットワーク・トラフィックの監視

2つ目のユースケースでは、特定のTCPまたはUDPネットワーク・ポートにおける2つのシステム間(物理システムでも仮想システムでも可能)のネットワーク・トラフィックを測定します。

dlstat(1M)コマンドとzonestat(1)コマンドは帯域幅の測定に便利ですが、特定のネットワーク・ポート上のネットワーク・トラフィックを監視する機能はありません。

特定のTCPまたはUDPポートを監視する機能は、同じアプリケーションを実行する2つのシステム間(例:Webサーバーが2つのデータセンター間でレプリケーションされた環境)のパフォーマンス問題を分析する必要がある場合に便利です。

このユースケースでは、2つのOracle Solaris Zones間のTCPポート443におけるネットワーク帯域幅を測定します(図3を参照)。まず、測定するネットワーク・カード上のフローを設定します。

フローとは、Oracle Solaris 11の新しいネットワーク仮想化アーキテクチャに組み込まれた、洗練されたサービス品質メカニズムです。フローを使用すれば、特定のネットワーク・インタフェース上の特定のネットワーク・ポートについて、ネットワーク帯域幅の測定や上限設定を行うことができます。

さらに、フローの作成、変更、削除は、大域ゾーンでも非大域ゾーンでも実行できます。

図3

図3

次の例では、vnic1ネットワーク・インタフェース上のTCP 443ネットワーク・ポートに関連付けられるフローを設定します。

target_zoneで、フローを有効化します。

root@target_zone:~# flowadm add-flow -l vnic1 -a transport=TCP,local_port=443 https-flow

:フローを有効化または無効化するために、ゾーンを再起動する必要はありません。これは、本番システムでネットワークのパフォーマンス問題をデバッグする必要がある場合に非常に便利です。

フローが作成されたことを確認します。

root@target_zone:~# flowadm show-flow
FLOW LINK IPADDR PROTO LPORT RPORT DSFLD
https-flow vnic1 -- tcp 443 -- --

関連付けられているVNIC(vnic1)とTCPポート番号(443)に対してhttps-flowフローが作成されています。

target_zoneで、[Ctrl]キーを押しながら[c]キーを押してiperfサーバーを停止します。

target_zoneで、再度iperfサーバーを起動します。引数の意味は次のとおりです。

  • -s:サーバー・モードを指定する。
  • -l:読取り/書込みバッファ長(128K)を設定する。
  • -p:ネットワーク・ポート番号(443)を指定する。
root@target_zone:~# iperf -s -l 128k -p 443
------------------------------------------------------------
Server listening on TCP port 443
TCP window size:125 KByte (default)
------------------------------------------------------------

今回は、サーバーがTCPポート番号443でリスニングしていることを確認できます。

ローダーを開始するには、source_zoneiperfコマンドを実行します。引数の意味は次のとおりです。

  • -c:クライアント・モードを指定する。
  • -l:読取り/書込みバッファ長(128K)を設定する。
  • -P:クライアント・スレッドの並行実行数(4)を指定する。
  • -i n:周期的な帯域幅レポートの表示間隔(n秒、このケースでは1秒)。
  • -t:秒単位のデータ転送時間(180秒)を指定する。
  • -p:ポート番号(443)を指定する。
source_zone:~# iperf -c 10.0.0.2 -l 128k -P 4 -i 1 -t 180 -p 443

target_zoneでは、flowstat(1M)コマンドを使用できます。このコマンドは、ユーザー定義のフローに関する実行時統計をレポートします。受信側の統計のみ、または送信側の統計のみをレポートすることもできます。さらに、指定したリンク上のすべてのフローに関する統計や、特定のフローに関する統計を表示することもできます。

次のコマンドで、TCPポート443を監視しているhttps-flowフロー上の帯域幅のレポートを表示します。

root@target_zone:~# flowstat -i 1
FLOW IPKTS RBYTES IDROPS OPKTS OBYTES ODROPS
https-flow 24.72M 37.17G 0 3.09M 204.08M 0
https-flow 749.28K 1.13G 0 93.73K 6.19M 0
https-flow 783.68K 1.18G 0 98.03K 6.47M 0
https-flow 668.83K 1.01G 0 83.66K 5.52M 0
https-flow 783.87K 1.18G 0 98.07K 6.47M 0
https-flow 775.34K 1.17G 0 96.98K 6.40M 0
https-flow 777.15K 1.17G 0 97.21K 6.42M 0
^C

flowstatコマンドを停止するには、[Ctrl]キーを押しながら[c]キーを押します。

この結果から分かるように、このflowstatコマンドにより、TCPポート443のネットワーク統計が表示されます。また、vnic1ネットワーク・インタフェース上でフローを有効化しても、ネットワークのパフォーマンスは低下していません。

source_zone上のロードが終了するまで数分間待機すると、終了時にiperfツールのメッセージ出力が停止します。

ネットワーク統計は大域ゾーンから観測することもできます。この方法は、複数のフローを定義し、中央のロケーションから監視する場合に便利です。

次に、source_zone内に別のネットワーク・フローを定義します。TCPポート443を使用して、vnic0上にフローを定義します。

root@source_zone # flowadm add-flow -l vnic0 -a transport=TCP,local_port=443 https-flow

大域ゾーンから、前の手順で作成したフローを確認します。

root@global_zone # flowadm show-flow
FLOW        LINK                IPADDR                   PROTO  LPORT   RPORT   DSFLD
source_zone/https-flow vnic0    --                       tcp    443     --      --
target_zone/https-flow vnic1    --                       tcp    443     --      --

source_zone上で、再度iperfベンチマークを開始します。

root@source_zone:~# iperf -c 10.0.0.2 -l 128k -P 4 -i 1 -t 180 -p 443

大域ゾーンから、ネットワーク・フローの観察を開始します。

root@global_zone:~# flowstat -i 1
FLOW IPKTS RBYTES IDROPS OPKTS OBYTES ODROPS
source_zone/https-flow 0 0 0 0 0 0
target_zone/https-flow 132.33M 198.97G 0 17.31M 1.14G 0
source_zone/https-flow 0 0 0 0 0 0
target_zone/https-flow 848.25K 1.28G 0 109.92K 7.25M 0
source_zone/https-flow 0 0 0 0 0 0
target_zone/https-flow 848.26K 1.28G 0 110.05K 7.26M 0
^C

flowstatコマンドを停止するには、[Ctrl]キーを押しながら[c]キーを押します。

前の手順で作成した2つのフロー(source_zone/https-flowtarget_zone/https-flow)のネットワーク統計を表示できます。そのため、両方のゾーンとそれらに関連付けられたフローを監視できます。

オプション:ネットワーク測定の終了後、フローを削除できます。

root@target_zone:~# flowadm remove-flow https-flow

フローが削除されたことを確認します。

root@target_zone:~# flowadm show-flow

:フローを削除するためにゾーンを再起動する必要はありません。これは、本番システムで非常に便利です。

ネットワーク統計の履歴の収集と分析

最後のユースケースでは、Oracle Solaris 11のネットワーク統計データの履歴保存機能を使用します。この機能は、長期間ベンチマークを実行してネットワークの傾向を確認する場合に便利です。ネットワーク使用統計は、Oracle Solarisの拡張アカウンティング機能を使用して保存できます。詳細はacctadm(1M)を参照してください。

また、ネットワーク・パフォーマンスが低下している疑いがある場合に、現在のネットワーク統計をネットワーク統計の履歴と比較できます。

拡張アカウンティング機能を使用すれば、週単位、月単位、年単位のような長期のパフォーマンス分析を実行するために、さまざまなオペレーティング・システム統計(例:タスク、プロセス、フローの統計)を収集して保存できます。

:Oracle Solarisの拡張アカウンティング機能は、大域ゾーンでも非大域ゾーンでも有効化できます。

このユースケースでは、拡張アカウンティング機能を使用して、ネットワーク統計を収集します。

大域ゾーンから、拡張アカウンティング機能を有効化します。

root@global_zone:~# acctadm -e extended -f /var/log/net.log net

拡張アカウンティング機能がアクティブになっていることを確認します。

root@global_zone:~# acctadm net
Net accounting: active
Net accounting file:/var/log/net.log
Tracked net resources: extended
Untracked net resources: none

この時点から、ネットワーク使用統計の履歴が/var/log/net.logファイルに保存されます。

次に、vnic0データリンク上のネットワーク・トラフィックおよびリソース使用に関する統計の履歴の例を示します。

root@global_zone:~# dlstat show-link -h -f /var/log/net.log vnic0
LINK START END RBYTES OBYTES BANDWIDTH
vnic0 10:45:52 10:46:12 1502 0 0 Mbps
vnic0 10:46:12 10:46:32 1918 0 0 Mbps
vnic0 10:46:32 10:46:52 2676218 4668466 1878.091 Mbp
vnic0 10:46:52 10:47:12 1313205 2057617 8282.997 Mbp

この機能を使用して長期のネットワーク統計を収集した場合、ネットワーク統計の履歴を表示できます。

特定の期間(例:2013年1月1日~2013年6月24日)におけるvnic0上のトラフィックによるリソース使用統計の履歴を表示するには、リスト3に示すコマンドを実行します。

root@global_zone:~# dlstat show-link -h -s 01/01/2013,00:00:00 -e 06/24/2013,10:50:00 -f /var/log/net.log vnic0

LINK START END RBYTES OBYTES BANDWIDTH
vnic0 10:45:52 10:46:12 1502 0 0 Mbps
vnic0 10:46:12 10:46:32 1918 0 0 Mbps
vnic0 10:46:32 10:46:52 2676218 4668466 1878.091 Mbp
vnic0 10:46:52 10:47:12 1313205 2057617 8282.997 Mbp
vnic0 10:47:12 10:47:32 3790824 5786125 2329.613 Mbp
vnic0 10:47:32 10:47:52 860 126 0 Mbps
vnic0 10:47:52 10:48:12 890 0 0 Mbps
vnic0 10:48:12 10:48:32 330 0 0 Mbps
vnic0 10:48:32 10:48:52 212 0 0 Mbps
vnic0 10:48:52 10:49:12 243 0 0 Mbps
vnic0 10:49:12 10:49:32 0 0 0 Mbps
vnic0 10:49:32 10:49:52 274 126 0 Mbps

リスト3

ネットワーク統計の視覚化

ネットワーク統計の出力結果は、gnuplot形式で整形できます。gnuplotは、コマンド駆動の対話型関数プロット・ツールです。後で、パフォーマンス・グラフを生成するために、このツールを使用します。詳細はgnuplot(1)を参照してください。

特定の期間(例:2013年6月24日~2013年6月25日)におけるvnic0上のトラフィックによるリソース使用統計の履歴を、gnuplot形式で表示しましょう。

root@global_zone:~# dlstat show-link -h -s 06/24/2013 -e 06/25/2013 -F gnuplot
-f /var/log/net.log vnic0 > /var/tmp/netplot.dat 

次に、可読性を上げるために、この出力ファイルを整形します(帯域幅の測定値を10GBの幅に変換します)。

root@global_zone:~# cat /var/tmp/netplot.dat | awk '{print $1,$2/1000}' > /var/tmp/netplot_format.dat

この後、gnuplotを使用してグラフを生成します。

gnuplotツールを使用するには、Oracle Solarisのデスクトップ・パッケージをインストールする必要があります。以下の1つ目のコマンドは、gnuplotをインストールします。その次のコマンドは、Oracle Solarisデスクトップ・パッケージをインストールします。

root@global_zone:~# pkg install gnuplot
root@global_zone:~# pkg install solaris-desktop

次に、プロットのプロパティを設定するために、プロット・ファイルを準備する必要があります(後でこのファイルをgnuplotツールに読み込みます)。

このプロット・ファイルをお好みのエディタでリスト4のように編集します。

root@global_zone:~# vi /var/tmp/plot_file

set autoscale 
unset log
unset label 
set xtic auto 
set ytic auto 
set title "Network statistics"
set xlabel "Time"
set ylabel "Bandwidth (Mb/sec)"
set xdata time
set timefmt "%H:%M:%S"
plot "/var/tmp/netplot_format.dat" using 1:2 title "Bandwidth (Mb/sec)" with lines

リスト4

GUIデスクトップを使用してシステムにアクセスするには、次のように、VNCサーバーを起動する必要があります。

root@global_zone:~# vncserver :1
You will require a password to access your desktops.

Password:
Verify:

New 'global_zone:1 (root)' desktop is global_zone:1

:このパスワードは覚えておいてください。後でVNCサーバーに接続するために必要になります。その他のVNCサーバーの設定例については、Oracle Solaris 11.1 Desktop Administrator's Guideを参照してください。

これで、VNCビューアまたはクライアント・ソフトウェア(フリーウェアのTightVNCビューアなど)を使用してリモートで接続できるようになりました。

desktop is: messageに表示されたアドレスに接続する必要があります。

$ vncviewer global_zone:1

VNCビューアまたはクライアント・ソフトウェアを使用してログインした後に、デスクトップの背景を右クリックし、ポップアップ・メニューで「Open Terminal」を選択して、ターミナル・ウィンドウを開きます(図4を参照)。

図4

図4

ターミナル・ウィンドウで、gnuplotツールを実行します。

root@global_zone:~# gnuplot

gnuplotプロンプトからプロット・ファイルを読み込みます(図5を参照)。

gnuplot> load '/var/tmp/plot_file'

図5

図5

収集したネットワーク統計に基づいて、gnuplotによりグラフが表示されます(図6を参照)。

図6

図6

11:00、11:50、12:45にネットワーク・トラフィックのスパイクが発生していることが分かります。

gnuplotを使用したOracle Solarisパフォーマンス・グラフのその他の例については、Graphing Solaris Performance Stats with gnuplotを参照してください。

オプション:次のコマンドを使用して、ネットワーク拡張アカウンティング機能を無効化できます。

root@global_zone:~# acctadm -D net

ネットワーク拡張アカウンティング機能がアクティブでないことを確認します。

root@global_zone:~# acctadm net
            Net accounting: inactive
       Net accounting file:/var/log/net.log
     Tracked net resources: none
   Untracked net resources: extended

まとめ

この記事では、Oracle Solaris 11の組込みコマンドのiperfdlstatflowadmflowstatを利用してネットワーク統計を観測および収集する方法について説明しました。

関連項目

また、著者による次の記事も参照してください。

その他のOracle Solaris 11のリソース:

著者について

Orgad Kimchiはオラクル(以前のSun Microsystems)のISV Engineeringチームに所属するPrincipal Software Engineerです。仮想化テクノロジーとクラウド・コンピューティング・テクノロジーの専門家として6年間従事しています。

リビジョン1.0、2013/09/09

オラクルの最新情報をフォロー:
ブログ | Facebook | Twitter | YouTube