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