46
運用の現場での 監視運用ツールの活用 株式会社サイタスマネジメント 米田真治 2013/12/13 OSC2013 .Enterprise 1

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

Embed Size (px)

DESCRIPTION

DevOpsの時代、運用の現場でも安定とスピードとの両方が求められるようになっています。 オープンソースの統合監視ツール「Zabbix」を実例に、運用監視ツールに求められるポイントと活用法をご紹介します。

Citation preview

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

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

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

2013/12/13 OSC2013 .Enterprise 1

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

トピックス

� 運用業務のよくある状況 � 運用監視ツールのポイント � Zabbixの活用ケース ◦ 自動登録 ◦ カスタム監視

2013/12/13 OSC2013 .Enterprise 2

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

自己紹介

� 米田 真治 (こめだ しんじ) ◦ 株式会社サイタスマネジメント CTO

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

2013/12/13 OSC2013 .Enterprise 3

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

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

�  システム監視・運用管理マネジメントサービス ◦  監視通知サービス:トラブルの未然防止・早期発見により システムの安定稼動を支援

◦  障害対応サービス: 経験豊富なエンジニアによる迅速な ネットワーク復旧支援

◦  運用管理代行サービス:高品質で幅広いサポートメニューでシステム運用の負担を軽減

◦  レポーティング: システムの運用状況や課題を把握し、改善提案を実施

�  サーバ・ネットワーク構築

2013/12/13 OSC2013 .Enterprise 4

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

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

2013/12/13 OSC2013 .Enterprise 5

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

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

「運用でカバーする」という悪魔の声

属人的 人に依存する問題 キーパーソンに聞かないとわからない 人のスキル、属人化 運用の現場では、幅広い知識と深い経験が求められます

コスト 費用対効果 ハードウェア・ソフトウェア 保守費用 人件費

2013/12/13 OSC2013 .Enterprise 6

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

仮想化の恩恵

�  仮想化技術 ◦  仮想化のソフトウェアレイヤーが、個々のハードウェア障害に対する保護を提供する

◦  OSやアプリケーションはハードウェアの フォールトトレランスを確保する。

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

� クラウドの利用 ◦ スピード

� 仮想環境やクラウドの活用で サーバの追加があっという間にできる � 動的に運用管理の対象が増減する

2013/12/13 OSC2013 .Enterprise 7

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

運用サイドで起こる問題

� たとえば、 � キャンペーンによるトラフィック過多 ◦ スポットCMなどのキャンペーン広告 ◦ ニュース番組で紹介される ◦  SNSでの口コミ ◦ スケールアウト実施

� 新サービスの開始 ◦ サーバが一挙に増える

� たくさんのVM ◦ 設定変更、情報の更新が追いつかない

2013/12/13 OSC2013 .Enterprise 8

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

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

ウィキペディア故障率曲線より

2013/12/13 OSC2013 .Enterprise 9

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

運用現場の感覚

予期せぬ トラブル

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

インシデント件数

ハードウェアの経年劣化

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

サービスイン

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

2013/12/13 OSC2013 .Enterprise 10

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

DevOps

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

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

Biz 提供サービス主管

2013/12/13 OSC2013 .Enterprise 11

スピードが求められる時代

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

Dev, Ops は技術やサービスの提供者 Bizから ◦  何を求められているのか  ◦  何を期待されているのか 

Dev

Ops

Biz

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

「安定運用が求められる運用部門」

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

状況の共有

リリースプロセス

自動化できる運用ツール • 対応時間の短縮 • 作業の削減と品質の確保

2013/12/13 OSC2013 .Enterprise 12

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

運用の現場は人のネットワーク

� 頻繁なリリースには、 DevとOpsとの効果的な連係が必要

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

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

プロセスの自動化

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

2013/12/13 OSC2013 .Enterprise 13

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

監視とメータリング

利用者によって、見たい情報が違う

レポートする内容が違う

Dev アプリケーションの 異常 性能・レスポンス ユーザの振るまい ログ

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

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

2013/12/13 OSC2013 .Enterprise 14

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

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

� 監視機能 ◦ 柔軟性と拡張性

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

◦ 定型化 �  モデルやテンプレート

◦ コマンドの活用 �  自動アクション �  作業属人化の排除 �  作業品質を均一化

� 見える化 ◦ 状況の共有 ◦ メータリング ◦ 柔軟なレポート

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

� 拡張性 ◦ API

2013/12/13 OSC2013 .Enterprise 15

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

OSS 運用監視ツール

2013/12/13 OSC2013 .Enterprise 16

Nagios

Cacti

Zenoss

Ganglia

Observium

Zabbix

Shinken

分散監視 API

メータリング

HA 監視

エージェント

Collectd munin

Pandora FMS

テンプレート ディスカバリー

Hinemos CMDB

Graphite RRDtool

Xymon

Icinga

weathermap ntop nfsen

仮想化

クラウド

かなり私見

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

Zabbixが備える有用な機能 �  拡張性のある監視機能 �  Zabbix Agent ◦  エージェント自動登録 ◦  ログ監視 ◦  Windowsサポート �  perf_counter、イベントログ、サービス

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

�  トリガー条件でのコマンド実行

�  レポート �  API

2013/12/13 OSC2013 .Enterprise 17

2.2でVMware vSphere APIとWindows WMIに対応しました

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

Zabbixの困ったところ 監視設定の点

�  SNMPでの監視設定はものすごく融通が利かない

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

2013/12/13 OSC2013 .Enterprise 18

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

Zabbix 動的な監視対象の追加 対象ノードの自動検出

オート ディスカバリ

エージェント 自動登録

自動登録 アクション

テンプレートの適用

ホストOS

サービス監視

アイテム

ディスカバリ アクション

ローレベル ディスカバリ

ローレベル ディスカバリ

グラフ

トリガー

アイテム

グラフ

トリガー

2013/12/13 OSC2013 .Enterprise 19

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

Zabbix 動的な監視項目の追加 � アイテムの自動検出 ◦ ローレベルディスカバリ(Zabbix2.0から)

テンプレート ディスカバリ ルール

アイテムの プロトタイプ

トリガーの プロトタイプ

グラフの プロトタイプ

ディスカバリルール •  タイプ Zabbix エージェント

vfs.fs.discovery ファイルシステム net.if.discovery ネットワーク

カスタムLLDルール JSON形式でリストを返します

•  タイプ SNMP agent = SNMP OIDディスカバリ

2013/12/13 OSC2013 .Enterprise 20

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

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

2013/12/13 OSC2013 .Enterprise 21

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

SNMP OIDディスカバリ アイテムのプロトタイプ

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

2013/12/13 OSC2013 .Enterprise 22

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

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

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

スクリプト実行による カスタム監視 � Zabbix Agent 経由 (UserParameter) � 外部チェック

� 返せる値は一つだけ � 複数の値があるならzabbix_senderで ◦ アイテムのタイプ Zabbixトラッパー

� ポーリングのスケジュールリングはZabbixに任せる

2013/12/13 OSC2013 .Enterprise 23

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

Zabbix Agent 経由 � UserParameter ◦ リクエストのたびにコマンドが起動されます

� 例: Collectdで収集した値を取り出す UserParameter=collectd[*],echo "GETVAL $1" | nc -U /var/

run/collectd/unixsock | egrep '^(value|$2)=' | awk

'{printf "%f\n", $$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

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

外部チェック 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

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

スクリプト監視の注意点 �  タイムアウト ◦  Option: Timeout Range: 1-30 ◦  越えても強制終了はされませんが

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

�  トラッパーの数 ◦  送信元

�  エージェントのアクティブチェック �  zabbix_sender ◦  ソケットの数をみて調整

�  トラッパーポート10051

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

�  スクリプト起動のオーバーヘッド

2013/12/13 OSC2013 .Enterprise 26

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

Web監視 �  Zabbix Agent 経由

�  web.page.get ウェブページの内容の取得

◦  web.page.perf ウェブページ全体のロードにかかる時間の取得

◦  web.page.regexp ウェブページで最初に正規表現に一致した文字列の取得

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

�  ウェブ監視 ◦  固定シナリオ

�  ステップごとの、スピード、レスポンスタイム

◦  テンプレート化できない

2013/12/13 OSC2013 .Enterprise 27

2.2で改善

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

動的シナリオの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/12/13 OSC2013 .Enterprise 28

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

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=Sign+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

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

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

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

状況によって動作を変える必要がある場合 � LL と Mechanize ライブラリをつかってスクリプトを作成します ◦  PerlのWWW::Mechanize ◦ RubyのMechanize ◦  Pythonのmechanize

2013/12/13 OSC2013 .Enterprise 31

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

カスタム通知 メディアとしてスクリプトを使う �  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("%s\n" % msg.encode('utf-8'))

p.stdin.close()

2013/12/13 OSC2013 .Enterprise 32

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

ディスカバリの通知を活用

2013/12/13 OSC2013 .Enterprise 33

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}

通知メッセージの定義

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

ディスカバリの通知を活用 Pythonでのパターンマッチ例

2013/12/13 OSC2013 .Enterprise 34

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()

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

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

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

SLAとビジネスインパクト �  ITサービス

2013/12/13 OSC2013 .Enterprise 36

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

SLA

�  レポート ◦ 稼働レポート ◦ 障害発生数上位100項目

2013/12/13 OSC2013 .Enterprise 37

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

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

�  システムがどこで問題を引き起こすことになるかを 知ることはできない。

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

�  悪魔は細部に宿る �  木を見て森も見る

�  計測すべし �  見える化

2013/12/13 OSC2013 .Enterprise 38

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

Zabbixの困ったところ グラフ �  測定した値を関数で処理してプロットしたい Ø  すでにデータベースに入っている値しかプロットできません �  トレンドとかが出せるとうれしいけど ◦  最小二乗法やHolt-Wintersによる傾向 ◦  σバンド

Ø  必要な関数が実装されていないのでむりです Ø  ほかのツールを使いましょう

2013/12/13 OSC2013 .Enterprise 39

�  それでも移動平均くらいなら

◦  avg(3600) ◦  avg(3600,86400)

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

◦  (avg(60,86400)+avg(60,172800)+avg(60,259200)+…+avg(60,604800))/7

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

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

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

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

2013/12/13 OSC2013 .Enterprise 41

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

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

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

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

2013/12/13 OSC2013 .Enterprise 42

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

サンプル 上がZabbix、下がRRDtool

2013/12/13 OSC2013 .Enterprise 43

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

サンプルグラフの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%s\j"

2013/12/13 OSC2013 .Enterprise 44

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

運用の現場はたのしい

運用の現場では、 �  幅広い知識がつき、 �  いろんな経験ができます 使ってたのしいツールを、使いましょう カスタマイズで、もっとたのしく � 機能が足りなければ作ることも

見えるとたのしい 楽になるとたのしい 作り込んだ物がうごくと、 もっとたのしい

2013/12/13 OSC2013 .Enterprise 45

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

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

2013/12/13 OSC2013 .Enterprise 46