gRPC-webを利用してサービス開発をしているなかで、つまづいたところを共有していきます。
gRPC-web公式では以下のようにEnvoyを経由してgRPCサーバーと通信します。
クライアント(ブラウザ)-> Envoy -> gRPCサーバー
実際にEnvoyを入れてみたのですが、Envoyへのアクセスログが表示されず不便でした。
Envoyの設定ファイルを調整することでアクセスログの出力が可能になります。
envoy.yaml の設定
以下、公式のサンプルyamlを元に設定します。
https://github.com/envoyproxy/envoy/blob/master/configs/google_com_proxy.v2.yaml
admin:
access_log_path: /tmp/admin_access.log
address:
socket_address:
protocol: TCP
address: 127.0.0.1
port_value: 9901
static_resources:
listeners:
- name: listener_0
address:
socket_address:
protocol: TCP
address: 0.0.0.0
port_value: 10000
filter_chains:
- filters:
- name: envoy.http_connection_manager
config:
stat_prefix: ingress_http
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match:
prefix: "/"
route:
host_rewrite: www.google.com
cluster: service_google
+ access_log:
+ - name: envoy.file_access_log
+ config:
+ path: /dev/stdout
http_filters:
- name: envoy.router
clusters:
- name: service_google
connect_timeout: 0.25s
type: LOGICAL_DNS
# Comment out the following line to test on v6 networks
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
hosts:
- socket_address:
address: google.com
port_value: 443
tls_context: { sni: www.google.com }
この設定を行うことで、Dockerで動いているEnvoyの標準出力へアクセスログが流れるようになります。
※ Dockerへ設定が反映されるように再ビルド等必要になるかもしれません。