運用の現場での
監視運用ツールの活用	
 

株式会社サイタスマネジメント
米田真治
2013/12/13

OSC2013 .Enterprise

1
トピックス	
 
—  運用業務のよくある状況
—  運用監視ツールのポイント
—  Zabbixの活用ケース

◦  自動登録
◦  カスタム監視	
 

2013/12/13

OSC2013 .Enterprise

2
自己紹介	
 
—  米田	
 真治

(こめだ	
 しんじ)

◦  株式会社サイタスマネジメント CTO
—  経歴
◦  学生時代にUNIXに出会う
◦  Internetにつながる環境がきた
◦  いろんなプログラムをビルドしているうちに、
開発・構築の楽しさに目覚める
◦  学科のシステム管理を経験
◦  システム運用のおもしろさを覚える	
 
◦  就職してISPのサーバ構築・運用に携わる

◦  2000年6月	
 サイタスマネジメント創業
2013/12/13

OSC2013 .Enterprise

3
会社紹介	
 

http://www.situs.co.jp/	
 

サイタスマネジメントでは24時間365日のシステム監
視・運用管理サービスを中心に、お客様の悩みや課
題に応じたソリューションをご提供いたします。
— 

システム監視・運用管理マネジメントサービス	
 
◦  監視通知サービス:トラブルの未然防止・早期発見により
システムの安定稼動を支援	
 
◦  障害対応サービス: 経験豊富なエンジニアによる迅速な
ネットワーク復旧支援	
 
◦  運用管理代行サービス:高品質で幅広いサポートメニューで
システム運用の負担を軽減	
 
◦  レポーティング: システムの運用状況や課題を把握し、改
善提案を実施

— 

サーバ・ネットワーク構築	
 
2013/12/13

OSC2013 .Enterprise

4
2013/12/13

OSC2013 .Enterprise

5
運用業務のよくある状況	
 
高い負荷、負担	
 
リリース先行により運用設計が不明確なままサービスイン	
 
監視	
 
連絡体制	
 
運用オペレーションマニュアル	
 
「運用でカバーする」という悪魔の声	
 

属人的	
 
人に依存する問題	
 キーパーソンに聞かないとわからない	
 
人のスキル、属人化	
 
運用の現場では、幅広い知識と深い経験が求められます	
 
コスト
費用対効果	
 
ハードウェア・ソフトウェア	
 保守費用	
 
人件費	
 
2013/12/13

OSC2013 .Enterprise

6
仮想化の恩恵	
 
— 

— 

仮想化技術

◦  仮想化のソフトウェアレイヤーが、個々の
ハードウェア障害に対する保護を提供する
◦  OSやアプリケーションはハードウェアの
フォールトトレランスを確保する。

オンプレミスの仮想化基盤
◦  可用性の確保が重大	
 

—  クラウドの利用

◦  スピード
—  仮想環境やクラウドの活用で

サーバの追加があっという間にできる
–  動的に運用管理の対象が増減する	
 
2013/12/13

OSC2013 .Enterprise

7
運用サイドで起こる問題	
 
たとえば、
—  キャンペーンによるトラフィック過多	
 
— 

◦  スポットCMなどのキャンペーン広告	
 
◦  ニュース番組で紹介される
◦  SNSでの口コミ	
 
◦  スケールアウト実施

—  新サービスの開始

◦  サーバが一挙に増える	
 
—  たくさんのVM

◦  設定変更、情報の更新が追いつかない	
 
2013/12/13

OSC2013 .Enterprise

8
ITシステムのライフサイクル	
 
	
 

ウィキペディア故障率曲線より	
 
2013/12/13

OSC2013 .Enterprise

9
運用現場の感覚	
 
サービスイン	
 
イ
ン
シ
デ
ン
ト
件
数

2次リリース
サービス追加
バージョンアップ	
 

予期せぬ
トラブル

	
 
ワークアラウンド
問題解消	
 

ハードウェアの経年劣化

予期せぬ
トラブル
ワークアラウンド
問題解消	
 

2013/12/13

OSC2013 .Enterprise

10
DevOps	
 スピードが求められる時代	
 
Biz
提供サービス主管	
 
	
 

Dev
開発エンジニア
リリースエンジニア	
 
	
 

2013/12/13

Ops
インフラエンジニア
運用エンジニア	
 
	
 

OSC2013 .Enterprise

11
Dev, Ops は技術やサービスの提供者
Bizから	
 

「スピードが求められる開発部門」	
 

◦  何を求められているのか 	
 
◦  何を期待されているのか 	
 

Dev	
 
リリースプロセス	
 

Biz

プロセス自動化	
 
• ユニットテスト
• PuppetやChefなどの構成管理
ツール	
 

状況の共有	
 

自動化できる運用ツール

Ops

• 対応時間の短縮
• 作業の削減と品質の確保	
 

「安定運用が求められる運用部門」	
 
2013/12/13

OSC2013 .Enterprise

12
運用の現場は人のネットワーク	
 
—  頻繁なリリースには、

DevとOpsとの効果的な連係が必要	
 
— 

運用への影響(変化)を共有する

	
 

プロセスの自動化

ノード追加	
 
•  意図したものなのか	
 
•  意図しないノード追加(=異常)なのか	
 
必要な監視は設定されているか	
 
•  対応がわかっているアラーム	
 
•  未知のアラーム	
 

開発メンバーは運用チームの仕事を
知っている必要がある	
 
運用メンバーは開発チームの仕事を
知っている必要がある	
 
	
 
2013/12/13

OSC2013 .Enterprise

13
監視とメータリング	
 
利用者によって、見たい情報が違う	
 
	
 	
 	
 	
 	
 	
 レポートする内容が違う	
 
Dev
アプリケーションの
異常	
 
性能・レスポンス	
 
ユーザの振るまい	
 
ログ	
 

Ops
機器の状態	
 
サービスの状態	
 
性能・レスポンス	
 
キャパシティ	
 
障害・故障の履歴	
 

2013/12/13

Biz
サービスに対する
ユーザの反応	
 
インシデントと
ビジネスインパクト	
 
キャパシティ
コスト	
 

OSC2013 .Enterprise

14
運用監視ツールのポイント	
 
— 

監視機能

— 

◦  柔軟性と拡張性
— 

◦  状況の共有
◦  メータリング
◦  柔軟なレポート

自動化と省力化
◦  自動構成
–  ディスカバリー機能

— 

◦  定型化

–  自動アクション
–  作業属人化の排除
–  作業品質を均一化

履歴が残る
◦  履歴の追跡や監査

–  モデルやテンプレート

◦  コマンドの活用

見える化

— 

拡張性
◦  API

2013/12/13

OSC2013 .Enterprise

15
OSS 運用監視ツール	
 

かなり私見	
 

ディスカバリー	
 

テンプレート	
 
API	
  分散監視	
 

監視	
 

Icinga	
 

HA	
 

Shinken	
 
仮想化	
 
Zenoss	
 
Xymon	
 
クラウド	
 
Zabbix	
 
メータリング	
  Ganglia	
 
CMDB	
 
Nagios	
 

Cacti	
  Collectd	
 
munin	
 

Hinemos	
 
Pandora FMS	
 

Observium	
 

weathermap	
 
RRDtool	
 
ntop	
  nfsen	
 

エージェント	
 

Graphite	
 
2013/12/13

OSC2013 .Enterprise

16
Zabbixが備える有用な機能	
 
— 
— 

拡張性のある監視機能
Zabbix Agent

◦  エージェント自動登録
◦  ログ監視
◦  Windowsサポート
–  perf_counter、イベントログ、サービス

— 
— 
— 

ディスカバリー
複合条件でのトリガー
アクション機能
◦  ホストに対するスクリプト実行
◦  リモートコマンド実行
–  トリガー条件でのコマンド実行

— 
— 

レポート
API	
 
2.2でVMware vSphere APIとWindows WMIに対応しました	
 
2013/12/13

OSC2013 .Enterprise

17
Zabbixの困ったところ
監視設定の点	
 
— 
Ø 
— 
Ø 
Ø 
— 
Ø 
Ø 

SNMPでの監視設定はものすごく融通が利かない
ダイナミックインデックスが使えるようになりました(1.5以降)
ダイナミックインデックスのパフォーマンスが悪い
キャッシュされるようになりました(1.6.3以降)
SNMPリクエスト	
 シングルコネクションになりました(1.7以降)
構成が微妙に違うとテンプレートを分けないと吸収できない
ローレベルディスカバリが使えるようになりました(2.0から)
ようやく一人前になったかも

2013/12/13

OSC2013 .Enterprise

18
Zabbix
動的な監視対象の追加	
 
対象ノードの
自動検出	
 
オート
ディスカバリ
エージェント
自動登録	
 

ディスカバリ
アクション	
 
自動登録
アクション	
 

テンプレート
の適用	
 
アイテム

ホストOS	
 
ローレベル
ディスカバリ	
 

サービス
監視	
 
ローレベル
ディスカバリ	
 
2013/12/13

トリガー
グラフ

アイテム
トリガー
グラフ

OSC2013 .Enterprise

19
Zabbix
動的な監視項目の追加	
 
— 

アイテムの自動検出
◦  ローレベルディスカバリ(Zabbix2.0から)

テンプレート	
 

ディスカバリ
ルール	
 

アイテムの
プロトタイプ	
 
トリガーの
プロトタイプ	
 
グラフの
プロトタイプ	
 

ディスカバリルール
•  タイプ	
 Zabbix エージェント	
 
vfs.fs.discovery ファイルシステム	
 
net.if.discovery ネットワーク
カスタムLLDルール
JSON形式でリストを返します

•  タイプ SNMP agent = SNMP OIDディスカバリ	
 
	
 
2013/12/13

OSC2013 .Enterprise

20
SNMP OIDディスカバリ
ディスカバリルール	
 
mysqldプロセスが起動していればディスカバリーしたいとき	
 

2013/12/13

OSC2013 .Enterprise

21
SNMP OIDディスカバリ
アイテムのプロトタイプ	
 
Zabbix
エージェントの
アイテム	
 

SNMP
エージェントの
アイテム	
 

hwSWRun*ではPidが変わるとインデックスが変わるので
{#SNMPINDEX}ではなくダイナミックインデックス	
 
2013/12/13

OSC2013 .Enterprise

22
スクリプト実行による
カスタム監視	
 
—  Zabbix Agent

経由 (UserParameter)	
 
—  外部チェック
—  返せる値は一つだけ
—  複数の値があるならzabbix_senderで

◦  アイテムのタイプ	
 Zabbixトラッパー
—  ポーリングのスケジュールリングは

Zabbixに任せる
2013/12/13

OSC2013 .Enterprise

23
Zabbix Agent 経由	
 
—  UserParameter

◦  リクエストのたびにコマンドが起動されます

—  例: Collectdで収集した値を取り出す
UserParameter=collectd[*],echo "GETVAL $1" | nc -U /var/
run/collectd/unixsock | egrep '^(value|$2)=' | awk
'{printf "%fn", $$1}'	
 

—  zabbix_get

で確認

$ zabbix_get -s localhost -k 'collectd[localhost/
entropy/entropy]'
3589.000000
$ zabbix_get -s localhost -k 'collectd[localhost/
load/load,shortterm]'
0.000000	
 

2013/12/13

OSC2013 .Enterprise

24
外部チェック
Nagios plugin プログラムの活用	
 
#!/bin/sh
ZABBIX_SENDER=/usr/bin/zabbix_sender
ZABBIX_SERVER=localhost
PLUGIN=check_xxx
CHECK_PLUGIN=/path/to/$PLUGIN
ARGS="-H $1 …"
output=$($CHECK_PLUGIN $ARGS" 2>/dev/null)
status=$?
for perf in ${output##*|}; do
key=${perf%%'='*}
val=${perf##$key'=’}
val=${val%%';'*}
val=${val%%[A-Za-z]*}
echo "$1” $PLUGIN."$key" $val
done | $ZABBIX_SENDER -z $ZABBIX_SERVER -i - >/dev/null 2>&1
#echo "$status”
echo $output
2013/12/13

OSC2013 .Enterprise

25
スクリプト監視の注意点
— 

タイムアウト
◦  Option: Timeout Range: 1-30
◦  越えても強制終了はされませんが	
 

— 

キューの状態
◦  実行に時間がかかると、チェック全体で更新待ちが増える
ことになります

— 

トラッパーの数
◦  送信元
–  エージェントのアクティブチェック
–  zabbix_sender

◦  ソケットの数をみて調整
–  トラッパーポート10051

— 

値を返すとき
◦  指数形式の数値が扱えません

— 

スクリプト起動のオーバーヘッド	
 
2013/12/13

OSC2013 .Enterprise

26
Web監視
— 

Zabbix Agent 経由
web.page.get ウェブページの内容の取得
◦  web.page.perf ウェブページ全体のロードにかかる時間の取得
◦  web.page.regexp ウェブページで最初に正規表現に一致した文字列の取得

— 

◦  単一リクエスト・1機能
— 

ウェブ監視
◦  固定シナリオ
–  ステップごとの、スピード、レスポンスタイム
◦  テンプレート化できない

2.2で改善	
 

2013/12/13

OSC2013 .Enterprise

27
動的シナリオのWeb監視
外部チェックスクリプトで実現	
 
—  WebInject

(Web/HTTP Test Tool)

◦  http://webinject.org/

◦  Webサービスを自動的にテストするためのツー
ルです
webinject.pl -c config.xml

config.xml 	
 
<testcasefile>testcases.xml</testcasefile>
<globalhttplog>onfail</globalhttplog>
<reporttype>nagios</reporttype>

正常時
WebInject OK - All tests passed successfully in 0.195 seconds |
time=0.195;;;0	
 

エラーの時
WebInject CRITICAL - Test case number 3 failed |time=2.937;;;0

2013/12/13

OSC2013 .Enterprise

28
WebInject シナリオ	
 
<testcases repeat="1">
<case
id="1”
method="get”
url="{BASEURL}”
verifypositive="Zabbix 2.0.8 Copyright 2001-2013 by Zabbix SIA"
/>
<case
id="2”
method="post”
url="{BASEURL}/index.php”
postbody='request=&name=admin&password=zabbix&autologin=1&enter=S
ign+in’
verifyresponsecode='302’
parseresponse='Location: |n'
/>
<case
id="3”
method="get”
url="{BASEURL}/{PARSEDRESULT}”
parseresponse='<a class=”[^”]*" href=”|">概要</a>'
/>
<case
id="4”
method="get”
url="{BASEURL}/{PARSEDRESULT}”
/>
</testcases>
2013/12/13

OSC2013 .Enterprise

29
WebInject
ラッパースクリプト	
 
#!/bin/sh
WEBINJECT=/apth/to/webinject.pl
cd /path/of/scenario
output=$($WEBINJECT -c "$1.xml" 2>/dev/null)
status=$?
for perf in ${output##*|}; do
key=${perf%%'='*}
val=${perf##$key'='}
val=${val%%';'*}
echo "$1" webinject."$key" $val
done | $ZABBIX_SENDER -z $ZABBIX_SERVER -i - >/dev/null 2>&1
case "$status" in
0)
echo ${output%%' in '*};;
[123]) echo ${output%%'|'*};;
esac
	
 

2013/12/13

OSC2013 .Enterprise

30
状況によって動作を変える必要
がある場合	
 
—  LL

と	
 Mechanize ライブラリをつかっ
てスクリプトを作成します	
 
◦  PerlのWWW::Mechanize
◦  RubyのMechanize
◦  Pythonのmechanize

2013/12/13

OSC2013 .Enterprise

31
カスタム通知
メディアとしてスクリプトを使う	
 
— 

TTYtterを使った通知の例
#!/usr/bin/python
import sys
user = sys.argv[1]
subj = sys.argv[2].decode('utf-8')
body = sys.argv[3].decode('utf-8')
msg = '/dm @%s %s %s' % (user, subj, body)
msg = msg[0:140]
cmd = ['/usr/local/bin/ttytter', '-script'];
p = Popen(cmd, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
p.stdin.write("%sn" % msg.encode('utf-8'))
p.stdin.close()	
 

2013/12/13

OSC2013 .Enterprise

32
ディスカバリの通知を活用
通知メッセージの定義	
 
	
 
Discovery rule: {DISCOVERY.RULE.NAME}
Device IP: {DISCOVERY.DEVICE.IPADDRESS}
Device DNS: {DISCOVERY.DEVICE.DNS}
Device status: {DISCOVERY.DEVICE.STATUS}
Device uptime: {DISCOVERY.DEVICE.UPTIME}
Device service name: {DISCOVERY.SERVICE.NAME}
Device service port: {DISCOVERY.SERVICE.PORT}
Device service status: {DISCOVERY.SERVICE.STATUS}
Device service uptime: {DISCOVERY.SERVICE.UPTIME}	
 

2013/12/13

OSC2013 .Enterprise

33
ディスカバリの通知を活用
Pythonでのパターンマッチ例	
 
pattern = 
r'''(Discovery rule: (?P<rule_name>.*))
(Device IP: (?P<device_ip>.*))
(Device DNS: (?P<device_dns>.*))
(Device status: (?P<device_status>.*))
(Device uptime: (?P<device_uptime>.*))
(Device service name: (?P<service_name>.*))
(Device service port: (?P<service_port>.*))
(Device service status: (?P<service_status>.*))
(Device service uptime: (?P<service_uptime>.*))'''
result = re.match(pattern, body)
if result:
print result.groupdict()	
 
2013/12/13

OSC2013 .Enterprise

34
AWS
—  HyClops

for Zabbix
(第1回	
 OSS運用管理勉強会)
◦  http://tech-sketch.github.io/hyclops/jp/

—  Mikoomi Amzon

EC2 Plugin

◦  http://code.google.com/p/mikoomi/wiki/04
—  Cloudwatch

monitoring for Zabbix

◦  https://github.com/lorieri/zabbix/tree/master/
templates/cloudwatch	
 

2013/12/13

OSC2013 .Enterprise

35
SLAとビジネスインパクト	
 
— 

ITサービス

2013/12/13

OSC2013 .Enterprise

36
SLA	
 

— 

レポート
◦  稼働レポート
◦  障害発生数上位100項目	
 
2013/12/13

OSC2013 .Enterprise

37
メータリング	
 
思ってたんとちがう
— 
— 
— 
— 

— 
— 
— 
— 

システムがどこで問題を引き起こすことになるかを
知ることはできない。	
 
問題は驚くべき箇所で起こる。	
 
なにか変だと感じたときは、かならず問題を抱えている。	
 
発生する可能性がある問題は、いつかかならず発生する。	
 

悪魔は細部に宿る	
 
木を見て森も見る	
 
計測すべし	
 
見える化	
 

	
 
2013/12/13

OSC2013 .Enterprise

38
Zabbixの困ったところ
グラフ	
 
— 
Ø 
— 

Ø 
Ø 

測定した値を関数で処理してプロットしたい
すでにデータベースに入っている値しかプロットできません
トレンドとかが出せるとうれしいけど
◦  最小二乗法やHolt-Wintersによる傾向	
 
◦  σバンド	
 
必要な関数が実装されていないのでむりです
ほかのツールを使いましょう

— 

それでも移動平均くらいなら	
 
◦  avg(3600)
◦  avg(3600,86400)

— 

タイムシフトによる過去一週間の平均
◦  (avg(60,86400)+avg(60,172800)+avg(60,259200)+…+avg(60,604800))/7
2013/12/13

OSC2013 .Enterprise

39
Zabbixでできること
カスタムグラフの作成	
 
— 

過去の傾向
◦  タイムシフトを利用した計算
–  last(86400)
–  avg(300,86400)

— 

Percentile

◦  Zabbix 2.0 からサポート
◦  ノーマルグラフのみ	
 

— 

アグリゲート
◦  ホストグループを対象に計算
◦  grpavg Average value
◦  grpmax Maximum value
◦  grpmin Minimum value
◦  grpsum Sum of values	
 
2013/12/13

OSC2013 .Enterprise

40
タイムシフトによる過去一週間の平均	

2013/12/13

OSC2013 .Enterprise

41
RRDtoolから
Zabbixのデータを参照	
 
itemid を調べてデータベースから直接とりだす

RRDtool は	
 libdbi を有効にしてビルドされているものを使います	
 

DEF:v=sql//mysql/host=localhost/dbname=zabbix/
username=user/password=rdonly//history/clock/
value/itemid=23397:avg:LAST
	
 

2013/12/13

OSC2013 .Enterprise

42
サンプル
上がZabbix、下がRRDtool
	
 

2013/12/13

OSC2013 .Enterprise

43
サンプルグラフのRRDコマンド	
 
rrdtool graph chart.png --imgformat=PNG 
--start=-1day --step 300 --width=1000 --height=250 
"DEF:time=sql//mysql/host=127.0.0.1/dbname=zabbix/
username=zabbix/password=zabbix//history/clock/value/
itemid=23397:avg:LAST" 
"LINE1:time#099000:time" 
"GPRINT:time:LAST:最新値:%5.2lf%s” 
"GPRINT:time:MIN:最小:%5.2lf%s” 
"GPRINT:time:AVERAGE:平均値:%5.2lf%s” 
"GPRINT:time:MAX:最大:%5.2lf%sj"

2013/12/13

OSC2013 .Enterprise

44
運用の現場はたのしい	
 
運用の現場では、
—  幅広い知識がつき、
—  いろんな経験ができます	
 
使ってたのしいツールを、使いましょう
カスタマイズで、もっとたのしく
—  機能が足りなければ作ることも
見えるとたのしい
楽になるとたのしい
作り込んだ物がうごくと、
もっとたのしい
2013/12/13

OSC2013 .Enterprise

45
ご清聴ありがとうございました	
 

2013/12/13

OSC2013 .Enterprise

46

運用の現場での監視運用ツールの活用