序章

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

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

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

前提条件

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

ステップ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 [email protected]_client_server_private_ip_address:/tmp

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

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

  1. ssh [email protected]_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自体をインストールする必要があります。 クライアントサーバーで、Beatsソースリストが存在することを確認します。 編集のためにファイル/etc/apt/sources.list.d/beats.listを開きます。

  1. sudo nano /etc/apt/sources.list.d/beats.list

以前に荷送人をインストールしたことがある場合、このファイルにはすでに次の行が含まれている可能性があります。

/etc/apt/source.list.d/beats.list
deb https://packages.elastic.co/beats/apt stable main

ファイルが空白の場合、またはこの行が存在しない場合は、ファイルを追加してファイルを保存してください。 次に、エディターを終了します。

このソースをインストールするには、GPGキーが必要です。 Packetbeatは、次のコマンドでインストールするElasticsearchと同じGPGキーを使用します。

  1. wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

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

  1. sudo apt-get update
  2. sudo apt-get install packetbeat

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

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

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

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

  1. sudo nano /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 service packetbeat restart

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

  1. sudo update-rc.d packetbeat defaults 95 10

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

これで、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
{ "_index" : "packetbeat-2016.09.19", "_type" : "http", "_id" : "AVdDG6pDqHsDFrI4DAlI", "_score" : 1.0, "_source" : { "responsetime" : 80, "path" : "/", "beat" : { "hostname" : "your_client_server_hostname", "name" : "your_client_server_name" }, "direction" : "out", "port" : 80, "server" : "", "status" : "OK", "params" : "", "count" : 1, "client_port" : 52072, "client_proc" : "", "ip" : "52.38.222.131", "bytes_out" : 432, "bytes_in" : 78, "query" : "GET /", "http" : { "code" : 301, "content_length" : 178, "phrase" : "Permanently" }, "proc" : "", "client_ip" : "your_client_server_ip", "client_server" : "", "@timestamp" : "2016-09-19T15:41:07.725Z", "type" : "http", "method" : "GET", "@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のユーザーを構成したときに、前提条件のチュートリアルでこれらの資格情報を構成しました。

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

Select Packetbeat Index Pattern

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

Packetbeat log entries

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

次に、このチュートリアルの最初にロードしたサンプルの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ページをご覧ください。