そーだいなるらくがき帳

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

TCPソケットの監視 ~ check-tcpを読み解く

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

qiita.com

soudai.hatenablog.com

それでは9日目は check-tcp です。

check-tcpTCP Socketを監視してくれるプラグインです。

github.com

インストールと設定手順

至れり尽くせりなので公式ドキュメントに手順が書いてあるのじゃ!!

mackerel.io

使い方

至れり尽くせりなので公式ドキュメントに使い方が書いてあるのじゃ!!

mackerel.io

オプション一覧

README.mdにあるけど表記しました。

# check-tcp -h
Usage:
  check-tcp [OPTIONS]

Application Options:
      --service=              Service name. e.g. ftp, smtp, pop, imap and so on
  -H, --hostname=             Host name or IP Address
  -p, --port=                 Port number
  -s, --send=                 String to send to the server
  -e, --expect-pattern=       Regexp pattern to expect in server response
  -q, --quit=                 String to send server to initiate a clean close
                              of the connection
  -S, --ssl                   Use SSL for the connection.
  -U, --unix-sock=            Unix Domain Socket
      --no-check-certificate  Do not check certificate
  -t, --timeout=              Seconds before connection times out (default: 10)
  -m, --maxbytes=             Close connection once more than this number of
                              bytes are received
  -d, --delay=                Seconds to wait between sending string and
                              polling for response
  -w, --warning=              Response time to result in warning status
                              (seconds)
  -c, --critical=             Response time to result in critical status
                              (seconds)
  -E, --escape                Can use \n, \r, \t or \ in send or quit string.
                              Must come before send or quit option. By default,
                              nothing added to send, \r\n added to end of quit

Help Options:
  -h, --help                  Show this help message

ベーシックなSocket監視

check-tcpは指定したProtocolやPortの死活監視です。 例としてTCPポート 80のhttpへの接続に10秒以上かかった場合のアラートとftpの死活監視の例です。

[plugin.checks.tcp_80]
command = "check-tcp --hostname localhost --port 80 --warning 10 --critical 10"

[plugin.checks.ftp]
command = "check-tcp --service=ftp -H localhost"

このように気軽に死活監視をすることができます。 これは自分自身の場合はプロセス監視でもいいですが外部から見たい時に特に有効です。 httpは外形監視がありますがメールやftpが正しく動いているか確認したい場合にぜひご活用ください。

NLBはpingを返さない

これは読んで字のごとく…

実際にMackerelでもスライドにあるとおり、NLBを使っているのでcheck-tcpを有効活用しています。 NLBを使っていたり、今後も使う予定がある方はぜひご検討ください!

Gearmanの監視

ミドルウェアの監視の例ですと GEARMAN は --service でサポートされています。 check-tcpの便利なシーンにミドルウェアのポート監視があります 皆さんもよく使うミドルウェアの監視の仕組みとしてcheck-tcpをご検討ください。

fluentdを監視する

check-tcpで実際に監視すると良いミドルウェアの代表例がfluentdです! fluentdの forward のデフォルトは 24224 ですし HTTP input の場合は 9880 をデフォルトで使います。 そこで利用しているPortを監視することでfluentdの死活監視が出来ます。 これは公式にも推奨された方法です。

docs.fluentd.org

# check-tcp  -H localhost -p 24224
TCP OK: 0.000 seconds response time on localhost port 24224

このようにシンプルにミドルウェアを死活監視することができるのもcheck-tcpのメリットです。

UNIX Domain Socketを監視する

check-tcpは基本的にはTCPソケットを監視するためのプラグインです。 しかし -U または --unix-sock= のオプションでUNIX Domain Socket指定することができます。 つまりUNIX Domain Socketを監視することができるのです。 UNIX Domain Socketは例えばアプリケーションとmemcachedやRedisが同居している場合にアプリケーションから接続するときはUNIX Domain Socketを利用する手法がよく取られます。 この手法はTCP Socketを使うよりもスループットが上がります。 そうなると勿論、接続しているUNIX Domain Socketも監視したいですよね。 そこでもcheck-tcpは大活躍です!!

ちなみにUDP ソケットの監視は対応していません。

このようにcheck-tcpプラグインはシンプルな実装ですが色んな使い方が柔軟に出来るプラグインです。 使い方を覚えて是非ご活用ください。

それでは明日は忘れた頃に助けてくれるディスク監視です。

10日目 check-disk