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.

新しくなったPg monzでpostgre sqlのクラスタを監視しよう

1,385 views

Published on

JPUG主催 第32回 PostgreSQL 勉強会(2015年10月10日)
https://www.postgresql.jp/wg/shikumi/pgstudy_32/view

Published in: Technology
  • Be the first to comment

新しくなったPg monzでpostgre sqlのクラスタを監視しよう

  1. 1. 新しくなった pg_monz で PostgreSQL のクラスタを 監視しよう 中西 剛紀
  2. 2. 2 自己紹介 •  氏名 : 中西 剛紀 (なかにし よしのり) •  所属 : TIS株式会社 OSS推進室 •  お仕事 : OSSのサポート, 技術支援 •  主な活動領域 : PostgreSQL全般 –  日本PostgreSQLユーザ会(JPUG) 勉強会でたまに講演しています http://www.slideshare.net/naka24nori/jpug25 –  PostgreSQLエンタープライズコンソーシアム (PGECons) WGの主査としてセミナー講演してみたり http://itpro.nikkeibp.co.jp/atcl/column/15/052800134/052900004/?ST=oss&a
  3. 3. 3 AGENDA •  あなたの知らないPostgreSQL監視の世界 •  pg_monzでできること •  pg_monzのしくみ •  pg_monzとpg_statsinfoのざっくり比較 •  pg_monzの試し方
  4. 4. 4 データベースの運用管理 •  データベース運用管理の目的 – DBの状態を把握して健全な状態に保つ •  データベース運用管理の種類 – 死活監視 – リソース監視 – 性能分析/チューニング – バックアップ/リストア •  監視が運用管理の基本のき – 正しく現状を把握しなければ何もできない
  5. 5. 5 あなたの知らないPostgreSQL監視の世界 •  PostgreSQLの監視に使える標準機能 – 稼働統計情報 – ログ •  稼働統計情報 – PostgreSQLのアクティビティ情報を蓄積 – SELECT文でビューにアクセスして参照 ビュー名 取得できる情報 pg_stat_activity 接続中のクライアントの処理状況 例) 実行中のSQL、接続時間、プロセス状態 pg_stat_database データベース単位のアクティビティ状況 例) コミット/ロールバック数、更新&参照件数、deadlock数 pg_stat_user_tables テーブル単位のアクティビティ状況 例) シーケンシャルスキャン回数、更新&参照件数
  6. 6. 6 あなたの知らないPostgreSQL監視の世界 •  稼働統計情報を監視で使うには一工夫必要 •  SQLを書くのがダルい 例) キャッシュヒット率を知りたいとき •  主に起動してからの累積値を保持 – 最新値と過去値の差分(変化)から事象を判断 SELECT&&datname,&round(blks_hit*100/(blks_hit+blks_read),&2)&&AS&cache_hit_raBo& FROM&pg_stat_database&WHERE&blks_read&>&0& datname&|&cache_hit_raBo& MMMMMMMMMMMMM+MMMMMMMMMMMMMMMMM& postgres&|&99.00 監視ツールの必要性
  7. 7. 7 あなたの知らないPostgreSQL監視の世界 •  ログ – PostgreSQLサーバに発生した事象は サーバログに出力される。 •  ログからわかること – 何らかの異常が発生したこと – 処理されたSQL – チェックポイントやVACUUMの実行 – デッドロックの発生 etc •  ログの障害メッセージは検出したい。 監視ツールの必要性
  8. 8. 8 あなたの知らないPostgreSQL監視の世界 •  PostgreSQL Wiki - Monitoring https://wiki.postgresql.org/wiki/Monitoring •  PostgreSQL専用ツール – pg_statsinfo&pg_stats_reporterが代表格 – 高機能で公開されている情報も多い。 – 統合監視ツールとは別に運用する必要がある。 •  統合監視ツールのPostgreSQL対応 – Hinemos: PostgreSQL性能監視オプション http://www.uptime.jp/ja/products-services/hinemos-postgres-addon/ – Zabbix: 標準テンプレートの用意なし(TωT) •  MySQL用テンプレートはある (  ̄っ ̄)ムゥ
  9. 9. 9 pg_monzを使って PostgreSQLをZabbixで 監視してみませんか?
  10. 10. 10 pg_monz(ぴーじーもんず) •  正式名称: PostgreSQL monitoring template for Zabbix •  ZabbixにPostgreSQLの監視機能を   追加するテンプレート&スクリプト – TISとSRA OSS, Inc.日本支社で共同開発 – Apache License Version 2.0で公開 – 2013年12月 Version 1.0 リリース – 2015年 4月 Version 2.0 リリース •  私も開発メンバーの1人です。
  11. 11. 11 Zabbixについて少々 •  オープンソースの統合監視ソフトウェア •  監視ツールに必要な機能を網羅 – いろんな機器(NW,サーバ,MW,アプリ)に対応 – 対応プラットフォーム(OS)も多い – 収集データの蓄積、傾向分析 – メール等での障害通知 – WebインタフェースによるGUIで操作可 •  ラトビアのZabbix SIAが開発元 – 国内の導入事例が増加しています。 – クラウドでの引き合い多数(¥的な面で) – 弊社もサポートを提供しています(←超重要)。
  12. 12. 13 pg_monzでできること •  監視対象のシステム構成例 & watchdog& & SQL & &
  13. 13. 14 pg_monzでできること •  個々のPostgreSQLサーバの監視 – サーバ自体の死活状況 – ログのエラーメッセージ – チェックポイントの実行状況 – インスタンスへの接続数 – データベースの容量と不要領域の割合 – データベースのキャッシュヒット率 – データベース、テーブルの更新&参照件数 基本的なPostgreSQLサーバの監視
  14. 14. 15 ここまでは Version 1.0 でもできました。
  15. 15. 16 ここからが Version 2.0 で可能となった 「PostgreSQLクラスタ監視」 の機能です。
  16. 16. 17 pg_monzでできること •  ストリーミングレプリケーションの監視 – どのサーバがPrimary/Standbyか一目瞭然 – Standbyへのデータ伝搬の遅延状況 – 同期レプリケーションのプライオリティ – Primary障害時のフェイルオーバ発生の様子 をイベントとして通知
  17. 17. 18 pg_monzでできること •  pgpool-IIの監視 – watchdog構成での仮想IP保持状況 – フロント/バックエンドの接続数 – バックエンドの稼働状況 – クエリキャッシュ使用時のキャッシュ状況
  18. 18. 19 pg_monzでできること •  個々のサーバが正常に稼働していても、 クラスタ全体が正常とは限らない。 – 例:pgpool-IIのスプリットブレイン pgpoolMII Active側にのみ 仮想IPが振られ るのが正常 NW断絶で相互監 視ができないとこ ちらにも振られる 仮想IP
  19. 19. 20 pg_monzでできること •  個々のサーバが正常に稼働していても、 クラスタ全体が正常とは限らない。 – 例:SRのPrimaryが1つじゃない PostgreSQL& (standby)& PostgreSQL& (standby)& PostgreSQL& (primary)& PostgreSQL& (standby)& PostgreSQL& (primary)& PostgreSQL& (primary)&
  20. 20. 21 pg_monzでできること •  個々のサーバが正常に稼働していても、 クラスタ全体が正常とは限らない。 – 例:SRの同期スタンバイが1つもいない PostgreSQL& (potential)& PostgreSQL& (sync)& PostgreSQL& (primary)& PostgreSQL& (potential)& PostgreSQL& (sync)& PostgreSQL& (primary)& NG& OK& &
  21. 21. 22 pg_monzでできること •  pg_monzでは以下の障害に対応 – pgpool-IIのスプリットブレイン ↓こんな感じで検出 – SRのPrimaryが1つじゃない – SRの同期スタンバイが1つもいない サーバだけの監視では気付きにくい クラスタ特有の障害事象に対応
  22. 22. 23 pg_monzのしくみ pg_monz & Zabbix Agent & & pg_monz & psql & Agent Server &
  23. 23. 24 pg_monzのしくみ •  Zabbixローレベルディスカバリ(LLD) – 環境に合わせた監視設定を自動で生成 – ファイルシステム、NIC、SNMP OID etc •  pg_monzではLLDで監視項目を自動設定 – データベース、テーブル単位の監視 – サーバの役割に応じたレプリケーション監視 – pgpool-IIのバックエンドサーバの監視 DB環境が変化した際の設定作業を削減
  24. 24. 25 pg_monzとpg_statsinfoを ざっくりと比較してみる。
  25. 25. 26 pg_statsinfoについて少々 •  PostgreSQLサーバの稼働統計情報(+α) を定期的に収集・蓄積するツール •  pg_stats_reporterで蓄積した統計情報 からグラフィカルなレポートを出力可能 •  NTTさんが開発しているOSS •  PostgreSQLの性能管理ツールとしては 一番知名度が高い。
  26. 26. 27 アーキテクチャ •  どちらも監視対象サーバにエージェント を常駐させる。 – pg_monz: Zabbixエージェント – pg_statsinfo: pg_statsinfod •  pg_monz – 一定間隔で監視データを収集し、 ZabbixのDBにデータを格納する。 •  pg_statsinfo – 一定間隔でスナップショットを取得し、 リポジトリDBに格納
  27. 27. 28 死活監視 •  pg_monz – 一定間隔(デフォルト5分)で PostgreSQLサーバへのSQL疎通を確認 – 疎通しなかったらZabbixがエラー検知 •  pg_statsinfo – 該当する機能は特になさそう。 – 死活監視は別のツールでやりましょう、 というスタンス
  28. 28. 29 ログ監視 •  pg_monz – 一定間隔(デフォルト1秒)で サーバログのメッセージ内容を確認 – PANIC,FATAL,ERRORレベルのメッセージ が出力されたらZabbixがエラー検知 •  pg_statsinfo – サーバログを加工する機能を持つ。 – ログのデータをレポジトリDBに蓄積 → ログをSQLで検索・分析できるのは便利 – ログの監視は別のツールでやりましょう、 というスタンス
  29. 29. 30 障害発生時の通知 •  pg_monz – Zabbixのトリガー、アクションが使える。 – トリガー:障害発生時の条件式を定義     これを引き金にアクションを実行 – アクション:メール送信や任意のコマンドを実行 •  pg_statsinfo – スナップショット取得時にアラートメッセージ をテキストログに出力する機能がある。 – メール送信や任意のコマンド実行は、 別のツールでやりましょう、というスタンス
  30. 30. 31 インスタンスへの接続数 •  pg_monz – バックエンドプロセス数の遷移をグラフ表示 – トランザクション実行中、待機中、ロック待 ちといったステータス毎の内訳も表示可能 •  pg_statsinfo – pg_monzとほぼ同じ
  31. 31. 32 OSのリソース情報 •  pg_monz – pg_monzのテンプレートにはOSのリソース 情報を収集する設定はない。 – Zabbix標準添付のテンプレート(Template OS Linux)でOSのリソース情報は取得可能 •  pg_statsinfo – CPU使用率、メモリ使用量、ディスクI/O、 ロードアベレージといった情報を独自に収集 – pg_stats_reporterのレポートに表示可能
  32. 32. 33 チェックポイントの実行状況 •  pg_monz – checkpoint_timeout/ checkpoint_segments契機で実行された チェックポイントの実行回数を収集 – チェックポイントやバックグラウンドライタ によって書きだされたバッファ数を収集 •  pg_statsinfo – pg_monzと同様の情報をレポート表示可能 – チェックポイントの平均/最大処理時間を レポートに表示可能 – チェックポイントが走った時間帯をレポート の各種グラフに重ね合わせることも可能
  33. 33. 34 データベース単位の情報 •  pg_monz – データベース容量の最新値、グラフ表示 – 単位秒あたりのトランザクションコミット数 – 単位秒あたりのロールバック数 – キャッシュヒット率 – デッドロックの発生数 – 一時ファイルに書きだされたデータ量 •  pg_statsinfo – pg_monzとほぼ同じ
  34. 34. 35 テーブル単位の情報 •  pg_monz – ANALYZE,VACUUMが実行された回数 – テーブル内の不要領域の割合 – ヒープ、インデックスのキャッシュヒット率 – 単位秒あたりの更新/削除/挿入行数 •  pg_statsinfo – pg_monzと同様の情報をレポート表示可能
  35. 35. 36 その他もろもろ •  pg_statsinfo – ロック競合の情報 – 関数、SQL別の実行回数と累積処理時間 (pg_stat_statementsの情報を活用) – PostgreSQLサーバの設定情報 •  pg_monz – 上記の情報収集は未対応
  36. 36. 37 ストリーミングレプリケーションの情報 •  pg_monz – WAL sender/receiverのプロセス数 – リカバリとの競合によるクエリキャンセル数 – マスタ-スタンバイ間のリカバリ遅延量 – 同期レプリケーションのプライオリティ •  pg_statsinfo – pg_monzと同様の情報をレポート表示可能
  37. 37. 38 pgpool-IIの情報 •  pg_monz – 一定間隔(デフォルト5分)で pgpool-IIサーバへのSQL疎通を確認 – 一定間隔(デフォルト1秒)で pgpool-IIログのメッセージ内容を確認 – 仮想IPの有効/無効(watchdog利用時) – フロントエンド/バックエンドの接続数 – クエリキャッシュの情報 •  pg_statsinfo – pgpool-IIの監視機能は持たない。
  38. 38. 39 クラスタの情報 •  pg_monz – クラスタのPostgreSQLプライマリノード数 – クラスタのActiveなpgpool-IIノード数 – 同期レプリケーションのスレーブノード数 – スプリットブレインが発生したら、 Zabbixがエラー検知 •  pg_statsinfo – 複数のPostgreSQLサーバを俯瞰する 監視は行わない。
  39. 39. 40 収集した情報の分析 •  pg_monz – Zabbixの画面で表示するのが前提。 – Zabbixのスキーマに詰め込んでいるので、 リポジトリDBを直接SQLで分析するのは 難しいかも。。。 •  pg_statsinfo – PostgreSQLの稼働統計情報ビューに近い形 で、まるっとスナップショットを保管してい るので、リポジトリDBを直接SQLで分析で きそう。
  40. 40. 41 監視間隔 •  pg_monz – まとまった監視項目毎に監視間隔を設定でき るので、運用に合わせてカスタマイズできる。 •  pg_statsinfo – スナップショットの取得間隔に依存 (デフォルト30分) – スナップショットは手動でも取得できる。 – 収集する情報別に取得間隔を変えることは できない。
  41. 41. 42 導入の容易さ •  pg_monz – pg_monz自体のセットアップは簡単。 – テンプレートのインポートやスクリプト配置 – Zabbixをちゃんと構築できるかがキモ •  pg_statsinfo – ソースからビルド or RPMでインストール – postgresql.confを設定 – PostgreSQL再起動でエージェントが起動 – 詳しい日本語マニュアルもあるので安心
  42. 42. 43 画面の見やすさ、カスタマイズ性 •  pg_monz – Zabbixが用意する画面にはめ込んでいるので、 苦手な形がある。(例:ランキング表示) – PostgreSQL以外の情報をグラフに重ね合わ せたりすることができる。 → 汎用の監視ツールである強み – 監視項目を増やしたり、情報の取り方を変え たりとカスタマイズできる。 •  pg_statsinfo – 情報を見やすい形でレポート表示 → PostgreSQL専用ツールである強み
  43. 43. 44 蓄積データのメンテナンス機能 •  pg_monz – Zabbixのメンテナンス機能を利用 – 定期的にメンテナンスを実行 •  保持期間を経過した監視データの削除 – 監視データをサマリして保存する機能 •  データの精度を落としてサイズを削減 •  長期間の傾向を分析するグラフ等に活用できる。 •  pg_statsinfo – 1日1回メンテナンスを実行 •  保持期間を経過したスナップショットの削除 •  保持期間を経過した蓄積ログの削除 •  サーバログのログファイルの整理
  44. 44. 45 ざっくり比較のまとめ •  pg_monzは監視ツール – 発生した問題に即座にアクションを起こす。 → 統合監視ツールZabbixの本領発揮 – 性能分析に使う情報「も」集められる。 •  pg_statsinfoは性能分析ツール – 過去時点の情報を「ひとまず」保管しておき、 後でゆっくりと問題を分析する。 – 発生した問題に対するアクションは、 別の監視ツールに任せる。 どちらが優れているとかじゃなく 両方組み合わせて使えばいいんじゃない?
  45. 45. 46 pg_monzを試してみよう!
  46. 46. 47 pg_monzの入手、問合せ先 •  入手先や使い方 http://pg-monz.github.io/pg_monz/ •  問い合わせ – pg_monz ユーザーグループ pg_monz@googlegroups.com
  47. 47. 48 でもなー、そもそもPostgreSQLと pgpool-IIのクラスタ構築とか、 Zabbixサーバのセットアップとか めんどくせーなー、、、 とか思ったでしょ。今。
  48. 48. 49 試行環境を自動構築できます •  試行環境を自動構築するAnsible Playbook等をGitHubから入手できます。 https://github.com/tech-sketch/pg_monz-trial •  VirtualBox,Vagrantを入れたPC1台で 試すことができます。
  49. 49. 50 こんな試行環境が作れます
  50. 50. 51 まとめ •  ZabbixでPostgreSQLを監視できます。 そう、pg_monzならね。 •  興味があれば気楽に試せます。 – 必要なのはちょっとのヤル気とPCのメモリ •  フィードバックをお待ちしています。

×