今回は Kibana と Beats を使ってサーバのパフォーマンスデータを可視化してみます。
主にサーバのシステム系のパフォーマンスデータと nginx のコネクションデータなどを可視化してみます。
Kibana は既にインストールなどしている前提です。
インストール環境は CentOS7 で yum を使ってのインストールになります。
metricbeats のインストール
metrricbeatsのインストールを実施します。
Beats はgo言語で動く軽量なデータシッパーとなります。
インストールに際して、Javaなどのインストールは必要ありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch # vi /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 ----------------------------- # yum -y install metricbeat |
まず、上記ではインストールに必要なリポジトリのキーの読み込みと設定を行い、yumでのインストールを実施しています。
Metricbeatの設定
設定ファイルの基本となる「/etc/metricbeat/metricbeat.yml」のファイルの編集を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 host: "hostname:5601" #-------------------------- Elasticsearch output ------------------------------ output.elasticsearch: # Array of hosts to connect to. hosts: ["hostname:9200"] |
今回はElasticsearchに直接データを送信しています。
Kibanaのホストも設定しております。(後のコマンドで利用)
次にシステム関連の設定となる「/etc/metricbeat/modules.d/system.yml」を確認してみます。
こちらはデフォルトでデータを取得される状態です。
特に設定の変更はしていませんが、中身の確認をしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# Module: system # Docs: https://www.elastic.co/guide/en/beats/metricbeat/6.4/metricbeat-module-system.html - module: system period: 10s metricsets: - cpu - load - memory - network - process - process_summary #- core #- diskio #- socket process.include_top_n: by_cpu: 5 # include top 5 processes by CPU by_memory: 5 # include top 5 processes by memory - module: system period: 1m metricsets: - filesystem - fsstat processors: - drop_event.when.regexp: system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib)($|/)' - module: system period: 15m metricsets: - uptime #- module: system # period: 5m # metricsets: # - raid # raid.mount_point: '/' |
必要モジュールの読み込み
metricbeat では「/etc/metricbeat/modules.d/」に読み込み可能なモジュールのファイルがあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# ls /etc/metricbeat/modules.d/ aerospike.yml.disabled logstash.yml.disabled apache.yml.disabled memcached.yml.disabled ceph.yml.disabled mongodb.yml.disabled couchbase.yml.disabled munin.yml.disabled docker.yml.disabled mysql.yml.disabled dropwizard.yml.disabled nginx.yml.disabled elasticsearch.yml.disabled php_fpm.yml.disabled envoyproxy.yml.disabled postgresql.yml.disabled etcd.yml.disabled prometheus.yml.disabled golang.yml.disabled rabbitmq.yml.disabled graphite.yml.disabled redis.yml.disabled haproxy.yml.disabled system.yml http.yml.disabled traefik.yml.disabled jolokia.yml.disabled uwsgi.yml.disabled kafka.yml.disabled vsphere.yml.disabled kibana.yml.disabled windows.yml.disabled kubernetes.yml.disabled zookeeper.yml.disabled kvm.yml.disabled |
初期では「system.yml」だけが利用可能となっていますが、利用する場合は後ろの「.disabled」を削除します。
今回はnginxを利用します。
1 2 3 |
# mv /etc/metricbeat/modules.d/nginx.yml.disabled /etc/metricbeat/modules.d/nginx.yml |
特に設定を変える必要はありませんが中身を確認してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Module: nginx # Docs: https://www.elastic.co/guide/en/beats/metricbeat/6.4/metricbeat-module-nginx.html - module: nginx #metricsets: # - stubstatus period: 10s # Nginx hosts hosts: ["http://127.0.0.1"] # Path to server status. Default server-status #server_status_path: "server-status" #username: "user" #password: "secret" |
ただ、「nginx」側で「/server-status」を取得できるようにする必要があるのでそちらを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# vi /etc/nginx/nginx.conf -----------------------------追加 location = /server-status { stub_status on; access_log off; allow 127.0.0.1; deny all; } ----------------------------- # systemctl restart nginx.service |
これでデータが取得できるようになりました。
起動の設定
metricbeatを起動し、自動起動される設定を行います。
1 2 3 4 5 6 |
# systemctl daemon-reload # systemctl enable metricbeat.service # systemctl start metricbeat.service # systemctl status metricbeat.service |
Kibanaで可視化できるように設定
Kibana側でデータを確認できるようにするようにインポートの設定を行います。
1 2 3 4 |
# metricbeat modules enable system # metricbeat setup -e |
こちらでKibana側でも可視化の設定を行ってくれます。
データの確認
可視化されたデータの確認を行います。
メニュー「Visualize」でインポートされているデータの確認を行います。
まずはメモリの利用の状態から。
15分単位なので大きな変化はありませんが、データは取得できています。
次にnginxのコネクションのデータを確認してみます。
こちらも無事データの取得ができました。
Elasticsearch + Kibana 環境があれば非常に簡易にサーバパフォーマンスの確認を行えます。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。