Ubuntu18.04でMetricbeatを使用してインフラストラクチャメトリックを収集する方法
著者は、コンピューター歴史博物館を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。
序章
Metricbeat は、さまざまなタイプのサーバーデータを Elastic Stack サーバーに送信するのに役立つ、いくつかの Beats の1つであり、一度インストールすると軽量のデータシッパーです。サーバーは、システム全体およびプロセスごとのCPUとメモリの統計を定期的に収集し、データをElasticsearchデプロイメントに直接送信します。 この配送業者は、ElasticStackのバージョン5.0の以前のTopbeatを置き換えます。
Elasticから現在入手可能な他のビートは次のとおりです。
- Filebeat :ログファイルを収集して送信します。
- Packetbeat :ネットワークデータを収集して分析します。
- Winlogbeat :Windowsイベントログを収集します。
- Auditbeat :Linux監査フレームワークデータを収集し、ファイルの整合性を監視します。
- Heartbeat :アクティブプロービングを使用してサービスの可用性を監視します。
このチュートリアルでは、Metricbeatを使用して、CPU/メモリ/ディスク使用量やネットワーク使用率などのローカルシステムメトリックをUbuntu18.04サーバーからElasticStackがインストールされている同じ種類の別のサーバーに転送します。 この配送業者を使用して、サーバーの現在の状態を取得するために必要な基本的なメトリックを収集します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- Ubuntu 18.04[X96Xの初期サーバーセットアップガイド]に従ってセットアップされた2つのUbuntu18.04サーバー。これには、sudo権限を持つroot以外のユーザーと、
ufw
で構成されたファイアウォールが含まれます。 1つのサーバーで、ElasticStackをダウンロードします。 このチュートリアルでは、これを「ElasticStackサーバー」と呼びます。 ElasticStackサーバーは2番目のサーバーを監視します。 この2番目のサーバーは「2番目のUbuntuサーバー」と呼ばれます。 - チュートリアルUbuntu18.04 にElasticsearch、Logstash、およびKibana(Elastic Stack)をインストールする方法に従ってElasticStackサーバーにインストールされたElasticStack。
注:Elastic Stackをインストールするときは、スタック全体で同じバージョンを使用する必要があります。 このチュートリアルでは、スタック全体の最新バージョン(この記事の執筆時点では、Elasticsearch 6.6.2、Kibana 6.6.2、Logstash 6.6.2、およびMetricbeat 6.6.2)を使用します。
ステップ1—外部IPでトラフィックをリッスンするようにElasticsearchを設定する
チュートリアルUbuntu18.04にElasticsearch、Logstash、およびKibana(Elastic Stack)をインストールする方法は、Elasticsearchへのアクセスをローカルホストのみに制限していました。 多くの場合、多くのホストを監視する必要があるため、実際には、これはまれです。 このステップでは、外部IPアドレスと対話するようにElasticStackコンポーネントを構成します。
root以外のユーザーとしてElasticStackサーバーにログインします。
ssh sammy@Elastic_Stack_server_ip
お好みのテキストエディタを使用して、Elasticsearchのメイン設定ファイルelasticsearch.yml
を編集します。 このチュートリアルでは、nano
を使用します。
sudo nano /etc/elasticsearch/elasticsearch.yml
次のセクションを見つけて、Elasticsearchがすべてのインターフェースでリッスンするように変更します。
/etc/elasticsearch/elasticsearch.yml
. . . network.host: 0.0.0.0 . . .
アドレス0.0.0.0
には、さまざまなコンテキストで特定の意味が割り当てられています。 この場合、0.0.0.0
は「すべてのIPv4アドレス」を意味します。
CTRL+X
、Y
、ENTER
の順に押して、elasticsearch.yml
を保存して閉じます(nano
を使用している場合)。 次に、systemctl
でElasticsearchサービスを再起動して、新しい設定を適用します。
sudo systemctl restart elasticsearch
次に、2番目のUbuntuサーバーからElasticsearchポートへのアクセスを許可します。 これにはufw
を使用します。
sudo ufw allow from second_ubuntu_server_ip/32 to any port 9200
サーバーが2つ以上ある場合は、サーバーごとにこのコマンドを繰り返します。 サーバーが同じネットワーク上にある場合は、ネットワーク上のすべてのホストに対して1つのルールを使用してアクセスを許可できます。 これを行うには、プレフィックス/32
をより低い値(/24
など)に置き換える必要があります。 UFWセットアップのその他の例は、 UFW Essentials:Common Firewall Rules andCommandsチュートリアルにあります。
次に、接続をテストします。 root以外のユーザーとして2番目のUbuntuサーバーにログインします。
ssh sammy@second_ubuntu_server_ip
telnet
コマンドを使用して、ElasticStackサーバーへの接続をテストします。 このコマンドは、 Telnet プロトコルを使用して別のホストとの通信を有効にし、リモートシステムのポートの可用性を確認できます。
telnet Elastic_Stack_server_ip 9200
次の出力が表示されます。
OutputTrying Elastic_Stack_server_ip... Connected to Elastic_Stack_server_ip. Escape character is '^]'.
CTRL+]
を押し、次にCTRL+d
を押して、Telnet接続を閉じます。 quit
と入力し、ENTER
を押してTelnetユーティリティを終了します。
これで、ElasticStackサーバーにメトリックを送信する準備が整いました。
ステップ2—ElasticStackサーバーへのMetricbeatのインストールと構成
次の2つの手順では、最初にMetricbeatをElastic Stackサーバーにインストールし、必要なすべてのデータをインポートしてから、2番目のUbuntuサーバーにクライアントをインストールして構成します。
root以外のユーザーとしてElasticStackサーバーにログインします。
ssh sammy@Elastic_Stack_server_ip
以前に前提条件でElasticsearchリポジトリを設定したので、必要なのはMetricbeatをインストールすることだけです。
sudo apt install metricbeat
Metricbeatのインストールが完了したら、インデックステンプレートをElasticsearchにロードします。 Elasticsearch index は、同様の特性を持つドキュメントのコレクションです。 特定の名前は各インデックスを識別し、Elasticsearchはさまざまな操作を実行するときにインデックスを参照するために使用します。 新しいインデックスを作成すると、Elasticsearchサーバーはインデックステンプレートを自動的に適用します。
テンプレートをロードするには、次のコマンドを使用します。
sudo metricbeat setup --template -E 'output.elasticsearch.hosts=["localhost:9200"]'
次の出力が表示されます。
OutputLoaded index template
Metricbeatには、Kibanaダッシュボード、ビジュアライゼーション、およびKibanaでのMetricbeatデータのビジュアライゼーションの検索の例がパッケージ化されています。 ダッシュボードを使用する前に、インデックスパターンを作成し、ダッシュボードをKibanaにロードする必要があります。
テンプレートをロードするには、次のコマンドを使用します。
sudo metricbeat setup -e -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601
次のような出力が表示されます。
Output. . . 2019-02-15T09:51:32.096Z INFO instance/beat.go:281 Setup Beat: metricbeat; Version: 6.6.2 2019-02-15T09:51:32.136Z INFO add_cloud_metadata/add_cloud_metadata.go:323 add_cloud_metadata: hosting provider type detected as digitalocean, metadata={"instance_id":"133130541","provider":"digitalocean","region":"fra1"} 2019-02-15T09:51:32.137Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200 2019-02-15T09:51:32.137Z INFO [publisher] pipeline/module.go:110 Beat name: elastic 2019-02-15T09:51:32.138Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200 2019-02-15T09:51:32.140Z INFO elasticsearch/client.go:721 Connected to Elasticsearch version 6.6.2 2019-02-15T09:51:32.148Z INFO template/load.go:130 Template already exists and will not be overwritten. 2019-02-15T09:51:32.148Z INFO instance/beat.go:894 Template successfully loaded. Loaded index template Loading dashboards (Kibana must be running and reachable) 2019-02-15T09:51:32.149Z INFO elasticsearch/client.go:165 Elasticsearch url: http://localhost:9200 2019-02-15T09:51:32.150Z INFO elasticsearch/client.go:721 Connected to Elasticsearch version 6.6.2 2019-02-15T09:51:32.151Z INFO kibana/client.go:118 Kibana url: http://localhost:5601 2019-02-15T09:51:56.209Z INFO instance/beat.go:741 Kibana dashboards successfully loaded. Loaded dashboards
これで、Metricbeatを起動して有効にできます。
sudo systemctl start metricbeat sudo systemctl enable metricbeat
Metricbeatは、システム統計のElasticsearchへの送信を開始します。
Elasticsearchが実際にこのデータを受信していることを確認するには、次のコマンドでMetricbeatインデックスをクエリします。
curl -XGET 'http://localhost:9200/metricbeat-*/_search?pretty'
次のような出力が表示されます。
Output... { "took" : 3, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 108, "max_score" : 1.0, "hits" : [ { "_index" : "metricbeat-6.6.2-2019.02.15", "_type" : "doc", "_id" : "A4mU8GgBKrpxEYMLjJZt", "_score" : 1.0, "_source" : { "@timestamp" : "2019-02-15T09:54:52.481Z", "metricset" : { "name" : "network", "module" : "system", "rtt" : 125 }, "event" : { "dataset" : "system.network", "duration" : 125260 }, "system" : { "network" : { "in" : { "packets" : 59728, "errors" : 0, "dropped" : 0, "bytes" : 736491211 }, "out" : { "dropped" : 0, "packets" : 31630, "bytes" : 8283069, "errors" : 0 }, "name" : "eth0" } }, "beat" : { "version" : "6.6.2", "name" : "elastic", "hostname" : "elastic" }, ...
"total" : 108,
の行は、Metricbeatがこの特定のメトリックの108件の検索結果を検出したことを示しています。 出力に合計ヒット数が0と表示されている場合は、セットアップでエラーがないかどうかを確認する必要があります。 期待どおりの出力が得られたら、次の手順に進みます。この手順では、2番目のUbuntuサーバーにMetricbeatをインストールします。
ステップ3—2番目のUbuntuサーバーへのMetricbeatのインストールと構成
ElasticStackサーバーにメトリックを送信するすべてのUbuntuサーバーでこの手順を実行します。
root以外のユーザーとして2番目のUbuntuサーバーにログインします。
ssh sammy@second_ubuntu_server_ip
Elastic Stackコンポーネントは、Ubuntuのデフォルトのパッケージリポジトリでは利用できません。 ただし、Elasticのパッケージソースリストを追加した後、APTを使用してインストールできます。
システムをパッケージのなりすましから保護するために、ElasticStackのすべてのパッケージはElasticsearch署名キーで署名されています。 パッケージマネージャーは、キーを使用して認証されたパッケージを信頼します。 このステップでは、Elasticsearchの公開GPGキーをインポートし、Elasticパッケージのソースリストを追加して、Metricbeatをインストールします。
まず、次のコマンドを実行して、Elasticsearchの公開GPGキーをAPTにインポートします。
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
次に、Elasticソースリストをsources.list.d
ディレクトリに追加します。ここで、APTは新しいソースを検索します。
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
次に、パッケージリストを更新して、APTが新しいElasticソースを読み取るようにします。
sudo apt update
次に、次のコマンドを使用してMetricbeatをインストールします。
sudo apt install metricbeat
Metricbeatのインストールが完了したら、Elasticsearchに接続するように構成します。 構成ファイルmetricbeat.yml
を開きます。
sudo nano /etc/metricbeat/metricbeat.yml
注: Metricbeatの構成ファイルはYAML形式です。つまり、インデントが非常に重要です。 このファイルを編集するときは、余分なスペースを追加しないでください。
Metricbeatは多数の出力をサポートしていますが、通常はイベントを直接ElasticsearchまたはLogstashに送信して追加の処理を行うだけです。 次のセクションを見つけて、IPアドレスを更新します。
/etc/metricbeat/metricbeat.yml
#-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["Elastic_Stack_server_ip:9200"] ...
ファイルを保存して閉じます。
モジュールを使用してMetricbeatの機能を拡張できます。 このチュートリアルでは、システムモジュールを使用します。これにより、CPU/メモリ/ディスクの使用状況やネットワーク使用率などのサーバーの統計を監視できます。
この場合、system
モジュールはデフォルトで有効になっています。 次のコマンドを実行すると、有効なモジュールと無効なモジュールのリストが表示されます。
sudo metricbeat modules list
次のようなリストが表示されます。
OutputEnabled: system Disabled: aerospike apache ceph couchbase docker dropwizard elasticsearch envoyproxy etcd golang graphite haproxy http jolokia kafka kibana kubernetes kvm logstash memcached mongodb munin mysql nginx php_fpm postgresql prometheus rabbitmq redis traefik uwsgi vsphere windows zookeeper
モジュールのパラメータは、/etc/metricbeat/modules.d/system.yml
構成ファイルで確認できます。 このチュートリアルの場合、構成を変更する必要はありません。 デフォルトのメトリックセットは、cpu
、load
、memory
、network
、process
、およびprocess_summary
です。 各モジュールには、1つ以上のメトリックセットがあります。 メトリックセットは、データをフェッチして構造化するモジュールの一部です。 メトリックセットは、各メトリックを個別のイベントとして収集するのではなく、リモートシステムへの単一の要求で複数の関連するメトリックのリストを取得します。
これで、Metricbeatを起動して有効にできます。
sudo systemctl start metricbeat sudo systemctl enable metricbeat
メトリックを収集するすべてのサーバーでこの手順を繰り返す必要があります。 その後、次のステップに進むことができます。このステップでは、Kibanaのダッシュボードのいくつかをナビゲートする方法を確認します。
ステップ4—Kibanaダッシュボードを探索する
このステップでは、「前提条件」セクションでインストールしたWebインターフェースであるKibanaを確認します。
Webブラウザーで、ElasticStackサーバーのFQDNまたはパブリックIPアドレスに移動します。 Elastic Stackチュートリアルのステップ2で定義したログインクレデンシャルを入力すると、Kibanaのホームページが表示されます。
左側のナビゲーションバーにあるDiscoverリンクをクリックします。 Discover ページで、事前定義された meticbeat- *インデックスパターンを選択して、Metricbeatデータを表示します。 デフォルトでは、これにより過去15分間のすべてのログデータが表示されます。 ヒストグラムといくつかのメトリックの詳細があります。
ここでは、メトリックを検索および参照したり、ダッシュボードをカスタマイズしたりできます。 ただし、現時点では、サーバーからシステム統計を収集しているだけなので、それほど多くはありません。
左側のパネルを使用してダッシュボードページに移動し、 MetricbeatSystemダッシュボードを検索します。 そこに到達したら、Metricbeatのsystem
モジュールに付属しているサンプルダッシュボードを検索できます。
たとえば、すべてのホストに関する簡単な情報を表示できます。
ホスト名をクリックして詳細情報を表示することもできます。
Kibanaには、グラフ化やフィルタリングなど、他にも多くの機能がありますので、お気軽に探索してください。
結論
このチュートリアルでは、Metricbeatをインストールし、システムメトリックを収集して分析するようにElasticStackを構成しました。 Metricbeatには、Apache、Nginx、Docker、MySQL、PostgreSQLなどのサービスからメトリックを収集する内部モジュールが付属しています。 これで、必要なモジュールをオンにするだけで、アプリケーションのメトリックを収集して分析できます。
サーバーの監視について詳しく知りたい場合は、メトリック、監視、およびアラートの概要および監視とアラートの実践を確認してください。