mkr + peco + tmux + ssh

Mackerel Meetup #10 Tokyo のLT枠で「mkr + peco + tmux + ssh」というタイトルで話をしました。当日の発表スライドを以下に貼っておきます。

speakerdeck.com

話の内容は、tmux + ssh + Mackerel API を組み合わせたとにかくモダンなサーバオペレーション - ゆううきブログ の続きになります。このエントリにあるように普段から

$ tssh $(roles bookmark proxy) # サービス名: bookmark, ロール名: proxy

のようなコマンドを叩いて、指定したロール配下のホストに、tmuxのpaneを使って同時にsshログインしています。

しかし、ロールの数が増えてくると、そもそもロールの名前を正確に覚えていないということがしょっちゅう起きます。 そこで、peco*1 を挟んでやることで、ロール名の候補に対して絞り込みをかけて、ロールを決定したのちに上記コマンドを実行するということができます。

bindkey '^w' peco-mkr-roles
function peco-mkr-roles() {
  local selected_role=$(mkr services | jq -rM '[.[] | .name as $name | .roles // [] | map("\($name) \(.)")] | flatten | .[]' | peco)
  if [ -n "${selected_role}" ]; then
     local BUFFER="tssh \`roles "${selected_role}"\`"
     // zle accept-line // 好みでコメントアウトを外す
  fi
  zle clear-screen
}
zle -N peco-mkr-roles

このようにMackerelを用いて、単に監視をするだけでなく、APIを介してさまざまなツールを組み合わせ、プログラマブルにインフラストラクチャを制御することができます。

参考リンク

追記

github.com

マージされたので、mkrを更新すると上記のfunctionが動きます。

*1:pecoは雑な表現をすると、インクリメンタルにgrepできるツールです。