3scale (RHOAM) のアクセスログを確認する

# このドキュメントの目的

Red Hat の API Management 製品である 3 scale のマネージドサービスである RHAOM (Red Hat OpenShift API Management) のアクセスログを確認してみます。

# デフォルトのログの確認
RHOAM のプロジェクトに移動します。

```
oc project redhat-rhoam-3scale
```

`oc get` で `apicast-xxxxx` と名前を付いた Pod を探します。

```
$ oc get pods | grep apicast | grep Running 
apicast-production-4-j2qv2          2/2     Running     0              118m
apicast-production-4-qs48n          2/2     Running     0              121m
apicast-staging-4-54zrf             2/2     Running     0              121m
apicast-staging-4-chmht             2/2     Running     0              120m
apicast-staging-4-xp8l9             2/2     Running     0              120m
$ 
```

ここでは `Production` 環境を使って実験するので、`apicast-production-4-xxxxx` となっている `Pod` のログに注目します。



Tutorial で作られる サンプルの API の `Prodcution` に `curl` を投げてみます。

```
curl https://api-3scale-apicast-production.apps.rosa-xnhx7.2sg0.p1.openshiftapps.com:443/?user_key=8901105c1ca9a74a3c2f361c10c12345
```

`apicast-production-xxxxx` のどちらかの Pod にログが残ります。

```
$ oc logs apicast-production-4-qs48n -f
...
[06/Jul/2023:05:41:08 +0000] api-3scale-apicast-production.apps.rosa-xnhx7.2sg0.p1.openshiftapps.com:8444 127.0.0.1:40102 "GET /?user_key=8901105c1ca9a74a3c02f361c10c12345 HTTP/2.0" 200 987 (0.100) 0
```

Format は [KB](https://access.redhat.com/solutions/3430151)  に書いてるように、

```
[$time_local] $host:$server_port $remote_addr:$remote_port "$request" $status $body_bytes_sent ($request_time) $post_action_impact
```

になっていますが、`$remote_addr` が `127.0.0.1` になっています。恐らくトラフィックが Router Pod からフォワードされてきているせいだと思いますが、これだとインターネットに公開した場合に誰がアクセスしているのかわかりません。

# Custom logging format を試して見る。

以下のドキュメントを参考に Custom logging format を試して見ます。
この設定はAPI毎に必要です。

https://access.redhat.com/solutions/5345741

https://access.redhat.com/documentation/en-us/red_hat_3scale_api_management/2.9/html/administering_the_api_gateway/apicast_policies#liquid_context_debug

以下のようなフォーマットのストリングを用意します。

```
[{{time_local}}] {{req.headers['HTTP_X_FORWARDED_HOST']}} :{{server_port}} {{remote_addr}}:{{remote_port}} \"{{request}}\"  {{status}} {{body_bytes_sent}} ({{request_time}}) {{req.headers['X-Forwarded-For']}} {{host}} 
```

- [{{time_local}}] 　タイムスタンプ
- {{req.headers['HTTP_X_FORWARDED_HOST']}}:{{server_port}}   アクセスされたドメイン名:ポート
- {{remote_addr}}:{{remote_port}}  リモートアドレス：ポート
-  \"{{request}}\"  　HTTP リクエストの内容
- {{status}}  　HTTPステータス
- {{body_bytes_sent}}  Bodyバイト
- ({{request_time}})  リクエスト時間
- {{req.headers['X-Forwarded-For']}}  X-FORWARDED-FOR 
- {{host}} バックエンドのホスト名


「Integration」=>「Policies」から「Add policies」で「Loggging」を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/3541d921-2f6c-ccd2-832e-8d15fb17a0c8.png)

「Custom logging format」の所に前述のストリングを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/6bcbbf07-b3a5-93cc-e4c4-441ea1b7a0a7.png)


「Update Policy」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/7274c6d8-4431-ab03-e370-41114d15b949.png)

「Update Polciy Chain」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/3411e17b-dec6-ceb0-5a1c-1098b6f7acca.png)

「Integration」=>「Configuration」に行きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/2687eafb-873f-e3dc-cd40-526a03a7dbbd.png)

「Staging」=>「Production」と Promotion していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/eee643ec-5e43-52b8-97f3-018b8454381b.png)


`Production` にデプロイされてから、反映されるまで数分かかるようです。
`curl` でアクセスしてみます。

```
curl https://api-3scale-apicast-production.apps.rosa-xnhx7.2sg0.p1.openshiftapps.com:443/?user_key=8901105c1ca9a74a3c2f361c10c0850
```

`Pod` のログを確認してみます。想定通りに出力されているようです。

```
$ oc logs apicast-production-4-qs48n -f
...
[06/Jul/2023:11:53:31 +0000] api-3scale-apicast-production.apps.rosa-xnhx7.2sg0.p1.openshiftapps.com :8444 127.0.0.1:59892 \"GET /?user_key=8901105c1ca9a74a3c02f361c10c0850 HTTP/2.0\"  200 987 (0.000) 217.178.16.46 echo-api.3scale.net 
```