More Related Content
Similar to 運用自動化のためのプログラミング言語の作り方
Similar to 運用自動化のためのプログラミング言語の作り方 (20)
More from Kenta Hattori (20)
運用自動化のためのプログラミング言語の作り方
- 5. 運用現場の問題点
問題点1:高負荷
運用現場は、業務負荷が高くて困っている
「運用」の守備範囲が不明確で、「なんでも運用」、「運用でカ
バー」に陥りがち
結果として、数多くのタスクが現場に落ちてくる
問題点2:属人的
運用現場は、属人的で、暗黙知が多くて困っている
タスクやフローが多岐にわたるため、ドキュメントの作成や更新
が追いつかない
結果として、現場の業務知識が属人化する
問題点3:費用対効果が見えない
運用現場は、費用対効果が見えにくくて困っている
開発に比べて、利益につながるアウトプットが見えにくいため、
コストカットの対象となりやすい
結果として現場の士気が下がる
波多野:見えない「運用」 - 疲弊する運用現場、より要約
- 6. どうやって解決する?
やっぱり自動化でしょ。
現場の声:
スクリプトなら書いているよ
ChefやPuppetを使ってできるところはやっているよ
いろんなツールを導入しても、多様な運用業務全て
をカバーするのは不可能
かえってツールの管理コストがかさむだけ
シンプルで自由度の高い万能なツールが欲しい!
そうだ、運用をプログラミングしよう!!!
- 12. ジョブフロー記法
特長
ジョブ/ジョブフロー名に、日本語(utf-8)が使える
矢印記号(->, =>, ->>, =>>)でジョブをつないでいく記
法
ジョブ実行の処理の流れを把握しやすい
並行処理、チャネルによるイベントの待ち合わせ
ジョブ:ジョブフローにおける処理の単位
コマンド実行:[‘cat /etc/redhat-release’]
ジョブフローの呼び出し:
[/障害管理/インシデント新規作成: 名前=‘new’]
イベント待ち:<./監視アラートチャネル>
変数の代入:[URL=‘http://kompira.jp’, パス=‘/foo/bar’]
組み込みジョブ:print(‘Hello’), mailto(addr, title, body)な
ど
- 13. リモートコマンドの実行
実行コンテクストを特殊変数で指定し、コマンド
ジョブを実行する
__host__, __user__, __password__, __dir__, __sudo__
など
コマンドの実行結果は特殊変数に格納される
$RESULT
コマンド実行時の標準出力結果が格納される
$STATUS
コマンド実行の終了ステータスが格納される
例:
[__host__ = ‘192.168.213.33’,
__user__ = ‘kompira’,
__password__ = ‘secret’ ]
-> [‘hostname’] -> print($RESULT)
- 15. 基本的な制御構文
ifブロック
{ if x > 0 |
then: [./処理1] else: [./処理2] }
caseブロック
{ case $RESULT |
‘*OK*’: [./処理OK]
‘*NG*’: [./処理NG] }
whileブロック
{ while x == 0 | [./処理] -> [./処理2] }
forブロック
{ for host in ./サーバ一覧 |
[./ログファイル取得: host] }
- 17. 並行処理のサポート
forkブロック
プロセスを並行に処理する
メール送信と障害対応を並行して処理する例:
{ fork |
[./メール送信]
[./障害対応処理] } -> print(‘完了しました’)
pforブロック
同じ処理を一斉に実行する
サーバ一覧にあるサーバに対してホスト情報を一斉に取
得
{ pfor host in ./サーバ一覧 |
[./ホスト情報取得: host]
-> print($RESULT) }