50
新しくなった pg_monz で PostgreSQL のクラスタを 監視しよう 中西 剛紀

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

Embed Size (px)

Citation preview

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

新しくなった pg_monz で PostgreSQL のクラスタを 監視しよう

中西 剛紀

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

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

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

3

AGENDA •  あなたの知らないPostgreSQL監視の世界 •  pg_monzでできること •  pg_monzのしくみ •  pg_monzとpg_statsinfoのざっくり比較 •  pg_monzの試し方

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

4

データベースの運用管理 •  データベース運用管理の目的

– DBの状態を把握して健全な状態に保つ •  データベース運用管理の種類

– 死活監視 – リソース監視 – 性能分析/チューニング – バックアップ/リストア

•  監視が運用管理の基本のき – 正しく現状を把握しなければ何もできない

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

5

あなたの知らないPostgreSQL監視の世界 •  PostgreSQLの監視に使える標準機能

– 稼働統計情報 – ログ

•  稼働統計情報 – PostgreSQLのアクティビティ情報を蓄積 – SELECT文でビューにアクセスして参照

ビュー名 取得できる情報 pg_stat_activity 接続中のクライアントの処理状況

例) 実行中のSQL、接続時間、プロセス状態

pg_stat_database データベース単位のアクティビティ状況 例) コミット/ロールバック数、更新&参照件数、deadlock数

pg_stat_user_tables テーブル単位のアクティビティ状況 例) シーケンシャルスキャン回数、更新&参照件数

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

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

監視ツールの必要性

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

7

あなたの知らないPostgreSQL監視の世界 •  ログ

– PostgreSQLサーバに発生した事象は サーバログに出力される。

•  ログからわかること – 何らかの異常が発生したこと – 処理されたSQL – チェックポイントやVACUUMの実行 – デッドロックの発生 etc

•  ログの障害メッセージは検出したい。 監視ツールの必要性

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

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用テンプレートはある ( ‾っ‾)ムゥ

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

9

pg_monzを使って PostgreSQLをZabbixで 監視してみませんか?

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

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人です。

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

11

Zabbixについて少々 •  オープンソースの統合監視ソフトウェア •  監視ツールに必要な機能を網羅

– いろんな機器(NW,サーバ,MW,アプリ)に対応 – 対応プラットフォーム(OS)も多い – 収集データの蓄積、傾向分析 – メール等での障害通知 – WebインタフェースによるGUIで操作可

•  ラトビアのZabbix SIAが開発元 – 国内の導入事例が増加しています。 – クラウドでの引き合い多数(¥的な面で) – 弊社もサポートを提供しています(←超重要)。

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

13

pg_monzでできること •  監視対象のシステム構成例

&

watchdog&

&

SQL &

&

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

14

pg_monzでできること •  個々のPostgreSQLサーバの監視

– サーバ自体の死活状況 – ログのエラーメッセージ – チェックポイントの実行状況 – インスタンスへの接続数 – データベースの容量と不要領域の割合 – データベースのキャッシュヒット率 – データベース、テーブルの更新&参照件数

基本的なPostgreSQLサーバの監視

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

15

ここまでは Version 1.0 でもできました。

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

16

ここからが Version 2.0 で可能となった 「PostgreSQLクラスタ監視」 の機能です。

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

17

pg_monzでできること •  ストリーミングレプリケーションの監視

– どのサーバがPrimary/Standbyか一目瞭然

– Standbyへのデータ伝搬の遅延状況 – 同期レプリケーションのプライオリティ – Primary障害時のフェイルオーバ発生の様子をイベントとして通知

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

18

pg_monzでできること •  pgpool-IIの監視

– watchdog構成での仮想IP保持状況 – フロント/バックエンドの接続数 – バックエンドの稼働状況

– クエリキャッシュ使用時のキャッシュ状況

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

19

pg_monzでできること •  個々のサーバが正常に稼働していても、クラスタ全体が正常とは限らない。 – 例:pgpool-IIのスプリットブレイン

pgpoolMII

Active側にのみ仮想IPが振られるのが正常

NW断絶で相互監視ができないとこちらにも振られる

仮想IP

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

20

pg_monzでできること •  個々のサーバが正常に稼働していても、クラスタ全体が正常とは限らない。 – 例:SRのPrimaryが1つじゃない

PostgreSQL&(standby)&

PostgreSQL&(standby)&

PostgreSQL&(primary)&

PostgreSQL&(standby)&

PostgreSQL&(primary)&

PostgreSQL&(primary)&

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

21

pg_monzでできること •  個々のサーバが正常に稼働していても、クラスタ全体が正常とは限らない。 – 例:SRの同期スタンバイが1つもいない

PostgreSQL&(potential)&

PostgreSQL&(sync)&

PostgreSQL&(primary)&

PostgreSQL&(potential)&

PostgreSQL&(sync)&

PostgreSQL&(primary)&

NG&

OK&

&

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

22

pg_monzでできること •  pg_monzでは以下の障害に対応

– pgpool-IIのスプリットブレイン ↓こんな感じで検出

– SRのPrimaryが1つじゃない – SRの同期スタンバイが1つもいない サーバだけの監視では気付きにくい クラスタ特有の障害事象に対応

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

23

pg_monzのしくみ

pg_monz &

Zabbix

Agent &

&pg_monz

&

psql

&

Agent

Server &

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

24

pg_monzのしくみ •  Zabbixローレベルディスカバリ(LLD)

– 環境に合わせた監視設定を自動で生成 – ファイルシステム、NIC、SNMP OID etc

•  pg_monzではLLDで監視項目を自動設定 – データベース、テーブル単位の監視 – サーバの役割に応じたレプリケーション監視 – pgpool-IIのバックエンドサーバの監視

DB環境が変化した際の設定作業を削減

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

25

pg_monzとpg_statsinfoを ざっくりと比較してみる。

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

26

pg_statsinfoについて少々 •  PostgreSQLサーバの稼働統計情報(+α)を定期的に収集・蓄積するツール

•  pg_stats_reporterで蓄積した統計情報 からグラフィカルなレポートを出力可能

•  NTTさんが開発しているOSS •  PostgreSQLの性能管理ツールとしては 一番知名度が高い。

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

27

アーキテクチャ •  どちらも監視対象サーバにエージェントを常駐させる。 – pg_monz: Zabbixエージェント – pg_statsinfo: pg_statsinfod

•  pg_monz – 一定間隔で監視データを収集し、 ZabbixのDBにデータを格納する。

•  pg_statsinfo – 一定間隔でスナップショットを取得し、 リポジトリDBに格納

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

28

死活監視 •  pg_monz

– 一定間隔(デフォルト5分)で PostgreSQLサーバへのSQL疎通を確認

– 疎通しなかったらZabbixがエラー検知 •  pg_statsinfo

– 該当する機能は特になさそう。 – 死活監視は別のツールでやりましょう、 というスタンス

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

29

ログ監視 •  pg_monz

– 一定間隔(デフォルト1秒)で サーバログのメッセージ内容を確認

– PANIC,FATAL,ERRORレベルのメッセージが出力されたらZabbixがエラー検知

•  pg_statsinfo – サーバログを加工する機能を持つ。 – ログのデータをレポジトリDBに蓄積 → ログをSQLで検索・分析できるのは便利

– ログの監視は別のツールでやりましょう、 というスタンス

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

30

障害発生時の通知 •  pg_monz

– Zabbixのトリガー、アクションが使える。 – トリガー:障害発生時の条件式を定義     これを引き金にアクションを実行 – アクション:メール送信や任意のコマンドを実行

•  pg_statsinfo – スナップショット取得時にアラートメッセージをテキストログに出力する機能がある。

– メール送信や任意のコマンド実行は、 別のツールでやりましょう、というスタンス

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

31

インスタンスへの接続数 •  pg_monz

– バックエンドプロセス数の遷移をグラフ表示 – トランザクション実行中、待機中、ロック待ちといったステータス毎の内訳も表示可能

•  pg_statsinfo – pg_monzとほぼ同じ

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

32

OSのリソース情報 •  pg_monz

– pg_monzのテンプレートにはOSのリソース情報を収集する設定はない。

– Zabbix標準添付のテンプレート(Template OS Linux)でOSのリソース情報は取得可能

•  pg_statsinfo – CPU使用率、メモリ使用量、ディスクI/O、ロードアベレージといった情報を独自に収集

– pg_stats_reporterのレポートに表示可能

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

33

チェックポイントの実行状況 •  pg_monz

– checkpoint_timeout/checkpoint_segments契機で実行されたチェックポイントの実行回数を収集

– チェックポイントやバックグラウンドライタによって書きだされたバッファ数を収集

•  pg_statsinfo – pg_monzと同様の情報をレポート表示可能 – チェックポイントの平均/最大処理時間を レポートに表示可能

– チェックポイントが走った時間帯をレポートの各種グラフに重ね合わせることも可能

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

34

データベース単位の情報 •  pg_monz

– データベース容量の最新値、グラフ表示 – 単位秒あたりのトランザクションコミット数 – 単位秒あたりのロールバック数 – キャッシュヒット率 – デッドロックの発生数 – 一時ファイルに書きだされたデータ量

•  pg_statsinfo – pg_monzとほぼ同じ

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

35

テーブル単位の情報 •  pg_monz

– ANALYZE,VACUUMが実行された回数 – テーブル内の不要領域の割合 – ヒープ、インデックスのキャッシュヒット率 – 単位秒あたりの更新/削除/挿入行数

•  pg_statsinfo – pg_monzと同様の情報をレポート表示可能

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

36

その他もろもろ •  pg_statsinfo

– ロック競合の情報 – 関数、SQL別の実行回数と累積処理時間 (pg_stat_statementsの情報を活用) – PostgreSQLサーバの設定情報

•  pg_monz – 上記の情報収集は未対応

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

37

ストリーミングレプリケーションの情報 •  pg_monz

– WAL sender/receiverのプロセス数 – リカバリとの競合によるクエリキャンセル数 – マスタ-スタンバイ間のリカバリ遅延量 – 同期レプリケーションのプライオリティ

•  pg_statsinfo – pg_monzと同様の情報をレポート表示可能

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

38

pgpool-IIの情報 •  pg_monz

– 一定間隔(デフォルト5分)で pgpool-IIサーバへのSQL疎通を確認

– 一定間隔(デフォルト1秒)で pgpool-IIログのメッセージ内容を確認

– 仮想IPの有効/無効(watchdog利用時) – フロントエンド/バックエンドの接続数 – クエリキャッシュの情報

•  pg_statsinfo – pgpool-IIの監視機能は持たない。

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

39

クラスタの情報 •  pg_monz

– クラスタのPostgreSQLプライマリノード数 – クラスタのActiveなpgpool-IIノード数 – 同期レプリケーションのスレーブノード数 – スプリットブレインが発生したら、 Zabbixがエラー検知

•  pg_statsinfo – 複数のPostgreSQLサーバを俯瞰する 監視は行わない。

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

40

収集した情報の分析 •  pg_monz

– Zabbixの画面で表示するのが前提。 – Zabbixのスキーマに詰め込んでいるので、 リポジトリDBを直接SQLで分析するのは 難しいかも。。。

•  pg_statsinfo – PostgreSQLの稼働統計情報ビューに近い形で、まるっとスナップショットを保管しているので、リポジトリDBを直接SQLで分析できそう。

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

41

監視間隔 •  pg_monz

– まとまった監視項目毎に監視間隔を設定できるので、運用に合わせてカスタマイズできる。

•  pg_statsinfo – スナップショットの取得間隔に依存 (デフォルト30分) – スナップショットは手動でも取得できる。 – 収集する情報別に取得間隔を変えることは できない。

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

42

導入の容易さ •  pg_monz

– pg_monz自体のセットアップは簡単。 – テンプレートのインポートやスクリプト配置 – Zabbixをちゃんと構築できるかがキモ

•  pg_statsinfo – ソースからビルド or RPMでインストール – postgresql.confを設定 – PostgreSQL再起動でエージェントが起動 – 詳しい日本語マニュアルもあるので安心

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

43

画面の見やすさ、カスタマイズ性 •  pg_monz

– Zabbixが用意する画面にはめ込んでいるので、 苦手な形がある。(例:ランキング表示)

– PostgreSQL以外の情報をグラフに重ね合わせたりすることができる。 → 汎用の監視ツールである強み – 監視項目を増やしたり、情報の取り方を変えたりとカスタマイズできる。

•  pg_statsinfo – 情報を見やすい形でレポート表示 → PostgreSQL専用ツールである強み

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

44

蓄積データのメンテナンス機能 •  pg_monz

– Zabbixのメンテナンス機能を利用 – 定期的にメンテナンスを実行

• 保持期間を経過した監視データの削除 – 監視データをサマリして保存する機能

• データの精度を落としてサイズを削減 • 長期間の傾向を分析するグラフ等に活用できる。

•  pg_statsinfo – 1日1回メンテナンスを実行

• 保持期間を経過したスナップショットの削除 • 保持期間を経過した蓄積ログの削除 • サーバログのログファイルの整理

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

45

ざっくり比較のまとめ •  pg_monzは監視ツール

– 発生した問題に即座にアクションを起こす。 → 統合監視ツールZabbixの本領発揮 – 性能分析に使う情報「も」集められる。

•  pg_statsinfoは性能分析ツール – 過去時点の情報を「ひとまず」保管しておき、 後でゆっくりと問題を分析する。

– 発生した問題に対するアクションは、 別の監視ツールに任せる。

どちらが優れているとかじゃなく 両方組み合わせて使えばいいんじゃない?

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

46

pg_monzを試してみよう!

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

47

pg_monzの入手、問合せ先 •  入手先や使い方http://pg-monz.github.io/pg_monz/

•  問い合わせ – pg_monz ユーザーグループ[email protected]

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

48

でもなー、そもそもPostgreSQLと pgpool-IIのクラスタ構築とか、 Zabbixサーバのセットアップとか めんどくせーなー、、、 とか思ったでしょ。今。

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

49

試行環境を自動構築できます •  試行環境を自動構築するAnsible Playbook等をGitHubから入手できます。 https://github.com/tech-sketch/pg_monz-trial

•  VirtualBox,Vagrantを入れたPC1台で 試すことができます。

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

50

こんな試行環境が作れます

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

51

まとめ •  ZabbixでPostgreSQLを監視できます。

そう、pg_monzならね。

•  興味があれば気楽に試せます。 – 必要なのはちょっとのヤル気とPCのメモリ

•  フィードバックをお待ちしています。