そーだいなるらくがき帳

そーだいが自由気侭に更新します。

HAProxyの監視 ~ mackerel-plugin-haproxyを読み解く

この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の13日目です。

qiita.com

soudai.hatenablog.com

それでは13日目は mackerel-plugin-haproxy です。

mackerel-plugin-haproxyは多機能プロクシサーバーの王道 HAProxy の専用プラグインです。

github.com

インストールと設定手順

HAProxyのプラグインhastats の中身を可視化してくれるプラグインです。

プラグインプラグイン集として提供しているパッケージの mackerel-agent-plugins に含まれています。 インストール先は /usr/bin/mackerel-plugin-haproxy です。 インストール後、HAProxyにhastatsを有効にする必要があります。 一例ですがhaproxy.cfg の末尾に次のとおり記載してhaproxyを再起動します。

listen hastats 0.0.0.0:8080
    mode http
    maxconn 64
    timeout connect 5000
    timeout client 10000
    timeout server 10000
    stats enable
    stats show-legends
    stats uri /haproxy?hastats
 
    stats auth admin:adminadmin

次にMackerelのプラグインはコマンドですので実行する事ができます。

※/usr/bin はPATHが通っているので省略出来ます

-- /usr/bin はPATHが通っているので省略出来ます
# mackerel-plugin-haproxy -port=8080 -username=admin -password=adminadmin -path=/haproxy?hastats
haproxy.total.sessions.sessions 0       1513064151
haproxy.total.bytes.bytes_in    5130    1513064151
haproxy.total.bytes.bytes_out   56850   1513064151
haproxy.total.connection_errors.connection_errors       0       1513064151

環境に合わせてhaproxy.cfgに記載するポートやアカウント:パスワードは調整してください。 設定ファイルであるmackerel-agent.confは標準では /etc/mackerel-agent/mackerel-agent.conf にインストールされます。 こちらに下記のとおり追記しましょう。

[plugin.metrics.haproxy]
command = "mackerel-plugin-haproxy -port=8080 -username=admin -password=adminadmin -path=/haproxy?hastats"

以上を行った上でmackerel-agentを再起動してください。

見れるメトリック

HAProxyとその統計情報であるhastatsの詳細を割愛しますが実際にその中でMackerelが取れるメトリックについて説明します。 それでは具体的に見ていきましょう。

各グラフ定義ごとに説明します。 それでは各グラフ定義ごとに説明します。 また表に出てくるdiffとはプラグイン上で差分値計算をするかどうかです。 となっている項目はプラグインで前回の実行時の値と差分値計算して出力しています。

HAProxy Total Sessions

メトリック名(ラベル) プラグインの出力名 diff 説明
Sessions haproxy.total.sessions.sessions 一分間当たりのセッション数

こちらはHAProxyが捌いている接続数です。HAProxyは多機能プロクシサーバーとご紹介しましたが例えばロードバランサーとして使うことも多いです。 そのような場合はHAProxyのTotal Sessionsを見ておくとアクセスの総数の傾向を読み取れます。 httpではL7として振る舞いますがPostgreSQLなど他のProtocolの場合はシンプルなL4のロードバランサーとして活用することもできます。 その場合、PostgreSQLのMaxConnectionを超えないような設定と合わせて監視が必要です。

HAProxy Total Bytes

メトリック名(ラベル) プラグインの出力名 diff 説明
Bytes In haproxy.total.bytes.bytes_in 1分間あたりのネットワークから受信したバイト数
Bytes Out haproxy.total.bytes.bytes_out 1分間あたりのネットワークへ送信したバイト数

こちらはHAProxyが捌いているトラフィックのin/outです。 軽量なアクセスを大量に捌いているのか、それとも重厚なアクセスを少数捌いているのかで当然インフラのアプローチは代わってきます。 トラフィックの傾向を知ることはとても大切なのでHAProxyをご利用の場合は2週間に1回など定期的にTotal Bytesを確認するようにしましょう。

HAProxy Total Connection Errors

メトリック名(ラベル) プラグインの出力名 diff 説明
Connection Errors haproxy.total.connection_errors.connection_errors 1分間あたりの接続に失敗した数

最後は接続に失敗した数です。 急激に増えた場合も勿論ですがトラフィック同様に定常的にERRORが出ていないか確認しましょう。

HAProxyでPostgreSQLを負荷分散する

Sessionの所でも触れましたがHAProxyは色んな使い方が出来ます。 その中に簡単な参照の負荷分散が上げられます。 実際に @snaga さんの記事が非常にわかりやすいのでご紹介します。

pgsqldeepdive.blogspot.jp

この他にも勿論MySQLでも使えますし、RDSのリードレプリカと組み合わせた参照の負荷分散などがあります。 PostgreSQLにはL7ロードバランサーとしてpgpoolがありますがシンプルな構成の場合はHAProxyで充分です。 またHAProxyはhttpではL7ですので勿論Webサーバのロードバランサーとして大活躍してくれます。 もしまだ使ったことが無い方は是非、この機会にHAProxyを触ってみてください。

13日目は高性能ロードバランサー、HAProxyプラグインについての説明でした。 明日はNoSQL!ドキュメントDBの mongodb です。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!

13日目 mackerel-plugin-mongodb