読者です 読者をやめる 読者になる 読者になる

LGTM

Looks Good To Me

Bot にお願いして 手順書を書いてもらう

networking chatops

ネットワーク運用のなかに「手順書を書く」という業務がある.事業者によっては

  1. 書く
  2. レビュー
  3. 直す
  4. レビュー
  5. 直す

...

みたいな比較的コスト高い作業になる.

ネットワークは事前にテストしづらく「壊れるとヤバい」という側面から,日本では手作業による温かみのある作業が好まれる.Web アプリのような PRレビュー → Mergeボタン押す → 勝手にデプロイ みたいな自動ワークフローは,エンジニアにとってゴールではあるが,多くの場合まだ現実的でない.

Hubot に手順書を書いてもらう

じゃあ,ということで

GitHub に手順書のテンプレートを置いといて,パラメーターと一緒にお願いしたら,手順書つくってIssue にしてくれるHubot スクリプト

作った.

https://github.com/codeout/hubot-github-templated-issues

f:id:codeout:20150629010651p:plain

テンプレートエンジンはECT を選んだ.

トラブルが起こったときには,すでに手順書ができている

手順書作成のトリガーが人間でない場合もある.たとえばよくあるネットワークトラブルとか,パターン化できてるやつは「通知を受けたときにトラブル対応手順ができてる」のが望ましい.

使っているチャットやログ管理ツールによるが,たとえばHipChat + fluentd の場合:

  1. ネットワークデバイスがsyslog を吐く
  2. fluentd がsyslog をフィルター + 整形して,HipChat にHubot コマンド形式で書く
  3. Hubot が手順書をつくる

ような動作をさせることができる.ここまで自動.*1

f:id:codeout:20150629010658p:plain

## fluent.conf

<source>
  type syslog
  tag network
</source>

<filter network.**>
  type grep
  regexp1 message SNMP_TRAP_LINK_DOWN
</filter>

<filter network.**>
  type record_transformer
  enable_ruby
  <record>
message ${ message =~ /ifName (\S+)/; "hubot issue create templated-issues/intf-down\nhostname: " + host + "\nintfname: " + $1 }
  </record>
</filter>

*1:Slack だと,Web API / Incoming Webhook でHubot にコマンドを送れないため,ひと工夫ひつようっぽい