序章

Packetbeatを使用すると、HTTPやMySQLなどのアプリケーションレベルのプロトコル、およびDNSやその他のサービスのリアルタイムネットワークトラフィックを監視できます。

これを行うには、ネットワークトラフィックをスニッフィングして解析し、メッセージをトランザクションにマッピングするクライアントマシン上に「シッパー」と呼ばれるエージェントを構成します。 次に、これらの配送業者は各アクションのレコードを生成し、ElasticsearchまたはLogstashに送信します。 データを取得したら、Kibanaを使用してデータを検索、分析、および視覚化できるため、インフラストラクチャに関する情報に基づいた決定を行ったり、問題のトラブルシューティングを行ったりできます。

このチュートリアルでは、ELKスタックでPacketbeatを構成および使用して、インフラストラクチャメトリックを収集および視覚化します。

前提条件

  • チュートリアルCentOS7 にElasticsearch、Logstash、およびKibanaをインストールする方法で説明されているELKスタックセットアップで構成された4GBのRAMを備えた1台のCentOS7サーバー。 チュートリアルに従ってELKスタックを構成し、Kibanaダッシュボードをインストールしますが、クライアントマシンは構成しないでください。
  • クライアントマシンとして機能する任意の量のRAMを備えた1台のCentOS7サーバー。
  • 各サーバーに対してsudo特権を持つ標準ユーザーアカウント。 CentOS 7を使用したサーバーの初期設定チュートリアルに従って、標準アカウントを設定できます。

ステップ1—ElasticsearchにPacketbeatインデックステンプレートをロードする

Packetbeatを使用してログをElasticsearchに送信することを計画しているため、最初にPacketbeatインデックステンプレートをロードします。これにより、Elasticsearchが着信Packetbeatフィールドをインテリジェントな方法で分析するように構成されます。

まず、ELKサーバーにログインします。

  1. ssh sammy@your_elk_server_ip

ログインしたら、Packetbeatインデックステンプレートをホームディレクトリにダウンロードします。

  1. cd ~
  2. curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json

次に、次のコマンドを使用してテンプレートをロードします。

  1. curl -XPUT 'http://localhost:9200/_template/packetbeat' [email protected]

テンプレートが正常に読み込まれた場合は、出力が表示されます。

Output
{"acknowledged":true}

ELKサーバーがPacketbeatからのデータを受け入れる準備ができたので、クライアントサーバーに配送業者を設定しましょう。

ステップ2—クライアントサーバーでPacketbeatを設定する

Packetbeat配送業者を設定するには、前提条件のチュートリアルで作成したSSL証明書をクライアントサーバーに取得する必要があります。 クライアントサーバーとELKサーバー間の通信を確立する必要があります。

クライアントサーバーのIPアドレスを見つけます。 次に、ELKサーバーで、scpコマンドを使用してSSL証明書をクライアントサーバーにコピーします。

  1. scp /etc/pki/tls/certs/logstash-forwarder.crt sammy@your_client_server_private_ip_address:/tmp

パスワードを入力したら、証明書のコピーが成功したことを確認します。

次に、クライアントサーバーにログインします。

  1. ssh sammy@your_client_server_ip_address

ログインしたら、ELKサーバーのSSL証明書を/etc/pki/tls/certsディレクトリにコピーします。

  1. sudo mkdir -p /etc/pki/tls/certs
  2. sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

次に、Packetbeat自体をインストールする必要があります。 クライアントサーバーで、次のコマンドを実行して、Elasticsearchの公開GPGキーをrpmにインポートします。

  1. sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

Packetbeatの新しいリポジトリファイルを作成および編集します。

  1. sudo vi /etc/yum.repos.d/elastic-beats.repo

次の行をファイルに追加します。

/etc/yum.repos.d/elastic-beats.repo
[beats]
name=Elastic Beats Repository
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

次に、ファイルを保存してエディターを終了します。

次に、Packetbeatパッケージをインストールします。

  1. sudo yum update
  2. sudo yum -y install packetbeat

これでPacketbeatがインストールされましたが、使用する前に構成する必要があります。

ステップ3—クライアントでのPacketbeatの構成

Packetbeatは、何をログに記録し、どこにデータを送信するかを知る必要があります。 ELKサーバー上のLogstashに接続するように構成し、監視するトラフィックの種類を定義しましょう。 これを行うには、Packetbeatに付属しているデフォルトの構成ファイルを変更します。

クライアントサーバーで、Packetbeat構成ファイルを編集します。

  1. sudo vi /etc/packetbeat/packetbeat.yml

注: Packetbeatの構成ファイルはYAML形式です。つまり、インデントが非常に重要です。 これらの説明に示されているのと同じ数のスペースを使用してください。

ファイルの上部近くに、inputセクションが表示されます。このセクションでは、ELKサーバーに送信するメトリックと統計を指定できます。 デフォルトの入力設定を使用しますが、必要に応じて自由に変更してください。

トラフィックをキャプチャするネットワークインターフェイスを選択します。 Linuxでは、Packetbeatは、Packetbeatがインストールされているサーバーによって送受信されるすべてのメッセージのキャプチャをサポートしています。 このために、デバイスとしてanyを使用します。

packetbeat.yml
# Select the network interfaces to sniff the data. You can use the "any"
# keyword to sniff on all connected interfaces.
interfaces:
  device: any

protocolsセクションで、Packetbeatが各プロトコルを検出できるポートを構成します。 非標準のポートを使用する場合は、ここに追加してください。 それ以外の場合は、デフォルト値で問題ありません。

packetbeat.yml
protocols:
  dns:
    ports: [53]

    include_authorities: true
    include_additionals: true

  http:
    ports: [80, 8080, 8081, 5000, 8002]

  memcache:
    ports: [11211]

  mysql:
    ports: [3306]

  pgsql:
    ports: [5432]

  redis:
    ports: [6379]

  thrift:
    ports: [9090]

  mongodb:
    ports: [27017]

次に、Packetbeatにデータの送信先を指示する必要があります。

outputセクションで、Elasticsearchの出力セクションを示すelasticsearch:で始まる行を見つけます。 このセクションは使用しないので、Elasticsearchの出力セクション全体を#logstash:と表示される行まで削除またはコメントアウトします。

ここから削除を開始します。

packetbeat.yml
  ### Elasticsearch as output
  elasticsearch:
    # Array of hosts to connect to.
    # Scheme and port can be left out and will be set to the default (http and 9200)
    
    ...

そして、次の行が見つかるまで削除を続けます。

packetbeat.yml
  ### Logstash as output

データをElasticsearchに送信する代わりに、Logstashに送信します。 したがって、#logstash:.で始まる行で示される、コメントアウトされたLogstash出力セクションを見つけます。前の#を削除して、その行のコメントを解除します。 次に、hosts: ["localhost:5044"]行のコメントを解除し、localhostをELKサーバーのプライベートIPアドレスに変更します。 構成ファイルのセクションは次のようになります。

packetbeat.yml
  ### Logstash as output
  logstash:
    # The Logstash hosts
    hosts: ["your_ELK_server_private_ip_address:5044"]

これにより、前提条件のチュートリアルでLogstash入力用に指定したポート5044でELKサーバーのLogstashに接続するようにPacketbeatが構成されます。

次に、tlsセクションを見つけて、tls:の前のコメントを削除します。 次に、certificate_authoritiesを指定する行のコメントを解除し、その値を["/etc/pki/tls/certs/logstash-forwarder.crt"]に変更します。

packetbeat.yml
    tls:
      # List of root certificates for HTTPS server verifications
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

これにより、ELKサーバーからコピーした証明書を使用するようにPacketbeatが構成されます。 これがないと、クライアントは接続を確立できません。

構成ファイルを再確認する場合は、読みやすさを向上させるために不要なコメントのほとんどが省略されているこの例と比較してください。

packetbeat.yml
############################# Sniffer #########################################
interfaces:
  device: any

############################# Protocols #######################################
protocols:
  dns:
    ports: [53]

    include_authorities: true
    include_additionals: true

  http:
    ports: [80, 8080, 8081, 5000, 8002]

  memcache:
    ports: [11211]

  mysql:
    ports: [3306]

  pgsql:
    ports: [5432]

  redis:
    ports: [6379]

  thrift:
    ports: [9090]

  mongodb:
    ports: [27017]

############################# Output ##########################################
output:

  ### Logstash as output
   logstash:
    hosts: ["your_ELK_server_private_ip_address:5044"]

    tls:
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

############################# Logging #########################################
logging:

  files:
    rotateeverybytes: 10485760 # = 10MB

構成を確認したら、ファイルを保存してテキストエディターを終了します。

次に、Packetbeatを起動して、変更を適用します。

  1. sudo systemctl start packetbeat

また、サーバーの再起動時に開始するようにPacketbeatを構成します。

  1. sudo systemctl enable packetbeat

監視する他のサーバーについて、このセクションを繰り返します。

これで、Packetbeatはネットワークトラフィックをリッスンし、Logstashに送信するはずです。 それが機能しているかどうか見てみましょう。

ステップ4—Packetbeatのインストールをテストする

この時点で、クライアントサーバーのPacketbeatは、ネットワークトラフィックのログをELKサーバーのLogstashに送信しているはずです。 Logstashは、packetbeat-YYYY.MM.DDと呼ばれる日付がスタンプされたインデックスでElasticsearchにPacketbeatデータをロードする必要があります。 クライアントマシンで単純なHTTPリクエストを作成し、ELKサーバーのElasticsearchでそのリクエストを探すことで、これが機能することをテストしてみましょう。

クライアントサーバーで、curlを使用してhttp://www.elastic.coにリクエストを送信します。

  1. curl http://www.elastic.co/ > /dev/null

次に、ELKサーバーで、次のコマンドを使用してPacketbeatインデックスをクエリし、Elasticsearchが実際にデータを受信していることを確認します。

  1. curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'

次のような出力が表示されるはずです。

Output
{ "hits" : { "total" : 3, "max_score" : 1.0, "hits" : [ { "_index" : "packetbeat-2016.11.13", "_type" : "dns", "_id" : "AVheUqX0CSBq6gd6x-Oj", "_score" : 1.0, "_source" : { "direction" : "out", "server" : "", "responsetime" : 49, "resource" : "www.elastic.co", "dns" : { "additionals_count" : 0, "answers" : [ { "class" : "IN", "data" : "2406:da00:ff00::6b16:f086", "name" : "www.elastic.co", "ttl" : 59, "type" : "AAAA" }, { "class" : "IN", "data" : "2406:da00:ff00::b849:ab0e", "name" : "www.elastic.co", "ttl" : 59, "type" : "AAAA" }, { "class" : "IN", "data" : "2406:da00:ff00::ccec:d96c", "name" : "www.elastic.co", "ttl" : 59, "type" : "AAAA" } ], "answers_count" : 3, "authorities_count" : 0, "flags" : { "authoritative" : false, "recursion_allowed" : true, "recursion_desired" : true, "truncated_response" : false }, "id" : 26078, "op_code" : "QUERY", "question" : { "class" : "IN", "name" : "www.elastic.co", "type" : "AAAA" }, "response_code" : "NOERROR" }, "method" : "QUERY", "count" : 1, "client_ip" : "your_client_server_ip", "proc" : "", "transport" : "udp", "status" : "OK", "ip" : "8.8.8.8", "client_port" : 52505, "client_server" : "", "port" : 53, "@timestamp" : "2016-11-13T15:33:43.500Z", "type" : "dns", "query" : "class IN, type AAAA, www.elastic.co", "client_proc" : "", "beat" : { "hostname" : "your_client_server_hostname", "name" : "your_client_server_hostname" }, "bytes_in" : 32, "bytes_out" : 116, "@version" : "1", "host" : "your_client_server_hostname", "tags" : [ "beats_input_raw_event" ] } ... ... } ] } }

出力に合計ヒット数が0の場合、Elasticsearchは検索したインデックスの下にPacketbeatデータをロードしていません。データが取得されるまでに時間がかかる場合があるため、数秒後に再試行する必要があります。 待っても結果が表示されない場合は、セットアップでエラーがないか確認してください。 パスが正しくない場合、これはサイレントに失敗するため、転送した証明書にPacketbeatの構成ファイルを指定していることを確認してください。

期待される出力を受け取ったら、次のステップに進み、Kibanaを使用してネットワークトラフィックのチャートやグラフを表示する方法を学ぶことができます。

ステップ5—Kibanaを使用したデータの視覚化

システム統計を収集するすべてのサーバーでPacketbeatのセットアップが完了したら、Kibanaを見てみましょう。

Webブラウザーで、ELKサーバーのドメイン名またはパブリックIPアドレスに移動します。 ELKサーバーのクレデンシャルを入力すると、KibanaDiscoverページが表示されます。

:Kibanaのユーザーを構成したときに、前提条件のチュートリアルでこれらの資格情報を構成しました。

ページ上部の設定タブをクリックします。 次に、インターフェイスの左側にある IndexPatternsメニューからpacketbeat-*を選択し、デフォルトのインデックスとして設定します。

Select Packetbeat Index Pattern

次に、画面上部の Discover タブを選択して、このデータを表示します。 画面に次のように表示されます。

Packetbeat log entries

ここから、使用可能なフィールドでフィルタリングすることにより、さまざまなPacketbeatエントリを表示できます。 これらのフィールドをクリックして追加するか、集計(カウント、合計、最小、最大、中央値など)を使用して視覚化できます。

Kibanaは、データの分析に使用できるさまざまな視覚化も提供します。 画面上部のVisualizeタブをクリックして、ビジュアライゼーションを一覧表示するか、保存したビジュアライゼーションを開きます。

Packetbeat Visualizations

次に、このチュートリアルの最初にロードしたサンプルのPacketbeatダッシュボードを確認しましょう。 画面上部のダッシュボードタブをクリックし、画面右側の保存済みダッシュボードの読み込みアイコンをクリックします。 ページ付きの提案としてダッシュボードフィルターのリストが表示されます。

View Example Packetbeat Dashboard Types

提案リストからPacketbeat-Dashboardを選択します。 インデックスにドキュメントとして含まれるWebリクエストはごくわずかであるため、ダッシュボードでは、DB、キャッシュ、RPCトランザクション、またはその他の結果に対して結果が見つかりませんになります。

View Example Packetbeat Dashboard Top

ただし、下にスクロールすると、Packetbeatをインストールしたクライアントサーバーから収集されたさまざまなメトリックが表示されます。

View Example Packetbeat Dashboard Bottom

ここから、インデックスデータに基づいてチャートを作成できます。 たとえば、応答時間に基づいてHTTPクエリの内訳を示すグラフを作成できます。これは、Webアプリケーションからの遅い応答を追跡するのに役立ちます。 また、サブアグリゲーションを使用して、各コードの応答時間、アクセスしたドメインなどを見つけることで、さらにドリルダウンできます。

詳細については、Packetbeatのドキュメントをご覧ください。

結論

システムメトリックがElasticsearchとLogstashを介して一元化され、Kibanaでそれらを視覚化できるようになったので、サーバーが何をしているのかが一目でわかります。 ここから、Filebeat、Topbeatなどの他の配送業者を調査することをお勧めします。 利用可能な配送業者の詳細については、Beatsページをご覧ください。