👋

はじめてのCloudflare Tunnel その2 確立させたTunnelを監視する

2023/04/28に公開

はじめてのCloudflare Tunnel その1 Cloudflare Tunnelを試してみるでは、Cloudflare Tunnelの設定を行ってみました。
CloudflareのEdgeネットワークと対象サーバのcloudflaredデーモンの間にアウトバウンド型でTunnelが確立され、インバウンド通信の設定不要でSSHやHTTPSなどのプロトコルにオリジンを対応させることができます。

では、そのデーモンやTunnelの監視はどのように行えばいいのでしょうか。この記事ではその設定を試してみます。

オリジン側(デーモンの監視)
デーモン監視なので皆さんが普段利用している任意の方法で監視可能ですが、Cloudflareのドキュメントではsystemctl status cloudflaredを用いています。

[root@ip-172-31-14-42 ~]# systemctl status cloudflared
● cloudflared.service - cloudflared
   Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-04-25 05:09:45 UTC; 2 days ago
 Main PID: 22742 (cloudflared)
   CGroup: /system.slice/cloudflared.service
           └─22742 /usr/bin/cloudflared --no-autoupdate tunnel run --token eyJhIjoiNzA5ZTNkODQ1ZTEwYWFmZTUyYTg4YTgzMzYxNzgyMjAiLCJ0IjoiN2QwN2Fh...

Apr 25 05:09:44 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023/04/25 05:09:44 failed to sufficiently increase rec...ils.
Apr 25 05:09:45 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-25T05:09:45Z INF Registered tunnel connection c...quic
Apr 25 05:09:45 ip-172-31-14-42.ap-northeast-1.compute.internal systemd[1]: Started cloudflared.
Apr 25 05:09:46 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-25T05:09:46Z INF Registered tunnel connection c...quic
Apr 25 05:09:46 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-25T05:09:46Z INF Registered tunnel connection c...quic
Apr 25 05:09:48 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-25T05:09:48Z INF Registered tunnel connection c...quic
Apr 25 05:22:32 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-25T05:22:32Z INF Updated to new configuration c...on=1
Apr 25 05:41:13 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-25T05:41:13Z INF Updated to new configuration confi...
Hint: Some lines were ellipsized, use -l to show in full.

Cloudflare側の監視
以下のステータスがHEALTHY以外となった場合アラートを通知する機能が備わっています。

マネージメントコンソール左ペインからNotificationsをクリックします。

Addを押します。

様々な通知可能項目が出てきますが、Tunnel Health AlertSelectボタンを押します。

以下のように適当な名前をつけAlert送付先メールアドレスを入力し、Nextを押します。

通知の種類を選択します。

Becomes either healthy, degraded, or downを選んで作業を進めるためにCreateを押します。
以上でAlert設定は完了です。

では意図的にTunnelをダウンさせてみます。Amazon EC2の場合、セキュリティグループのアウトバウンドを閉じます。しばらくしてアクセスを行うと以下のようにオリジンへのアクセスが行えないエラーとなります。

cloudflaredのステータスは以下のようになっています。
デーモンはアクティブですが、エラーが出力されています。

systemctl status cloudflared
● cloudflared.service - cloudflared
   Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-04-25 05:09:45 UTC; 2 days ago
 Main PID: 22742 (cloudflared)
   CGroup: /system.slice/cloudflared.service
           └─22742 /usr/bin/cloudflared --no-autoupdate tunnel run --token eyJhIjoiNzA5ZTNkODQ1ZTEwYWFmZTUyYTg4YTgzMzYxNzgyMjAiLCJ0IjoiN2QwN2Fh...

Apr 27 18:45:40 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-27T18:45:40Z ERR  error="Unable to reach the origin...
Apr 27 18:45:40 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-27T18:45:40Z ERR Request failed error="Unable to re...
Apr 27 18:45:40 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-27T18:45:40Z ERR  error="Unable to reach the origin...
Apr 27 18:45:40 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-27T18:45:40Z ERR Request failed error="Unable to re...
Apr 27 18:45:40 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-27T18:45:40Z ERR  error="Unable to reach the origin...
Apr 27 18:45:40 ip-172-31-14-42.ap-northeast-1.compute.internal cloudflared[22742]: 2023-04-27T18:45:40Z ERR Request failed error="Unable to re...
Hint: Some lines were ellipsized, use -l to show in full.

一方Cloudflare側のコンソールでは以下の通りHEALTHYのままとなることに注意してください。

これは、Tunnel自体は存続しておりいつでもcloudflaredからの通信を受け入れ可能であることを示しています。つまり、Tunnel自体の正常性を監視しており、個別セッションが監視されていないことを意味します。追加の監視が必要な場合、例えばAmazon CloudWatch Synthetics等外形監視を使うことをお勧めします。(Cloudflare側にその機能があってもいいと思うのでこれは内部でリクエストを上げておきます)

(2023/05/29追記)
TunnelがDownした場合、以下のメールが届きます。

Discussion