2014年 5月 の投稿一覧

mackerelでLXC毎のCPU利用率を記録する

mackerelでユーザメトリックのグラフを作れるので、先日作ったlxc-cpu-usage
利用してホスト上で稼働しているコンテナのCPU利用率を表示させる様にしてみました。

mackerelでは、ユーザ定義のメトリックを送出するのには

# /etc/mackerel-agent/mackerel-agent.conf
[plugin.metrics.vmstat]
command = "ruby /path/to/vmstat-metrics.rb"
type = "metric"

といった内容を設定ファイルに追記する必要があって、
ここで [plugin.metrics.****] が項目名、command の部分が実際にメトリックを取得するコマンドになって、
Mackerelのドキュメントを参照すると、このコマンドの出力は以下のフォーマットで出力されることが期待されています。

{メトリック名}\t{メトリック値}\t{エポック時間}

ということで、lxc-cpu-usage のコマンドを拡張して以下の様な形でオプションを渡せる様にしました。*1

$ lxc-cpu-usage --name="remp001|storyboards001|castory001|mongo001|manage001" --metric
storyboards001  0.09    1401521140636
remp001 0.17    1401521140647
mongo001        0.53    1401521140652
castory001      0.02    1401521140659
manage001       0.12    1401521140669

--name のパラメータとして"|"区切りで複数のコンテナ名を渡せる様に対応して、 --metric でタブ区切りでコンテナ名, CPU利用率, エポック時が表示される様になっています。

これを利用して、Mackerelの設定ファイルを以下の様に追記します。

# /etc/mackerel-agent/mackerel-agent.conf
[plugin.metrics.lxc]
command = "lxc-cpu-usage --name='remp001|storyboards001|manage001|castory001|mongo001' --metric"
type = "metric"

Mackerel agentをRestart

$ sudo /etc/init.d/mackerel-agent restart
* Restarting  mackerel-agent
...done.

しばらくするとMackerel上で各コンテナのCPU利用率が確認できる様になります。

とてもあっさりと任意のメトリックが追加できて便利。

lxc-cpu-usageというツールを作った

VPSの上で複数のLXCを作ってRubyやnode.jsのアプリケーションサーバを動かしたり、DBサーバを動かしたりしているのですが、
稀に「このコンテナでどのくらいCPUが利用されているのだろう?」*1と調べることがあって、その時には

  1. 該当のLXCのinitプロセスを見つける
  2. そこにぶら下がっているプロセスを確認
  3. それらのプロセスがどのくらいCPUを使っているか知る

といったことをやっていたので、その辺りをさっくりできるツールを作ってみました。nodeで作ってます。初npm登録。

lxc-cpu-usage lxc-cpu-usage lxc-cpu-usage このエントリーをはてなブックマークに追加

$ npm install -g lxc-cpu-usage でLXCが稼働しているホストにインストール。

その上でコンテナ名を引数で渡してやるとそのコンテナで動いているプロセスを列挙してCPU利用率を取得してくれます。

例えば、manage001というコンテナが稼働しているのであれば

$ lxc-cpu-usage -n manage001 -v
lxc-cpu-usage - Target LXC:manage001, Target PID:9844
------------------
PID     %CPU
10002    0.01
21669    0.03
(snip)
23340    0.06
23349    0.00
------------------
Processes: 16, CPU usage: 0.16

といった具合で指定したコンテナ内で稼働しているプロセスの一覧とその合計を得ることができます。

誰得感ありますが、コンテナの稼働率見ると、動いているアプリケーションの働いている感を感じられて幸せになれます。

参照

*1:深い意味は無くて、本当に興味でみることが大半...

Hubotを定期的に動かして発言させる

Hubotでcronでスクリプトを定期的に実行させる様に定期的に動かして例えばサービスのパラメータ等を通知させるのはどうするとよいのか調べたのでその際のメモ。

node-cronというnpmパッケージがあるので、これを利用するとcronと同じ書式でスケジューリングすることができます。

以下、REMPチームで利用しているHubotを毎時0分に利用状況を通知させる様にした際の例(を少し変えたもの)です。

cronJob = require('cron').CronJob
module.exports = (robot) ->
new cronJob('0 * * * *', () ->
http = robot.http('http://remp001/****').get()
http (err, res, body) ->
if(!err)
json = JSON.parse body
robot.send {room:'remp'}, "再生回数: #{json.today_play_count}"
robot.send {room:'remp'}, "検索回数: #{json.today_search_count}"
).start()

流れとしてはソースコードそのままですが

  1. node-cronで毎時0分に稼働させるジョブを作成
  2. REMP に用意しているサービスステータス取得のAPIへGETリクエスト
  3. JSONが返ってくるのでparseする
  4. Hubotに指定したチャットルームにそのパラメータを喋らせる

これだけ。

こうするとで定期的にHubotを動かしてチャットルームにREMPの利用状況を1時間毎に通知できる様になりました。いままで、こういった通知をちょっとしたスクリプトを書いてcronに登録して通知させたりしていたのですが徐々にHubotに寄せて行こうと思います。

併せて読みたい

hideack/remp_hubot · GitHub hideack/remp_hubot · GitHub hideack/remp_hubot · GitHub このエントリーをはてなブックマークに追加

焼鯖定食。

npm_lazyを使ってみた – A lazy local cache for npm

CastoSTORYBOARDSでnode.js周りのアプリケーションのデプロイをする際にnpm installされる際、稀にnpm自体が重くなっていたりすることもあるので、ローカルにnpmのキャッシュサーバ的なものを立てられないかと調べていたらお手軽にできるものを見つけたので試してみた。

これを立ちあげた上で、

$ npm install --registry http://(npm_lazyを立ちあげたアドレス指定)

とnpmコマンドを実行する際にregistryを指定することで、npm_lazy を経由してnpmコマンドを実行することができます。

npm_lazy自体は、npmを丸ごとキャッシュする訳ではなく、必要とされたライブラリ毎にキャッシュを行うのでキャッシュ期限内のものが手元にあればそれを返し、無ければnpm本体を参照して新たに特定ディレクトリ下にファイルキャッシュを生成するといったプロキシ的な動き方をしてくれるので、特別にキャッシュ用にDBを用意したりする必要もなく気軽に利用できます。

今回、CastoSTORYBOARDS の場合、VPS配下のLinuxコンテナでそれぞれアプリケーションが動いているので別コンテナにいるmanageサーバと呼んでいるコンテナで npm_lazy を動かしています。

この様な構成で動かすときは npm_lazy の設定を少し変更する必要があるので、設定を修正してそこを参照して稼働させます。

まずは設定用のファイルを出力。

$ npm_lazy --init > ~/npm_lazy.config.js

出力したconfigファイル中の

  // external url to npm_lazy, no trailing /
externalUrl: 'http://10.0.***.***:10080',
  // bind port and host
port: 10080,
host: '10.0.***.***',

辺りを適宜環境に併せて修正した上で npm_lazy を立ちあげます。立ち上げる際に --config を指定して上で修正した設定ファイルを読み込み。

$ npm_lazy --config ~/npm_lazy.config.js

立ちあげた上で、*1

$ npm install --registry http://10.0.***.***:10080/

とすることで、CastoSTORYBOARDSのアプリケーションコンテナからも手元で立ちあげた npm_lazy を参照できる様になります。

*1:実際はこれだけだとアレなので、supervisorで立ちあげて永続化しています

寿司

コストパフォーマンス最高の寿司。

http://instagram.com/p/nw0-AFSdfA/

4月に読んだ本をブクログで振り返る

4月はあまり本が読めなかった。
インプットが減っているということは、アウトプットもその分減っているということだと思うので、移動時間などに読んでいかなければ。


hideackの本棚 - 2014年04月 (3作品)
ケトル VOL.16
山本兼一
読了日:04月19日


powered by booklog