SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
ジョブ管理で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

Mais conteúdo relacionado

Mais procurados

Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
 

Mais procurados (20)

イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろう無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろう
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座MySQLアーキテクチャ図解講座
MySQLアーキテクチャ図解講座
 
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイントVPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
VPCのアウトバウンド通信を制御するためにおさえておきたい設計ポイント
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
DeNAのインフラ戦略 〜クラウドジャーニーの舞台裏〜 [DeNA TechCon 2019]
DeNAのインフラ戦略 〜クラウドジャーニーの舞台裏〜 [DeNA TechCon 2019]DeNAのインフラ戦略 〜クラウドジャーニーの舞台裏〜 [DeNA TechCon 2019]
DeNAのインフラ戦略 〜クラウドジャーニーの舞台裏〜 [DeNA TechCon 2019]
 
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
MySQL InnoDB Clusterによる高可用性構成(DB Tech Showcase 2017)
 

Semelhante a ジョブ管理で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
 

Semelhante a ジョブ管理で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について
 

Mais de Yukiya Hayashi

Mais de 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
 

Último

Último (12)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 

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