LoginSignup
18
15

More than 3 years have passed since last update.

Metricbeatによるシステム情報の視覚化

Last updated at Posted at 2018-05-13

0 はじめに

システム情報(CPU使用率,メモリ使用量等)の可視化を試してみました。
ここでは、Kibana,Elasticsearch,Metricbeatを使ってみました。

1 Metricbeatとは?

データの収集、送信をするBeatsというのがあります。
Beatsには、下記6種類あります。ここでは、Metricbeatを使います。
Beatsは、ここ(公式ページ)を参照してください。

名前 概要
Filebeat ログファイルの収集
Metricbeat CPU,メモリ等の情報収集
Packetbeat パケット情報の収集
Winlogbeat Windowsのイベントログの収集
Auditbeat 監査データの収集
Heartbeat リモートから稼働状況の監視

2 環境

VMware Workstation 14 Player上の仮想マシン(1台)を使用しました。

2.1 ゲストマシン

[root@centos74 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

[root@centos74 ~]# uname -r
3.10.0-693.el7.x86_64

2.2 機能構成

ゲストマシンでkibana,elasticsearch,Metricbeatが動作します。
それぞれの役割は以下のとおりです。

機能 役割
Metricbeat CPU,メモリ等の情報を収集して、Elasticsearchに送信
Elasticsearch データの保管、検索
kibana Elasticsearchに保管されたログデータの可視化
+---- PC -----+  +--------------- Guest Machine(CentOS7.4) -------------------+
|             |  |                                                            |
|             |  | +--- Kibana --+  +-- Elasticsearch --+  +-- Metricbeat --+ |
|             |  | |             |  |                   |  |                | |
|             |  | |             |  |                   |  |                | |
| Web Browser |  | +--[5601]-----+  +-------[9200]------+  +----------------+ |
|    |        |  |      A      |             A  A             |               |
|    |        |  |      |      |             |  |             |               |
|    |        |  |      |      +- localhost -+  +- localhost -+               |
|    |        |  |      |                                                     |
|    |        |  |      |                                                     |
+----|--------+  +---- eth0 --------------------------------------------------+
     |            (192.168.3.20)
     |                  |
     |                  |
     +------------------+

図中の[]内はTCPポート番号を表します。矢印(--->)は、TCPコネクションを確立する方向を表します。

3 インストール

3.1 公開鍵のインストール

[root@centos74 ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

3.2 リポジトリの追加

公式ページの説明にしたがって、リポジトリを追加しました。
Kibanaのrpmパッケージは、本リポジトリーより取得します。

Kibanaのリポジトリ追加
[root@centos74 ~]# vi /etc/yum.repos.d/kibana.repo
[root@centos74 ~]# cat /etc/yum.repos.d/kibana.repo
[kibana-6.x]
name=Kibana 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

公式ページの説明にしたがって、リポジトリを追加しました。
Elasticsearch,Metricbeatのrpmパッケージは、本リポジトリーより取得します。

Elasticsearchのリポジトリ追加
[root@centos74 ~]# vi /etc/yum.repos.d/elasticsearch.repo
[root@centos74 ~]# cat /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

3.3 パッケージのインストール

kibanaのインストール
[root@centos74 ~]# yum -y install kibana
elasticsearchのインストール
[root@centos74 ~]# yum -y install elasticsearch
metricbeatのインストール
[root@centos74 ~]# yum -y install metricbeat

4 定義ファイルの編集

4.1 Elasticsearchの定義ファイル編集

network.hostを192.168.0.1からlocalhostに変更しました。

network.hostを192.168.0.1から127.0.0.1に変更する。
[root@centos74 ~]# vi /etc/elasticsearch/elasticsearch.yml
#network.host: 192.168.0.1
network.host: localhost

4.2 Kibanaの定義ファイル編集

server.hostを"localhost"から192.168.3.20に変更しました。

[root@centos74 ~]# vi /etc/kibana/kibana.yml
#server.host: "localhost"
server.host: 192.168.3.20

4.3 Metricbeatの定義ファイル編集

Metricbeatの定義ファイルの編集方法は、ここを参照しました。
setup.kibanaのhostを以下のように変更しました。

[root@centos74 ~]# vi /etc/metricbeat/metricbeat.yml

#============================== 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: "192.168.3.20:5601"

5 ポート番号の開放

Web Browserからkibanaの5601番ポートにアクセスするため、5601番ポートへのアクセスを許可する。

[root@centos74 ~]# firewall-cmd --add-port=5601/tcp
success
[root@centos74 ~]# firewall-cmd --runtime-to-permanent
success
[root@centos74 ~]# firewall-cmd --list-ports
5601/tcp

6 サービスの起動

[root@centos74 ~]# systemctl start elasticsearch
[root@centos74 ~]# systemctl start kibana
[root@centos74 ~]# systemctl start metricbeat

7 ポート番号の確認

ポート番号の確認方法は、ここ(lsofコマンドの使い方)を参照ください。

elasticsearchが使用しているポート番号
[root@centos74 ~]# lsof -i:9200 -nP
COMMAND    PID          USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java      9871 elasticsearch  176u  IPv6  70263      0t0  TCP 127.0.0.1:9200->127.0.0.1:32972 (ESTABLISHED)
java      9871 elasticsearch  177u  IPv6  71032      0t0  TCP 127.0.0.1:9200 (LISTEN)
java      9871 elasticsearch  178u  IPv6  71033      0t0  TCP [::1]:9200 (LISTEN)
java      9871 elasticsearch  179u  IPv6  70268      0t0  TCP 127.0.0.1:9200->127.0.0.1:32974 (ESTABLISHED)
java      9871 elasticsearch  737u  IPv6  71809      0t0  TCP 127.0.0.1:9200->127.0.0.1:32976 (ESTABLISHED)
node      9942        kibana   10u  IPv4  70262      0t0  TCP 127.0.0.1:32972->127.0.0.1:9200 (ESTABLISHED)
node      9942        kibana   12u  IPv4  70267      0t0  TCP 127.0.0.1:32974->127.0.0.1:9200 (ESTABLISHED)
metricbea 9960          root    5u  IPv4  71039      0t0  TCP 127.0.0.1:32976->127.0.0.1:9200 (ESTABLISHED)
kibanaが使用しているポート番号
[root@centos74 ~]# lsof -i:5601 -nP
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    9942 kibana   11u  IPv4  70234      0t0  TCP 192.168.3.20:5601 (LISTEN)

8 ダッシュボードの有効化

[root@centos74 ~]# metricbeat setup --dashboards
Loaded dashboards

9 kibanaへのアクセス

9.1 KibanaのTOPページへのアクセス

下記URLにアクセスする。
http://192.168.3.20:5601/
kibana.png

9.2 KibanaのDashboardへのアクセス

kibana1.png
kibana2.png
kibana3.png

10 実験

stress-ng,stress,iperf3等のツールを使って、負荷をかけてみます。
そのときの様子をKibanaのDashboardより確認してみます。

10.1 CPU使用率の確認

stress-ngコマンドを使って、搭載している全てのCPUでCPU使用率を60%程度にしてみます。
stress-ngコマンドの使い方は、ここ(stress-ngコマンドの使い方)を参照してください。

ゲストマシンが搭載しているCPU数(4個)
[root@centos74 ~]# cat /proc/cpuinfo |grep processor
processor       : 0
processor       : 1
processor       : 2
processor       : 3
stress-ngコマンド実行
[root@centos74 ~]# stress-ng -c 4 -l 60
stress-ng: info:  [1502] defaulting to a 86400 second run per stressor
stress-ng: info:  [1502] dispatching hogs: 4 cpu
psコマンドによるCPU使用率の確認
[root@centos74 ~]# ps -C stress-ng-cpu -o comm,pid,ppid,%cpu
COMMAND            PID   PPID %CPU
stress-ng-cpu     1503   1502 58.9
stress-ng-cpu     1504   1502 59.0
stress-ng-cpu     1505   1502 59.1
stress-ng-cpu     1506   1502 59.0

CPU使用率が60%程度になっていることがわかる。
また、stress-ng-cpuプロセスはユーザモードでCPUを消費するので、user(緑色の部分)がCPU使用率の大部分を占めていることもわかる。
cpu1.png
cpu2.png

10.2 メモリ使用量の確認

stressコマンドを使って、メモリ使用量を増やしてみます。
stressコマンドを3回実行します。1,2回目で256M、3回目で512Mのメモリを確保してみます。
stressコマンドの使い方は、ここ(stressコマンドの使い方)を参照してください。

メモリ確保
[root@centos74 ~]# stress -m 1 --vm-hang 0 -q&
[root@centos74 ~]# stress -m 1 --vm-hang 0 -q&
[root@centos74 ~]# stress -m 1 --vm-bytes 536870912 --vm-hang 0 -q&
psコマンドによるメモリ使用量の確認
[root@centos74 ~]# ps -C stress -o comm,pid,ppid,rss
COMMAND            PID   PPID   RSS
stress            1668   1026   424
stress            1669   1668 262296 ★256M使用
stress            1676   1466   424
stress            1677   1676 262376 ★256M使用
stress            1692   1466   424
stress            1693   1692 524456 ★512M使用

メモリを確保した時点で、メモリ使用量が増加(黒丸で囲んだ場所)していることがわかります。
mem1.png

11.3 ネットワーク負荷の確認

iperf3コマンドを使って、インバウンド(受信)のネットワーク負荷をかけてみます。
iperf3コマンドの使い方は、ここ(iperf3コマンドの使い方)を参照してください。

構成
centos74,centos72はホスト名です。centos74でKibanaが動作しています。
centos72からcentos74に対してTCPパケットを送信します。
             192.168.3.0/24
centos72 ----------------------- centos74
       .30                     .20
iperf3の実行(サーバ側)
[root@centos74 ~]# iperf3 -s
iperf3の実行(クライアント側)
[root@centos72 ~]# iperf3 -c 192.168.3.20 -t 600

インバウンドトラフィックが 312.8MB/sであることがわかる。
また、TCPパケットはソフト割込みで処理するため、softirqの割合が増加していることもわかります。
net1.png

インバウンドトラフィックのパケット数、バイト数が増加していることがわかります。
net2.png

Y メモ

Y.1 Logstash

公式ページよると、LogstashはJava 8が必要とあります。

javaの版数
[root@centos74 ~]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

Y.2 Metricbeatのモジュール有効、無効化方法

モジュールの有効、無効は/etc/metricbeat/modules.dで行います。
[root@centos74 modules.d]# pwd
/etc/metricbeat/modules.d

apacheモジュールが無効になっていることがわかる。
[root@centos74 modules.d]# ls apache.yml*
apache.yml.disabled

apacheモジュールを有効にする。
[root@centos74 modules.d]# metricbeat modules enable apache
Enabled apache

apacheモジュールが有効になったことがわかる。
[root@centos74 modules.d]# ls apache.yml*
apache.yml

apacheモジュールを無効にする。
[root@centos74 modules.d]# metricbeat modules disable apache
Disabled apache

apacheモジュールが無効になったことがわかる。
[root@centos74 modules.d]# ls apache.yml*
apache.yml.disabled

Z 参考情報

公式ページ(日本語)
Elasticsearch、Logstash 、Kibana、によるログの可視化 ~価値のある情報を導き出す方法のご紹介 ~

18
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
15