CentOS7でMetricbeatを使用してインフラストラクチャメトリックを収集する方法

提供:Dev Guides
移動先:案内検索

著者は、コンピューター歴史博物館を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Metricbeat は、さまざまなタイプのサーバーデータを Elastic Stack サーバーに送信するのに役立つ、いくつかの Beats の1つであり、一度インストールすると軽量のデータシッパーです。サーバーは、システム全体およびプロセスごとのCPUとメモリの統計を定期的に収集し、データをElasticsearchデプロイメントに直接送信します。 この配送業者は、ElasticStackのバージョン5.0で以前のTopbeatを置き換えました。

Elasticから現在入手可能な他のビートは次のとおりです。

  • Filebeat :ログファイルを収集して送信します。
  • Packetbeat :ネットワークデータを収集して分析します。
  • Winlogbeat :Windowsイベントログを収集します。
  • Auditbeat :Linux監査フレームワークデータを収集し、ファイルの整合性を監視します。
  • Heartbeat :アクティブプロービングを使用してサービスの可用性を監視します。

このチュートリアルでは、Metricbeatを使用して、CPU/メモリ/ディスク使用量やネットワーク使用率などのローカルシステムメトリックをCentOS7サーバーからElasticStackがインストールされている同じ種類の別のサーバーに転送します。 この配送業者を使用して、サーバーの現在の状態を取得するために必要な基本的なメトリックを収集します。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • CentOS 7 の初期サーバーセットアップガイドに従ってセットアップされた2台のCentOS7サーバー。これには、sudo権限を持つroot以外のユーザーと、firewalldでセットアップされたファイアウォールが含まれます。 firewalldを設定するには、新しいCentOS7サーバーの追加の推奨手順チュートリアルの「基本的なファイアウォールの構成」セクションに従ってください。 1つのサーバーで、ElasticStackをダウンロードします。 このチュートリアルでは、これを「ElasticStackサーバー」と呼びます。 このチュートリアルでは4GBのRAMと2つのCPUを搭載するElasticStackサーバーが、2番目のサーバーを監視します。 この2番目のサーバーは「2番目のCentOSサーバー」と呼ばれます。
  • チュートリアルCentOS7 にElasticsearch、Logstash、およびKibana(Elastic Stack)をインストールする方法に従ってElasticStackサーバーにインストールされたElasticStack。

:Elastic Stackをインストールするときは、スタック全体で同じバージョンを使用する必要があります。 このチュートリアルでは、スタック全体の最新バージョン(この記事の執筆時点では、Elasticsearch 6.7.0、Kibana 6.7.0、Logstash 6.7.0、およびMetricbeat 6.7.0)を使用します。


ステップ1—外部IPでトラフィックをリッスンするようにElasticsearchを設定する

チュートリアルCentOS7 にElasticsearch、Logstash、およびKibana(Elastic Stack)をインストールする方法では、Elasticsearchへのアクセスがlocalhostのみに制限されていました。 多くの場合、多くのホストを監視する必要があるため、実際には、これはまれです。 このステップでは、外部IPアドレスと対話するようにElasticStackコンポーネントを構成します。

root以外のユーザーとしてElasticStackサーバーにログインします。

ssh sammy@Elastic_Stack_server_ip

お好みのテキストエディタを使用して、Elasticsearchのメイン設定ファイルelasticsearch.ymlを編集します。 このチュートリアルでは、viを使用します。

sudo vi /etc/elasticsearch/elasticsearch.yml

次のセクションを見つけて、Elasticsearchがすべてのインターフェースでリッスンするように変更します。 iを押して挿入モードに入り、次の強調表示された項目を追加します。

/etc/elasticsearch/elasticsearch.yml

...
network.host: 0.0.0.0
...

アドレス0.0.0.0には、さまざまなコンテキストで特定の意味が割り当てられています。 この場合、0.0.0.0は「すべてのIPv4アドレス」を意味します。

終了したら、ESCを押して挿入モードを終了し、:wqENTERを押してファイルを保存して終了します。 テキストエディタviとその後継のVimの詳細については、クラウドサーバーへのVimテキストエディタのインストールと使用チュートリアルをご覧ください。 ファイルを保存して終了したら、systemctlを使用してElasticsearchサービスを再起動し、新しい設定を適用します。

sudo systemctl restart elasticsearch

次に、2番目のCentOSサーバーからElasticsearchポートへのアクセスを許可します。 特定のIPアドレスまたはサブネットからのアクセスを構成するには、firewalldリッチルール機能を使用します。

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="second_centos_server_ip/32" port protocol="tcp" port="9200" accept'

豊富なルールを使用すると、より複雑でカスタマイズ可能なfirewalldルールを作成して、ファイアウォールをより細かく制御できます。 このコマンドでは、2番目のCentOSサーバーのIPアドレスとして設定したsourceからのipv4トラフィックを受け入れるルールをport9200のElasticStackサーバー。

次に、firewalldをリロードして、新しいルールをアクティブにします。

sudo firewall-cmd --reload

サーバーが2つ以上ある場合は、サーバーごとにこれらのコマンドを繰り返します。 サーバーが同じネットワーク上にある場合は、ネットワーク上のすべてのホストに対して1つのルールを使用してアクセスを許可できます。 これを行うには、IPアドレスの後の/32を、/24などのより低い値に置き換える必要があります。

次に、接続をテストします。 root以外のユーザーとして2番目のCentOSサーバーにログインします。

ssh sammy@second_centos_server_ip

curlコマンドを使用して、ElasticStackサーバーへの接続をテストします。

curl Elastic_Stack_server_ip:9200

次のような出力が表示されます。

Output{
  "name" : "tl5Is5f",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "W9AcSNWHQ3mYs2uE8odklA",
  "version" : {
    "number" : "6.7.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "3bd3e59",
    "build_date" : "2019-03-06T15:16:26.864148Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

接続が機能することがわかったので、ElasticStackサーバーにメトリックを送信する準備が整いました。

ステップ2—ElasticStackサーバーへのMetricbeatのインストールと構成

次の2つの手順では、最初にMetricbeatをElastic Stackサーバーにインストールし、必要なすべてのデータをインポートしてから、2番目のCentOSサーバーにクライアントをインストールして構成します。

root以外のユーザーとしてElasticStackサーバーにログインします。

ssh sammy@Elastic_Stack_server_ip

以前に前提条件でElasticsearchリポジトリを設定したので、必要なのはMetricbeatをインストールすることだけです。

sudo yum install 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-03-20T09:51:32.096Z        INFO    instance/beat.go:281    Setup Beat: metricbeat; Version: 6.7.0
2019-03-20T09: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-03-20T09:51:32.137Z        INFO    elasticsearch/client.go:165     Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.137Z        INFO    [publisher]     pipeline/module.go:110  Beat name: elastic
2019-03-20T09:51:32.138Z        INFO    elasticsearch/client.go:165     Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.140Z        INFO    elasticsearch/client.go:721     Connected to Elasticsearch version 6.7.0
2019-03-20T09:51:32.148Z        INFO    template/load.go:130    Template already exists and will not be overwritten.
2019-03-20T09:51:32.148Z        INFO    instance/beat.go:894    Template successfully loaded.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2019-03-20T09:51:32.149Z        INFO    elasticsearch/client.go:165     Elasticsearch url: http://localhost:9200
2019-03-20T09:51:32.150Z        INFO    elasticsearch/client.go:721     Connected to Elasticsearch version 6.7.0
2019-03-20T09:51:32.151Z        INFO    kibana/client.go:118    Kibana url: http://localhost:5601
2019-03-20T09:51:56.209Z        INFO    instance/beat.go:741    Kibana dashboards successfully loaded.
Loaded dashboards

これで、Metricbeatを開始できます。

sudo systemctl start metricbeat

今後、起動時にMetricbeatを自動的に起動するには、enableコマンドを使用します。

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.7.0-2019.03.20",
        "_type" : "doc",
        "_id" : "A4mU8GgBKrpxEYMLjJZt",
        "_score" : 1.0,
        "_source" : {
          "@timestamp" : "2019-03-20T09: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.7.0",
            "name" : "elastic",
            "hostname" : "elastic"
          },
...

"total" : 108,の行は、Metricbeatがこの特定のメトリックの108件の検索結果を検出したことを示しています。 任意の数の検索結果は、Metricbeatが機能していることを示します。 出力に合計ヒット数が0と表示されている場合は、セットアップでエラーがないかどうかを確認する必要があります。 期待どおりの出力が得られたら、次の手順に進みます。この手順では、2番目のCentOSサーバーにMetricbeatをインストールします。

ステップ3—2番目のCentOSサーバーへのMetricbeatのインストールと構成

この手順は、ElasticStackサーバーにメトリックを送信するすべてのCentOSサーバーで実行します。 Ubuntuサーバーもある場合は、 Ubuntu18.04でMetricbeatを使用してインフラストラクチャメトリックを収集する方法のステップ3に従ってMetricbeatをインストールできます。

root以外のユーザーとして2番目のCentOSサーバーにログインします。

ssh sammy@second_centos_server_ip

Elastic Stackコンポーネントは、デフォルトではyumパッケージマネージャーからは利用できませんが、Elasticのパッケージリポジトリを追加することでインストールできます。

システムをパッケージのなりすましから保護するために、ElasticStackのすべてのパッケージはElasticsearch署名キーで署名されています。 パッケージマネージャーは、キーを使用して認証されたパッケージを信頼します。 このステップでは、Elasticsearchの公開GPGキーをインポートし、Elasticパッケージのソースリストを追加して、Metricbeatをインストールします。

まず、次のコマンドを実行して、Elasticsearchパブリック署名キーをダウンロードしてインストールします。

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

次に、Elasticリポジトリを追加します。 お好みのテキストエディタを使用して、/etc/yum.repos.d/ディレクトリにファイルelasticsearch.repoを作成します。

sudo vi /etc/yum.repos.d/elasticsearch.repo

Elastic Stackのコンポーネントをダウンロードしてインストールするために必要な情報をyumに提供するには、iを押して挿入モードに入り、ファイルに次の行を追加します。

/etc/yum.repos.d/elasticsearch.repo

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

終了したら、ファイルを保存して閉じます。

次に、次のコマンドを使用してMetricbeatをインストールします。

sudo yum install metricbeat

Metricbeatのインストールが完了したら、Elasticsearchに接続するように構成します。 構成ファイルmetricbeat.ymlを開きます。

sudo vi /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構成ファイルで確認できます。 このチュートリアルの場合、構成を変更する必要はありません。 デフォルトのメトリックセットは、cpuloadmemorynetworkprocess、および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などのサービスからメトリックを収集する内部モジュールが付属しています。 これで、必要なモジュールをオンにするだけで、アプリケーションのメトリックを収集して分析できます。

サーバーの監視について詳しく知りたい場合は、メトリック、監視、およびアラートの概要および監視とアラートの実践を確認してください。