ZabbixでDockerも監視

360

Published on

ZABBIX-JPのOSC 2015 Tokyo/Fallでの発表資料です。

Published in: Software
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
360
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
14
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

ZabbixでDockerも監視

  1. 1. ZabbixでDockerも 監視してみよう 2015/10/24 @OSC 2015 TOKYO/FALL ZABBIX-JP 田中 敦
  2. 2. 自己紹介  名前 田中 敦(たなか あつし) Twitter: @atanaka7  所属 ZABBIX-JP(統合監視ツールZabbixの日本のコミュ ニティ) 副代表 普段は某SIerのエンジニア  生息地 ZABBIX-JPのサイト(http://www.zabbix.jp/) 2
  3. 3.  Zabbixとは?  動的に変化するインフラ環境  監視項目増大による負荷上昇  Dockerとは?  ZabbixでDocker環境を監視  Docker環境監視の実装例  まとめ 今日のアジェンダ 3
  4. 4. Zabbixとは? 4
  5. 5. サーバーやネットワークの監視なら ◎みんな大好き(大嫌い?)Zabbix! 5
  6. 6. Zabbixとは  オープンソースの統合監視ツール  ヨーロッパにあるラトビアという国でZabbix SIAという会社が開発  初期バージョンがリリースされて約10年経過  監視用エージェントを各サーバにインストールして監視  UNIX、Linux、Windowsなどの各OSに対応したエージェントあり  エージェントがなくても、SNMP、ssh、telnet、IPMI、JMXなどでも監視可  監視の設定はWebブラウザからできる  監視設定にはテンプレートという監視設定パターンをまとめておくと、新し い監視対象のサーバが追加されたら紐づけするだけで監視開始  監視のために取得した各種データは、グラフ化して傾向を把握しやすい  障害検知時に、メールやメッセージを送るだけではなく、独自のスクリプト を実行可能  マルチテナントの機能を利用して、同じZabbixサーバ上で利用者を分離可能  などなどなどなどなどなどなど… 6
  7. 7. Zabbixの画面イメージ 7
  8. 8. 動的に変化するインフラ環境 8
  9. 9.  様々なクラウドやコンテナ技術が利用しやすくなり、 活用されることによって、様々なサービスや機能を 実現するために、色々な役割のサーバーを短期間で 構築してサービスを開始することができるように なった。  以前は、物理的なサーバーの発注から納品までの時 間が1週間とか数か月とかかかっていたのが、クラウ ドを利用すれば、Webブラウザ上から数分で利用開 始ができる。 クラウドやコンテナ技術の発展 9
  10. 10.  クラウドを利用することによって、監視しなければ ならないサーバーの数が増減する  さらにDockerなどのコンテナ技術を活用しはじめる と、各コンテナの状態の把握もしなければならない  これらの監視対象が動的に増減するような環境を監 視しなければならない 動的に増減する監視対象 10
  11. 11. 監視設定面倒! ☹え~、またサーバー追加したの? ☹コンテナごとに色々監視設定するの面倒じゃん。 ☹サーバーやコンテナを追加するたび監視設定の操 作しないといけないの? ☹サーバーやコンテナを削除したときはどうする の? ◎そんなあなたに「自動登録」と「ローレベルディ スカバリ」 11
  12. 12.  サーバーを追加して、それを監視対象としてZabbixサーバー上に 自動登録する方法に関しては、OSC 2015 Tokyo/Springで発表した 「全自動Zabbix」を参照してください。  「全自動Zabbix 2.2&2.4」 http://www.slideshare.net/qryuu/zabbix2224  Zabbixサーバー上に「自動登録」の設定を行って、Zabbixエー ジェントの設定を工夫すれば、Zabbixエージェントを起動後に、 自動的に監視対象のサーバーとしてZabbixサーバー上に登録して、 それぞれのサーバーの役割に合わせた監視を開始することができま す。 自動登録とは 12
  13. 13. ローレベルディスカバリとは  Zabbix 2.0で実装された機能  JSONフォーマットで監視対象のリストを返すものを用意すれ ば、それぞれに対して監視項目を自動生成可  サーバ上のネットワークインターフェースやマウントされた ディスクの台数が異なる場合でも、共通の監視設定で監視で きるようにすることが元々の機能  この機能を応用することで、動的に対象の数が変化するもの であっても、自動的に監視設定の追加や削除をすることが可 能 13
  14. 14. (例)ローレベルディスカバリがないと 14 ①サーバーにハードディスクを追加(手動) ②OSにハードディスクを認識させマウントする(手動) ③マウントしたハードディスク用の監視項目を作成する(手動) ④作成した監視項目に対する閾値を設定する(手動) ⑤作成した監視項目に対するグラフを作成する(手動) サーバーごとに固有のマウントポイントであったりサイズが異なったり する場合があるので、汎用的なテンプレートとして事前準備できない。 マウントポイント : / マウントポイント : /data
  15. 15. (例)ローレベルディスカバリがあると 15 マウントポイント : / マウントポイント : /data ①サーバーにハードディスクを追加(手動) ②OSにハードディスクを認識させマウントする(手動) ③マウントされたハードディスクをZabbixエージェント が認識して、事前に設定しておいたディスカバリのルー ルによって、追加されたディスクに対応した監視項目、 閾値(トリガー)、グラフが自動生成されて、監視が開始 される(自動) 事前に用意してあったテンプレート上のディスカバリのルールが自動で 適用されることで、マウントされたディスクの増減があっても手動での 設定変更が不要。 事前準備:サーバーにディスカバリルールを含むテンプ レートを適用しておく
  16. 16. ローレベルディスカバリの実装 16 Zabbixサーバー Zabbixエージェント ①監視対象リストを要求 ②JSON形式でリストを返却 Zabbix用 データベース ③リストを元にアイテムなどを自動生成 ④生成されたアイテム情報などを取得 ⑤アイテムデータの取得 { "data":[ {"{#FSNAME}":"/","{#FSTYPE}":"rootfs"}, {"{#FSNAME}":"/proc","{#FSTYPE}":"proc"}, {"{#FSNAME}":"/sys","{#FSTYPE}":"sysfs"}, {"{#FSNAME}":"/dev","{#FSTYPE}":"devtmpfs"}, {"{#FSNAME}":"/dev/pts","{#FSTYPE}":"devpts"}, {"{#FSNAME}":"/dev/shm","{#FSTYPE}":"tmpfs"}, {"{#FSNAME}":"/","{#FSTYPE}":"ext4"}, {"{#FSNAME}":"/proc/bus/usb","{#FSTYPE}":"usbfs"}, {"{#FSNAME}":"/boot","{#FSTYPE}":"ext4"}, {"{#FSNAME}":"/proc/sys/fs/binfmt_misc","{#FSTYPE}":"binfmt_misc"} ] }
  17. 17. 監視項目増大による負荷上昇 17
  18. 18.  自動登録やローレベルディスカバリの機能を利用することで、サーバーや コンテナの数が増減しても、自動的に監視設定を追加したり削除したりす ることができる  しかし、監視対象の数が増加してきた場合、Zabbixの標準機能で取得で きないサーバーやコンテナの状態情報(メトリクス)が多いと、それらの値 を取得するための処理の負荷が上昇する  例えば、スクリプトを実行して値を取得するような処理が多い場合、その スクリプトを実行するためにプロセスを生成して、シェルを動かして、さ らにその上でスクリプトの処理をして、となるので、数が増えるとサー バーへの負荷が高い 動的に監視対象を抽出できても 18
  19. 19. パフォーマンス悪そう ☹コンテナのステータス情報の値を取得するたびに、 Docker関連のコマンドを実行したり、cgroup関連 の仮想ファイルから値を切り出すコマンドやスクリ プトを実行するんでしょ? ☹プロセスの起動終了って数が増えるとそれなりの負 荷になるんだよ。わかってる? ☹パフォーマンス悪そ~。 ◎ そんなあなたにZabbixの「ローダブルモジュール」 19
  20. 20. ローダブルモジュールとは  Zabbix 2.2から用意された新機能  C言語等で生成されたライブラリを動的にリンクして呼び出 す機能  多数の値を取得する際、UserParameterなどの外部コマンド やスクリプトを実行する方法では子プロセス起動と終了の処 理がボトルネックに  ローダブルモジュールを利用すれば、呼び出し時にプロセス を別途起動することが不要  値取得の負荷を軽減し、より高パフォーマンスな情報収集が 可能に! 20
  21. 21. スクリプト呼び出し時の動作 21 Zabbix サーバー Zabbix エージェント スクリプト 実行用 プロセス ①値取得要求 ②プロセスの起動 ③値の返却 ④プロセスの終了⑤値の返却 プロセスを起動終了させる処理が多くなってくると、 CPUへの負荷が増大する。
  22. 22. ローダブルモジュールでの動作 22 Zabbix サーバー Zabbix エージェント ①値取得要求 ③値の返却 ライブラリの関数の呼び出しだけで値を取得できるので、 CPUへの負荷が低く、応答速度も速い。 ローダブル モジュール ②関数呼び出し .soファイル (WindowsならDLL的なもの) 注:UNIX系のみ利用可
  23. 23. Dockerとは? 23
  24. 24.  Linux上では、以前からコンテナと呼ばれるOS上を論理的に 分けて処理を実行される機能が用意されていた  しかし、それを使いこなすことが難しかったため、あまり普 及してこなかった  Dockerは、コンテナ技術を簡単に利用できるように、コンテ ナとして機能を簡単に実装させたり、コンテナ同士や他の サーバとのネットワーク接続を設定することができる Docker 24
  25. 25. Dockerの構成イメージ 25 物理サーバ OS or Hypervisor 仮想マシン OS アプリケーション 仮想マシン OS アプリケーション 物理サーバ OS アプリケーション アプリケーションDockerサービス 仮想化環境 Docker環境
  26. 26. Dockerの特徴 26  Dockerfileというファイルに、コンテナの内容と構築する手 順を記述しておくことで、同じ内容のコンテナを簡単に用意 できる。  コンテナのイメージをローカルのハードディスクにキャッ シュできるので、同じイメージを利用するのであれば、同じ 内容のコンテナを新規であっても数秒で起動できる。  コンテナ上で稼働するアプリケーションであれば、可搬性が 高くなり、開発環境と本番環境での環境に依存する影響を軽 減できる。
  27. 27. ZabbixでDocker環境を監視 27
  28. 28. 構想はあったものの...  ローレベルディスカバリやローダブルモジュールの機能を組 み合わせて監視用のテンプレートを作成する構想はありまし た。  調査もしていて、どうやって各コンテナのリソース状態を取 得するかもおおよそ特定できていました。  例:Runtime Metrics http://docs.docker.com/articles/runmetrics/  作らなきゃな... 28
  29. 29. そうこうしているうちに  作ってくれた人が公開してくれました。 ◎ 「Zabbix Docker Monitoring」 https://github.com/monitoringartist/Zabbix- Docker-Monitoring 29
  30. 30. これで何ができる  これを利用すれば、以下のようなことがさくっと実現可  作成されたコンテナのリストを自動取得  ローレベルディスカバリを利用して、各コンテナのリソー ス情報を収集するアイテムが自動生成  ローダブルモジュールとして作られているので、それぞれ の値取得はC言語のライブラリから直接取得(高速!) 30
  31. 31. こんな感じ  取得できるリソース情報としては以下のようなものが取得で きます。  コンテナの起動状態  メモリ利用状況、スワップ発生量  CPU利用状況  ブロックデバイスに対するI/O  ネットワークトラフィック(実験的実装) 31
  32. 32. グラフも  Zabbixなので、取得した情報はもちろんグラフに。 32
  33. 33. ① Dockerが稼働しているサーバーにZabbixエージェントをインストールして、その後 以下のコマンドを実行する。 ② 先のリポジトリから利用している環境に合ったライブラリを取得、もしくはソースを ダウンロードして、ライブラリを自分でビルドし、モジュール用ディレクトリ (/usr/lib/zabbix/modules)にコピーする。 ③ 通常のZabbixエージェントの設定(Hostname、Server、ServerActiveなど)を行う。 ④ さらに、zabbix_agentd.confに以下の設定を追加する。 ⑤ 設定が終わったら、Zabbixエージェントを起動または再起動 ⑥ Zabbixサーバ側には、先のリポジトリからダウンロードしたテンプレートをインポー トして、監視対象のホストに紐づければ監視開始。 インストール手順 (CentOS 7上) 33 LoadModulePath=/usr/lib/zabbix/modules LoadModule=zabbix_module_docker.so # groupadd docker # chown root:docker /var/run/docker.sock # usermod -a -G docker zabbix
  34. 34. まとめ  Zabbixなら 「ローレベルディスカバリ」で監視対象の増減に 自動対応 「ローダブルモジュール」を活用して監視用の値 取得の負荷を下げ、パフォーマンスを改善 34
  35. 35. いやいやZabbixは... ☹見づらい! ☹使いづらい! ☹UIが古い! ◎ そんなあなたに「Zabbix datasource for Grafana dashboard」! https://github.com/alexanderzobnin/grafana- zabbix 35
  36. 36. こんな感じ  こんな感じで見ることができます。 36
  37. 37. Zabbix 3.0について 37
  38. 38.  先日(2015/09/11-12)のZabbix Conference 2015 @ラトビア でも発表がありました が、現在、鋭意開発中です。  現時点では、Zabbix 3.0.0alpha3がリリースされています。  主な実装済機能 (2015/10/24現在)  SMTP authentication (これまでは認証なし25番ポート固定)  housekeeperの手動実行 (自分の好きなタイミングで実行可)  予測値を取得する関数の追加 (線形、多項式、指数、対数、累乗近似などを利用)  アイテムの取得間隔のカスタマイズ (○時00分ちょうどなど指定可)  各コンポーネント間の通信の暗号化と認証 (PSK、証明書などTLS 1.2に対応)  主な実装予定機能  Webインターフェースのデザインと内部実装の改善 Zabbix 3.0最新情報 38
  39. 39. Zabbix 3.0の画面イメージ 39
  40. 40.  PHPのバージョンは5.4以降が必須  libcurlのバージョンが古いとSMTP authentication利用不可 (7.20.0以上で利用可)  IE 8はサポート対象から削除 ※ これは、アルファ版の時点(2015/10/24)での情報ですので、 最終的なリリースバージョンでは変更される可能性がありま す。 Zabbix 3.0利用時の注意点 40
  41. 41. おわり  ご清聴いただきありがとうございました。 41  本資料内で利用させて頂いた各プロダクト名やサービス名などは、 各社もしくは各団体の商標または登録商標です。
  42. 42. おまけ ☹ Zabbixがさぁ、CentOS 7.1.1503で起動できないんだけど。 ◎ CentOS 7.1のベースとなっているRHEL 7.1に不具合があ りました。 ◎ 7.1.1503リリース後に修正されたtrousersのパッケージ (trousers-0.3.11.2-4)がリリースされてますので、必ず最新 のバージョンに更新してください。 42
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×