【実践編】New Relicのネットワーク監視(NPM)でSyslog監視

記事タイトルとURLをコピーする

みなさんこんにちは。マネージドサービス部MS課の塩野(正)です。

今回はNew RelicのNetwork Performance Monitoring(NPM)を使って、syslogを取り込んでだ検証結果の記事になります。

目次

概要

先に、New RelicのNetwork Performance Monitoring(NPM)の概要について、簡単にご紹介したいと思います。

New Relic NPMは、ネットワークの状態を包括的に監視し、システム全体のパフォーマンスを把握するためのツールです。 その特徴は、下記の通りです。

  • SNMP、syslog、ネットワークフローなど、さまざまな種類のネットワークデータを収集できます
  • オンプレミスのネットワーク機器だけでなく、AWSやGCPのVPCネットワークにも対応しています
  • 最短30秒間隔でメトリクスを収集し、ネットワーク関連のトラブルシューティングをやりやすくします

今回はこの中のsyslogを試してみました。 参考までに過去に記載したNew RelicのNetwork Performance Monitoring(NPM)の記事をご紹介させて頂きます。

blog.serverworks.co.jp

blog.serverworks.co.jp

設定

設定上の注意点

通信の方向

監視方法によって通信方向が異なりますが、今回はNetwork Performance Monitoring(NPM)サーバ側に対してNetworkデバイスからログを送り付けるような通信になります。つまりNPMサーバ側のインバウンドトラフィックが発生しますので、EC2で構築する場合はセキュリティグループやOS上のFirewallの開放が必要になります。

OS環境の設定(Dockerインストール)

基本的にコンテナオーケストレーションの対応が微妙なため、EC2などのLinux OSにインストールしたDocker環境で監視を行います。

Docker環境の構築についてはこちらの記事をご参照ください。

blog.serverworks.co.jp

Ktranslateコンテナの起動

設定ファイルの作成

公式ドキュメントのサンプルファイルやガイドインストールなどを使用して、コンテナ側に読み込む設定ファイルとして、snmp-base.yaml ファイルを作成します。 公式ドキュメントには下記のような記載があり、基本的には syslogを受信するデバイス単位での設定が必要になります。

devices:
  syslog_device1:
    device_name: syslog_device1
    device_ip: x.x.x.x/yy
    ping_only: true
    user_tags:
      owning_team: net_eng
      environment: production

docs.newrelic.com

ここからが余談な話になりますが、ガイドインストールで表示されたコンフィグは下記のものとなります。device_nameやdevice_ip、user_tagsなどは環境によって異なるのでここまでの内容で違和感はありませんが、 ドキュメント上は ping_only: true の設定となっているのに対して、ガイドインストールでは flow_only: true となっていて、過去に設定された方で違いに気が付かれた方は、あれっ?!となった方ももしかしたらいらっしゃるのではないでしょうか。

devices:
  test_device:
    device_name: test_device
    device_ip: 192.168.0.1
    user_tags:
      team: net_eng
    flow_only: true

※公式ドキュメントの記載内容

どちらの環境( ping_only: trueflow_only: true )も動作確認はしてみましたが、特に問題なく動いていましたのでsyslog監視においてはこの設定の差はないのかもしれません。ただ、設定値に違和感がある方はどちらかの値に統一していただくとよいのではと考えていますが、個人的にはドキュメントの更新漏れを考慮してガイドインストールの設定に寄せるほうがよいのかなと考えています。

syslog監視の場合は、NPMサーバ側からネットワークデバイスに対してポーリングを行うわけではありませんので、snmp-base.yaml ファイルでの global セクションの設定は不要です。

コンテナの起動

snmp-base.yaml ファイルを保存したディレクトリから下記のコマンドを実行します。

docker run -d --name ktranslate-syslog_monitoring \
--restart unless-stopped --pull=always -p 514:5143/udp \
-v `pwd`/syslog-base.yaml:/snmp-base.yaml \
-e NEW_RELIC_API_KEY=<New Relic lisencekey> \
kentik/ktranslate:v2 \
  -snmp /snmp-base.yaml \
  -nr_account_id=<New RelicアカウントID> \
  -metrics=jchf \
  -tee_logs=true \
  -dns=local \
  -service_name=<コンテナサービス名> \
  nr1.syslog

New Relicの公式は基本的にサポートしてくれませんが、Docker Composeを利用する場合は下記のような設定になります。

services:
  ktranslate-syslog:
    image: kentik/ktranslate:v2
    restart: unless-stopped
    pull_policy: always
    container_name: ktranslate-syslog
    volumes:
      - ./snmp-base.yaml:/snmp-base.yaml
    environment:
      - NEW_RELIC_API_KEY=<New Relic lisencekey>
      - NR_ACCOUNT_ID=<New RelicアカウントID>
    command:
      - -snmp=/snmp-base.yaml
      - -metrics=jchf
      - -tee_logs=true
      - -dns=local
      - -service_name=ktranslate-syslog
      - nr1.syslog
    network_mode: bridge
    ports:
      - "514:5143"

また、コンテナが正常に起動できると下記のような表示になります。

$ docker ps -a
CONTAINER ID IMAGE                 COMMAND                   CREATED             STATUS            PORTS                                                 NAMES
abcde12345de kentik/ktranslate:v2  "ktranslate -listen …"   About an hour ago   Up About an hour  8082/tcp, 0.0.0.0:514->5143/udp, [::]:514->5143/udp   ktranslate-syslog

Network機器側の設定

syslog監視についてはNetwork Performance Monitoring(NPM)サーバ側の設定だけで満足していてはログの取り込みができません。 送信元であるNetwork機器側の設定も必要になります。

今回はYamahaルーターを例に、設定を作成してみました。 設定の注意点としては、すでに別の場所にsyslogを送信している場合はネットワーク機器側に送信先の空きがあるかという点や、NPMサーバ側の仕様により、RFC3164、RFC5424、RFC6587形式以外で送信されるとログが破棄されてしまうため、可能な限り送信形式を設定するか、設定を追加する代わりにsyslog.format=NoFormatフラグをdocker runのオプションに追加してください。

下記設定はあくまでも一例になりますが、お使いのネットワーク機器に合わせて設定を実施してください。

  • SYSLOG を受けるホストの IP アドレスの設定
    ※SYSLOG を受けるホストの IP アドレス、またはホスト名
    • syslog host 192.168.0.1
  • SYSLOG パケットの形式の設定
    ※SYSLOG パケットの形式を設定する。
    • syslog format type rfc5424
  • NOTICE タイプの SYSLOG を出力するか否かの設定
    ※各種フィルター機能等で検出したパケット情報を SYSLOG で出力するか否かを設定
    • syslog notice on
  • INFO タイプの SYSLOG 出力の設定
    ※ルーターの動作状況に関する SYSLOG 出力の設定
    • syslog info on
  • SYSLOG を送信する時の始点 IP アドレスの設定
    ※SYSLOG パケットを送信する時の始点 IP アドレスを設定
    • syslog local address192.168.0.1
  • SYSLOG パケットの始点ポート番号の設定
    ※SYSLOG パケットの始点ポート番号を設定
    • syslog srcport 514
syslog host 192.168.0.1
syslog local address192.168.0.1
syslog srcport 514
syslog format type rfc5424
syslog notice on
syslog info on

参考ドキュメント www.rtpro.yamaha.co.jp docs.newrelic.com

ログの確認

設定が正常に完了すると、Logsの画面に下記のような形で syslogが表示されるようになります。 下記はあくまでも通信ログの一例ですが、私の環境ではどのIPアドレスからどのIPアドレスにどのようなポートで通信しているかという情報が標示されました。

もちろん通信ログだけではなくDHCPの払い出しやポートのDown/UPなどログから得られる情報は非常に多く、こういった情報を元にログ監視用のコンディション(アラート設定)をおこなったり、デバイス状態の確認に使用したりと使いどころは多いと考えられます。

まとめ

New RelicのNetwork Performance Monitoring(NPM)のsyslog機能を使用することで、ネットワークデバイスのログを取り込みNew Relic UI上で表示するだけでなく、取得したログの検索やログを使用したアラート設定など様々な使い道があるでしょう。

余談な話になりますが、当監視設定は snmp-base.yaml を作成しなくてもsyslogの取り込みは可能です。ただし、snmp-base.yaml を指定しない場合は device_name項の値がIPアドレスになってしまうため、このIPアドレスの機器ってなんだっけ?というのは別にLookupテーブルなどを使用して検索用の情報を用意しておく必要があるかもしれません。

本記事で解説した具体的な手順や注意点が、みなさまの環境におけるログ収集や分析、ネットワーク運用効率化のお役に立てれば幸いです。

宣伝

弊社では、お客様環境のオブザーバビリティを加速するためのNew Relicアカウント開設を含めた伴走型のNew Relic導入支援サービスをご提供しております。 もしご興味をお持ちの方は、こちらのお問合せフォームよりお問合せ頂けましたら幸いでございます。

◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら

前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。New Relic User Group運営。