著者は、Write for DOnationsプログラムの一部として寄付を受け取るためにComputer History Museumを選択しました。
前書き
さまざまなタイプのサーバーデータをElastic Stackサーバーに送信するのに役立ついくつかのBeatsの1つであるMetricbeatは、サーバーにインストールされると定期的にシステムを収集する軽量のデータシッパーです。ワイドでプロセスごとのCPUとメモリの統計情報を取得し、Elasticsearchデプロイメントにデータを直接送信します。 この配送業者は、Elastic Stackのバージョン5.0で以前のTopbeatを置き換えました。
現在Elasticから入手できるその他のビートは次のとおりです。
-
Filebeat:ログファイルを収集して送信します。
-
Packetbeat:ネットワークデータを収集して分析します。
-
Winlogbeat:Windowsイベントログを収集します。
-
Auditbeat:Linux監査フレームワークデータを収集し、ファイルの整合性を監視します。
-
Heartbeat:アクティブプロービングを使用してサービスの可用性を監視します。
このチュートリアルでは、Metricbeatを使用して、CPU /メモリ/ディスクの使用率やネットワーク使用率などのローカルシステムメトリックをCentOS 7サーバーからElastic Stackがインストールされている同じ種類の別のサーバーに転送します。 この配送業者を使用して、サーバーの現在の状態を取得するために必要な基本的なメトリックを収集します。
前提条件
このチュートリアルを実行するには、次のものが必要です。
-
sudo権限を持つ非rootユーザーと
firewalld
でセットアップされたファイアウォールを含む、Initial Server Setup with CentOS 7ガイドに従ってセットアップされた2つのCentOS7サーバー。firewalld
を設定するには、Additional Recommended Steps for New CentOS 7 Serversチュートリアルの“Configuring a Basic Firewall”セクションに従ってください。 1つのサーバーで、Elastic Stackをダウンロードします。このチュートリアルでは、これを「Elastic Stackサーバー」と呼びます。ElasticStackサーバーは、このチュートリアルでは4GBのRAMと2つのCPUを持ち、2番目のサーバーを監視します。 この2番目のサーバーは、「2番目のCentOSサーバー」と呼ばれます。 -
チュートリアルHow To Install Elasticsearch, Logstash, and Kibana (Elastic Stack) on CentOS 7に従って、ElasticStackサーバーにインストールされたElasticStack。
[.note]#Note:Elastic Stackをインストールするときは、スタック全体で同じバージョンを使用する必要があります。 このチュートリアルでは、スタック全体の最新バージョンを使用します。これは、この記事の執筆時点では、Elasticsearch 6.7.0、Kibana 6.7.0、Logstash 6.7.0、およびMetricbeat 6.7.0。
です。 s#
[[step-1 -—- configuring-elasticsearch-to-listen-for-traffic-on-an-external-ip]] ==ステップ1—外部IPでトラフィックをリッスンするようにElasticsearchを構成する
チュートリアルHow To Install Elasticsearch, Logstash, and Kibana (Elastic Stack) on CentOS 7は、Elasticsearchアクセスをlocalhost
のみに制限しました。 多くのホストを監視する必要があることが多いため、実際にはこれはまれです。 このステップでは、外部IPアドレスとやり取りするようにElastic Stackコンポーネントを構成します。
非ルートユーザーとしてElastic Stackサーバーにログインします。
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
を押して挿入モードを終了し、次に:wq
とENTER
を押してファイルを保存して終了します。 テキストエディタviとその後継のVimの詳細については、Installing and Using the Vim Text Editor on a Cloud Serverチュートリアルをご覧ください。 ファイルを保存して終了したら、systemctl
を指定してElasticsearchサービスを再起動し、新しい設定を適用します。
sudo systemctl restart elasticsearch
次に、2番目のCentOSサーバーからElasticsearchポートへのアクセスを許可します。 特定のIPアドレスまたはサブネットからのアクセスを構成するには、firewalld
のrich rule機能を使用します。
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
トラフィックを受け入れるルールをport
9200
に追加します。 ElasticStackサーバーの
次に、firewalld
をリロードして、新しいルールをアクティブにします。
sudo firewall-cmd --reload
3つ以上ある場合は、サーバーごとにこれらのコマンドを繰り返します。 サーバーが同じnetworkにある場合は、ネットワーク上のすべてのホストに対して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"
}
接続が機能することがわかったので、メトリックをElastic Stackサーバーに送信する準備ができました。
[[step-2 -—- installing-and-configuring-metricbeat-on-the-elastic-stack-server]] ==ステップ2— ElasticStackサーバーへのMetricbeatのインストールと構成
次の2つのステップでは、最初にElasticStackサーバーにMetricbeatをインストールし、必要なすべてのデータをインポートしてから、2番目のCentOSサーバーにクライアントをインストールして構成します。
非ルートユーザーとしてElastic Stackサーバーにログインします。
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と表示される場合は、セットアップのエラーを確認する必要があります。 予想される出力を受け取ったら、次のステップに進みます。このステップでは、Metricbeatを2番目のCentOSサーバーにインストールします。
[[step-3 -—- installing-and-configuring-metricbeat-on-the-second-centos-server]] ==ステップ3—2番目のCentOSサーバーへのMetricbeatのインストールと構成
Elastic Stackサーバーにメトリックスを送信するすべてのCentOSサーバーでこの手順を実行します。 Ubuntuサーバーもある場合は、How To Gather Infrastructure Metrics with Metricbeat on Ubuntu 18.04のステップ3に従ってMetricbeatをインストールできます。
非rootユーザーとして2番目のCentOSサーバーにログインします。
ssh sammy@second_centos_server_ip
Elastic Stackコンポーネントは、デフォルトではyumパッケージマネージャーからは使用できませんが、Elasticのパッケージリポジトリを追加することでインストールできます。
システムをパッケージのなりすましから保護するために、Elastic StackのすべてのパッケージはElasticsearch署名キーで署名されています。 パッケージマネージャーは、キーを使用して認証されたパッケージを信頼します。 このステップでは、Metricbeatをインストールするために、Elasticsearch公開GPGキーをインポートし、Elasticパッケージソースリストを追加します。
開始するには、次のコマンドを実行して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
[.note]#Note: 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"]
...
ファイルを保存して閉じます。
modulesを使用してMetricbeatの機能を拡張できます。 このチュートリアルでは、system
モジュールを使用します。これにより、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のいくつかのダッシュボードをナビゲートする方法を確認できます。
[[step-4 -—- exploring-kibana-dashboards]] ==ステップ4—Kibanaダッシュボードの探索
このステップでは、「前提条件」セクションでインストールしたWebインターフェースであるKibanaを見ていきます。
Webブラウザーで、Elastic StackサーバーのFQDNまたはパブリックIPアドレスに移動します。 the Elastic Stack tutorialのステップ2で定義したログイン資格情報を入力すると、Kibanaホームページが表示されます。
左側のナビゲーションバーにあるDiscoverリンクをクリックします。 Discoverページで、事前定義されたmeticbeat- *インデックスパターンを選択して、Metricbeatデータを表示します。 デフォルトでは、過去15分間のすべてのログデータが表示されます。 ヒストグラムといくつかのメトリックの詳細が表示されます。
ここでは、メトリックを検索および参照したり、ダッシュボードをカスタマイズしたりできます。 ただし、この時点では、サーバーからシステムの統計情報のみを収集しているため、あまり多くはありません。
左側のパネルを使用してDashboardページに移動し、Metricbeat Systemダッシュボードを検索します。 そこに到達したら、Metricbeatのsystem
モジュールに付属するサンプルダッシュボードを検索できます。
たとえば、すべてのホストに関する簡単な情報を表示できます。
ホスト名をクリックして、詳細情報を表示することもできます。
Kibanaには、グラフ化やフィルタリングなど、他にも多くの機能がありますので、気軽に探索してください。
結論
このチュートリアルでは、Metricbeatをインストールし、システムメトリックを収集して分析するようにElastic Stackを構成しました。 Metricbeatには、Apache、Nginx、Docker、MySQL、PostgreSQLなどのサービスからメトリックを収集する内部modulesが付属しています。 必要なモジュールをオンにするだけで、アプリケーションのメトリックを収集して分析できるようになりました。
サーバーの監視について詳しく知りたい場合は、An Introduction to Metrics, Monitoring, and AlertingとPutting Monitoring and Alerting into Practiceを確認してください。