More Related Content
Similar to 第2回 OSS運用管理勉強会 運用あるある(Zabbix) (20)
第2回 OSS運用管理勉強会 運用あるある(Zabbix)
- 3. 自己紹介
— 米田
真治 (こめだ
しんじ)
◦ 株式会社サイタスマネジメント CTO
— 経歴
◦ 学生時代にUNIXに出会う
◦ Internetにつながる環境がきた
◦ いろんなプログラムをビルドしているうちに、
開発・構築の楽しさに目覚める
◦ 学科のシステム管理を経験
◦ システム運用のおもしろさを覚える
◦ 就職してISPのサーバ構築・運用に携わる
◦ 2000年6月
サイタスマネジメント創業
2013/9/26 第2回 OSS運用管理勉強会 3
- 7. 仮想化の恩恵
— 仮想化技術
◦ 仮想化のソフトウェアレイヤーが、個々の
ハードウェア障害に対する保護を提供する
◦ OSやアプリケーションはハードウェアの
フォールトトレランスを確保する。
— オンプレミスの仮想化基盤
◦ 可用性の確保が重大
— クラウドの利用
◦ スピード
— 仮想環境やクラウドの活用で
サーバの追加があっという間にできる
– 動的に運用管理の対象が増減する
2013/9/26 第2回 OSS運用管理勉強会 7
- 8. 運用サイドで起こる問題
— たとえば、
— キャンペーンによるトラフィック過多
◦ スポットCMなどのキャンペーン広告
◦ ニュース番組で紹介される
◦ SNSでの口コミ
◦ スケールアウト実施
— 新サービスの開始
◦ サーバが一挙に増える
— たくさんのVM
◦ 設定変更、情報の更新が追いつかない
2013/9/26 第2回 OSS運用管理勉強会 8
- 12. Dev, Ops は技術やサービスの提供者
Bizから
◦ 何を求められているのか
◦ 何を期待されているのか
Dev
Ops
Biz
「スピードが求められる開発部門」
「安定運用が求められる運用部門」
プロセス自動化
• ユニットテスト
• PuppetやChefなどの構成管理
ツール
状況の共有
リリースプロセス
自動化できる運用ツール
• 対応時間の短縮
• 作業の削減と品質の確保
2013/9/26 第2回 OSS運用管理勉強会 12
- 13. 運用の現場は人のネットワーク
— 頻繁なリリースには、
DevとOpsとの効果的な連係が必要
— 運用への影響(変化)を共有する
ノード追加
• 意図したものなのか
• 意図しないノード追加(=異常)なのか
必要な監視は設定されているか
• 対応がわかっているアラーム
• 未知のアラーム
プロセスの自動化
開発メンバーは運用チームの仕事を
知っている必要がある
運用メンバーは開発チームの仕事を
知っている必要がある
2013/9/26 第2回 OSS運用管理勉強会 13
- 14. 監視とメータリング
利用者によって、見たい情報が違う
レポートする内容が違う
Dev
アプリケーションの
異常
性能・レスポンス
ユーザの振るまい
ログ
Ops
機器の状態
サービスの状態
性能・レスポンス
キャパシティ
障害・故障の履歴
Biz
サービスに対する
ユーザの反応
インシデントと
ビジネスインパクト
キャパシティ
コスト
2013/9/26 第2回 OSS運用管理勉強会 14
- 15. 運用監視ツールのポイント
— 監視機能
◦ 柔軟性と拡張性
— 自動化と省力化
◦ 自動構成
– ディスカバリー機能
◦ 定型化
– モデルやテンプレート
◦ コマンドの活用
– 自動アクション
– 作業属人化の排除
– 作業品質を均一化
— 見える化
◦ 状況の共有
◦ メータリング
◦ 柔軟なレポート
— 履歴が残る
◦ 履歴の追跡や監査
— 拡張性
◦ API
2013/9/26 第2回 OSS運用管理勉強会 15
- 16. Zabbixが備える有用な機能
— 拡張性のある監視機能
— Zabbix Agent
◦ エージェント自動登録
◦ ログ監視
◦ Windowsサポート
– perf_counter、イベントログ、サービス
— ディスカバリー
— 複合条件でのトリガー
— アクション機能
◦ ホストに対するスクリプト実行
◦ リモートコマンド実行
– トリガー条件でのコマンド実行
— レポート
— API
2013/9/26 第2回 OSS運用管理勉強会 16
- 17. Zabbixの困ったところ
監視設定の点
— SNMPでの監視設定はものすごく融通が利かない
Ø ダイナミックインデックスが使えるようになりました(1.5以降)
— ダイナミックインデックスのパフォーマンスが悪い
Ø キャッシュされるようになりました(1.6.3以降)
Ø SNMPリクエスト
シングルコネクションになりました(1.7以降)
— 構成が微妙に違うとテンプレートを分けないと吸収できない
Ø ローレベルディスカバリが使えるようになりました(2.0から)
Ø ようやく一人前になったかも
2013/9/26 第2回 OSS運用管理勉強会 17
- 19. Zabbix
動的な監視項目の追加
— アイテムの自動検出
◦ ローレベルディスカバリ(Zabbix2.0から)
テンプレート
ディスカバリ
ルール
アイテムの
プロトタイプ
トリガーの
プロトタイプ
グラフの
プロトタイプ
ディスカバリルール
• タイプ
Zabbix エージェント
vfs.fs.discovery ファイルシステム
net.if.discovery ネットワーク
カスタムLLDルール
JSON形式でリストを返します
• タイプ SNMP agent = SNMP OIDディスカバリ
2013/9/26 第2回 OSS運用管理勉強会 19
- 22. スクリプト実行による
カスタム監視
— Zabbix Agent 経由 (UserParameter)
— 外部チェック
— 返せる値は一つだけ
— 複数の値があるならzabbix_senderで
◦ アイテムのタイプ
Zabbixトラッパー
— ポーリングのスケジュールリングは
Zabbixに任せる
2013/9/26 第2回 OSS運用管理勉強会 22
- 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/9/26 第2回 OSS運用管理勉強会 23
- 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/9/26 第2回 OSS運用管理勉強会 24
- 25. スクリプト監視の注意点
— タイムアウト
◦ Option:Timeout Range: 1-30
◦ 越えても強制終了はされませんが
— キューの状態
◦ 実行に時間がかかると、チェック全体で更新待ちが増える
ことになります
— トラッパーの数
◦ 送信元
– エージェントのアクティブチェック
– zabbix_sender
◦ ソケットの数をみて調整
– トラッパーポート10051
— 値を返すとき
◦ 指数形式の数値が扱えません
— スクリプト起動のオーバーヘッド
2013/9/26 第2回 OSS運用管理勉強会 25
- 26. Web監視
— Zabbix Agent 経由
— web.page.get ウェブページの内容の取得
◦ web.page.perf ウェブページ全体のロードにかかる時間の取得
◦ web.page.regexp ウェブページで最初に正規表現に一致した文字列の取得
◦ 単一リクエスト・1機能
— ウェブ監視
◦ 固定シナリオ
– ステップごとの、スピード、レスポンスタイム
◦ テンプレート化できない
2013/9/26 第2回 OSS運用管理勉強会 26
- 27. 動的シナリオのWeb監視
外部チェックスクリプトで実現
— WebInject (Web/HTTP Test Tool)
◦ http://webinject.org/
◦ Webサービスを自動的にテストするためのツー
ルです
webinject.pl -c config.xml
<testcasefile>testcases.xml</testcasefile>
<globalhttplog>onfail</globalhttplog>
<reporttype>nagios</reporttype>
config.xml
正常時
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/9/26 第2回 OSS運用管理勉強会 27
- 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/9/26 第2回 OSS運用管理勉強会 28
- 30. 状況によって動作を変える必要
がある場合
— LL と
Mechanize ライブラリをつかっ
てスクリプトを作成します
◦ PerlのWWW::Mechanize
◦ RubyのMechanize
◦ Pythonのmechanize
2013/9/26 第2回 OSS運用管理勉強会 30
- 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/9/26 第2回 OSS運用管理勉強会 31
- 32. ディスカバリの通知を活用
2013/9/26 第2回 OSS運用管理勉強会 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}
通知メッセージの定義
- 33. ディスカバリの通知を活用
Pythonでのパターンマッチ例
2013/9/26 第2回 OSS運用管理勉強会 33
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()
- 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/9/26 第2回 OSS運用管理勉強会 34
- 36. SLA
— レポート
◦ 稼働レポート
◦ 障害発生数上位100項目
2013/9/26 第2回 OSS運用管理勉強会 36
- 38. Zabbixの困ったところ
グラフ
— 測定した値を関数で処理してプロットしたい
Ø すでにデータベースに入っている値しかプロットできません
— トレンドとかが出せるとうれしいけど
◦ 最小二乗法やHolt-Wintersによる傾向
◦ σバンド
Ø 必要な関数が実装されていないのでむりです
Ø ほかのツールを使いましょう
2013/9/26 第2回 OSS運用管理勉強会 38
— それでも移動平均くらいなら
◦ avg(3600)
◦ avg(3600,86400)
— タイムシフトによる過去一週間の平均
◦ (avg(60,86400)+avg(60,172800)+avg(60,259200)+…+avg(60,604800))/7
- 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/9/26 第2回 OSS運用管理勉強会 39