次にMackerelのプラグインはコマンドですので実行する事ができます。インストールされます。こちらに下記のとおり追記しましょう。"mackerel-plugin-postgres"以上を行った上でmackerel-agentを再起動してください。見れるメトリックまずこれを見てくれるとこのあとの話はすっと理解できると思います。soudai.hatenablog.com各グラフ定義ごとに説明します。それでは各グラフ定義ごとに説明します。表に出てくるdiffとはプラグイン上で差分値計算をするかどうかです。なっている項目はプラグインで前回の実行時の値と差分値計算して出力しています。状態の種類ですが公式ドキュメントには次の通り書いてあります。統計情報コレクタ現在のバックエンドの総体的な状態です。以下のいずれかの値を取ることができます。バックエンドは問い合わせを実行中です。バックエンドは新しいクライアントからのコマンドを待機しています。バックエンドはトランザクションの内部にいますが、現在実行中の問い合わせがありません。transactionと似ていますが、トランザクション内のある文がエラーになっている点が異なります。バックエンドは近道関数を実行中です。この状態は、このバックエンドでtrack_activitiesが無効である場合に報告されます。transactionについては皆さんの想像の通りですし、ここに書いてあるとおりです。(aborted)は他のRDBMSから来た人にはわかりにくいかもしれません。PostgreSQLのトランザクションは実行時にエラーが発生するとabortedになり、その後のクエリを受け付けません。この状態になるとロールバックするしかありません。そのためデッドロックによってクエリが止まっている場合などもここが増えるので覚えておきましょう。(aborted)はとても大事な指標ですが通常時は0を目指しましょう。callは知らない人からすると意味不明だと思います。近道関数はPQFnという関数で近道インターフェイスを利用する関数を指します。基本的にPQFnは公式ドキュメントにもある通り、なかなか使われません。どこで使われているのでしょうか?一般的に目にする機会があるのはラージオブジェクトを利用するときでしょう。object)と呼ばれるモノと同等で大きなデータを扱う仕組みのです。これにより、画像や動画のような大きなデータでもPostgreSQLに保存することが出来ます。ちなみに9.3以上では4TBまで保存することが出来るので概ね保存できます。pg_largeobjectに保存されるので興味がある人はそちらもどうぞ。脱線しましたがラージオブジェクトインターフェイスはPQFnを呼び出しています。callを意識する必要があります。逆にそれ以外の時は特に気にしなくても良いでしょう。無効化されている場合のみ出てきます。デフォルトは有効になっているのでお目にかかることは無いかもしれません。データベースの総数なのですがロールバックが多い場合などは要注意しましょう。アプリケーション側のエラーまたはデッドロックの可能性があります。見てみて、切り分けしましょう。リリース直後やUPDATEが多い仕組みでの繁忙期などは要注意です。ロールバックが増える要因の一つに制約にぶつかりまくるというのもあります。これは制約が守ってくれているので正しい挙動ではありますがアプリケーション側は制約にぶつからない事が本来正しい振る舞いです。普段はロールバックは0になるように調整しましょう。公式ドキュメントにある通り、blks_hitはOSでのfilesystemのキャッシュは含まれません。バッファキャッシュに既にあることが分かっているために読み取りが不要だったディスクブロック数です(これにはPostgreSQLのバッファキャッシュにおけるヒットのみが含まれ、オペレーティングシステムのファイルシステムキャッシュは含まれません)。PostgreSQLのアーキテクチャは良くも悪くもOSの振る舞いには関与しません。ディスクアクセスをしていると思っていてもOS側のキャッシュで返している事があります。ここはアーキテクチャとして大切なところなので覚えておきましょう。実行されたSQLに対する行数です。違いの分からない人もいると思います。ここは公式ドキュメントも説明が不親切です。いやまぁ公式ドキュメントは基本的に不親切なんだけど。いうと次のとおりです。これらは定期的に確認しましょう。リリース直後に想定通り振る舞っているかどうかを確認するときにも良い指標になります。データベースのトータルサイズ(バイト)こちらはシンプルにデータベースで使用されるディスク容量の合計値が見れます。これはmackerel-plugin-postgresを実行しているユーザがアクセスできるデータベースのトータルサイズです。postgresユーザのように全てアクセスできるユーザなら全てのデータベースのトータルサイズですし、一部しかアクセスできないユーザならそのアクセス出来るデータベースの合計になります。実行して確認しておきましょう。個人的には別に積上げにしてデータベース名毎のサイズ出してもいいかもなって思っているところです。Tipsですがpg_size_pretty()を使うとバイトをKBやGBなど人間に優しい表示に変換することができます。SQLで確認する時は知っておくと便利です。1分間あたりの検知したデッドロックの数その名の通り、デッドロックの数です。併せて確認すると良いでしょう。通常時は0になるように目指しましょう。現状のロックの一覧があります。下記のクエリをご活用ください。1分間あたりのデータファイルブロックの書き出し時間(ms)こちらはI/Oに関する値です。回数と併せて時間軸で見るのはとても大切です。見比べながら活用しましょう。1分間あたりの検知された一時ファイルのサイズこちらはその名の通り、一時ファイルを作った時のそのサイズです。個数を見ることが出来るのですがこちらはmackerel-plugin-postgresには含まれていません。プルリクチャンスポイントの一つです。一時ファイルが作られるタイミングですが以下のようなものがあります。一時ファイルは出来ます。BYなどは実行してみないとメモリに乗るかどうかオプティマイザ側では判断出来ませんし、データの肥大化である日突然遅くなる要因の一つです。メモリをコップだとしたらデータは中身に入れる水です。コップの中で水を処理できるうちは問題ないのですが溢れるとこぼれ落ち、一時ファイルを必要とします。指定することでログとして細かい情報を残すことができます。調査の時にご活用ください。前回まとめたので是非呼んで欲しいです。soudai.hatenablog.commackerel-plugin-postgresでやってないこととして、キャッシュヒット率の計算やテーブル単位での集計などがあります。僕もチャレンジしたいと思っています。それとMackerelのプラグインで扱っていないレプリケーションの監視についても纏めました。soudai.hatenablog.comこちらも併せてご愛顧いただければと思います。それでは25日目はPostgreSQLのプラグインについての説明でした。今回紹介したMackerelのプラグインやモニタリングの知見はほんの一部です。Groupやイベント、そしてMackerel自身を通じて色んなモニタリングの知見を共有していきたいですね。今度は皆さんの作ったカスタムプラグインを使ったモニタリングの知見のアウトプット、お待ちしています!それでは皆様、良いお年を。地方のコミュニティで成長するということ退職...そして独立へ......地方の田舎者が東京に3年住んでわかったこと2020年の抱負とお知らせそーだいなる2019年のアウトプットを振り返る月別アーカイブ参加グループインターネットはてなブログをはじめよう!Soudaiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。