見出し画像

ネットワーク負荷状況の可視化について

はじめに

今回はElastic Network Adapter (ENA)の負荷状況をNew Relicを使って可視化したのでその方法についてお伝えしようと思います。

なぜ可視化したかったのか

私が運用している環境のEC2で稀に通信が不安定になることがあり、調査を行なっていたところ、ENAドライバーのメトリクスで閾値オーバーが出ていることが判明しました。
ネットワーク帯域などには問題がみられなかったため、不安定な現象はこれが関係しているのでは?という事になり、この値を可視化し定期的に確認することにしました。

ENAとは

ENAとはAWSのEC2インスタンスで利用されるネットワークインターフェースのことです。
詳細を知りたい方は下記のページなどをご覧ください。
Elastic Network Interface - Amazon Elastic Compute Cloud

New Relicとは

SaaS型のオブザーバビリティプラットフォームです。
New Relic - オブザーバビリティプラットフォーム
私が関わっているサービスでは、運用監視手段の一つとしてNew Relicを利用しています。
ENAの負荷状況の確認はCloudWatchでも可能ですが、既にNew Relicを使用しており、収集したデータの可視化・分析もしやすいということもあり、今回はNew Relicでの可視化を選択しました。

可視化の手順

今回はNew Relic Flexという機能を利用してデータの収集を行います。
New Relic Flexについては、下記ページをご確認ください
New Relic Flex

コマンドの作成

New Relic Flexでは、コマンドの結果などをデータとして簡単に登録することができます。
今回収集したいENAの情報は、下記コマンドで確認できます。
(参考ページ : Monitor network performance for your EC2 instance

$ $ethtool -S eth0
NIC statistics:
     tx_timeout: 0
     suspend: 0
     resume: 0
     wd_expired: 0
     interface_up: 1
     interface_down: 0
     admin_q_pause: 0
     reset_fail: 0
     bw_in_allowance_exceeded: 0
...

今回はこの中から、閾値オーバーに関する値のみを収集したいため、必要となる項目名、値を一覧表示するように加工します。
(それほど難しいコマンドではないと思いますのでコマンド自体の説明は行いません)

$ ethtool -S eth0 | grep exceeded | awk '{print substr($1, 1, length($1)-1)" "$2}'
bw_in_allowance_exceeded 0
bw_out_allowance_exceeded 0
pps_allowance_exceeded 0
conntrack_allowance_exceeded 0
linklocal_allowance_exceeded 0

これで、項目名と値のリストが取得できました。

設定ファイルの作成

次に、このコマンドの実行結果をNew Relicに登録するための設定ファイルを作成します。

integrations:
  - name: nri-flex
    interval: 15m
    config:
      name: awsNetworkExceededIntegration
      apis:
        - name: networkExceeded
          commands:
            - run: ethtool -S eth0 | grep exceeded | awk '{print substr($1, 1, length($1)-1)" "$2}'
              split: horizontal
              split_by: \s+
              set_header: [itemName, exceededCount]

設定ファイルの詳しい記載方法などについては、下記マニュアルをご確認ください。
How does Flex work?

設定ファイルの反映

作成した設定ファイルをNew Relic InfrastructureのAgentが設定されているサーバの所定のディレクトリに配置します。
今回は "sample.yml"という名前で配置しました。

$ /etc/newrelic-infra/integrations.d/sample.yml

設定ファイルの配置後にnewrelic-infraのサービスを再起動するとデータの登録が開始されます。

登録したデータの可視化

データが登録できたので早速可視化をしたいと思います。
今回は取得した項目のうちPacket-per-second (PPS) の閾値である「pps_allowance_exceeded」を確認したいと思います。
(抽出条件などは、実際に収集したデータに合わせて読み替えてください)

SELECT
 max(exceededCount)
FROM
 networkExceededSample
FACET
 capture(hostname, '(?P<hostname>[^.]+).*')
WHERE
 itemName = 'pps_allowance_exceeded'
AND
 (hostname LIKE '%xxxx%xxxxx')
SINCE 4 weeks AGO TIMESERIES

上記NRQLと、Flexの設定ファイルの項目を見比べていただけると、登録した値とその参照方法がイメージでできるのではないかと思います。

上記NRQLで取得したデータをstack barで表示すると、以下の様なものになります。

図1

今回可視化したグラフから以下のことがわかります。

  • 恒常的にPPSの閾値オーバーが発生している

  • 閾値は複数台あるサーバの片側に寄っている

  • ENAドライバのリセットが一定間隔で発生している

今回のケースでは、EC2をネットワークが強化されるタイプに変更したところ、閾値を超える値が減ったことが確認できました。
また、ネットワークが不安定になる状態も落ち着いたため、今回のPPAの閾値オーバーが原因であったのではないかと考えています。

最後に

今回はネットワーク負荷の可視化ということで、ENAメトリクスの可視化を行いました。
ENAの負荷状況を可視化し定期的に確認することで、メモリ・ディスク・ネットワーク帯域などに加え、ENAの負荷状況もサーバのキャパシティ判定に利用できるようになりました。

またNew Relicを利用することで、任意の値を簡単に可視化できることがお分かりいただけたかと思います。
運用をしていると、ある値を定期的に確認したいけど、可視化までもっていくのが大変、、、ということはよくある話だと思います。

もし既にNew Relicを利用されているようであれば、簡単なものからで良いと思いますので、色々なデータの可視化に挑戦して見てはいかがでしょか。

今回の記事が皆様の関わっているシステムの安定運用の助けになれば幸いです。


この記事が気に入ったらサポートをしてみませんか?