Ubuntu16.04でPacketbeatとELKを使用してインフラストラクチャメトリックを収集する方法
序章
Packetbeatを使用すると、HTTPやMySQLなどのアプリケーションレベルのプロトコル、およびDNSやその他のサービスのリアルタイムネットワークトラフィックを監視できます。
これを行うには、ネットワークトラフィックをスニッフィングして解析し、メッセージをトランザクションにマッピングするクライアントマシン上に「シッパー」と呼ばれるエージェントを構成します。 次に、これらの配送業者は各アクションのレコードを生成し、ElasticsearchまたはLogstashに送信します。 データを取得したら、Kibanaを使用してデータを検索、分析、および視覚化できるため、インフラストラクチャに関する情報に基づいた決定を行ったり、問題のトラブルシューティングを行ったりできます。
このチュートリアルでは、ELKスタックでPacketbeatを構成および使用して、インフラストラクチャメトリックを収集および視覚化します。
前提条件
- チュートリアルUbuntu16.04 にElasticsearch、Logstash、およびKibanaをインストールする方法で説明されているELKスタックセットアップで構成された、4GBのRAMを備えた1台のUbuntu16.04サーバー。 チュートリアルに従ってELKスタックを構成し、Kibanaダッシュボードをインストールしますが、クライアントマシンは構成しないでください。
- クライアントマシンとして機能する任意の量のRAMを備えた1つのUbuntu16.04サーバー。
- の標準ユーザーアカウント
sudo
各サーバーの特権。 Ubuntu 16.04を使用したサーバーの初期設定チュートリアルに従って、標準アカウントを設定できます。
ステップ1—ElasticsearchにPacketbeatインデックステンプレートをロードする
Packetbeatを使用してログをElasticsearchに送信することを計画しているため、最初にPacketbeatインデックステンプレートをロードします。これにより、Elasticsearchが着信Packetbeatフィールドをインテリジェントな方法で分析するように構成されます。
まず、ELKサーバーにログインします。
- ssh sammy@your_elk_server_ip
ログインしたら、Packetbeatインデックステンプレートをホームディレクトリにダウンロードします。
- cd ~
- curl -O https://raw.githubusercontent.com/elastic/beats/master/packetbeat/packetbeat.template-es2x.json
次に、次のコマンドを使用してテンプレートをロードします。
- curl -XPUT 'http://localhost:9200/_template/packetbeat' [email protected]
テンプレートが正常に読み込まれた場合は、出力が表示されます。
Output{"acknowledged":true}
ELKサーバーがPacketbeatからのデータを受け入れる準備ができたので、クライアントサーバーに配送業者を設定しましょう。
ステップ2—クライアントサーバーでPacketbeatを設定する
Packetbeat配送業者を設定するには、前提条件のチュートリアルで作成したSSL証明書をクライアントサーバーに取得する必要があります。 クライアントサーバーとELKサーバー間の通信を確立する必要があります。
クライアントサーバーのIPアドレスを見つけます。 次に、 ELKサーバーで、SSL証明書をクライアントサーバーにコピーします。 scp
指図:
- scp /etc/pki/tls/certs/logstash-forwarder.crt sammy@your_client_server_private_ip_address:/tmp
パスワードを入力したら、証明書のコピーが成功したことを確認します。
次に、クライアントサーバーにログインします。
- ssh sammy@your_client_server_ip_address
ログインしたら、ELKサーバーのSSL証明書をにコピーします。 /etc/pki/tls/certs
ディレクトリ:
- sudo mkdir -p /etc/pki/tls/certs
- sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
次に、Packetbeat自体をインストールする必要があります。 クライアントサーバーで、Beatsソースリストが存在することを確認します。 ファイルを開く /etc/apt/sources.list.d/beats.list
編集用:
- sudo nano /etc/apt/sources.list.d/beats.list
以前に荷送人をインストールしたことがある場合、このファイルにはすでに次の行が含まれている可能性があります。
deb https://packages.elastic.co/beats/apt stable main
ファイルが空白の場合、またはこの行が存在しない場合は、ファイルを追加してファイルを保存してください。 次に、エディターを終了します。
このソースをインストールするには、GPGキーが必要です。 Packetbeatは、次のコマンドでインストールするElasticsearchと同じGPGキーを使用します。
- wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
次に、Packetbeatパッケージをインストールします。
- sudo apt-get update
- sudo apt-get install packetbeat
これでPacketbeatがインストールされましたが、使用する前に構成する必要があります。
ステップ3—クライアントでのPacketbeatの構成
Packetbeatは、何をログに記録し、どこにデータを送信するかを知る必要があります。 ELKサーバー上のLogstashに接続するように構成し、監視するトラフィックの種類を定義しましょう。 これを行うには、Packetbeatに付属しているデフォルトの構成ファイルを変更します。
クライアントサーバーで、Packetbeat構成ファイルを編集します。
- sudo nano /etc/packetbeat/packetbeat.yml
注: Packetbeatの構成ファイルはYAML形式です。つまり、インデントが非常に重要です。 これらの説明に示されているのと同じ数のスペースを使用してください。
ファイルの上部近くに、 input
セクション。ここで、ELKサーバーに送信するメトリックと統計を指定できます。 デフォルトの入力設定を使用しますが、必要に応じて自由に変更してください。
トラフィックをキャプチャするネットワークインターフェイスを選択します。 Linuxでは、Packetbeatは、Packetbeatがインストールされているサーバーによって送受信されるすべてのメッセージのキャプチャをサポートしています。 これには、 any
デバイスとして:
# 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が各プロトコルを見つけることができるポートを構成します。 非標準のポートを使用する場合は、ここに追加してください。 それ以外の場合は、デフォルト値で問題ありません。
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:
).
ここから削除を開始します。
### 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)
...
そして、次の行が見つかるまで削除を続けます。
### Logstash as output
データをElasticsearchに送信する代わりに、Logstashに送信します。 したがって、コメントアウトされたLogstash出力セクションを見つけます。これは、で始まる行で示されます。 #logstash:.
前の行を削除して、その行のコメントを解除します #
. 次に、コメントを外します hosts: ["localhost:5044"]
ラインと変更 localhost
ELKサーバーのプライベートIPアドレスに。 構成ファイルのセクションは次のようになります。
### Logstash as output
logstash:
# The Logstash hosts
hosts: ["your_ELK_server_private_ip_address:5044"]
これにより、ポートでELKサーバーのLogstashに接続するようにPacketbeatが構成されます 5044
、前提条件のチュートリアルでLogstash入力用に指定したポート。
次に、 tls
セクション、および前のコメントを削除します tls:
. 次に、指定する行のコメントを解除します certificate_authorities
、およびその値をに変更します ["/etc/pki/tls/certs/logstash-forwarder.crt"]
:
tls:
# List of root certificates for HTTPS server verifications
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
これにより、ELKサーバーからコピーした証明書を使用するようにPacketbeatが構成されます。 これがないと、クライアントは接続を確立できません。
構成ファイルを再確認する場合は、読みやすさを向上させるために不要なコメントのほとんどが省略されているこの例と比較してください。
############################# 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を再起動して、変更を適用します。
- sudo service packetbeat restart
また、サーバーの再起動時に開始するようにPacketbeatを構成します。
- sudo update-rc.d packetbeat defaults 95 10
監視する他のサーバーについて、このセクションを繰り返します。
これで、Packetbeatはネットワークトラフィックをリッスンし、Logstashに送信するはずです。 それが機能しているかどうか見てみましょう。
ステップ4—Packetbeatのインストールをテストする
この時点で、クライアントサーバーのPacketbeatは、ネットワークトラフィックのログをELKサーバーのLogstashに送信しているはずです。 Logstashは、PacketbeatデータをElasticsearchの日付スタンプ付きインデックスでロードする必要があります。 packetbeat-YYYY.MM.DD
. クライアントマシンで単純なHTTPリクエストを作成し、ELKサーバーのElasticsearchでそのリクエストを探すことで、これが機能することをテストしてみましょう。
クライアントサーバーで、 curl
リクエストする http://www.elastic.co
.
- curl http://www.elastic.co/ > /dev/null
次に、ELKサーバーで、次のコマンドを使用してPacketbeatインデックスをクエリし、Elasticsearchが実際にデータを受信していることを確認します。
- curl -XGET 'http://localhost:9200/packetbeat-*/_search?pretty'
次のような出力が表示されるはずです。
Output{
"_index" : "packetbeat-2016.09.29",
"_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-29T15: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-*を選択します。
次に、画面上部の Discover タブを選択して、このデータを表示します。 画面に次のように表示されます。
ここから、使用可能なフィールドでフィルタリングすることにより、さまざまなPacketbeatエントリを表示できます。 これらのフィールドをクリックして追加するか、集計(カウント、合計、最小、最大、中央値など)を使用して視覚化できます。
Kibanaは、データの分析に使用できるさまざまな視覚化も提供します。 画面上部のVisualizeタブをクリックして、ビジュアライゼーションを一覧表示するか、保存したビジュアライゼーションを開きます。
次に、このチュートリアルの最初にロードしたサンプルのPacketbeatダッシュボードを確認しましょう。 画面上部のダッシュボードタブをクリックし、画面右側の保存済みダッシュボードの読み込みアイコンをクリックします。 ページ付きの提案としてダッシュボードフィルターのリストが表示されます。
提案リストからPacketbeat-Dashboardを選択します。 インデックスにドキュメントとして含まれるWebリクエストはごくわずかであるため、ダッシュボードでは、DB、キャッシュ、RPCトランザクション、またはその他の結果に対して結果が見つかりませんになります。
ただし、下にスクロールすると、Packetbeatをインストールしたクライアントサーバーから収集されたさまざまなメトリックが表示されます。
ここから、インデックスデータに基づいてチャートを作成できます。 たとえば、応答時間に基づいてHTTPクエリの内訳を示すグラフを作成できます。これは、Webアプリケーションからの遅い応答を追跡するのに役立ちます。 また、サブアグリゲーションを使用して、各コードの応答時間、アクセスしたドメインなどを見つけることで、さらにドリルダウンできます。
詳細については、Packetbeatのドキュメントをご覧ください。
結論
システムメトリックがElasticsearchとLogstashを介して一元化され、Kibanaでそれらを視覚化できるようになったので、サーバーが何をしているのかが一目でわかります。 ここから、Filebeat、Topbeatなどの他の配送業者を調査することをお勧めします。 利用可能な配送業者の詳細については、Beatsページをご覧ください。