Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
ZabbixによるAWS監視のコツ
クラスメソッド株式会社
横⽥田  慎介
classmethod.jp 1
H-‐‑‒2  #cmdevioH
2015/03/29
⽬目次
•  Zabbix概要
•  Zabbix利利⽤用例例
•  CloudWatchとの連携
•  CloudWatch以外の監視項⽬目
•  ホストの⾃自動登録
•  Zabbixサーバの監視
classmethod.jp 2
Zabbix概要
classmethod.jp 3
ホスト
•  監視対象のデバイス
– 例例:demo-‐‑‒web01
•  ホスト名とホストを特定するための情報
を指定する
– ホスト名はZabbix内で⼀一意
– 共⽤用Zabbixの場合は「web01」等は避ける
•  1つ以上のホスト...
ホストグループ
•  ホストをまとめるもの
–  例例:DEMO_̲WEB
•  ホストは1つ以上のホストグループに所属
–  いくつでも良良い
•  ホストグループ単位で扱われることが多い
–  ダッシュボードでのステータス⼀一覧
–  最新...
ホストグループ
classmethod.jp 6
HostHostHost
Host
Host
classmethod.jp 7
ダッシュボード画⾯面
アイテム
•  監視項⽬目
–  例例:Available  memory
–  どのような情報を(アイテムキー)
–  どの間隔で(更更新間隔)取得し、
–  取得したデータをどのくらいの期間保存するか
(ヒストリ保存期間)指定する
•  ホ...
アイテム
classmethod.jp 9
Host
Host
Item
CPU
Item
Mem
Item
CPU
Item
URL
Group
アイテム
•  任意のスクリプト結果を監視値として利利⽤用できる
–  AWS  APIから得た値
•  Zabbixで定義済みのものがあればそれを使う
–  例例:vm.memory.size[available]
•  無ければ他の⽅方法を...
トリガー
•  アイテムが収集したデータを「評価」し、
システム状態を表⽰示する論論理理条件式
– 例例:
{web01:vm.memory.size[available].last(0
)}  <  20M
•  状態として「OK」と「障害」...
トリガー
classmethod.jp 12
Host
Host
Item
CPU
Item
Mem
Item
CPU
Trig
<20%
Trig
>60%
Trig
>90%
Group
トリガー
•  任意の時点のデータを利利⽤用できる
– 例例:30⽇日後にディスク枯渇
– {db01:vfs.fs.size[/,pfree].delta(1d)}  *  30  
>  {db01:vfs.fs.size[/,pfree]...
トリガー
•  異異なるアイテムのデータを利利⽤用できる
– 例例:冗⻑⾧長化されたNTPサーバが停⽌止
– {ntp01:proc.num[ntpd].last(0)}  
+  {ntp02:proc.num[ntpd].last(0)} ...
トリガー
classmethod.jp 15
Host
Host
Item
CPU
Item
Mem
Item
CPU
Trig
<20%
Trig
>60%
Trig
>90%
>80%
Group
トリガー
•  状態変更更時にはイベントが発⽣生する
– イベントの結果、実⾏行行されるアクションを定
義できる
•  ダッシュボードには障害の数と⼀一覧が表
⽰示される
classmethod.jp 16
アクション
•  イベントの結果として何らかの処理理を⾏行行
う
– 例例:Report  problems  to  Zabbix  admins
•  メッセージの送信
•  コマンドの実⾏行行
classmethod.jp 17
テンプレート
•  アイテムやトリガーの設定をテンプレー
ト化することで、同様の監視設定を複数
のホストで使い回しできる
•  テンプレートは、ホストや他のテンプ
レートにリンクできる
– ホストグループにはリンクできない
classmetho...
テンプレート無し
classmethod.jp 19
Host
Host
Item
CPU
Item
Mem
Trig
<20%
Trig
>90%
Group
Item
CPU
Item
Mem
Trig
<20%
Trig
>90%
テンプレート化
classmethod.jp 20
Host
Host
Item
CPU
Item
Mem
Trig
<20%
Trig
>90%
TemplateGroup
テンプレート
•  リンクは多対多
– EC2上のウェブサーバの場合、下記をリンク
•  EC2テンプレート
•  Linuxテンプレート
•  Webサーバテンプレート
classmethod.jp 21
テンプレート
classmethod.jp 22
Host
Group
Host
I T
Template
I T
Template
I T
Template
Zabbix利利⽤用例例
classmethod.jp 23
前提
•  複数の案件を監視
•  ユーザはお客様と弊社運⽤用チーム
classmethod.jp 24
classmethod.jp 25
DEMO01_ALL
DEMO01_ELB DEMO01_EC2 DEMO01_RDS
ホストグループ設計
ホストグループ⽅方針
•  案件名がプレフィックス
–  ホストグループ名の重複防⽌止
•  全ホストは案件⽤用ホストグループに所属
–  (案件名)_̲ALL
•  その他、1つ以上のホストグループに所属
–  たくさん所属させてもOK
• ...
テンプレート設計
classmethod.jp 27
EC2
RDS
ALL
I T
EC2
DB
I T
RDS
  Base
I T
Web
I T
Linux
テンプレート設計
•  ホストにリンクするテンプレートは1つ
– 例例:Template_̲(案件名)_̲Web
•  その1つに必要な全テンプレートをリンク
– Template_̲(案件名)_̲Web
•  Template_̲(案件名)_...
テンプレート設計
classmethod.jp 29
EC2
RDS
ALL
I T
EC2
DB
I T
RDS
  Base
I T
Web
I T
Linux
テンプレート設計
•  案件⽤用のテンプレートを作成
– Template_̲(案件名)_̲Base
•  案件固有のマクロを管理理するため
•  案件/役割/ホスト固有の設定はマクロで
– トリガーでのマクロ利利⽤用
{web:vm.memo...
テンプレート設計
classmethod.jp 31
EC2
ALL
I T
EC2
  Base
I T
Web
I T
Linux
CPU  >  90%CPU  >  60%
{$ROLE_̲ARN}
閾値上書き
案件共通の値
CloudWatchとの連携
classmethod.jp 32
CloudWatchとは
•  AWS  クラウドリソースの監視サービス
–  EC2:CPU使⽤用率率率
–  RDS:ディスク残量量
•  監視範囲はAWSの責任範囲と近似
–  EC2のOS以上のリソース、例例えばメモリ、ディ
スク使⽤用...
CloudWatchグラフ
classmethod.jp 34
ZabbixとCloudWatchの連携
•  連携の⽬目的
– CloudWatchの監視対象とZabbixの監視対象
を統合管理理
– リソース状況の可視性向上
– 2週間より前のCloudWatchデータを保存
•  連携の⽅方法
– Z...
アイテム設定(外部チェック)
classmethod.jp 36
cw[-‐‑‒-‐‑‒metric,CPUUtilizaion,  ....]
スクリプト名[引数]
任意のスクリプトを実⾏行行可能
外部スクリプト(抜粋)
[ec2-‐‑‒user@zabbix-‐‑‒demo  ~∼]$  cat  /usr/lib/zabbix/externalscripts/cw
#!/usr/bin/ruby
params  =  ARGV.get...
外部スクリプト引数と返り値
[ec2-‐‑‒user@zabbix-‐‑‒demo  ~∼]$  ./cw
  -‐‑‒-‐‑‒namespace  AWS/EC2
  -‐‑‒-‐‑‒metric  CPUUtilization
  -‐‑‒...
CloudWatchとZabbix⽐比較
classmethod.jp 39
テンプレート化
classmethod.jp 40
ユーザーマクロの利利⽤用
classmethod.jp 41
ユーザーマクロの利利⽤用
classmethod.jp 42
ユーザーマクロの連携
classmethod.jp 43
I T
EC2
  Region
I T
Web
{$THRESHOLD}
{$REGION}
{$NAMESPACE}
{$DIM_̲NAME}
{$THRESHOLD}
{$DIM_...
ホストスクリーン
classmethod.jp 44
複数のグラフを並べて表⽰示
ホストスクリーン
classmethod.jp 45
EC2のディスクメトリクス
•  EC2
– DiskRead(Write)Ops
– DiskRead(Write)Bytes
•  エフェメラルディスク⽤用メトリクス
– EC2のローカルストレージ
– 再起動でデータが消える
– 利利⽤用...
EC2:  Disk*
classmethod.jp 47
EBS:  Volume*
classmethod.jp 48
EBSメトリクス
classmethod.jp 49
•  EC2にアタッチされたEBSを監視
•  ZabbixのLLDでアイテムの⾃自動登録
– EC2  APIを利利⽤用しEBSの情報を取得
ローレベルディスカバリ
classmethod.jp 50
discover_̲ebs[-‐‑‒-‐‑‒hostname,{HOST.HOST},  ....]
ホスト名の末尾はインスタンスID
例例:demo01_̲ec2_̲web_̲i-‐...
外部スクリプト(抜粋)
[ec2-‐‑‒user@zabbix-‐‑‒demo  ~∼]$  cat  /usr/lib/zabbix/externalscripts/discover_̲ebs
#!/usr/bin/ruby
params  ...
外部スクリプト返り値
[zabbix-‐‑‒demo  ~∼]$  ./discover_̲ebs
    -‐‑‒-‐‑‒hostname  demo01_̲ec2_̲web_̲i-‐‑‒5117d3a4  |  jq  .
{
    "d...
アイテムのプロトタイプ
classmethod.jp 53
cw[...,  -‐‑‒-‐‑‒dim_̲values{#VOLUME_̲ID},  ....]
•  LLDの返り値があった場合、プロトタイプ
を元にアイテムが⾃自動登録される
テンプレート化しEC2にリンク
classmethod.jp 54
I T
EC2
  Region
I T
Web
I T
EBS
LLDで追加されたアイテム
classmethod.jp 55
LLDで追加されたアイテム
classmethod.jp 56
CloudWach以外の監視項⽬目
classmethod.jp 57
監視しておいたほうが良良い項⽬目
•  AWS  limits
•  ELBインスタンス数
•  SES送信制限
classmethod.jp 58
AWS  limits
•  上限緩和にはAWSサポート申請が必要
– EC2の起動上限
•  デフォルト:5
– EIPの取得上限
•  デフォルト:5
•  AWS  APIで現在の上限値を取得可能なも
のがある
classmethod.j...
AWS  limits
[ec2-‐‑‒user@ec2  ~∼]$  aws  ec2  describe-‐‑‒account-‐‑‒attributes
ACCOUNTATTRIBUTES max-‐‑‒instances
ATTRIBU...
ELBインスタンス数
•  ELBは負荷状況によりスケールアウト
–  暖気申請により事前にスケールアウトも可能
•  スケールアウト後のELBインスタンス数は
ネットワークインターフェース(ENI)の数で
確認できる
classmethod....
ELBインスタンス数
ec2  =  AWS::EC2.new()
if  params['f_̲key'].nil?
    eni  =  ec2.network_̲interfaces
else
    eni  =  ec2.netwo...
SES送信制限
•  SESには24時間で送られるメール数に制
限がある
•  制限値と現在の送信数はAPIから取得可能
classmethod.jp 63
SES送信制限
[ec2-‐‑‒user@ec2  ~∼]$  aws  ses  get-‐‑‒send-‐‑‒quota
{
        "Max24HourSend":  50000.0,
        "SentLast24Hou...
ホストの⾃自動登録
classmethod.jp 65
ホストの⾃自動登録
classmethod.jp 66
•  頻繁なホストの交換
– AutoScailng
– Immutable  Infrastructure
•  ホスト数の増加
•  ⼿手間が増える
•  ホスト設定漏漏れの可能性
ホストの⾃自動登録⽅方法
classmethod.jp 67
•  ネットワークディスカバリ
–  負荷が⾼高いため利利⽤用しない
•  アクティブエージェントの⾃自動登録
–  今回の対象
•  Zabbix  APIとAWS  APIの連携...
ネットワークディスカバリ
classmethod.jp 68
•  Zabbixサーバが指定したIP範囲をスキャン
•  応答があったホストを新規登録
アクティブエージェント⾃自動登録
classmethod.jp 69
•  ZabbixエージェントがZabbixサーバに
チェック要求
•  エージェントから送られたホスト名がまだ登
録されていない場合、ホスト登録
EC2インスタンスの⾃自動登録
classmethod.jp 70
•  アクティブエージェント⾃自動登録を利利⽤用
–  ネットワークディスカバリの場合、IP範囲が広く
⾼高負荷になりがち
EC2インスタンスの⾃自動登録
classmethod.jp 71
•  ZabbixサーバはZabbixエージェントからの
通信を10051番ポートで待ち受け
•  Zabbixに登録されるホスト名に注意
–  ⾃自動登録時ホスト名はZabb...
Zabbixエージェントの設定
[ec2-‐‑‒user@ec2  ~∼]$  cat  /etc/zabbix/zabbix_̲agentd.conf
#  This  is  a  config  file  for  the  Zabbix ...
OSホスト名の設定
classmethod.jp 73
•  (案件名)_̲ec2_̲(種別)_̲(インスタンスID)
– 例例:demo01_̲ec2_̲web_̲i-‐‑‒5117d3a4
•  起動スクリプトによりZabbixエージェン
...
起動スクリプト例例
[ec2-‐‑‒user@ec2  ~∼]$  cat  /etc/init.d/set-‐‑‒hostname
#!/bin/bash
#
#  chkconfig:  2345  60  40
#
HOST_̲PREFIX...
アクションの設定
1.  ホスト名に案件名が含まれるEC2インスタン
スをホスト登録
2.  ホスト名からインスタンスの役割を判断し適
切切なグループとテンプレートを割り当てる
classmethod.jp 75
Zabbixサーバの監視
classmethod.jp 76
Zabbixサーバ⾃自体の監視
•  Zabbixサーバ停⽌止の場合、アラート⾶飛ばない
–  Zabbixとは別の仕組みで監視が必要
•  Route53のヘルスチェック機能による監視
–  10051番ポート
•  他の監視サービスからの監...
Route53のヘルスチェック機能
classmethod.jp 78
Route53のヘルスチェック機能
classmethod.jp 79
•  世界中のAWSヘルスチェックサーバからポート監視
•  10051ポートへの接続失敗時にSNSでメール通知
•  アクセス元は下記コマンドで確認可能
–  たまに変更...
Route53のヘルスチェック機能
classmethod.jp 80
#cmdevio2015
ご清聴ありがとうございました。
このスライドは後⽇日公開いたします。
H-‐‑‒2
Prochain SlideShare
Chargement dans…5
×

ZabbixによるAWS監視のコツ

Developers.IO 2015の発表資料です

  • Soyez le premier à commenter

ZabbixによるAWS監視のコツ

  1. 1. ZabbixによるAWS監視のコツ クラスメソッド株式会社 横⽥田  慎介 classmethod.jp 1 H-‐‑‒2  #cmdevioH 2015/03/29
  2. 2. ⽬目次 •  Zabbix概要 •  Zabbix利利⽤用例例 •  CloudWatchとの連携 •  CloudWatch以外の監視項⽬目 •  ホストの⾃自動登録 •  Zabbixサーバの監視 classmethod.jp 2
  3. 3. Zabbix概要 classmethod.jp 3
  4. 4. ホスト •  監視対象のデバイス – 例例:demo-‐‑‒web01 •  ホスト名とホストを特定するための情報 を指定する – ホスト名はZabbix内で⼀一意 – 共⽤用Zabbixの場合は「web01」等は避ける •  1つ以上のホストグループに属する classmethod.jp 4
  5. 5. ホストグループ •  ホストをまとめるもの –  例例:DEMO_̲WEB •  ホストは1つ以上のホストグループに所属 –  いくつでも良良い •  ホストグループ単位で扱われることが多い –  ダッシュボードでのステータス⼀一覧 –  最新の監視データ –  Zabbixユーザへのアクセス制限 classmethod.jp 5
  6. 6. ホストグループ classmethod.jp 6 HostHostHost Host Host
  7. 7. classmethod.jp 7 ダッシュボード画⾯面
  8. 8. アイテム •  監視項⽬目 –  例例:Available  memory –  どのような情報を(アイテムキー) –  どの間隔で(更更新間隔)取得し、 –  取得したデータをどのくらいの期間保存するか (ヒストリ保存期間)指定する •  ホストやテンプレートに属する –  例例えばウェブ監視等のデバイスに紐紐付かない監視 項⽬目の場合も、アイテムを所属させるためのダ ミーのホストが必要 classmethod.jp 8
  9. 9. アイテム classmethod.jp 9 Host Host Item CPU Item Mem Item CPU Item URL Group
  10. 10. アイテム •  任意のスクリプト結果を監視値として利利⽤用できる –  AWS  APIから得た値 •  Zabbixで定義済みのものがあればそれを使う –  例例:vm.memory.size[available] •  無ければ他の⽅方法を検討する –  SNMP –  JMX –  外部チェック(任意のスクリプトを実⾏行行) •  似たものは「アプリケーション」という単位でま とめることができる classmethod.jp 10
  11. 11. トリガー •  アイテムが収集したデータを「評価」し、 システム状態を表⽰示する論論理理条件式 – 例例: {web01:vm.memory.size[available].last(0 )}  <  20M •  状態として「OK」と「障害」を持つ – 障害の深刻度度を設定できる – 「情報」から「致命的な障害」まで classmethod.jp 11
  12. 12. トリガー classmethod.jp 12 Host Host Item CPU Item Mem Item CPU Trig <20% Trig >60% Trig >90% Group
  13. 13. トリガー •  任意の時点のデータを利利⽤用できる – 例例:30⽇日後にディスク枯渇 – {db01:vfs.fs.size[/,pfree].delta(1d)}  *  30   >  {db01:vfs.fs.size[/,pfree].last(0)} classmethod.jp 13
  14. 14. トリガー •  異異なるアイテムのデータを利利⽤用できる – 例例:冗⻑⾧長化されたNTPサーバが停⽌止 – {ntp01:proc.num[ntpd].last(0)}   +  {ntp02:proc.num[ntpd].last(0)}  =  0 classmethod.jp 14
  15. 15. トリガー classmethod.jp 15 Host Host Item CPU Item Mem Item CPU Trig <20% Trig >60% Trig >90% >80% Group
  16. 16. トリガー •  状態変更更時にはイベントが発⽣生する – イベントの結果、実⾏行行されるアクションを定 義できる •  ダッシュボードには障害の数と⼀一覧が表 ⽰示される classmethod.jp 16
  17. 17. アクション •  イベントの結果として何らかの処理理を⾏行行 う – 例例:Report  problems  to  Zabbix  admins •  メッセージの送信 •  コマンドの実⾏行行 classmethod.jp 17
  18. 18. テンプレート •  アイテムやトリガーの設定をテンプレー ト化することで、同様の監視設定を複数 のホストで使い回しできる •  テンプレートは、ホストや他のテンプ レートにリンクできる – ホストグループにはリンクできない classmethod.jp 18
  19. 19. テンプレート無し classmethod.jp 19 Host Host Item CPU Item Mem Trig <20% Trig >90% Group Item CPU Item Mem Trig <20% Trig >90%
  20. 20. テンプレート化 classmethod.jp 20 Host Host Item CPU Item Mem Trig <20% Trig >90% TemplateGroup
  21. 21. テンプレート •  リンクは多対多 – EC2上のウェブサーバの場合、下記をリンク •  EC2テンプレート •  Linuxテンプレート •  Webサーバテンプレート classmethod.jp 21
  22. 22. テンプレート classmethod.jp 22 Host Group Host I T Template I T Template I T Template
  23. 23. Zabbix利利⽤用例例 classmethod.jp 23
  24. 24. 前提 •  複数の案件を監視 •  ユーザはお客様と弊社運⽤用チーム classmethod.jp 24
  25. 25. classmethod.jp 25 DEMO01_ALL DEMO01_ELB DEMO01_EC2 DEMO01_RDS ホストグループ設計
  26. 26. ホストグループ⽅方針 •  案件名がプレフィックス –  ホストグループ名の重複防⽌止 •  全ホストは案件⽤用ホストグループに所属 –  (案件名)_̲ALL •  その他、1つ以上のホストグループに所属 –  たくさん所属させてもOK •  AWSサービス:(案件名)_̲EC2 •  機能:(案件名)_̲WEB •  開発会社:(案件名)_̲(会社名) •  メンテナンス期間:(案件名)_̲MEINTENANCE01 classmethod.jp 26
  27. 27. テンプレート設計 classmethod.jp 27 EC2 RDS ALL I T EC2 DB I T RDS  Base I T Web I T Linux
  28. 28. テンプレート設計 •  ホストにリンクするテンプレートは1つ – 例例:Template_̲(案件名)_̲Web •  その1つに必要な全テンプレートをリンク – Template_̲(案件名)_̲Web •  Template_̲(案件名)_̲Base •  Template_̲AWS_̲EC2 •  Template  OS  Linux classmethod.jp 28
  29. 29. テンプレート設計 classmethod.jp 29 EC2 RDS ALL I T EC2 DB I T RDS  Base I T Web I T Linux
  30. 30. テンプレート設計 •  案件⽤用のテンプレートを作成 – Template_̲(案件名)_̲Base •  案件固有のマクロを管理理するため •  案件/役割/ホスト固有の設定はマクロで – トリガーでのマクロ利利⽤用 {web:vm.memory.size[available].last(0)}   <  {$TRIGGER_̲THRESHOLD_̲XXX} classmethod.jp 30
  31. 31. テンプレート設計 classmethod.jp 31 EC2 ALL I T EC2  Base I T Web I T Linux CPU  >  90%CPU  >  60% {$ROLE_̲ARN} 閾値上書き 案件共通の値
  32. 32. CloudWatchとの連携 classmethod.jp 32
  33. 33. CloudWatchとは •  AWS  クラウドリソースの監視サービス –  EC2:CPU使⽤用率率率 –  RDS:ディスク残量量 •  監視範囲はAWSの責任範囲と近似 –  EC2のOS以上のリソース、例例えばメモリ、ディ スク使⽤用量量は監視範囲外 –  RDSはマネージドサービスなのでメモリ、ディ スクも監視対象 •  データの保存期間は2週間 classmethod.jp 33
  34. 34. CloudWatchグラフ classmethod.jp 34
  35. 35. ZabbixとCloudWatchの連携 •  連携の⽬目的 – CloudWatchの監視対象とZabbixの監視対象 を統合管理理 – リソース状況の可視性向上 – 2週間より前のCloudWatchデータを保存 •  連携の⽅方法 – Zabbixアイテムの外部チェックを利利⽤用 classmethod.jp 35
  36. 36. アイテム設定(外部チェック) classmethod.jp 36 cw[-‐‑‒-‐‑‒metric,CPUUtilizaion,  ....] スクリプト名[引数] 任意のスクリプトを実⾏行行可能
  37. 37. 外部スクリプト(抜粋) [ec2-‐‑‒user@zabbix-‐‑‒demo  ~∼]$  cat  /usr/lib/zabbix/externalscripts/cw #!/usr/bin/ruby params  =  ARGV.getopts(  '',  'region:',  'namespace:',  'metric:',  'dim_̲names:',  'dim_̲values:',  'stat:',  'period:') AWS.config(:cloud_̲watch_̲endpoint  =>  "monitoring.#{params['region']}.amazonaws.com") dimensions  =  Hash[params['dim_̲names'].split(',').zip(params['dim_̲values'].split(','))] metric  =  AWS::CloudWatch::Metric.new(      params['namespace'],      params['metric'],      :dimensions  =>  dimensions.map{|name,  value|  {name:  name,  value:  value}} ) stats  =  metric.statistics(    :start_̲time  =>  Time.now  -‐‑‒  600,    :end_̲time  =>  Time.now,    :period  =>  params['period'],    :statistics  =>  [params['stat']] ) last_̲stats  =  stats.sort_̲by{|stat|  stat[:timestamp]}.last puts  last_̲stats[params['stat'].downcase.to_̲sym] classmethod.jp 37
  38. 38. 外部スクリプト引数と返り値 [ec2-‐‑‒user@zabbix-‐‑‒demo  ~∼]$  ./cw  -‐‑‒-‐‑‒namespace  AWS/EC2  -‐‑‒-‐‑‒metric  CPUUtilization  -‐‑‒-‐‑‒dim_̲names  InstanceId  -‐‑‒-‐‑‒dim_̲values  i-‐‑‒5117d3a  -‐‑‒-‐‑‒stat  Average  -‐‑‒-‐‑‒period  300  -‐‑‒-‐‑‒region  ap-‐‑‒northeast-‐‑‒1 0.3 classmethod.jp 38 マネジメントコンソールのCloudWatch画⾯面で 指定する項⽬目と同じものが引数となる 返り値(0.3)が監視結果として記録される
  39. 39. CloudWatchとZabbix⽐比較 classmethod.jp 39
  40. 40. テンプレート化 classmethod.jp 40
  41. 41. ユーザーマクロの利利⽤用 classmethod.jp 41
  42. 42. ユーザーマクロの利利⽤用 classmethod.jp 42
  43. 43. ユーザーマクロの連携 classmethod.jp 43 I T EC2  Region I T Web {$THRESHOLD} {$REGION} {$NAMESPACE} {$DIM_̲NAME} {$THRESHOLD} {$DIM_̲VALUE} {$NAMESPACE}:  AWS/EC2 {$RGION}:  ap-‐‑‒northeast-‐‑‒1 {$DIM_̲NAME}:  InstanceId {$DIM_̲VALUE}:  i-‐‑‒xxxxxxx {$THRESHOLD}:  90
  44. 44. ホストスクリーン classmethod.jp 44 複数のグラフを並べて表⽰示
  45. 45. ホストスクリーン classmethod.jp 45
  46. 46. EC2のディスクメトリクス •  EC2 – DiskRead(Write)Ops – DiskRead(Write)Bytes •  エフェメラルディスク⽤用メトリクス – EC2のローカルストレージ – 再起動でデータが消える – 利利⽤用しないことも多い classmethod.jp 46
  47. 47. EC2:  Disk* classmethod.jp 47
  48. 48. EBS:  Volume* classmethod.jp 48
  49. 49. EBSメトリクス classmethod.jp 49 •  EC2にアタッチされたEBSを監視 •  ZabbixのLLDでアイテムの⾃自動登録 – EC2  APIを利利⽤用しEBSの情報を取得
  50. 50. ローレベルディスカバリ classmethod.jp 50 discover_̲ebs[-‐‑‒-‐‑‒hostname,{HOST.HOST},  ....] ホスト名の末尾はインスタンスID 例例:demo01_̲ec2_̲web_̲i-‐‑‒5117d3a4
  51. 51. 外部スクリプト(抜粋) [ec2-‐‑‒user@zabbix-‐‑‒demo  ~∼]$  cat  /usr/lib/zabbix/externalscripts/discover_̲ebs #!/usr/bin/ruby params  =  ARGV.getopts(  '',  'region:',  'hostname:') instance_̲id  =  params['hostname'][/i-‐‑‒[0-‐‑‒9a-‐‑‒f]{8}$/] AWS.config(:ec2_̲endpoint  =>  "ec2.#{params['region']}.amazonaws.com") ec2  =  AWS::EC2.new instance  =  ec2.instances[instance_̲id] discovery  =  {'data'  =>  []} instance.block_̲devices.each  do  |device|    next  if  device[:ebs].nil?    discovery['data']  <<  {                                            '{#VOLUME_̲ID}'  =>  device[:ebs][:volume_̲id],                                            '{#DEVICE_̲NAME}'  =>  device[:device_̲name],                                        } end puts  discovery.to_̲json classmethod.jp 51
  52. 52. 外部スクリプト返り値 [zabbix-‐‑‒demo  ~∼]$  ./discover_̲ebs    -‐‑‒-‐‑‒hostname  demo01_̲ec2_̲web_̲i-‐‑‒5117d3a4  |  jq  . {    "data":  [        {            "{#VOLUME_̲ID}":  "vol-‐‑‒8dcacd93",            "{#DEVICE_̲NAME}":  "/dev/xvda"        }    ] } classmethod.jp 52 {#VOLUME_̲ID} {#DEVICE_̲NAME} はアイテムのプロトタイプ内で利利⽤用できる
  53. 53. アイテムのプロトタイプ classmethod.jp 53 cw[...,  -‐‑‒-‐‑‒dim_̲values{#VOLUME_̲ID},  ....] •  LLDの返り値があった場合、プロトタイプ を元にアイテムが⾃自動登録される
  54. 54. テンプレート化しEC2にリンク classmethod.jp 54 I T EC2  Region I T Web I T EBS
  55. 55. LLDで追加されたアイテム classmethod.jp 55
  56. 56. LLDで追加されたアイテム classmethod.jp 56
  57. 57. CloudWach以外の監視項⽬目 classmethod.jp 57
  58. 58. 監視しておいたほうが良良い項⽬目 •  AWS  limits •  ELBインスタンス数 •  SES送信制限 classmethod.jp 58
  59. 59. AWS  limits •  上限緩和にはAWSサポート申請が必要 – EC2の起動上限 •  デフォルト:5 – EIPの取得上限 •  デフォルト:5 •  AWS  APIで現在の上限値を取得可能なも のがある classmethod.jp 59
  60. 60. AWS  limits [ec2-‐‑‒user@ec2  ~∼]$  aws  ec2  describe-‐‑‒account-‐‑‒attributes ACCOUNTATTRIBUTES max-‐‑‒instances ATTRIBUTEVALUES   20 ACCOUNTATTRIBUTES vpc-‐‑‒max-‐‑‒elastic-‐‑‒ips ATTRIBUTEVALUES 20 classmethod.jp 60 現在のEC2インスタンス数やEIP取得数と⽐比較して、 上限に近くなったら発⽕火するトリガーを設定
  61. 61. ELBインスタンス数 •  ELBは負荷状況によりスケールアウト –  暖気申請により事前にスケールアウトも可能 •  スケールアウト後のELBインスタンス数は ネットワークインターフェース(ENI)の数で 確認できる classmethod.jp 61
  62. 62. ELBインスタンス数 ec2  =  AWS::EC2.new() if  params['f_̲key'].nil?    eni  =  ec2.network_̲interfaces else    eni  =  ec2.network_̲interfaces.filter(params['f_̲key'],   params['f_̲value']) end case  params['mode']    when  'count'  then        puts  eni.count end classmethod.jp 62
  63. 63. SES送信制限 •  SESには24時間で送られるメール数に制 限がある •  制限値と現在の送信数はAPIから取得可能 classmethod.jp 63
  64. 64. SES送信制限 [ec2-‐‑‒user@ec2  ~∼]$  aws  ses  get-‐‑‒send-‐‑‒quota {        "Max24HourSend":  50000.0,        "SentLast24Hours":  4.0,        "MaxSendRate":  14.0 } classmethod.jp 64
  65. 65. ホストの⾃自動登録 classmethod.jp 65
  66. 66. ホストの⾃自動登録 classmethod.jp 66 •  頻繁なホストの交換 – AutoScailng – Immutable  Infrastructure •  ホスト数の増加 •  ⼿手間が増える •  ホスト設定漏漏れの可能性
  67. 67. ホストの⾃自動登録⽅方法 classmethod.jp 67 •  ネットワークディスカバリ –  負荷が⾼高いため利利⽤用しない •  アクティブエージェントの⾃自動登録 –  今回の対象 •  Zabbix  APIとAWS  APIの連携 –  今回は対象外
  68. 68. ネットワークディスカバリ classmethod.jp 68 •  Zabbixサーバが指定したIP範囲をスキャン •  応答があったホストを新規登録
  69. 69. アクティブエージェント⾃自動登録 classmethod.jp 69 •  ZabbixエージェントがZabbixサーバに チェック要求 •  エージェントから送られたホスト名がまだ登 録されていない場合、ホスト登録
  70. 70. EC2インスタンスの⾃自動登録 classmethod.jp 70 •  アクティブエージェント⾃自動登録を利利⽤用 –  ネットワークディスカバリの場合、IP範囲が広く ⾼高負荷になりがち
  71. 71. EC2インスタンスの⾃自動登録 classmethod.jp 71 •  ZabbixサーバはZabbixエージェントからの 通信を10051番ポートで待ち受け •  Zabbixに登録されるホスト名に注意 –  ⾃自動登録時ホスト名はZabbixエージェントの設定値 –  ホスト名はZabbix内で⼀一意である必要がある
  72. 72. Zabbixエージェントの設定 [ec2-‐‑‒user@ec2  ~∼]$  cat  /etc/zabbix/zabbix_̲agentd.conf #  This  is  a  config  file  for  the  Zabbix  agent  daemon  (Unix) #  To  get  more  information  about  Zabbix,  visit  http://www.zabbix.com #  (中略略) Server=10.255.0.158 ServerActive=10.255.0.158 #  (中略略) #  Hostname= HostnameItem=system.hostname classmethod.jp 72 Zabbixのホスト名にOSのhostnameを利利⽤用する
  73. 73. OSホスト名の設定 classmethod.jp 73 •  (案件名)_̲ec2_̲(種別)_̲(インスタンスID) – 例例:demo01_̲ec2_̲web_̲i-‐‑‒5117d3a4 •  起動スクリプトによりZabbixエージェン ト起動前にホスト名が設定されるように する
  74. 74. 起動スクリプト例例 [ec2-‐‑‒user@ec2  ~∼]$  cat  /etc/init.d/set-‐‑‒hostname #!/bin/bash # #  chkconfig:  2345  60  40 # HOST_̲PREFIX="demo01_̲ec2_̲web" INSTANCE_̲ID=`̀/usr/bin/curl  169.254.169.254/latest/meta-‐‑‒data/ instance-‐‑‒id  2>/dev/null`̀ HOST_̲NAME="${HOST_̲PREFIX}_̲${INSTANCE_̲ID}" /bin/hostname  ${HOST_̲NAME} [ec2-‐‑‒user@ec2  ~∼]$  sudo  chkconfig  set-‐‑‒hostname  on classmethod.jp 74
  75. 75. アクションの設定 1.  ホスト名に案件名が含まれるEC2インスタン スをホスト登録 2.  ホスト名からインスタンスの役割を判断し適 切切なグループとテンプレートを割り当てる classmethod.jp 75
  76. 76. Zabbixサーバの監視 classmethod.jp 76
  77. 77. Zabbixサーバ⾃自体の監視 •  Zabbixサーバ停⽌止の場合、アラート⾶飛ばない –  Zabbixとは別の仕組みで監視が必要 •  Route53のヘルスチェック機能による監視 –  10051番ポート •  他の監視サービスからの監視 –  NewRelic –  Mackerel –  ... classmethod.jp 77
  78. 78. Route53のヘルスチェック機能 classmethod.jp 78
  79. 79. Route53のヘルスチェック機能 classmethod.jp 79 •  世界中のAWSヘルスチェックサーバからポート監視 •  10051ポートへの接続失敗時にSNSでメール通知 •  アクセス元は下記コマンドで確認可能 –  たまに変更更があるのでメンテナンスが必要 [ec2-‐‑‒user@zabbix-‐‑‒demo  ~∼]$  aws  route53  get-‐‑‒checker-‐‑‒ip-‐‑‒ranges {        "CheckerIpRanges":  [                "54.183.255.128/26",                "54.228.16.0/26",                "54.232.40.64/26",                "54.241.32.64/26",                ………
  80. 80. Route53のヘルスチェック機能 classmethod.jp 80
  81. 81. #cmdevio2015 ご清聴ありがとうございました。 このスライドは後⽇日公開いたします。 H-‐‑‒2

×