概要
寝転びながらサーバの情報を見たいことがあったので、コマンドを実行した結果がWEBブラウザから見れるようにしてみました。技術的には、Nginxでリクエスト時にシェルスクリプトが動作しHTMLで描画するようにしています。Dockerコンテナの上で動いているので移植も起動も簡単です。味気ないですが、好きなコマンドを追加したり、CSSで整えたりはお好みで・・
要件はこんな感じです。
必要な時にだけ動作する。とても軽いこと
動作中のプロセスのCPU/メモリ使用率が見れること
WEBブラウザから確認できること
カスタマイズが容易であること
Dockerコンテナで動作すること
使い方
(事前準備) dockerコマンドが使用できるようにしてください
(事前準備) docker-composeコマンドが使用できるようにしてください
リポジトリをクローンします。
git clone https://github.com/shun-sa/ps-webapp.git
cd ps-webapp
起動します。
docker-compose up -d
http://<サーバのIP>:8081/top.sh にアクセス
カスタマイズ例
コマンドを追加したい
top.shに、見たいコマンドをcecho <コマンド>で書き足していけばOKです。psの場合はcecho psですね。
top.sh
#!/bin/sh
eval $QUERY_STRING
echo 'Content-type: text/html'
echo ''
echo '<html>'
echo '<head></head>'
echo '<h1>Server Overview</h1>'
cecho(){
echo "<h2>${@}</h2>"
echo "<pre>"
eval $@
echo "</pre>"
}
# ここに足していく
cecho sensors
cecho top -b -n 1 -c | head -n 30
echo '<body>'
GPUの使用率が見たい
コンテナ内でnvidia-smiコマンドが実行できるなら、docker-compose.yml,top.shに以下を追記すれば見れます。
docker-compose.yml
environment:
- NVIDIA_DRIVER_CAPABILITIES=all
- NVIDIA_VISIBLE_DEVICES=all
runtime: nvidia
top.sh
cecho nvidia-smi
GETメソッドの引数を利用したい
GETメソッドで指定した値がスクリプト内で利用できます。URLにtestkeyを指定しtop.shで見てみるときちんと表示されています。あとはコマンドを渡したり、PIDを渡してプロセスを落としたり等はお好みで・・・
http://<サーバのIP>:8081/top.sh?testkey=val
top.sh
echo $testkey
⚠️注意
任意のコマンドが実行できる性質上、ホストマシンホストマシンを再起動したり、最悪の場合犯罪の踏み台に利用される可能性があります。インターネットから見れる場所に置くなどはやめましょう。
↧