この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の13日目です。
それでは13日目は mackerel-plugin-haproxy です。
mackerel-plugin-haproxyは多機能プロクシサーバーの王道 HAProxy の専用プラグインです。
インストールと設定手順
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 さんの記事が非常にわかりやすいのでご紹介します。
この他にも勿論MySQLでも使えますし、RDSのリードレプリカと組み合わせた参照の負荷分散などがあります。 PostgreSQLにはL7ロードバランサーとしてpgpoolがありますがシンプルな構成の場合はHAProxyで充分です。 またHAProxyはhttpではL7ですので勿論Webサーバのロードバランサーとして大活躍してくれます。 もしまだ使ったことが無い方は是非、この機会にHAProxyを触ってみてください。
13日目は高性能ロードバランサー、HAProxyプラグインについての説明でした。
明日はNoSQL!ドキュメントDBの mongodb です。
引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!