Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~

912 views

Published on

2019/5/29 ニフクラミートアップでの発表資料です。
Zabbixを使ったコンテナ監視やZabbix4.2の最新機能を紹介。

Published in: Technology
  • Be the first to comment

Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~

  1. 1. Zabbixを徹底活用してみよう
   ~4.2の最新情報もご紹介~
 
 池田 大輔

  2. 2. いけだ    だいすけ
 池田 大輔
 [所属]
  TIS株式会社 IT基盤エンジニアリング企画室
  日本Zabbixユーザ会運営スタッフ
 [興味・関心]
  システム運用の効率化・改善
  SRE,監視,ジョブ管理,構成管理 等
 [技術要素]
  Zabbix,JobScheduler,Ansible,fluentd,Neo4j
  Elasticsearch,InfluxDB,Python,Golang等々
 @ike_dai ikedai ike-dai ike_dai 2
  3. 3. 最近の取り組み
 システム障害時の調査作業効率化を目指して
 
 運用情報のデータ分析基盤
 「運用レコメンドプラットフォーム」
 開発中
 
 ※6月のInteropで参考出展予定なので
  気になる方はお越しください
 
 3
  4. 4. 今日お話すること
 
 ・Zabbixの概要
 ・Zabbixを使ったクラウド・コンテナ監視
 - 何を監視するの?
 - 監視の手段とは?
 - Zabbixで実現するには?
 ・Zabbix 4.2の新機能の紹介
 
 4
  5. 5. Zabbixとは
 
 5 Zabbixは、OSSの統合監視ソフトウェア。基本はServer-Agent型。エージェントレス監視も幅広く可能。
 開発はラトビアのZabbix LLCが実施。日本ではZabbix Japan LLCが展開・サポート。
 監視可能項目
 ・死活監視
 ・リソース監視
 ・ログ監視
 ・URL監視
 ・DB監視
 ・Javaアプリケーション監視
 ・VMware監視
 ・コマンド実行監視
 等々
 対応OS
 ・Linux
 ・IBM AIX
 ・IBM Power8
 ・FreeBSD
 ・NetBSD
 ・OpenBSD
 ・HP-UX
 ・MAC OSX
 ・Solaris
 ・Windows (Zabbix Agentのみ)
 https://www.zabbix.com/documentation/4.2/doku.php
  6. 6. Zabbixの監視の仕組み
 6 snmp server
 snmp server
 SNMP Trap
 SNMP
 ssh server
 ssh server
 Zabbix Agent
 仮想化HV
 Cloud
 ODBC
 JMX
 Java
 アプリ
 仮想環境API
 クラウドAPI
 SSH接続による
 内部コマンド実行監視 
 ZabbixAgent
 による内部監視
 (リソースやログ等)
 ODBCによるDB監視
 Zabbix Java GatewayによるJava監視
 外部チェックスクリプト監視 
 によるAPI監視
 Zabbix Server
 エージェントレス監視 
 (ICMP ping監視やポート監視)
 DB

  7. 7. Zabbixの監視設定
 7 ホストグループ
 テンプレート
 ホスト
 アイテム
 トリガー
グラフ
 割当
 アイテム
 トリガー
グラフ
 ・
 ・
 ・
 ・
 ・
 ・
 アクション
 アクション
 アイテム
 トリガー
グラフ
 ホストグループ:Linux 
 ホスト:Server1
 テンプレート:LinuxServerテンプレート 
 
 アイテム:CPU使用率 
 トリガー:CPU使用率が5分間平均80%以上 
 アクション:管理者にアラートメール送信 
 
 例
 ホスト

  8. 8. Zabbixの得意なところ
 
 ・柔軟性の高さでいろんなケースに適用できる
 - 主要な監視手法はカバー
 - 監視したい情報を好きな形で取れる
 - 収集・検知・アクションが別々で設定できるのでいろいろ応用が効く
 
 ・パフォーマンスが良いのでかなり大規模でも使える
 - キャッシュメモリを使ったハイパフォーマンス化
 - より低レイヤーでの実装で軽量な処理
 
 8
  9. 9. Zabbixの弱いところ
 
 ・設定できることが多くてうまく設定しないと大変
 
 
 ・サーバという単位が根底にある
 - サーバレス・クラウド・サービス・アプリ監視のときに工夫が必要
 9
  10. 10. こんなケースには最適
 
 ・基本的なところから小さく始めつつ
  運用に合わせて徐々に監視高機能化させていくケース
 
 ・ハイブリッド環境含め様々な環境を集約監視したいケース
 
 10
  11. 11. Zabbixを使ってクラウド環境・コンテナ環境監視?
 11
  12. 12. 何を監視する?
 
 クラウドだろうがコンテナだろうが関係なく
 
 第一の観点は
 「システム利用者が正しく利用できる状態で
                 提供し続けられるか」
 
 12 ここがぶれると、
 何故監視しているのかわからなくなり、
 監視結果をどう評価していいのかわからなくなる

  13. 13. 何を監視する?
 
 - 直接的な影響の監視
 - レスポンスの正常性監視
 - レスポンス速度 等
 - 要因推定のために必要な情報の監視
 - 出力ログのError情報
 - 各種リソースの情報
 - 今後の影響を事前推測するために必要な情報の監視
 - リソースの推移傾向の情報
 - ログのWarning情報
 - サービスの利用状況の変化 (アクセス数変動)
 
 13
  14. 14. 考え方のベースは同じだが、
 それぞれの情報の取得方法や
 環境の特徴が異なるので必要となる情報が変わる
 14
  15. 15. 特徴の違い
 
 
 15 
 物理環境
 コンテナ仮想化環境 
 クラウドサービス
 責任範囲
 ほぼ全て自己責任
 ほぼ全て自己責任
 IaaS
  OSより下はサービス側 
 PaaS
  アプリ基盤以下はサービス側 
 複雑さ
 比較的シンプル
 物理・仮想基盤・コンテナと 多層になり複雑化
 様々なサービスの組み合わせの ケースが多くなると複雑化しがち 
 変化の激しさ
 物理的なものは
 ある程度固定
 コンテナ単位で見ると 
 非常に激しい
 従量課金のケースもあり起動・ 
 停止なども非常に激しい 

  16. 16. 特徴が変わることで運用のポリシーが変わる
 
 ・物理中心
   予め余裕を持った状態で動かし続ける
   徐々に変わる状況を監視し傾向を掴むのが重要
 ・仮想基盤が入ると
   利用状況に応じて適切なリソース配分を管理
   いつ、どういう状態でVMが動いていたかの把握がポイントに
 ・コンテナ化されると
   必要な時に必要なリソースを確保して動かす
   常に動き続けているなにかを監視するのではなく
   必要なリソースが確保できる状態がキープできているか
   必要とされているリソースが確保して稼働に成功したかが重要に
 16
  17. 17. 監視する手段は?
 
 
 17 
 物理環境
 コンテナ仮想化
 クラウド(IaaS)
 クラウド(PaaS)
 死活監視
 icmp ping監視等
 コンテナホスト管理情報 の確認
 
 icmp ping監視やクラウド管理 のmetrics確認
 クラウド管理のmetrics確 認
 外形監視
 Zabbix等のWebアクセ スによる監視
 Zabbix等のWebアクセス による監視
 Zabbix等のWebアクセスによる 監視
 クラウド管理のヘルスチェック 確認
 Zabbix等のWebアクセス による監視
 クラウド管理のヘルス チェック確認
 リソース監視
 SNMP、ZabbixAgent 等による監視
 コンテナホスト管理情報 の確認
 ホスト自体をSNMP、 ZabbixAgent等で監視
 Zabbix Agent等による監視
 クラウド管理のmetrics確認
 クラウド管理のmetrics確 認
 ログ監視
 Zabbix Agent等による 監視
 コンテナのロギング機能 でログを抽出して監視
 クラウド側で管理されているロ グ情報の確認
 ZabbixAgent等による監視
 クラウド側で管理されて いるログ情報の確認

  18. 18. 参考) コンテナ監視の手段いろいろ
 18 Dockerホスト
 コンテナ
 コンテナ
 Zabbix
 Agent
 cgroups
 ①
 Dockerホスト
 コンテナ
 コンテナ
 Zabbix
 Agent
 cgroups
 ②
 Dockerホスト
 コンテナ
 コンテナ
 Docker API
 cgroups
 ③
 volume
 Zabbix
 Server
 Zabbix
 Server
 Zabbix
 Server

  19. 19. Zabbixで行うには?
 
 ・スクリプト実行による監視
  Zabbix Server/Agent/Proxyから任意のスクリプトを実行した結果の監視が可能
  実行結果の出力がそのまま監視結果として登録されるシンプルな手法
  実行都度、スクリプト実行プロセスがforkされるため頻繁な実行には要注意
 
 
 
 
  
 19 
 使いどころ
  AWSのCloudWatch APIからデータを吸い上げて監視する
 ZabbixServer Zabbix Agent Zabbix Proxy 外部API
  20. 20. Zabbixで行うには?
 
 ・Zabbix Senderを使った値の登録
  外からpush型で監視結果を送り込む機能
  一回のスクリプト処理で複数の値を別々のアイテムに登録したい場合に便利
 
 
 
 
 
 
 
 20 
 使いどころ
 Amazon SNSで発行されたイベントの情報をLambda経由でZabbixに連携し、クラウド上 での発生イベントを統合監視
 ZabbixServer data { “value1”: 1234, “value2”: “error log” } ZabbixSender ZabbixSender
  21. 21. Zabbixで行うには?
 
 ・fluentdとの連携によるログ監視(Dockerのログ)
 コンテナは役目を終えたら消える ログも特に何もしなければ消える
 Dockerの場合、ロギング機能で取り出して管理が可能に
 21 ZabbixServer Dockerホスト
 logging driver
 json-file
 syslog
 fluentd
 コンテナ
 fluentd
 forward
 zabbix
 zabbix sender
  22. 22. Zabbixで行うには?
 
 ・HTTPエージェント監視と依存アイテム
  スクリプトを書かなくてもHTTPのリクエストを送付可能に
  GETやPOST、ヘッダーやリクエストボディも柔軟に指定可能
  受信したデータを依存アイテム+保存前処理で加工して監視が可能
  
  
 22 4.0新機能
 Zabbix
 外部API
HTTPエージェント
 アイテム
 依存アイテム
 依存アイテム
 JSONやXML等の応答 
取得した
 JSONやXMLの
 必要部分取り出し

  23. 23. 使用例) Docker Remote API
 23 HTTPエージェント
 アイテム
 URL: http://<DockerRemoteAPI URL>/containers/{id}/stats?stream=0
 METHOD: GET
 KEY: docker.containers.stats
 {
 "read": "2019-05-27T14:52:32.281222746Z",
 "preread": "2019-05-27T14:52:31.273499151Z",
 "pids_stats": {
 "current": 124
 },
 "blkio_stats": {
 ・・・
 "cpu_stats": {
 "cpu_usage": {
 "total_usage":59549976487,
 "percpu_usage": [
 16456996509,
 ・・・
 }
 
 監視結果
 依存アイテム
 マスターアイテムキー: docker.containers.stats
 KEY: container.cpu.usage
 保存前処理: JSON
 => $.cpu_stats.cpu_usage.total_usage
 
 59549976487
 監視結果

  24. 24. Zabbixで行うには?
 
 ・アグリゲーションアイテム
 24 ホストグループ: Docker Host A
 ホスト: Container1
 アイテム: container.cpu.usage 
 ホスト: Container2
 アイテム: container.cpu.usage 
 ホスト: ContainerN
 アイテム: container.cpu.usage 
 アグリゲーション
 アイテム
 KEY: grpsum[“Docker Host A”, “container.cpu.usage”, last] 
 
 
 Docker Host Aに所属するホストのcontainer.cpu.usageキーの 
 最新の監視結果のデータを合算した値を監視する 

  25. 25. Zabbixで行うには?
 
 ・イベント相関
 25 docker eventsの情報を監視 
 {“image”: “zabbix”, “Action”: “create”} 
 {“image”: “zabbix”, “Action”: “start”} 
 {“image”: “redmine”, “Action”: “stop”} 
 {“image”: “zabbix”, “Action”: “die”} 
 {“image”: “zabbix”, “Action”: “stop”} 
 {“image”: “redmine”, “Action”: “start”} 
 Image:
 zabbix
 Action:
 create
 監視結果から動的に自動タグ付け可能 Image:
 zabbix
 Action:
 start
 Image:
 redmine
 Action:
 stop
 Image:
 zabbix
 Action:
 die
 Image:
 redmine
 Action:
 start
 Image:
 zabbix
 Action:
 stop

  26. 26. Zabbixで行うには?
 
 ・イベント相関
 26 docker eventsの情報を監視 
 {“image”: “zabbix”, “Action”: “create”} 
 {“image”: “zabbix”, “Action”: “start”} 
 {“image”: “redmine”, “Action”: “stop”} 
 {“image”: “zabbix”, “Action”: “die”} 
 {“image”: “zabbix”, “Action”: “stop”} 
 {“image”: “redmine”, “Action”: “start”} 
 Image:
 zabbix
 Action:
 create
 監視結果から動的に自動タグ付け可能 Image:
 zabbix
 Action:
 start
 Image:
 redmine
 Action:
 stop
 Image:
 zabbix
 Action:
 die
 Image:
 redmine
 Action:
 start
 Image:
 zabbix
 Action:
 stop
 古いイベントのタグ
 Image=redmine and Action=stop
 新しいイベントのタグ 
 Image=redmine and Action=start
 復旧

  27. 27. さらに便利に連携するには?
 
 ・Zabbix Agent自動登録
 
 27 Zabbix Agent起動
 Zabbix Serverが
 登録ルール定義に沿って 
 ホスト自動登録
 Agentが自分の情報を 
 Zabbix Serverに送付 
 Agentからの送付情報 
  ・ホスト名
  ・AgentのリッスンIP/ポート
  ・ホストメタデータ
 可能なアクション
  ・ホスト登録
  ・ホストグループに登録
  ・ホストへの監視テンプレート紐付け
  ・ホストを無効状態に設定
  ・インベントリモードの設定
  ・メッセージ送信
  ・リモートコマンド実行
 ①
 ②
 ③

  28. 28. さらに便利に連携するには?
 
 ・ローレベルディスカバリ
  zabbix agentを入れないコンテナ環境とかはこっちの方法で自動登録がおすすめ
 28 {“data”: [
 {
 “{#CONTAINER_NAME}”: “zabbix-server”,
 “{#IMAGE_NAME}”: “zabbix/zabbix-server-mysql:latest”,
 },
 {
 “{#CONTAINER_NAME}”: “zabbix-db”,
 “{#IMAGE_NAME}”: “mysql:latest”,
 },
 ・・・・
 ]}
 
 ホストプロトタイプ
 
 ホスト名
 {#CONTAINER_NAME} 
 

  29. 29. クラウド・コンテナ環境特有の、
 より頻繁に変わる環境も効果的に監視が実現できる
 29
  30. 30. Zabbix 4.2でますます便利に
 30
  31. 31. 保存前処理のさらなる拡張
 
 ・Prometheus連携
 31 Dockerホスト
 コンテナ
 コンテナ
 cAdvisor
 (Exporter)
 cgroups
 volume
 Zabbix
 Server
 http://ホスト:ポート/metrics メトリクス名{ラベル=ラベルバリュー} 値 タイムスタンプ 依存アイテム
 保存前処理  Name: プロメテウスパターン  Parameters: container_memory_usage_bytes{name=”test”} HTTPエージェント 
 アイテム

  32. 32. PrometheusのExporter
 
 ・多量に展開されるExporter
 https://prometheus.io/docs/instrumenting/exporters/ 
 32 Database
 
 MySQL
 PostgreSQL
 MongoDB
 Elasticsearch
 etc.
 MQ
 
 RabbitMQ
 Kafka
 etc.
 Storage
 
 Ceph
 Gluster
 Hadoop HDFS
 etc.
 HTTP
 
 Apache
 Nginx
 Squid
 etc.
 API
 
 AWS ECS
 AWS Health
 Rancher
 etc.
 Other
 
 AWS CloudWatch
 InfluxDB
 Azure Monitor
 JMX
 SNMP
 StatsD
 etc.

  33. 33. ZabbixじゃなくPrometheusでも良いのでは?
 
 ● コンテナベースとかクラウド前提みたいなケースではPrometheus の方が親和性は高いかも
 
 
 ● オンプレ環境も含めて統合監視したい、
 手厚いサポートも受けて安心して動かしたい
 といった場合はZabbixも良い。
 33
  34. 34. 保存前処理のさらなる拡張
 
 ・JavaScriptによる柔軟な前処理
 34 function (value) {
 
 ・・・なにか処理
 
 return 処理済みの結果
 }
 この値が監視される

  35. 35. 活用例) コンテナの監視登録をLLDとJavaScript前処理で
 
 35 ① Docker APIを呼び出すHTTPエージェントアイテムを登録

  36. 36. 活用例) コンテナの監視登録をLLDとJavaScript前処理で
 
 36 ① Docker APIを呼び出すHTTPエージェントアイテムを登録
 [
 {
 "Id": "3923672cd02...b8d8e6b4d3", 
 "Names": [ 
 "/zabbix-appliance" 
 ],
 "Image": "zabbix/zabbix-appliance:alpine-4.2.0", 
 ・・・略
 },
 {
 "Id": "ba19906f1cbc48...95b629f60c", 
 "Names": [ 
 "/opsbear_influxdb_1" 
 ],
 "Image": "opsbear_influxdb", 
 ・・・略
 }
 ]
  37. 37. 活用例) コンテナの監視登録をLLDとJavaScript前処理で
 
 37 ② 依存アイテムタイプのディスカバリルールを作成

  38. 38. 活用例) コンテナの監視登録をLLDとJavaScript前処理で
 
 38 ③ 依存アイテムの保存前処理をJavaScriptで記述
 function (value) { 
 var containers = JSON.parse(value); 
 var names = []; 
 for ( var i = 0; i < containers.length; i++ ) { 
 var name = containers[i]["Names"][0] 
 name = name.slice(1) 
 names.push({"name": name}); 
 }
 return JSON.stringify(names); 
 }
 [
 {“name”: “container-1”},
 {“name”: “container-2”}.
 ・・・
 ]

  39. 39. 活用例) コンテナの監視登録をLLDとJavaScript前処理で
 
 39 ④ LLDマクロを指定

  40. 40. 活用例) コンテナの監視登録をLLDとJavaScript前処理で
 
 40 ⑤ ホストプロトタイプを登録

  41. 41. 活用例) コンテナの監視登録をLLDとJavaScript前処理で
 
 41 ⑤ ホストプロトタイプを登録
 これで勝手にホスト登録される

  42. 42. 活用例) コンテナの監視登録をLLDとJavaScript前処理で
 
 42 ⑤ ホストプロトタイプを登録
 これで勝手にホスト登録される

  43. 43. 大規模化しても効率よく監視データ管理を
 TimescaleDB対応
 
 ● これまでの課題
 ○ 大規模環境でhistoryデータが大量に蓄積されるようになると
 historyのハウスキーピング処理で悲鳴をあげたり。。
 
 ● TimescaleDB対応による効果
 ○ ヒストリ系データを時系列として取扱い、追記・削除を効率よく実施
 ○ これまでの設定関連はRDBMSをそのまま利用
 43
  44. 44. TimescaleDBとは?
 
 ● PostgreSQLの拡張
 ● ハイパーテーブルとチャンクという形式で時系列データ管理
 ○ パーティショニングをよろしくやってくれるような感じ
 ● 集計用の関数とかも高機能
 
 44 chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk chunk hypertable 例) 2019/05/01 00:00 
 -2019/05/01 23:59:59 
 の1日分

  45. 45. ZabbixとTimescaleDB
 
 ● DBはPostgreSQLにする必要あり
 ● timescaleDBの拡張をインストール
 ● TimescaleDB用のスキーマを流し込めばOK
 ● 既存のDBからの移行も可
 ● デフォルトでchunkは1日区切り
 
 45
  46. 46. まとめ
 
 ● クラウド環境やコンテナ環境を監視するための
 様々な機能がZabbixにはある
 ● 拡張性高く柔軟にいろいろやりたい場合は
 活用のしどころは豊富
 ● Prometheusはコンテナ監視ツールとしてはデファクトに
 なりつつあるのでうまく使い分けて活用すると良い
 ● Zabbixは4.2でどんどん便利に
 
 46
  47. 47. 最後に少し宣伝
 2019/2/27 第2版が出版
 
 Zabbix4.0対応
 
 仮想・クラウド・コンテナ監視にZabbix を活用する方法を紹介
 
 注) Zabbixの設定を網羅的に解説したドキュメント的な 
   内容ではないのであしからず 
 47
  48. 48. もう一つ情報
 Zabbix Japanの代表の寺島氏のZabbixの入門書の
 改訂3版ももうすぐ出版されるらしいです。
 
 https://www.amazon.co.jp/dp/4297106116
 
 セットでどうぞご検討を!
 48
  49. 49. Thank you
 49

×