はじめに
今、カオスエンジニアリングについてキャッチアップしていて、そのメモの一部です。まずはわかりやすいインフラ(Linux)からです。
カオスエンジニアリングとは実際に稼働している本番システムの一部に模擬障害を発生させて、自動復旧させる強いシステムを作り上げていく、障害発生に備える運用技術の手法です。
負荷試験でLinuxでCPUに負荷をかける場合は、 Linuxのターミナルで yes コマンドを使って、そして1回の実行では負荷が足りないので、yesコマンドを連打しますよね。
yes > /dev/null &
yes > /dev/null &
・
・・
・・・
yes > /dev/null &
この投稿は、 yes コマンドの代わりにカオスエンジニアリングツールのGremlinを使ってLinuxのCPUに負荷をかけてみたという話になります。

そして、負荷をかけた時の確認をこの投稿では htopで確認します。
前提
以下の2つを準備
- Gremlinのアカウント
- Ubuntuの環境
- カオスエンジニアリングの簡単な理解
→以下のSpeakerDeckの「2.カオスエンジニアリング超入門」がわかりやすいと思います。
https://speakerdeck.com/katahiro12345/2-dot-kasuenziniaringuchao-ru-men
Gremlinのアカウントの作成
-
Gremlinのホームページにて、Free版でアカウントを作成
URL : https://www.gremlin.com/ -
Gremlinに作成したアカウントでログイン
-
Team IDと Secret Keyの取得
この後、UbuntuにGremlinのDaemonをインストールする際に使用します。画像の①、②、③の順番にクリックしてTeam IDとSecret Keyをコピーして保存しておいてください。

Gremlin クライアントとデーモンのインストール
(参考) Ubuntu上にインストール
https://www.gremlin.com/community/tutorials/how-to-install-and-use-gremlin-on-ubuntu-18-04/
手順
1 Gremlin リポジトリの追加
echo "deb https://deb.gremlin.com/ release non-free" | sudo tee /etc/apt/sources.list.d/gremlin.list
2 GPG keyのインポート
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
3 Gremlinクライアントとデーモンのインストール
$ sudo apt-get update && sudo apt-get install -y gremlin gremlind
4 Gremlinの初期設定
gremlin initコマンドを実行して色設定を行います。
Team ID と Team Secretは Gremlinのアカウント作成した際にメモをとったTeam ID と Team Secretの値を入力します。
$ gremlin init
Metadata set for [ gremlin-client-version: 2.22.0 ]
Metadata set for [ os-type: Linux ]
Metadata set for [ os-name: Ubuntu ]
Metadata set for [ local-ip: IPアドレスが自動表示 ]
Metadata set for [ local-hostname: ホスト名が自動表示 ]
Please input your Team ID: "<チームIDを入力>
Please input your Team Secret: "<シークレットキーを入力>"
これで、Ubuntuに Gremlinのエージェントとデーモンのインストールが終了しました。
次は、Gremlinのポータル画面から、実際に Ubuntuに対して、CPUの負荷をかけて攻撃してみましょう。
Gremlinを使って UbuntuにCPUの負荷をかける実験をやってみる
-
Ubuntuの負荷の状況を確認
まず、下図は、実験をする前のUbuntuでhtopコマンドを実行すると、下図の上部の 1から16までは、全て 0.0%で 無風の状態であることがわかります。

-
まず、攻撃対象を設定します。

上図のWhat do you want to targetで ①Infrastrucre、②Hostsを選択しホストの中から攻撃対象を選べるようにします。
次に、Choose Hosts to targetをクリックし、今回は③local-hostでホスト名で対象を選択しました。 -
攻撃の種類を選択します。

上図のCategoryの中から今回は①Resourceと Atacksからは②CPUを選択しました。 -
次にCPUで攻撃するための期間やコア数などの詳細を設定します。

ここでは上図の①から③の設定を以下の様にし、1日間、仮想マシンのCPU14コアに対して、90%負荷をかけるシナリオをにしました。
- Length : 攻撃する期間 (秒) ここでは1日 86,400秒を入力
- CPU Capacity : 1コアあたりのCPUの使用率 ここでは90%を入力
- Cores : 負荷をかける対象のコア数 ここでは14コアを入力
-
これで、Ubuntuに攻撃をする準備が整いました。
下図のUnleash Gremlinボタンをクリックして、Ubuntuへの攻撃を開始します。

-
Ubuntuへの攻撃が始まり、Gremlinのポータル画面では、CPU使用率のグラフが時系列順に表示される様になります。

- 赤枠①では、Gremlinのポータルで設定した14コアに約90%の負荷がかかっています。
- 赤枠②では、
gremlin attack cpu -l 86400 -c 14 -p 90と GremlinのClientを使って負荷をかけているのがわかります。
これは、下図のGremlinのアーキテクチャを確認すると Linuxに導入したGremlinのdaemonが図の右側のGremlinのコントロールプレーンにハートビートを受信して、攻撃できる状態なのか確認し、可能なら、clientから実際の攻撃を行っている仕組みになってます。

- (参考1)Gremlin - Client Overview
https://www.gremlin.com/docs/clients/overview/ - (参考2)Gremlin -daemon-client-overview
https://www.gremlin.com/docs/infrastructure-layer/daemon-client-overview/
最後に
この投稿では、カオスエンジニアリングのツールの1つであるGremlinを使って、UbuntuのCPUを負荷をかける実験を行いました。
Gremlinは、Gremlinのアカウントと負荷をかける対象にClientとDaemonをインストールするだけで、CPU負荷をかけることができます。
CPU以外にも攻撃の種類は用意されているので、ぜひお試しください。

