#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パッケージは、本リポジトリーより取得します。
[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パッケージは、本リポジトリーより取得します。
[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 パッケージのインストール
[root@centos74 ~]# yum -y install kibana
[root@centos74 ~]# yum -y install elasticsearch
[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コマンドの使い方)を参照ください。
[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)
[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/
#10 実験
stress-ng,stress,iperf3等のツールを使って、負荷をかけてみます。
そのときの様子をKibanaのDashboardより確認してみます。
##10.1 CPU使用率の確認
stress-ngコマンドを使って、搭載している全てのCPUでCPU使用率を60%程度にしてみます。
stress-ngコマンドの使い方は、ここ(stress-ngコマンドの使い方)を参照してください。
[root@centos74 ~]# cat /proc/cpuinfo |grep processor
processor : 0
processor : 1
processor : 2
processor : 3
[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
[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使用率の大部分を占めていることもわかる。
##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&
[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使用
メモリを確保した時点で、メモリ使用量が増加(黒丸で囲んだ場所)していることがわかります。
##11.3 ネットワーク負荷の確認
iperf3コマンドを使って、インバウンド(受信)のネットワーク負荷をかけてみます。
iperf3コマンドの使い方は、ここ(iperf3コマンドの使い方)を参照してください。
centos74,centos72はホスト名です。centos74でKibanaが動作しています。
centos72からcentos74に対してTCPパケットを送信します。
192.168.3.0/24
centos72 ----------------------- centos74
.30 .20
[root@centos74 ~]# iperf3 -s
[root@centos72 ~]# iperf3 -c 192.168.3.20 -t 600
インバウンドトラフィックが 312.8MB/sであることがわかる。
また、TCPパケットはソフト割込みで処理するため、softirqの割合が増加していることもわかります。
インバウンドトラフィックのパケット数、バイト数が増加していることがわかります。
#Y メモ
##Y.1 Logstash
公式ページよると、LogstashはJava 8が必要とあります。
[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、によるログの可視化 ~価値のある情報を導き出す方法のご紹介 ~