Your SlideShare is downloading. ×
ZabbixによるAWS監視のコツ
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply
We'd love to hear what you think

By taking this short survey, you'll help us make SlideShare better. It shouldn't take more than a few minutes.

Start Survey

ZabbixによるAWS監視のコツ

1,337
views

Published on

Developers.IO 2015の発表資料です

Developers.IO 2015の発表資料です

Published in: Engineering

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

No Downloads
Views
Total Views
1,337
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
15
Comments
0
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. ZabbixによるAWS監視のコツ クラスメソッド株式会社 横⽥田  慎介 classmethod.jp 1 H-‐‑‒2  #cmdevioH 2015/03/29
  • 2. ⽬目次 •  Zabbix概要 •  Zabbix利利⽤用例例 •  CloudWatchとの連携 •  CloudWatch以外の監視項⽬目 •  ホストの⾃自動登録 •  Zabbixサーバの監視 classmethod.jp 2
  • 3. Zabbix概要 classmethod.jp 3
  • 4. ホスト •  監視対象のデバイス – 例例:demo-‐‑‒web01 •  ホスト名とホストを特定するための情報 を指定する – ホスト名はZabbix内で⼀一意 – 共⽤用Zabbixの場合は「web01」等は避ける •  1つ以上のホストグループに属する classmethod.jp 4
  • 5. ホストグループ •  ホストをまとめるもの –  例例:DEMO_̲WEB •  ホストは1つ以上のホストグループに所属 –  いくつでも良良い •  ホストグループ単位で扱われることが多い –  ダッシュボードでのステータス⼀一覧 –  最新の監視データ –  Zabbixユーザへのアクセス制限 classmethod.jp 5
  • 6. ホストグループ classmethod.jp 6 HostHostHost Host Host
  • 7. classmethod.jp 7 ダッシュボード画⾯面
  • 8. アイテム •  監視項⽬目 –  例例:Available  memory –  どのような情報を(アイテムキー) –  どの間隔で(更更新間隔)取得し、 –  取得したデータをどのくらいの期間保存するか (ヒストリ保存期間)指定する •  ホストやテンプレートに属する –  例例えばウェブ監視等のデバイスに紐紐付かない監視 項⽬目の場合も、アイテムを所属させるためのダ ミーのホストが必要 classmethod.jp 8
  • 9. アイテム classmethod.jp 9 Host Host Item CPU Item Mem Item CPU Item URL Group
  • 10. アイテム •  任意のスクリプト結果を監視値として利利⽤用できる –  AWS  APIから得た値 •  Zabbixで定義済みのものがあればそれを使う –  例例:vm.memory.size[available] •  無ければ他の⽅方法を検討する –  SNMP –  JMX –  外部チェック(任意のスクリプトを実⾏行行) •  似たものは「アプリケーション」という単位でま とめることができる classmethod.jp 10
  • 11. トリガー •  アイテムが収集したデータを「評価」し、 システム状態を表⽰示する論論理理条件式 – 例例: {web01:vm.memory.size[available].last(0 )}  <  20M •  状態として「OK」と「障害」を持つ – 障害の深刻度度を設定できる – 「情報」から「致命的な障害」まで classmethod.jp 11
  • 12. トリガー classmethod.jp 12 Host Host Item CPU Item Mem Item CPU Trig <20% Trig >60% Trig >90% Group
  • 13. トリガー •  任意の時点のデータを利利⽤用できる – 例例:30⽇日後にディスク枯渇 – {db01:vfs.fs.size[/,pfree].delta(1d)}  *  30   >  {db01:vfs.fs.size[/,pfree].last(0)} classmethod.jp 13
  • 14. トリガー •  異異なるアイテムのデータを利利⽤用できる – 例例:冗⻑⾧長化されたNTPサーバが停⽌止 – {ntp01:proc.num[ntpd].last(0)}   +  {ntp02:proc.num[ntpd].last(0)}  =  0 classmethod.jp 14
  • 15. トリガー classmethod.jp 15 Host Host Item CPU Item Mem Item CPU Trig <20% Trig >60% Trig >90% >80% Group
  • 16. トリガー •  状態変更更時にはイベントが発⽣生する – イベントの結果、実⾏行行されるアクションを定 義できる •  ダッシュボードには障害の数と⼀一覧が表 ⽰示される classmethod.jp 16
  • 17. アクション •  イベントの結果として何らかの処理理を⾏行行 う – 例例:Report  problems  to  Zabbix  admins •  メッセージの送信 •  コマンドの実⾏行行 classmethod.jp 17
  • 18. テンプレート •  アイテムやトリガーの設定をテンプレー ト化することで、同様の監視設定を複数 のホストで使い回しできる •  テンプレートは、ホストや他のテンプ レートにリンクできる – ホストグループにはリンクできない classmethod.jp 18
  • 19. テンプレート無し classmethod.jp 19 Host Host Item CPU Item Mem Trig <20% Trig >90% Group Item CPU Item Mem Trig <20% Trig >90%
  • 20. テンプレート化 classmethod.jp 20 Host Host Item CPU Item Mem Trig <20% Trig >90% TemplateGroup
  • 21. テンプレート •  リンクは多対多 – EC2上のウェブサーバの場合、下記をリンク •  EC2テンプレート •  Linuxテンプレート •  Webサーバテンプレート classmethod.jp 21
  • 22. テンプレート classmethod.jp 22 Host Group Host I T Template I T Template I T Template
  • 23. Zabbix利利⽤用例例 classmethod.jp 23
  • 24. 前提 •  複数の案件を監視 •  ユーザはお客様と弊社運⽤用チーム classmethod.jp 24
  • 25. classmethod.jp 25 DEMO01_ALL DEMO01_ELB DEMO01_EC2 DEMO01_RDS ホストグループ設計
  • 26. ホストグループ⽅方針 •  案件名がプレフィックス –  ホストグループ名の重複防⽌止 •  全ホストは案件⽤用ホストグループに所属 –  (案件名)_̲ALL •  その他、1つ以上のホストグループに所属 –  たくさん所属させてもOK •  AWSサービス:(案件名)_̲EC2 •  機能:(案件名)_̲WEB •  開発会社:(案件名)_̲(会社名) •  メンテナンス期間:(案件名)_̲MEINTENANCE01 classmethod.jp 26
  • 27. テンプレート設計 classmethod.jp 27 EC2 RDS ALL I T EC2 DB I T RDS  Base I T Web I T Linux
  • 28. テンプレート設計 •  ホストにリンクするテンプレートは1つ – 例例:Template_̲(案件名)_̲Web •  その1つに必要な全テンプレートをリンク – Template_̲(案件名)_̲Web •  Template_̲(案件名)_̲Base •  Template_̲AWS_̲EC2 •  Template  OS  Linux classmethod.jp 28
  • 29. テンプレート設計 classmethod.jp 29 EC2 RDS ALL I T EC2 DB I T RDS  Base I T Web I T Linux
  • 30. テンプレート設計 •  案件⽤用のテンプレートを作成 – Template_̲(案件名)_̲Base •  案件固有のマクロを管理理するため •  案件/役割/ホスト固有の設定はマクロで – トリガーでのマクロ利利⽤用 {web:vm.memory.size[available].last(0)}   <  {$TRIGGER_̲THRESHOLD_̲XXX} classmethod.jp 30
  • 31. テンプレート設計 classmethod.jp 31 EC2 ALL I T EC2  Base I T Web I T Linux CPU  >  90%CPU  >  60% {$ROLE_̲ARN} 閾値上書き 案件共通の値
  • 32. CloudWatchとの連携 classmethod.jp 32
  • 33. CloudWatchとは •  AWS  クラウドリソースの監視サービス –  EC2:CPU使⽤用率率率 –  RDS:ディスク残量量 •  監視範囲はAWSの責任範囲と近似 –  EC2のOS以上のリソース、例例えばメモリ、ディ スク使⽤用量量は監視範囲外 –  RDSはマネージドサービスなのでメモリ、ディ スクも監視対象 •  データの保存期間は2週間 classmethod.jp 33
  • 34. CloudWatchグラフ classmethod.jp 34
  • 35. ZabbixとCloudWatchの連携 •  連携の⽬目的 – CloudWatchの監視対象とZabbixの監視対象 を統合管理理 – リソース状況の可視性向上 – 2週間より前のCloudWatchデータを保存 •  連携の⽅方法 – Zabbixアイテムの外部チェックを利利⽤用 classmethod.jp 35
  • 36. アイテム設定(外部チェック) classmethod.jp 36 cw[-‐‑‒-‐‑‒metric,CPUUtilizaion,  ....] スクリプト名[引数] 任意のスクリプトを実⾏行行可能
  • 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. 外部スクリプト引数と返り値 [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. CloudWatchとZabbix⽐比較 classmethod.jp 39
  • 40. テンプレート化 classmethod.jp 40
  • 41. ユーザーマクロの利利⽤用 classmethod.jp 41
  • 42. ユーザーマクロの利利⽤用 classmethod.jp 42
  • 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. ホストスクリーン classmethod.jp 44 複数のグラフを並べて表⽰示
  • 45. ホストスクリーン classmethod.jp 45
  • 46. EC2のディスクメトリクス •  EC2 – DiskRead(Write)Ops – DiskRead(Write)Bytes •  エフェメラルディスク⽤用メトリクス – EC2のローカルストレージ – 再起動でデータが消える – 利利⽤用しないことも多い classmethod.jp 46
  • 47. EC2:  Disk* classmethod.jp 47
  • 48. EBS:  Volume* classmethod.jp 48
  • 49. EBSメトリクス classmethod.jp 49 •  EC2にアタッチされたEBSを監視 •  ZabbixのLLDでアイテムの⾃自動登録 – EC2  APIを利利⽤用しEBSの情報を取得
  • 50. ローレベルディスカバリ classmethod.jp 50 discover_̲ebs[-‐‑‒-‐‑‒hostname,{HOST.HOST},  ....] ホスト名の末尾はインスタンスID 例例:demo01_̲ec2_̲web_̲i-‐‑‒5117d3a4
  • 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. 外部スクリプト返り値 [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. アイテムのプロトタイプ classmethod.jp 53 cw[...,  -‐‑‒-‐‑‒dim_̲values{#VOLUME_̲ID},  ....] •  LLDの返り値があった場合、プロトタイプ を元にアイテムが⾃自動登録される
  • 54. テンプレート化しEC2にリンク classmethod.jp 54 I T EC2  Region I T Web I T EBS
  • 55. LLDで追加されたアイテム classmethod.jp 55
  • 56. LLDで追加されたアイテム classmethod.jp 56
  • 57. CloudWach以外の監視項⽬目 classmethod.jp 57
  • 58. 監視しておいたほうが良良い項⽬目 •  AWS  limits •  ELBインスタンス数 •  SES送信制限 classmethod.jp 58
  • 59. AWS  limits •  上限緩和にはAWSサポート申請が必要 – EC2の起動上限 •  デフォルト:5 – EIPの取得上限 •  デフォルト:5 •  AWS  APIで現在の上限値を取得可能なも のがある classmethod.jp 59
  • 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. ELBインスタンス数 •  ELBは負荷状況によりスケールアウト –  暖気申請により事前にスケールアウトも可能 •  スケールアウト後のELBインスタンス数は ネットワークインターフェース(ENI)の数で 確認できる classmethod.jp 61
  • 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. SES送信制限 •  SESには24時間で送られるメール数に制 限がある •  制限値と現在の送信数はAPIから取得可能 classmethod.jp 63
  • 64. SES送信制限 [ec2-‐‑‒user@ec2  ~∼]$  aws  ses  get-‐‑‒send-‐‑‒quota {        "Max24HourSend":  50000.0,        "SentLast24Hours":  4.0,        "MaxSendRate":  14.0 } classmethod.jp 64
  • 65. ホストの⾃自動登録 classmethod.jp 65
  • 66. ホストの⾃自動登録 classmethod.jp 66 •  頻繁なホストの交換 – AutoScailng – Immutable  Infrastructure •  ホスト数の増加 •  ⼿手間が増える •  ホスト設定漏漏れの可能性
  • 67. ホストの⾃自動登録⽅方法 classmethod.jp 67 •  ネットワークディスカバリ –  負荷が⾼高いため利利⽤用しない •  アクティブエージェントの⾃自動登録 –  今回の対象 •  Zabbix  APIとAWS  APIの連携 –  今回は対象外
  • 68. ネットワークディスカバリ classmethod.jp 68 •  Zabbixサーバが指定したIP範囲をスキャン •  応答があったホストを新規登録
  • 69. アクティブエージェント⾃自動登録 classmethod.jp 69 •  ZabbixエージェントがZabbixサーバに チェック要求 •  エージェントから送られたホスト名がまだ登 録されていない場合、ホスト登録
  • 70. EC2インスタンスの⾃自動登録 classmethod.jp 70 •  アクティブエージェント⾃自動登録を利利⽤用 –  ネットワークディスカバリの場合、IP範囲が広く ⾼高負荷になりがち
  • 71. EC2インスタンスの⾃自動登録 classmethod.jp 71 •  ZabbixサーバはZabbixエージェントからの 通信を10051番ポートで待ち受け •  Zabbixに登録されるホスト名に注意 –  ⾃自動登録時ホスト名はZabbixエージェントの設定値 –  ホスト名はZabbix内で⼀一意である必要がある
  • 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. OSホスト名の設定 classmethod.jp 73 •  (案件名)_̲ec2_̲(種別)_̲(インスタンスID) – 例例:demo01_̲ec2_̲web_̲i-‐‑‒5117d3a4 •  起動スクリプトによりZabbixエージェン ト起動前にホスト名が設定されるように する
  • 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. アクションの設定 1.  ホスト名に案件名が含まれるEC2インスタン スをホスト登録 2.  ホスト名からインスタンスの役割を判断し適 切切なグループとテンプレートを割り当てる classmethod.jp 75
  • 76. Zabbixサーバの監視 classmethod.jp 76
  • 77. Zabbixサーバ⾃自体の監視 •  Zabbixサーバ停⽌止の場合、アラート⾶飛ばない –  Zabbixとは別の仕組みで監視が必要 •  Route53のヘルスチェック機能による監視 –  10051番ポート •  他の監視サービスからの監視 –  NewRelic –  Mackerel –  ... classmethod.jp 77
  • 78. Route53のヘルスチェック機能 classmethod.jp 78
  • 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. Route53のヘルスチェック機能 classmethod.jp 80
  • 81. #cmdevio2015 ご清聴ありがとうございました。 このスライドは後⽇日公開いたします。 H-‐‑‒2