osc2014.enterprise...
TRANSCRIPT
Zabbix-JobScheduler連携ツール
HyClops JobMonitoringによる
運用システムOSS化の実現
TIS 株式会社戦略技術センター
池田 大輔
2014/12/12 OSC2014.Enterprise@Tokyo
自己紹介
池田 大輔
TIS株式会社 戦略技術センター
@ike_dai https://www.facebook.com/ikedai Zabbix,AWS,fluentd,Chef,JobScheduler...
名前
所属
興味
ThinkIT連載「自動化時代のインフラ環境稼働テスト「 Serverspec」入門」
(http://thinkit.co.jp/book/2014/08/01/5149)技術評論社HP : http://gihyo.jp/book/2014/978-4-7741-6288-1Amazon : http://www.amazon.co.jp/dp/4774162884
TISエンタープライズOSSサポートサービス
保守サポート
コンサルティング マイグレーション
OSSの利用をトータルにバックアップ
対象OSS
インフラ基盤
運用基盤
アプリケーション稼働基盤
※今後サポート対象予定
TISエンタープライズOSSサポートサービス
対象OSS
インフラ基盤
運用基盤
アプリケーション稼働基盤
※TISはZabbix社の認定パートナーです。
※今後サポート対象予定
TISエンタープライズOSSサポートサービス
運用を取り巻く状況の変化
システムの仮想化・クラウド化が加速
管理対象機器の大規模化 管理対象機器の動的な変化
手動運用でカバーできるシステムが減少
“運用自動化”が益々求められる状況で
より安定したシステムを低価格で迅速に提供
OSSを運用環境に取り入れる
多くのOSSは用途に特化した形で提供
監視 ジョブ管理
ログ管理インシデント
管理
ZabbixNagios・・・
JobScheduler・・・
rsyslogFluentd・・・サーバ
構成管理ChefAnsible・・・
RedmineOTRS・・・
OSSを運用環境に取り入れる
APIをベースに各ツール連携することがポイント
監視 ジョブ管理
ログ管理インシデント
管理
ZabbixNagios・・・
JobScheduler・・・
rsyslogFluentd・・・サーバ
構成管理ChefAnsible・・・
RedmineOTRS・・・
API
着目したのは高機能&拡張性の高さ
統合監視OSS ジョブ管理OSS
OSS統合監視ソフトウェアZabbixOSS統合監視ツール (GPL ver.2)ラトビアのZabbixSIA社が開発2014/12/12時点の最新安定版2.4.2 (2014/11/5リリース)
監視対象機器- Linux- Windows- NW機器等
監視方法
- Zabbix Agent監視- SNMP監視- IPMI監視- エージェントレス監視等
監視内容- リソース監視- 死活監視 - ICMPPing - プロセス- Web監視- ログ監視- HW監視- SQL監視等
Zabbixは監視手法が豊富
snmp server
snmp server
SNMP Trap
SNMP
ssh server
ssh server
Zabbix Agent
仮想化HV
Cloud
ODBC
DB
JMXJavaアプリ
仮想環境API
クラウドAPI
SSH接続による内部コマンド実行監視
ZabbixAgentによる内部監視(リソースやログ等)
ODBCによるDB監視
Zabbix Java GatewayによるJava監視
外部チェックスクリプト監視機能による API監視
Zabbix Server
Zabbix Sender
任意の情報をpush型でZabbixに登録
Zabbixは自動化機能が充実監視設定パターン化 監視設定自動化 運用自動化
テンプレート機能 ZabbixAgent自動登録機能
ローレベルディスカバリ機能
アクション機能
監視設定をサーバの用途毎、種別毎等まとめる機能
Agent起動時に自身の情報をZabbix Serverに自動連携
監視対象サーバ内の情報を収集し、その内容に合わせて自動設定
条件を設定してあらかじめ登録した運用作業処理実行コマンドを自動実行
Zabbix API機能
プログラムからZabbixの設定や監視結果情報取得を実現
参考情報: ローレベルディスカバリ
ディスカバリルール
/ /data
定期的に探索
Zabbix Server
アイテムプロトタイプアイテム
{ "data":[ { "{#FSNAME}":"\/", "{#FSTYPE}":"ext3"}, { "{#FSNAME}":"\/data", "{#FSTYPE}":"ext3"}, ・・・省略
}
vfs.fs.size[{#FSNAME},free]
アイテム
vfs.fs.size[/,free]vfs.fs.size[/data,free]
活用例:JobSchedulerに登録されているJob一覧情報に基づいてアイテム自動登録とか
参考情報: ZabbixAPI■ できること - Zabbixに対する操作(設定変更、ホスト追加、グループ作成等)実施 - Zabbixで管理している監視結果の取得(history,event,IT service情報)■ APIの形式: JSON-RPC - URL: http://<zabbix-server>/zabbix/api_jsonrpc.php - メソッド: host.create、host.update、item.get、history.getなど - パラメータ: メソッド毎に必要なパラメータを渡す
host.getの例レスポンス
{ "auth": "xxxxxxx", "method": "host.get", "params": { "output": "extend", "filter": {"host":"Zabbix server"} }, "jsonrpc": "2.0", "id": 1}
{ "jsonrpc":"2.0", "result":[{ "maintenances":[], "hostid":"10084", "host":"Zabbix server", ・・・略 }], "id":1}
リクエストパラメータ
OSSジョブ管理ソフトウェアJobSchedulerOSSジョブ管理ツール (GPL ver.2)ドイツ ベルリンのSOS社が開発2014/12/12時点の最新安定版1.7.4321 (2014/11/17リリース)
対応プラットフォーム- Linux- Windows- Solaris- AIX- HP-UX
ジョブ実行方法
- JS単体でのジョブ実行- JS Agentによる リモートサーバへのジョブ実行- SSH接続による リモートサーバへのジョブ実行
対応可能処理- フロー(JobChain)実行- スケジュール実行- 多重実行・排他制御- 先行・後続制御- 優先度設定- ジョブ実行監視- メール通知等
※ JS = JobScheduler※ JS Agent = JobScheduler Agent
JobSchedulerの基本構成
JOC
JOE※Jobエディタ
Job JobChain
JobScheduler Agent
JobScheduler Agent
SSH Server
※Job管理WebGUI
Job JobChain
DB
※Job実行履歴、 Jobスケジューリング情報 等
Schedule ProcessClass
Schedule ProcessClass
JobScheduler Engine
JobSchedulerのJobの考え方
Standalone Job
Job Chain
Schedule
• Standalone Job– 単体で稼動するジョブを定義
• Job Chain– 複数ジョブを順序関係を考慮して
組み合わせるジョブ(order job)を定義
• Schedule– ジョブの稼動予定を定義
• ジョブ定義は様々な記述が可能
– ShellScript, Windows bat,Java,JavaScript,VBScript, javax.script,Perl
● ジョブ関連の全ての定義がXMLファイルで管理● 様々な操作を簡単に行えるようにする機能が提供されている
○ ファイル操作、ファイル転送、DB制御、SQL操作、レポーティング機能 などなど
Order Job
Order Job
JobSchedulerの特徴
<?xml version="1.0" encoding="ISO-8859-1"?>
<job order="no" stop_on_error="no"> <script language="shell"><![CDATA[ #!/bin/bash
FILE=/tmp/demo_job.logecho `date`": Executed demo_main Job" >> $FILEsleep 2 ]]></script> <run_time let_run="yes" repeat="60"/></job>
JobSchedulerのJob定義の例
Standalone Jobの書き方
任意の実行処理が記述可能
実行タイミングを指定可能
<?xml version="1.0" encoding="ISO-8859-1"?>
<job_chain orders_recoverable="yes" title="test_jobchain" visible="yes"> <job_chain_node state=”Before_Job” job=”/path/to/before_job” error_state="Error" next_state=”Main_Job”/> <job_chain_node state=”Main_Job” job=”/path/to/main_job” error_state="Error" next_state="After_Job"/> <job_chain_node state=”After_Job” job=”/path/to/after_job” error_state="Error" next_state="Success"/> <job_chain_node state="Success"/> <job_chain_node state="Error"/></job_chain>
JobSchedulerのJobChain定義の例
JobChainの書き方
Before_Job Main_Job After_Job
Success
Error
Start
<?xml version="1.0" encoding="ISO-8859-1"?>
<schedule title="demo schedule" valid_to="2014-12-31 23:59:59"> <period single_start="10:30"/>
<weekdays > <day day="6"> <period single_start="04:00"/> </day> </weekdays></schedule>
JobSchedulerのSchedule定義の例
Scheduleの書き方
毎日10:30
毎週土曜 4:00
参考情報: JobScheduler API
内部API
ジョブの中でJobSchedulerに対する操作が可能※例:ジョブAの実行に失敗したらジョブBのジョブスケジュールを変更
WebAPI
外部ツールからJobSchedulerに対する操作が可能※例:Zabbixの監視結果で障害が発生したらとあるジョブCを実行
● ジョブの失敗時の通知は単純なメール送信のみ● ジョブの実行結果はテキストとして保存されているのみ
(表示はテキストベースの一覧表示)● ジョブ管理に特化したツールであるため監視機能はない
JobScheduler単体だとできないこと
HyClops JobMonitoring OSS公開
高機能な監視を実現するZabbix
高機能なジョブ管理を実現するJobScheduler
概要
● ジョブ実行状況をZabbixにて監視するツール● ZabbixやJobScheduler自体の改変はせずそのまま利用可能● Zabbixの監視機能、JobSchedulerのジョブ実行機能を活用● JobScheduler利用時に不足する監視機能をZabbixで補う● 2014年12月10日 OSSとして公開
HyClops JobMonitoring
公式サイトURL: http://tech-sketch.github.io/hyclops_jmGitHubリポジトリ: https://github.com/tech-sketch/hyclops_jm
3つのメリット
HyClops JobMonitoring
その1. ジョブの失敗や遅延情報をZabbixでキャッチアップ
通知をZabbixのアクション設定に基づいて実行できるため、より柔軟な対応が可能に
TimeLimit!
Zabbix
3つのメリット
HyClops JobMonitoring
その2. ジョブ実行時の状態の推移をZabbixで管理
ZabbixのDBにて推移状況を管理できるのでジョブ実行の分析が可能に各ジョブの実行時のサーバリソースの状況と紐付けての管理も可能に
1ヶ月前
Finish!
1時間
現在
Finish!
3時間
3つのメリット
HyClops JobMonitoring
その3. ジョブ実行時の高負荷に備えた監視設定変更
Jobの実行によりあらかじめ想定される負荷への対応が可能
平常時のCPU負荷 Job実行時のCPU負荷
閾値 閾値
HyClopsJMの機能詳細
ジョブ失敗状況の検知
JobScheduler EngineHyClops JMZabbix
実行
Error終了
mail送信Zabbix連携処理
メールをフック
※JobScheduler Agent毎に管理
Zabbix Sender
Zabbixアクション設定
Zabbixトリガー設定
より柔軟な通知
Job稼働ステータス監視アイテムJob稼働ステータス監視アイテム
HyClopsJMの機能詳細
ジョブ失敗通知設定例
時間軸
JobChain1失敗
JobChain1失敗
JobChain1失敗
JobChain1失敗
Skip! Skip!
Job定義
HyClopsJMの機能詳細
ジョブ稼働時間の監視
Zabbix
server-01
server-02
ホスト
アイテム
JobA稼働時間
Job1稼働時間
Job3稼働時間
JobScheduler Engine
server-01JobScheduler Agent
server-02JobScheduler Agent
HyClops JM
定義情報をもとに設定自動連携
実行ログを解析し稼働時間自動登録
自動登録
Job2稼働時間
Job4稼働時間
JobAJobChain1
Job1Job2
JobChain2Job3Job4
ローレベルディスカバリ
Zabbix Sender
HyClopsJMの機能詳細
稼働時間推移グラフ例
HyClopsJMの機能詳細
トリガー閾値の自動変更
Zabbix
閾値変更Job
復帰Job
メインJob
閾値変更Jobテンプレート
復帰Jobテンプレート
Jobテンプレート
既存トリガー
無効化
Job実行中のみ有効なトリガー
新規作成
例: CPU使用率>70%なら障害
例: CPU使用率>90%なら障害
Zabbix API
HyClopsJMの機能詳細
トリガー閾値の自動変更
Zabbix
閾値変更Job
復帰Job
メインJob
閾値変更Jobテンプレート
復帰Jobテンプレート
Jobテンプレート
既存トリガー有効化
Job実行中のみ有効なトリガー
削除
例: CPU使用率>70%なら障害
例: CPU使用率>90%なら障害
Zabbix API
HyClopsJMの機能詳細
閾値変更例
CPUのロードアベレージのトリガー閾値を変更したい場合
閾値変更Job(HyClops_JM_Trigger_switch
)
復帰Job(HyClops_JM_Trigger_ret)
パラメータに以下を指定
trigger_name Processor load is too high on {HOST.NAME}
trigger_cond {localhost:system.cpu.load[percpu,avg1].avg(5m)}>10
パラメータの指定なし
閾値変更Jobで変更されたものを全て元に戻す
HyClopsJMのデモ
1. ジョブ追加に伴い自動的にZabbixに監視アイテム登録
2. トリガー変更ジョブ組み込みによる動的な閾値変更
デモ環境構成AWS EC2インスタンスにZabbix ServerとJobScheduler Engineを導入
EC2
JobScheduler Engine
Zabbix Server
JobChain
JobChain
Job Job追加
アイテム自動登録
HyClopsJMのデモ
1. ジョブ追加に伴い自動的にZabbixに監視アイテム登録
2. トリガー変更ジョブ組み込みによる動的な閾値変更
デモ環境構成AWS EC2インスタンスにZabbix ServerとJobScheduler Engineを導入
EC2
JobScheduler Engine
Zabbix Server
JobChain
JobChain
Job Job
トリガー変更ジョブ組み込みJobChain Run!トリガー変更
HyClops JMのセットアップ方法
1. 稼働に必要なものをインストール・Zabbix、JobScheduler、PostgreSQL、Fabric、Python・自動インストールするためのChefRepoも公開https://github.com/tech-sketch/hyclops_jm-chef-repo
$ git clone https://github.com/tech-sketch/hyclops_jm-chef-repo.git$ cd hyclops_jm-chef-repo
$ vi config/config.json
{ "postgresql": { "version": "9.3" }, "zabbix": { "version": "2.2" }, "jobscheduler": { "version": { "major": "1.7" } }}
$ ./install_middleware.sh
HyClops JMのセットアップ方法
2. HyClops JobMonitoringを入手https://github.com/tech-sketch/hyclops_jm
$ curl -O https://github.com/tech-sketch/hyclops_jm/archive/[version no.].tar.gz$ tar zxvf hyclops_jm-[version no.].tar.gz
HyClops JMのセットアップ方法
3. 設定ファイルを編集hyclops_jm.conf
# HyClops JobMonitoring userjm_user = hyclops_jm # HyClops JobMonitoring用OSユーザjm_passwd = hyclops_jm # 上記ユーザのパスワード# JobScheduler configurationjs_id = scheduler # JobSchedulerのscheduler idjs_user = scheduler # JobSchedulerのインストールユーザjs_passwd = scheduler # 上記ユーザのパスワードjs_host = 127.0.0.1 # JobSchedulerの実行ホストのIPjs_port = 4444 # JobSchedulerの待ち受けポート# Zabbix configurationzbx_host = 127.0.0.1 # Zabbixの実行ホストのIPzbx_login_user = Admin # Zabbix Web UIにログイン可能な管理者ユーザzbx_login_passwd = zabbix # 上記管理者ユーザのパスワードzbx_external_scripts_dir = /usr/lib/zabbix/externalscripts # Zabbixの外部チェック用スクリプトの格納ディレクトリ# Database super userdb_user = postgres # PostgreSQLのスーパーユーザdb_passwd = # 上記ユーザのパスワードdb_host = 127.0.0.1 # PostgreSQL実行ホストのIPdb_port = 5432 # PostgreSQLの待ち受けポートpgsql_version = 9.3 # PostgreSQLのバージョン
HyClops JMのセットアップ方法
4. HyClops JobMonitoringインストール
$ sudo fab -c hyclops_jm.conf install
セットアップはこれで完了あとは自動的にジョブの情報がZabbixに連携
Fig.1 Architecture
Zabbix JobScheduler
Fabric
script
script
script
script・・・
APIAPI
Job item and host sync job
Get job elapse job
Collaborate with API
script mail alias
Trigger with job error
Zabbix Host
Template App JobScheduler
Template App HyClops JM
Collaborate with API
Scheduled job execute fabric script
Trigger modify job template
Auto registration
Config Database
Database forHyClops JM
まとめ
● ZabbixやJobSchedulerは非常に高機能なOSS● HyClops JobMonitoringは
○ 各ツールの機能を活用しつつ不足する部分を補うことで相乗効果を創出
○ 以下の機能を実現■ ジョブ実行時間の監視■ ジョブ失敗の検知■ ジョブ実行時の負荷状況に応じた動的な監視設定
● 今後の予定○ 追加機能開発を行い更なる有効な連携を実現
試してみたいという方はご連絡を!!展示ブースにてデモもお見せできます!