Fusic Tech Blog

Fusion of Society, IT and Culture

ISUCON予選で散った私が心ときめいたグラフィカルな監視ツール
2018/12/10

ISUCON予選で散った私が心ときめいたグラフィカルな監視ツール

本記事はFusic Advent Calendar 2018の9日目の記事です。

こんにちは、岡嵜です。
2018年も残すところ3週間を切りました。今年の印象的な出来事として「ISUCONに初めて出場した」ことが挙げられます。結果は散々でしたが…

ISUCONの前後にサーバの状態を監視するグラフィカルなツールをいくつか知りました。「CUIこそ正義」という方々も多いとは思いますが、基本的にチームで出場するISUCONで、各々のPCでサーバの状態を直感的に状況を把握できるGUIツールは非常に便利です。

今回はそんなツールの中から自分が心ときめいた2つのツールを紹介します。
※この記事の動作環境は「Conoha ISUCON8(予選)アプリケーションイメージ」を使用しています。

netdata

http://my-netdata.io/

公式サイトの手順通りコマンドを叩いてインストールします。

$ bash \<(curl -Ss https://my-netdata.io/kickstart.sh)
 $ sudo systemctl start netdata

ファイアウォールの設定を変えてポート番号19999を開けます。

$ sudo firewall-cmd --add-port=19999/tcp --zone=public --permanent
 $ sudo firewall-cmd --reload

ブラウザで http://{ホスト名}:19999/ へアクセスするとCPU, Memory, Disk, Networkリソースの使用状況を監視できます。

特にISUCONに役立ちそうなのはApplications。各アプリケーション/ミドルウェア毎のリソースの使用状況を監視できます。

ベンチマークを実行するとこんな感じ。SQLがボトルネックになっていることがひと目で分かります。

Moloch

https://molo.ch/

$ sudo yum install perl-libwww-perl perl-JSON
 $ wget https://files.molo.ch/builds/centos-7/moloch-1.6.2-1.x86\_64.rpm
 $ sudo rpm -i ./moloch-1.6.2-1.x86\_64.rpm
$ wget https://artifacts.elastic.co/GPG-KEY-elasticsearch
 $ gpg --with-fingerprint GPG-KEY-elasticsearch
 $ rpm --import GPG-KEY-elasticsearch
 $ sudo 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
 
 $ sudo yum install java elasticsearch 
 $ sudo vi /etc/elasticsearch/elasticsearch.yml
 
 以下を追記
 network.host: {ホスト名}
 
 $ sudo firewall-cmd --add-port=9200/tcp --zone=public --permanent
 $ sudo firewall-cmd --add-port=24224/tcp --zone=public --permanent
 $ sudo firewall-cmd --add-port=24224/udp --zone=public --permanent
 $ sudo firewall-cmd --reload
 $ sudo systemctl start elasticsearch
$ /data/moloch/bin/Configure
 
 Semicolon ';' seperated list of interfaces to monitor [eth1] eth0
 Elasticsearch server URL [http://localhost:9200] http://{ホスト名}:9200
 その他はデフォルトでOK
 
 $ /data/moloch/db/db.pl http://150.95.216.132:9200 init
 $ /data/moloch/bin/moloch\_add\_user.sh admin "admin user" password --admin
 $ sudo systemctl start molochcapture
 $ sudo systemctl start molochviewer
 $ sudo firewall-cmd --add-port=8005/tcp --zone=public --permanent
 $ sudo firewall-cmd --reload

ブラウザで http://{ホスト名}:8005/ へアクセスするとセッションやパケットをモニタできます。

ただ、この状態でベンチマークを実行すると

[info] [isu8q-bench] 2018/12/09 23:32:50.278463 bench.go:116: preTest: CheckTopPage 1.556265753s
 [info] [isu8q-bench] 2018/12/09 23:33:00.328698 bench.go:116: preTest: CheckAdminTopPage 10.03700407s
 [info] [isu8q-bench] 2018/12/09 23:33:00.332393 bench.go:604: {"job\_id":"","ip\_addrs":"localhost","pass":false,"score":0,"message":"負荷走行前のバリデーションに失敗しました。2018-12-09 23:33:00.315486632 +0900 JST m=+18.813961004 リクエストがタイムアウトしました (GET /admin/ )","error":["2018-12-09 23:33:00.315486632 +0900 JST m=+18.813961004 リクエストがタイムアウトしました (GET /admin/ )"],"log":null,"load\_level":0,"start\_time":"2018-12-09T23:32:41.775652559+09:00","end\_time":"2018-12-09T23:33:00.331129164+09:00"}
 [isucon@150-95-216-132 ~]$ sudo systemctl stop molochcapture

残念ながらタイムアウトしてしまいました。パケットキャプチャすることでレスポンスを返すのに時間がかかるようになってしまっているようですね。

というわけで実戦投入にはまだまだ様子見といったところです。

まとめ

今年の悔しさは今年のうちに忘れて、来年こそは本戦に進出します!

yuuu

yuuu

2018年の年明けに組込み畑からやってきた、2児の父 兼 Webエンジニアです。 業務ではRuby on Rails、最近ではフロントエンドにVue.jsを使っています。趣味でGo言語を触ることも。 Lab.Consoleのプロダクトオーナーをしており、AWSと仲良くなれるよう日々勉強中です。