elasticsearch + kibanaを使用したNFSトラフィックの視覚化

画像



勤務中は、NFSトラフィックを分析する必要があります。 Wiresharkは私のメインツールであり、彼のためにluaの拡張機能を作成しました。 しかし、何かが欠けていました。 そして2週間前、私は新しいPacketbeatツールに出会いました。 残念ながら、paketbeat NFSをサポートしておらず、 NFSをサポートしていませんでしたが、この欠点を何とか修正できました。



パケットビート





Paketbeatは、elasticsearch、logstash、kibanaの作成者によるビートツールの1つです。 これは、ネットワークトラフィックをリッスンし、jsonレコードに変換してelasticsearchに送信するelasticsearchのデータシッパーです。 Kibana4を使用する場合、収集されたトラフィックを視覚化するための標準パネルがあります。 現時点では、packetbeatはTCP、UDP、DNS、ICMP、HTTP、memcache、MongoDB、redis、PostgreSQL、MySQL、thrift、そしてNFSを認識します。 内部のどこかで、packetbeatはlibpcapを使用しています。







プロトコルを追加する方法





Packetbeatはgoで記述されています。 コードはgithubにあり、新しいプロトコルを追加する方法の手順が記載されたファイルが含まれています。 不足しているのは、作成されるjsonオブジェクトの「望ましい」形式です。



NFSトラフィック処理





NFS(およびおそらくその他すべて)トラフィックの処理は、次のスキームに従って発生します。





作成されたレコードは次のようになります。

{ "@timestamp": "2016-03-28T06:18:18.431Z", "beat": { "hostname": "localhost", "name": "localhost" }, "count": 1, "dst": "127.0.0.1", "dst_port": 2049, "nfs": { "minor_version": 1, "opcode": "GETATTR", "status": "NFSERR_NOENT", "tag": "", "version": 4 }, "rpc": { "auth_flavor": "unix", "call_size": 200, "cred": { "gid": 500, "gids": [ 491, 499, 500 ], "machinename": "localhost", "stamp": 4597002, "uid": 500 }, "reply_size": 96, "status": "success", "time": 25631000, "time_str": "25.631ms", "xid": "2cf0c876" }, "src": "127.0.0.1", "src_port": 975, "type": "nfs" }
      
      







このデータを取得すると、次の情報を取得できます。



(オプション)



トラフィックを聞く





最も簡単なオプションは、NFSサーバーでpacketbeatを実行することです。 これが不可能な場合は、スイッチのポートミラーリングを使用できます。 詳細については、 こちらをご覧ください



Packetbeatには設定ファイルがあり、そこで何をすべきかを言う必要があります。



 interfaces: device: any protocols: nfs: ports: [2049] logging: level: info output: elasticsearch: hosts: ["elasticsearch.node.name:9200"]
      
      







構成ファイルは「-c」オプションで指定されます。



結論の代わりに





この場所を読んで、何か新しいことを学んだことを願っています。



All Articles