Zabbix study

8,200 views

Published on

第4回 Zabbix勉強会の発表資料
http://atnd.org/events/20070

0 Comments
15 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,200
On SlideShare
0
From Embeds
0
Number of Embeds
987
Actions
Shares
0
Downloads
65
Comments
0
Likes
15
Embeds 0
No embeds

No notes for slide

Zabbix study

  1. 1. エージェントと SNMP だけじゃない Zabbix @mikeda
  2. 2. 自己紹介 <ul><li>池田朋大 / @mikeda
  3. 3. CROOZ って会社でインフラ屋やってます
  4. 4. qpstudy でよくネタ LT をやってる人
  5. 5. Zabbix のこと </li><ul><li>200 ノード くらい試験導入中
  6. 6. API 好き。サンプル集作りたい
  7. 7. 作ったツール: zabtop 、 ZabbixAPI.pm </li></ul></ul>
  8. 8. Zabbixの監視といえば Zabbix エージェント OR SNMP 監視対象(ホスト)には <ul><ul><li>ZabbixかSNMPのエージェントが必要
  9. 9. 物理機器にヒモづく-> IP アドレスが必要 </li></ul></ul>必須じゃない
  10. 10. 物理機器に縛られずに もっと自由な発想で いろいろ監視してみよう
  11. 11. やりかたはいろいろある 多くの監視アイテムはけっこうなんでもアリ <ul><ul><li>外部監視
  12. 12. トラッパー
  13. 13. アグリゲート
  14. 14. ... </li></ul></ul>
  15. 15. Zabbixっぽく使うポイント <ul><li>テンプレートを作る->ホストを作る </li></ul> ->アイテム、トリガー、スクリーンなどが共有できる <ul><li>Zabbix 内で完結するようにする </li></ul> ->外部設定ファイルや cron をできるだけ使わない <ul><li>IP アドレス以外でホストを区別 </li></ul> ->アイテムの引数で情報を渡す & マクロを使う ※ マクロ:テンプレート内で使える変数   
  16. 16. 詳細はサンプルを見ながら いくつかはここで見れます http://mikeda.jp/zabbix/ admin / XXXXXX 今回使ったZabbixは1.8系
  17. 17. サンプル 1 Twitter 監視
  18. 18. Twitter監視 <ul><li>qpstudy6 でやったネタ </li></ul><ul><li>TwitterAPI を使って人間を監視する </li><ul><li>ツイート数による死活監視
  19. 19. リプライ状況によるネットワーク監視
  20. 20. タイムラインによるログ監視
  21. 21. 各種情報のグラフ化 </li></ul></ul>
  22. 22. サンプルScreen1(全体図) 障害状況 ネットワーク図
  23. 23. サンプルScreen2(各ホスト) ツイート内容 ツイート数 フォロワー数 リスト数
  24. 24. 今回話すところ <ul><li>ユーザステータス監視 </li><ul><li>ツイート数
  25. 25. フォロワー数
  26. 26. リスト数 </li></ul><li>タイムライン監視 </li><ul><li>タイムラインのテキスト </li></ul></ul>どっちも TwitterAPI で取得(詳細は割愛) -> TwitterID がわかればとれる
  27. 27. ユーザステータス監視
  28. 28. テンプレート <ul><li>外部チェックが 1 つ:スクリプトの起動 </li></ul>twitter.userinfo.get[ {HOSTNAME1} ] <ul><li>トラッパーが複数:実際の監視値を格納 </li></ul>twitter.userinfo.statuses_count ...
  29. 29. ホスト <ul><li>ホスト名をTwitterIDにする
  30. 30. -> {HOSTNAME1} として外部チェックに引数が渡る
  31. 31. テンプレートをリンクする </li></ul>
  32. 32. 外部チェック <ul><li>自作スクリプトを使って監視する仕組み </li></ul><ul><li>スクリプトを置く </li><ul><li>値を print する
  33. 33. 最初の引数: IP アドレス OR DNS 名
  34. 34. 2 つ目以降の引数:任意に渡せる </li></ul><li>スクリプト名をキーに外部チェックアイテムを作成 </li><ul><li>script_name
  35. 35. script_name[ARG1 ...] </li></ul></ul>
  36. 36. トラッパー & zabbix_sender <ul><li>外部から監視値を Push する仕組み </li></ul>使い方 <ul><li>トラッパーアイテムを作成 </li></ul><ul><li>どこかで zabbix_sender を実行する </li></ul>zabbix_sender -z <Zabbix サーバ > -s < ホスト名 > -k < アイテム名 > -o < 値 >
  37. 37. 外部チェックと トラッパーの組み合わせ <ul><li>外部チェックで TwitteID を引数にスクリプトを起動
  38. 38. スクリプト内で TwitterAPI 叩いて値を取得。
  39. 39. 返却値でエラーハンドリング
  40. 40. スクリプト内で複数のトラッパーアイテムに zabbix_sender </li></ul><ul>スクリプト </ul><ul>ZabbixServer </ul><ul><li>起動 </li></ul><ul>外部チェック </ul><ul>トラッパー </ul><ul>トラッパー </ul><ul>トラッパー </ul><ul>OK/NG </ul>
  41. 41. 理由 <ul><li>外部チェックのみ </li><ul><li>1 回で 1 つの値しか返せない </li><ul><li>twitter.userinfo[{$HOSTNAME1}, statuses_count]
  42. 42. twitter.userinfo[{$HOSTNAME1}, followers_count]
  43. 43. ... </li></ul></ul></ul>   -> API 呼び出し回数が増えてがロックされる <ul><li>トラッパーアイテムのみ </li><ul><li>どうやって起動するか。 Cron 起動はイヤだ
  44. 44. 外部設定ファイルとかイヤだ
  45. 45. エラーハンドリングがしづらい </li></ul><li>外部チェックで起動して、トラッパーを一気に返す
  46. 46. エラーは外部チェックの返却値で </li></ul>
  47. 47. タイムライン監視
  48. 48. テンプレート <ul><li>外部チェックが 1 つ:スクリプトを起動 </li></ul>twitter.timeline.get[ {HOSTNAME1} ] <ul><li>トラッパーが 1 つ:ツイート内容を格納 </li></ul>twitter.timeline
  49. 49. 外部監視とトラッパーの組み合わせ <ul><li>外部チェックでスクリプト起動
  50. 50. スクリプト内で新しいつぶやき件数ぶんzabbix_sender </li></ul><ul>スクリプト </ul><ul>ZabbixServer </ul><ul>起動 </ul><ul>外部監視 </ul><ul>トラッパー </ul><ul>OK/NG </ul>
  51. 51. 補足:タイムスタンプ問題 <ul><li>単純に zabbix_sender するとその実行時間が入る </li><ul><li>オプションで解決: --input-file - --with-timestamp
  52. 52. こういうテキストを作る。複数行 OK </li></ul></ul>mikeda twitter.timeline 1302139204 &quot; 安西先生、おつまみがないです &quot; mikeda twitter.timeline 1302139191 @oranie &quot; 留年ヽ ( ゚∀゚ ) メ ( ゚∀゚ ) メ ( ゚∀゚ ) ノワッショイ &quot; <ul><ul><li>zabbix_sender にパイプで渡す </li></ul></ul>zabbix_sender -c /etc/zabbix/zabbix_agentd.conf --input-file - --with-timestamps <ul><li>バッチ処理にも使える </li></ul>
  53. 53. サンプル 1 終了 きっと完全なネタだと思われてる ↓ そんなことはない! 実践的な応用
  54. 54. サンプル 2 AWS の監視
  55. 55. AWSの監視 <ul><li>いわずとしれた Amazon のクラウド
  56. 56. EC2 は普通にエージェントいれればいいけど
  57. 57. RDS 、 ELB 、 SQS 、 ... </li></ul> -> CloudWatch しかない <ul><li>CloudWatch </li><ul><li>2 週間しか保存できない
  58. 58. ... </li></ul><li>Zabbix で監視したいですよね? </li></ul>
  59. 59. 今回はRDS (MySQL)の監視 <ul><li>基本的には Twitter 監視と同じ </li><ul><li>TwitteAPI -> CloudWatch AP </li></ul><li>ついでに MySQL のクエリ数監視もやってみる </li></ul><ul><li>CloudWatch 監視 </li><ul><li>ツール: CLI 、各種 SDK ( PHP,Java,... )
  60. 60. スクリプトを作って外部チェックで起動
  61. 61. 必要な情報はマクロで渡す </li><ul><li>RDS 名、リージョン </li></ul></ul><li>MySQL のクエリ数は普通に DNS 名で MySQL アクセスしてとってくる </li></ul>
  62. 62. サンプルScreen CPU 使用率 コネクション数 CPU 使用率 空きディスク容量 クエリ数
  63. 63. テンプレート (CloudWatch部分) <ul><li>外部チェック 1 :スクリプトを起動 </li></ul>amazon.rds.get[ {$RDS.NAME} {$RDS.REGION} ] <ul><li>トラッパー:監視値を格納 </li></ul>amazon.rds.cpu.util.avg ...
  64. 64. テンプレート (MySQLアクセス部分) <ul><li>外部チェック </li></ul>amazon.rds.mysql_status[Com_select] ... <ul><li>スクリプトの中身 </li></ul>USER=mikeda;PASS=XXXXX HOST=$1 KEY=$2 /usr/bin/mysqladmin -u$USER -p$PASS -h $HOST extended-status | awk '{if($2 == &quot;' $KEY '&quot;) print $4}'
  65. 65. ホスト作成 <ul><li>テンプレートをリンク
  66. 66. CloudWatch 用にマクロを設定
  67. 67. MySQL 監視用に DNS 名を設定、接続方法を「 DNS 名」に </li></ul>
  68. 68. サンプル 2 終了 だれかひと通りテンプレ作って 公開してください!
  69. 69. サンプル 3 サービスレイヤの監視
  70. 70. サービスレイヤの監視 <ul><li>こういうのがあると便利 </li><ul><li>PV 、平均レスポンスタイム、メール受信数
  71. 71. アプリケーションエラー件数
  72. 72. 画像投稿数、分散ストレージの総容量 </li></ul></ul>-> サービス担当の人でも見れる <ul><li>Zabbix アグリゲートを使う </li><ul><li>WEB サーバ、メールサーバ等をサービスごとにホストグループでまとめる
  73. 73. 各サーバで必要な値を取得
  74. 74. グループ単位で集約 </li></ul></ul>
  75. 75. サンプルScreen PV メール受信数 平均レスポンス メールキュー
  76. 76. サンプルScreen続き アプリエラー( WEB ) アプリエラー( Mail )
  77. 77. テンプレート <ul><li>Zabbix アグリゲート </li></ul>grpavg[&quot; {$WEB_GROUP} &quot;, &quot;system.cup.load[,avg5]&quot;, &quot;last&quot;, &quot;0&quot;] grpsum[&quot; {$WEB_GROUP} &quot;, &quot;http.count[ {$WEB_DOMAIN} ]&quot;, &quot;last&quot;,&quot;0&quot;] grpsum{&quot; {$MAIL_GROUP} &quot;, &quot;mail.count[ {$MAIL_DOMAIN} ]&quot;, &quot;last&quot;, &quot;0&quot;] <ul><li>ホストグループ名をユーザ定義マクロで渡す </li></ul>
  78. 78. ホスト <ul><li>テンプレートをリンク
  79. 79. マクロを設定 </li><ul><li>サーバグループ名
  80. 80. サービス用ドメイン( VirtualHost 等相乗り対策) </li></ul></ul>
  81. 81. サンプル 3 終了 なのですがちょっと課題が
  82. 82. 課題 <ul><li>1 ホスト上に複数のアプリインスタンスがある場合 </li><ul><li>バーチャルホストを使った WEB サーバ
  83. 83. バーチャルドメインを使ったメールサーバ
  84. 84. マルチインスタンス起動した MySQL サーバ </li></ul><li>1 つのホストに同じテンプレートを複数適用で きない </li></ul> -> 1 つのテンプレートに同じ内容を繰り返し記述 <ul><li>カオス化しない解決方法を模索中
  85. 85. -> よい案があれば @mikeda まで </li></ul>
  86. 86. 全サンプル終了
  87. 87. まとめ <ul><li>細かいところすっ飛ばしまくりですみません </li></ul><ul><li>物理機器に縛られずに監視を考えてみよう
  88. 88. 使える武器はいろいろある </li><ul><li>外部監視、トラッパー、アグリゲート、... </li></ul><li>ちゃんとテンプレートを作ると幸せになれる </li><ul><li>必要な情報は引数で渡す
  89. 89. 引数にはマクロを使う </li></ul></ul>
  90. 90. ありがとうございました!

×