Web サーバの local スタッツをリモートから見る（cloudflared の GUI 設定で、サクッと）

## はじめに
最近、Cloudflare で Proxy しているオリジンサーバのスタッツをリモートから見たい状況がありました。

しばらく技術職から離れていたところ、cloudflared が GUI から展開できるようになってましたので、それを使ってみました。

やりたいことは

1. Public のホスト名でアクセス
2. Access で認証認可
3. Tunnel (cloudflared) でオリジンサーバのローカルポートへ誘導（Apache の /server-status）
4. Tunnel は GUI で設定する

というような構成です。

## Access の設定

まず外からアクセスするホスト名を決めて、Access を設定します。
（Access の認証認可ポリシーや Proxy するための DNS などの設定はここでは省きます）
![Screen Shot 2022-12-03 at 15.41.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/d0e27ec8-e8ba-f07f-b3cd-9e7373b3f859.png)

## Tunnel の設定
次に Tunnel の設定を行います。
#### Tunnel の名前を指定
![Screen Shot 2022-11-19 at 16.44.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/43847a77-1380-d767-b797-8f0602dc6618.png)

#### 環境の選択と自動導入コマンドの表示

作成時のウィザードではどれでもいいです、あとで選んで使います。
![Screen Shot 2022-11-19 at 16.45.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/1d95ea58-a999-c1a1-62f2-7bac0f3595b5.png)


#### Public Hostnames をトンネルに誘導

ブラウザからの接続: https\://stats.example.com/server-status
オリジンサーバへの接続: http\://localhost:80/server-status 
![Screen Shot 2022-12-03 at 15.44.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/0a2103c2-d165-8fcc-c831-c490bd6502ec.png)

追加設定は2項目を適用しています。

- Host ヘッダの変更

オリジンサーバへのリクエストで HTTP Host ヘッダを stats.example.com でなく localhost で渡したいのでオプションを変更
![Screen Shot 2022-12-03 at 15.46.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/05225b31-b86d-fb34-2407-8c68f1c1d24a.png)

- Access と関連付け

Tunnel が開設され Active になったときの無防備な公開を回避するため、開設前に先に Access 保護をかけておきます。

![Screen Shot 2022-12-03 at 15.47.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/527eeacc-dc88-7e90-83cc-d8d90d072dd8.png)

#### Tunnel 開設
表示されるコマンドをオリジンサーバーにコピペすると、cloudflared が繋がります。
![Screen Shot 2022-12-03 at 16.09.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/da883a6d-3c0d-b1b9-5c0a-8ae7666a5bde.png)


![Screen Shot 2022-12-03 at 16.12.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/bb7f3fcc-3ccb-0c8f-ecec-84489fee3d6e.png)

## 接続
Access の画面へリダイレクトされるので、IDP を選択し、認証します。
![Screen Shot 2022-12-03 at 16.13.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/c9c00883-5cfe-bf98-037a-9447a467c823.png)

IDP 認証がうまくいき、Access の認可も通ると、オリジンサーバのスタッツが表示されます。
Cloudflare で Proxy しながら、オリジンサーバの情報を横目に見ることができました。
![Screen Shot 2022-12-03 at 15.30.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/234676e4-9f90-e8c7-45b1-1476b53a15b2.png)

## ついでに cloudflared の metrics
cloudflared トンネルのスタッツも cloudflared がアウトプットしてます。それも見てみます。
cloudflared.log をみると起動時に metrics という行を見ることができると思います。

![Screen Shot 2022-12-03 at 16.20.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/9627e22a-3c69-f9e1-1677-5e895f670bc3.png)

ここに http でアクセスすると統計情報がとれます。
デフォルトでは起動ごとにポートが変わるので、リモートから取るには面倒です。

#### metrics サーバ Listen IP/Port の固定
起動時にリッスンする IP と Port を指定できるので、それを使って固定します。
CLI では設定ファイルでも指定できますが、今回は GUI 経由で設定していますので起動ファイルの引数で指定してみます。（metrics を上記のコピペにて設定されたデフォルト値から変更しています）
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/remote/remote-management/#linux

![Screen Shot 2022-12-03 at 16.25.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/77f43cef-63ab-9aa1-f753-a8f626c2f0cd.png)

## Tunnel の設定
ブラウザからの接続: https\://stats.example.com/metrics
オリジンサーバへの接続: http\://localhost:11111/metrics
(オプション設定については Apache status と同じ2項目を追加)

![Screen Shot 2022-12-03 at 16.28.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/c68c1ca3-ece7-d949-27ca-27375b6945af.png)

こちらも無事に情報を取れました。

![Screen Shot 2022-12-03 at 15.30.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218045/a40a8ed0-63e5-32b7-50d2-34d05bbdf84a.png)

ただ、文字の羅列なので、人には優しくないです。
これは、Grafana でいい感じに可視化することができそうです。
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/do-more-with-tunnels/grafana/

こちらについては今後ということで。