SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
ジョブ管理でcronは限界があったの
で”Rundeck”を使ってハッピーになりま
した
2018/2/9(金) 22:00 インフラ勉強会
もりはや
免責事項
自己紹介はインフラ勉強会Wikiをご確認ください><
発表内容は個人のものであり所属する組織にいかなる(略)
CentOSでの経験で話します
アジェンダ
ジョブとは
ジョブ管理とは
Cronのあれこれ
Rundeckご紹介
デモ(時間余れば)
ジョブとは
何らかのひとまとまりの処理。
実態としてはスクリプトファイルや、バッチファイルであること
が多い。
会話では「バックアップジョブ」とか「レポートジョブ」とか
「集計ジョブ」とか気軽に「XXジョブ」という使い方をする。
﴾異業種の友達と話すとポカンとされます)
ジョブ管理とは
必要に応じて特定の日時に、特定のジョブが実行される状態を維
持すること。
﴾例﴿
毎日AM3:00にDBのバックアップを取得
月初﴾1日﴿の09:30に先月分の売り上げレポートを作成
"5のつく日キャンペーン"のメールをキャンペーン開始日の
0:00に送信
Cronとは
Linux標準のジョブスケジューラ。Windowsでいうタスクスケジュ
ーラの機能。
実行日時の書式は初見殺しだけど、慣れるとこれ以外に無い気が
してくるほど便利。
書式は以下の通り。1行=1ジョブ。
分 時 日 月 曜日 実行コマンド
大抵のジョブはCronで十分。
Cronの設定例
毎日AM3:00にDBのバックアップを取得
0 3 * * * /home/ope/bin/get_db_backup.sh
月初﴾1日﴿の09:30に先月分の売り上げレポートを作成
30 9 1 * * /home/ope/bin/create_monthly_report.sh
"5のつく日キャンペーン"のメールをキャンペーン開始日の
0:00に送信
0 0 5,15,25 * * /home/ope/bin/send_mail_5dayevent.sh
Cronを使うためには
crontab ‐e コマンドで追記する
"/var/spool/cron/ユーザ名"のファイルが生成される
/etc/crontabに追記する
/etc/cron.d/配下へファイルを配置する
/etc/cron.daily OR cron.weekly OR cron.monthlyへファイルを
配置する
各ディレクトリに配置されたファイルを/etc/anacronがラ
ンダムな時間を付与して実行する仕組み
Cronのココがすごい
OS標準である
必ず使えるという安心感
設定が簡単
書式に慣れればさくさくジョブがかける
Cronのココが辛い
ログが出ない
エラーハンドリングが難しい
サーバ単体で完結してしまう
Cronの辛み1 - ログが出ない
/var/log/cronへ実行したというログしか出ない。
﴾MAILTO設定をすればメールで飛ばせるが、基本やらない﴿
Feb  8 14:04:01 localhost CROND[3694]: (ope) CMD (date)
Feb  8 14:04:01 localhost CROND[3695]: (ope) CMD (/home/ope/bin/get_d
実行されたジョブが出力した標準出力、およびエラー出力は残ら
ない。
‐> どのような処理が行われたかわからない
Cronの辛み1 - ログが出ない
対策1 : cronのジョブ指定時にリダイレクト
0 3 * * * /home/ope/bin/get_db_backup.sh >> /var/log/job.log
対策2 : 実行されるスクリプトの中でログ出力を実装
#!/bin/bash
# This is get_db_backup.sh
log="/var/log/job.log
date >> ${log}
echo "Start db dump" >> ${log}
...
‐> 統一されたルールが無いと両方のパターンが混ざってカオスに
なっていく
Cronの辛み2 - エラーハンドリングが難しい
Cronは実行されたジョブがエラー終了しても気づけない。
以下のようなコマンド間違いがあったとしても
* * * * * date
* * * * * data # コマンド間違っている
華麗にスルーして実行
Feb  8 14:19:01 localhost CROND[3991]: (ope) CMD (date)
Feb  8 14:19:01 localhost CROND[3992]: (ope) CMD (data)
Feb  8 14:20:01 localhost CROND[4003]: (ope) CMD (date)
Feb  8 14:20:01 localhost CROND[4004]: (ope) CMD (data)
‐> エラー検知の仕組みを別に実装する必要がある
Cronの辛み3 - サーバ単体で完結してしまう
”jobA"が終わり次第"jobB"を実行というのは以下のように書ける。
0 22 * * * jobA.sh && jobB.sh
"サーバAのjobA"が終わり次第"サーバBのjobB"を実行するような処
理は書けないため、後続のサーバで「すでに終わっているはずの
時間」でジョブを実行する。
#@サーバA
0 22 * * * jobA.sh
#@サーバB
#※jobAは多分1時間以内に終わるはずだから23時に実行
0 23 * * * jobB.sh
Cronアンチパターン(実話)
Cronを使っていて実際に経験したアンチパターンをお話します。
アンチパターン1 - crontabが育ちすぎてつらい
とある日「なんか11時のジョブおかしそうだから調査ヨロ ノシ」と
言われて入ったサーバでcrontab ‐lを打ったところ
> crontab ‐l | wc ‐l
1012       ( Д ) ゜ ゜  < 1000行!?
コメントや空白行があるとはいえ、開いた時点でつらい。
その時はgrepして頑張った。
egrep "^[^ #]+ [*1]1* " /var/spool/cron/hoge
アンチパターン2 - 肌感によるピタゴラスイッチ
以下のようなジョブがすべて連携していた。
22:00 サーバAのジョブA
23:00 サーバBのジョブB
24:00 サーバCのジョブC
01:00 サーバDのジョブD
とある日の改修でサーバAのジョブAの処理時間が40分 ‐> 1時間30
分に伸びた
‐> 後続のジョブ全滅...!!
加えて、普段うまく稼働していても無駄な空白時間があって
モッタイナイ
アンチパターン2 - 肌感によるピタゴラスイッチ
さらにサーバごとの部門が異なっていて各担当者への調整が大変
だった。
22:00 経理部門のサーバAのジョブA
23:00 総務部門のサーバBのジョブB
24:00 営業部門のサーバCのジョブC
01:00 管理部門のサーバDのジョブD
そこでRundeck
Rundeckとは
https://github.com/rundeck/rundeck
OSSのジョブスケジューラ
WebのリッチなGUIが特徴
crontabからの移行に最適
細やかなアクセス制御
APIもあるよ
GitHub Star 2k超
Rundeckと他ツールとの比較
他にも魅力的なOSSはあるけど、cronからの移行だけならRundeck
がおすすめ
Jenkins ‐> 多機能すぎてシンプルじゃない
digdag ‐> GUIの機能(認証や設定変更)が不足
ConcouceCI ‐> GUIからの編集ができない
ここがすごいぜRundeck
雰囲気で操作できるGUI
細かいアクセス制御
少々複雑だが、LDAPやADと連携して以下のようなことが細やかに
できる。
ジョブを実行を許可(編集はさせない)
ジョブの結果参照を許可
特定のプロジェクトへのアクセス許可(ジョブの集まり)
細かいアクセス制御
※最近﴾2017/10﴿GUIから編集ができるようになった。
ログの保存(標準・エラー出力)
個人的にはこれが一番ありがたい。
コマンド、スクリプトの実行
対象サーバ上でコマンドを実行できる
対象サーバ上のスクリプトを実行できる
rundeck上でスクリプトを書き、それを対象サーバ上で実行で
きる
optionという機能でジョブに変数をわたせる
cron記法でのスケジューリングができる
=> 既存資産(スクリプト)をそのまま活かせる!!
ジョブワークフロー
登録したジョブはワークフローとして実行できる
ジョブごとにどのサーバで実行するかも指定できる
(おまけ)プラグインによるansible連携
Jenkinsほどではないが、Rundeckも豊富なプラグインがあり、
その中でもansible pluginを使用すると以下が実現できる。
ansibleのインベントリを利用してRundeckへノードを自動登録
しかもインベントリのグループがRundeck上のTabとして
登録される
(ただし定期的にGather_factsをするため、各サーバのシスログは
汚れていきます...﴿
Rundeckを利用する上で気を付けること
集中化による負荷
﴾同時に実行されるジョブ数、出力されるログ容量など)
耐障害性
HA機能は有償のため、pacemaker & corosyncで冗長化
スケーリングについてはドキュメントも参照
http://rundeck.org/docs/administration/scaling‐
rundeck.html
デモ
時間があまったらデモします!!
ご清聴ありがとうございました
m( _ _ )m

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
Cloud runのオートスケールを検証してみる
Cloud runのオートスケールを検証してみるCloud runのオートスケールを検証してみる
Cloud runのオートスケールを検証してみる
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門PostgreSQLアーキテクチャ入門
PostgreSQLアーキテクチャ入門
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
 
Metaspace
MetaspaceMetaspace
Metaspace
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 

Ähnlich wie ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました

Cloud principles and paradigms kimtea-2010-04-24
Cloud principles and paradigms kimtea-2010-04-24Cloud principles and paradigms kimtea-2010-04-24
Cloud principles and paradigms kimtea-2010-04-24
Kazuki Aranami
 

Ähnlich wie ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました (11)

xrdpを使ったお手軽BYOD環境の構築
xrdpを使ったお手軽BYOD環境の構築xrdpを使ったお手軽BYOD環境の構築
xrdpを使ったお手軽BYOD環境の構築
 
設計・構築においてのドキュメントの重要性について
設計・構築においてのドキュメントの重要性について設計・構築においてのドキュメントの重要性について
設計・構築においてのドキュメントの重要性について
 
Lt7 circle ci hugo
Lt7 circle ci hugoLt7 circle ci hugo
Lt7 circle ci hugo
 
仕様七変化
仕様七変化仕様七変化
仕様七変化
 
設計・構築においてのドキュメントの重要性について
設計・構築においてのドキュメントの重要性について設計・構築においてのドキュメントの重要性について
設計・構築においてのドキュメントの重要性について
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
Cloud principles and paradigms kimtea-2010-04-24
Cloud principles and paradigms kimtea-2010-04-24Cloud principles and paradigms kimtea-2010-04-24
Cloud principles and paradigms kimtea-2010-04-24
 
DevOps at ChatWork
DevOps at ChatWorkDevOps at ChatWork
DevOps at ChatWork
 
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
2014-10-27 #ssmjp 腹を割って話そう (運用xセキュリティ)
 
運用ドキュメントの構造化(案)
運用ドキュメントの構造化(案)運用ドキュメントの構造化(案)
運用ドキュメントの構造化(案)
 
ownCloudについて
ownCloudについてownCloudについて
ownCloudについて
 

Mehr von Yukiya Hayashi

Mehr von Yukiya Hayashi (20)

I have a problem when operating AWS with multiple accounts
I have a problem when operating AWS with multiple accountsI have a problem when operating AWS with multiple accounts
I have a problem when operating AWS with multiple accounts
 
My misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile moduleMy misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile module
 
AWS SSO x On-Prem AD Easy IAM user management on Jtf2021
AWS SSO x On-Prem AD Easy IAM user management on Jtf2021AWS SSO x On-Prem AD Easy IAM user management on Jtf2021
AWS SSO x On-Prem AD Easy IAM user management on Jtf2021
 
AWS Cognito makes old web apps available from anywhere
AWS Cognito makes old web apps available from anywhereAWS Cognito makes old web apps available from anywhere
AWS Cognito makes old web apps available from anywhere
 
アドベントカレンダー から学ぶOCIの空気感
アドベントカレンダー から学ぶOCIの空気感アドベントカレンダー から学ぶOCIの空気感
アドベントカレンダー から学ぶOCIの空気感
 
オンボーディングを楽しむ
オンボーディングを楽しむオンボーディングを楽しむ
オンボーディングを楽しむ
 
事前アンケート集計 Terraform meetup tokyo#2
事前アンケート集計 Terraform meetup tokyo#2事前アンケート集計 Terraform meetup tokyo#2
事前アンケート集計 Terraform meetup tokyo#2
 
I want the power of onboarding!
I want the power of  onboarding!I want the power of  onboarding!
I want the power of onboarding!
 
How did you start learning Azure
 How did you start learning Azure How did you start learning Azure
How did you start learning Azure
 
My feelings of going to the first conference overseas
My feelings of going to the first conference overseasMy feelings of going to the first conference overseas
My feelings of going to the first conference overseas
 
Let's split text by awk command
Let's split text by awk commandLet's split text by awk command
Let's split text by awk command
 
What i feel when began use AWS CodePipeline as GitLab Ci user
What i feel when began use AWS CodePipeline as GitLab Ci userWhat i feel when began use AWS CodePipeline as GitLab Ci user
What i feel when began use AWS CodePipeline as GitLab Ci user
 
How to get rid of terraform plan diffs
How to get rid of terraform plan diffsHow to get rid of terraform plan diffs
How to get rid of terraform plan diffs
 
Task and Time monitoring with Backlog and Toggl
Task and Time monitoring with Backlog and TogglTask and Time monitoring with Backlog and Toggl
Task and Time monitoring with Backlog and Toggl
 
Oiradaichi's Akamai Journey
Oiradaichi's Akamai Journey Oiradaichi's Akamai Journey
Oiradaichi's Akamai Journey
 
What does the monitoring tool use at oisix ra daichi?
What does the monitoring tool use at oisix ra daichi?What does the monitoring tool use at oisix ra daichi?
What does the monitoring tool use at oisix ra daichi?
 
We love backlog ! in reCap event.
We love backlog ! in reCap event.We love backlog ! in reCap event.
We love backlog ! in reCap event.
 
What we expect of neo4j
What we expect of neo4jWhat we expect of neo4j
What we expect of neo4j
 
Backlog World 2019 LT - We love backlog !
Backlog World 2019 LT - We love backlog !Backlog World 2019 LT - We love backlog !
Backlog World 2019 LT - We love backlog !
 
20190116 neo4jug-lt
20190116 neo4jug-lt20190116 neo4jug-lt
20190116 neo4jug-lt
 

ジョブ管理でcronは限界があったので”Rundeck”を使ってハッピーになりました