おちゃぬこさいさい

アクアリウムとIT技術のお話しとか

New Relicでお家ネットワークを監視する

はじめに

RTX830を買った - おちゃぬこさいさい

家のネットワークはRTX830でGMOのV6プラスを利用している。

ネットワーク監視には興味があったものの、やる必要性がそこまで感じられなかったので放置していたが、一日の通信量が気になったり、仕事で使っているNew RelicがSNMPに対応しているということで、この際New Relicとお友達になろうと少しずつ触ったので備忘録。

環境

色々試した結果、家に転がっていたRaspberry Pi 3 B+にManjaroを入れて運用していく方針にした。

検証中はWindowsだったりCentosだったり色々試した。

New Relic

New Relicとお友達になろうと思ったきっかけは、個人で使用する分には無料枠で収まると知ったから。 New RelicでSNMPのデータを扱うには、New RelicエージェントとSNMPアドオンをインストールする必要がある。

インストール

wget https://download.newrelic.com/infrastructure_agent/binaries/linux/arm/newrelic-infra_linux_1.17.1_arm.tar.gz
tar xvzf newrelic-infra_linux_1.17.1_arm.tar.gz
sudo ./installer.sh

サービスが立ち上がっているか確認する。

$ systemctl status newrelic-infra.service
● newrelic-infra.service - New Relic Infrastructure Agent
     Loaded: loaded (/etc/systemd/system/newrelic-infra.service; enabled; vendor preset: disabled)
     Active: active (running) since Sun 2021-05-16 02:20:07 JST; 23s ago
   Main PID: 4600 (newrelic-infra-)
      Tasks: 18 (limit: 783)
        CPU: 2.982s
     CGroup: /system.slice/newrelic-infra.service
             ├─4600 /usr/local/bin/newrelic-infra-service -config=/etc/newrelic-infra.yml
             └─4606 /usr/local/bin/newrelic-infra -config=/etc/newrelic-infra.yml

nri-snmp をインストール&エージェントの設定の為に一旦サービスを停止する。

sudo systemctl stop newrelic-infra.service

nri-snmp のインストール

mkdir nri-snmp
cd nri-snmp
wget https://github.com/newrelic/nri-snmp/releases/download/v1.3.0/nri-snmp_linux_1.3.0_arm64.tar.gz
tar xvzf nri-snmp_linux_1.3.0_arm64.tar.gz

シンボリックリンクを張る。

cd /var/db/newrelic-infra/newrelic-integrations
sudo ln -s ~/nri-snmp/var/db/newrelic-infra/newrelic-integrations/newrelic-integrations
sudo ln -s ~/nri-snmp/var/db/newrelic-infra/newrelic-integrations/bin/
sudo ln -s ~/nri-snmp/var/db/newrelic-infra/newrelic-integrations/snmp-definition.yml

cd /etc/newrelic-infra/integrations.d/
sudo ln -s ~/nri-snmp/etc/newrelic-infra/integrations.d/
sudo ln -s ~/nri-snmp/etc/newrelic-infra/integrations.d/snmp-config.yml
sudo ln -s ~/nri-snmp/etc/newrelic-infra/integrations.d/snmp-metrics.yml

設定

nri-snmp を動かすには3つの設定ファイルが必要。

  • newrelic-infra.yml // New Relic定義ファイル
  • snmp-config.yml // SNMPインテグレーション定義ファイル
  • snmp-metrics.yml // SNMPメトリクス定義ファイル

newrelic-infra.yml

/etc/newrelic-infra.yml にある。

license_key を設定する必要がある。

New Relicの API keys より INGEST - LICENSE の値を取得し貼り付ける。

# /etc/newrelic-infra.yml
pid_file: /var/run/newrelic-infra/newrelic-infra.pid
plugin_dir: /etc/newrelic-infra/integrations.d/
agent_dir: /var/db/newrelic-infra/
log_file: /var/log/newrelic-infra/newrelic-infra.log
license_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

snmp-config.yml

~/nri-snmp/etc/newrelic-infra/integrations.d/snmp-config.yml

SNMPの設定を定義する。

instances:
  - name: snmp
    command: all_data
    arguments:
      snmp_host: 192.168.x.x
      snmp_port: 161
      community: public
      collection_files: "/etc/newrelic-infra/integrations.d/snmp-metrics.yml"

snmp-metrics.yml

~/nri-snmp/etc/newrelic-infra/integrations.d/snmp-metrics.yml

New Relicに送信するメトリクスを定義する。

event_typemetric_name はNew Relicのクエリで使用するのでよしなに。

ifHCxxOctets(Counter64)は metric_type を指定しないとNew Relic側でGaugeとして処理されてしまったので明示的に定義した。

collect:
- device: RTX830-MIB
  metric_sets:
  - name: RTX830 metric
    type: scalar
    event_type: Rtx830Metric
    metrics:
    - metric_name: ifHCInOctets_1 #LAN
      oid: .1.3.6.1.2.1.31.1.1.1.6.1
      metric_type: pdelta
    - metric_name: ifHCInOctets_2 #WAN
      oid: .1.3.6.1.2.1.31.1.1.1.6.2
      metric_type: pdelta
    - metric_name: ifHCOutOctets_1
      oid: .1.3.6.1.2.1.31.1.1.1.10.1
      metric_type: pdelta
    - metric_name: ifHCOutOctets_2
      oid: .1.3.6.1.2.1.31.1.1.1.10.2
      metric_type: pdelta
    - metric_name: yrhMultiCpuUtil5sec_1
      oid: .1.3.6.1.4.1.1182.2.1.18.1.3.1
    - metric_name: yrhMultiCpuUtil1min_1
      oid: .1.3.6.1.4.1.1182.2.1.18.1.4.1
    - metric_name: yrhMultiCpuUtil5min_1
      oid: .1.3.6.1.4.1.1182.2.1.18.1.5.1
    - metric_name: yrhMultiCpuUtil5sec_2
      oid: .1.3.6.1.4.1.1182.2.1.18.1.3.2
    - metric_name: yrhMultiCpuUtil1min_2
      oid: .1.3.6.1.4.1.1182.2.1.18.1.4.2
    - metric_name: yrhMultiCpuUtil5min_2
      oid: .1.3.6.1.4.1.1182.2.1.18.1.5.2

起動

sudo systemctl start newrelic-infra.service

設定が正しければNew Relicの管理画面でグラフが見えるようになる。

Infrastructure>Hosts

f:id:chanuko:20210530012737p:plain

SNMPメトリクスが取得できているか確認。

Browse data>Data explorerRtx830Metric があればOK。なければ何かしらのエラーが出ている。

f:id:chanuko:20210530012759p:plain

ダッシュボードの作成

NRQLというSQLライクな構文で簡単にグラフが作成できる。ぬるくるぬるくる。

例えば

  • 一日の通信量を
  • 5分刻みで
  • 上りと下りのそれぞれをグラフ化

をNRQLで書くとこうなる。

FROMのRtx830Metric はsnmp-metrics.yml のevent_type、SELECTのifHCInOctets_2などはmetric_nameになる。

SELECT average(ifHCInOctets_2) as downstream, average(ifHCOutOctets_2) as upstream FROM Rtx830Metric TIMESERIES 5 minutes SINCE 1 day ago

f:id:chanuko:20210530012817p:plain

まとめ

New RelicでSNMPのデータを扱ってみた。日本語ソースどころか英語でもあまり取り扱われていなかったのでなかなか苦労した。

今後はSyslogもダッシュボードに入れてみたい。