如何从 OpenShift 路由器 (HAProxy) 获取访问日志?
How to get access-logs from OpenShift router (HAProxy)?
如何从 openshift 路由器 (HAproxy) 获取访问日志。
我尝试使用这个命令:
$ oc project default
$ oc logs router-1-g...
我得到了输出:
I0129 09:47:17.125616 1 router.go:554] Router reloaded:
- Checking http://localhost:80 ...
- Health check ok : 0 retry attempt(s).
I0129 09:47:54.356142 1 router.go:554] Router reloaded:
- Checking http://localhost:80 ...
- Health check ok : 0 retry attempt(s).
但是没有关于用户流量的信息(client/server requests/responses)。
请告诉我如何调试此代理的工作方式?
您需要将路由器指向系统日志服务器以调试输出。默认不输出访问日志。您正在查看 Go 进程的日志。
前段时间我创建了一个 rsyslog container 来帮助调试自定义路由器的问题。这将记录到 stdout 仅用于调试目的。按照自述文件中的说明在默认项目中部署它。如果您需要任何进一步的帮助,请大声喊出来。
在 openshift 3.11 中,您可以使用启用了扩展日志记录的 oc adm router 命令创建一个新路由器
- 新路由器
oc adm router myrouter --extended-logging
- 启用调试日志记录
oc set env dc/myrouter ROUTER_LOG_LEVEL=debug
- 跟踪日志
oc logs -f myrouter-x-xxxxx -c syslog
在 Openshift >=4.5 上,您可以通过编辑 ingresscontroller 并添加以下内容来做到这一点。spec.logging(见下文,包括日志格式示例):
apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
name: default
namespace: openshift-ingress-operator
spec:
logging:
access:
destination:
type: Container
# % formats see here: http://cbonte.github.io/haproxy-dconv/2.0/configuration.html#8.2.3
httpLogFormat: log_source="haproxy-default" log_type="http" c_ip="%ci" c_port="%cp"
req_date="%tr" fe_name_transport="%ft" be_name="%b" server_name="%s" res_time="%TR"
tot_wait_q="%Tw" Tc="%Tc" Tr="%Tr" Ta="%Ta" status_code="%ST" bytes_read="%B"
bytes_uploaded="%U" captrd_req_cookie="%CC" captrd_res_cookie="%CS" term_state="%tsc"
actconn="%ac" feconn="%fc" beconn="%bc" srv_conn="%sc" retries="%rc" srv_queue="%sq"
backend_queue="%bq" captrd_req_headers="%hr" captrd_res_headers="%hs" http_request="%r"
此解决方案基于 https://access.redhat.com/solutions/3250781。
Openshift 3.x 也有一个解决方案。
您可以通过 'oc logs -n openshift-ingress <your-router-pod-name> -c logs'.
访问日志
也可以将这些日志直接发送到系统日志服务器:
apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
name: default
namespace: openshift-ingress-operator
spec:
logging:
access:
destination:
type: Syslog
syslog:
address: 1.2.3.4
port: 10514
# % formats see here: http://cbonte.github.io/haproxy-dconv/2.0/configuration.html#8.2.3
httpLogFormat: log_source="haproxy-default" log_type="http" c_ip="%ci" c_port="%cp"
req_date="%tr" fe_name_transport="%ft" be_name="%b" server_name="%s" res_time="%TR"
tot_wait_q="%Tw" Tc="%Tc" Tr="%Tr" Ta="%Ta" status_code="%ST" bytes_read="%B"
bytes_uploaded="%U" captrd_req_cookie="%CC" captrd_res_cookie="%CS" term_state="%tsc"
actconn="%ac" feconn="%fc" beconn="%bc" srv_conn="%sc" retries="%rc" srv_queue="%sq"
backend_queue="%bq" captrd_req_headers="%hr" captrd_res_headers="%hs" http_request="%r"
如何从 openshift 路由器 (HAproxy) 获取访问日志。
我尝试使用这个命令:
$ oc project default
$ oc logs router-1-g...
我得到了输出:
I0129 09:47:17.125616 1 router.go:554] Router reloaded:
- Checking http://localhost:80 ...
- Health check ok : 0 retry attempt(s).
I0129 09:47:54.356142 1 router.go:554] Router reloaded:
- Checking http://localhost:80 ...
- Health check ok : 0 retry attempt(s).
但是没有关于用户流量的信息(client/server requests/responses)。
请告诉我如何调试此代理的工作方式?
您需要将路由器指向系统日志服务器以调试输出。默认不输出访问日志。您正在查看 Go 进程的日志。
前段时间我创建了一个 rsyslog container 来帮助调试自定义路由器的问题。这将记录到 stdout 仅用于调试目的。按照自述文件中的说明在默认项目中部署它。如果您需要任何进一步的帮助,请大声喊出来。
在 openshift 3.11 中,您可以使用启用了扩展日志记录的 oc adm router 命令创建一个新路由器
- 新路由器
oc adm router myrouter --extended-logging
- 启用调试日志记录
oc set env dc/myrouter ROUTER_LOG_LEVEL=debug
- 跟踪日志
oc logs -f myrouter-x-xxxxx -c syslog
在 Openshift >=4.5 上,您可以通过编辑 ingresscontroller 并添加以下内容来做到这一点。spec.logging(见下文,包括日志格式示例):
apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
name: default
namespace: openshift-ingress-operator
spec:
logging:
access:
destination:
type: Container
# % formats see here: http://cbonte.github.io/haproxy-dconv/2.0/configuration.html#8.2.3
httpLogFormat: log_source="haproxy-default" log_type="http" c_ip="%ci" c_port="%cp"
req_date="%tr" fe_name_transport="%ft" be_name="%b" server_name="%s" res_time="%TR"
tot_wait_q="%Tw" Tc="%Tc" Tr="%Tr" Ta="%Ta" status_code="%ST" bytes_read="%B"
bytes_uploaded="%U" captrd_req_cookie="%CC" captrd_res_cookie="%CS" term_state="%tsc"
actconn="%ac" feconn="%fc" beconn="%bc" srv_conn="%sc" retries="%rc" srv_queue="%sq"
backend_queue="%bq" captrd_req_headers="%hr" captrd_res_headers="%hs" http_request="%r"
此解决方案基于 https://access.redhat.com/solutions/3250781。
Openshift 3.x 也有一个解决方案。
您可以通过 'oc logs -n openshift-ingress <your-router-pod-name> -c logs'.
访问日志也可以将这些日志直接发送到系统日志服务器:
apiVersion: operator.openshift.io/v1
kind: IngressController
metadata:
name: default
namespace: openshift-ingress-operator
spec:
logging:
access:
destination:
type: Syslog
syslog:
address: 1.2.3.4
port: 10514
# % formats see here: http://cbonte.github.io/haproxy-dconv/2.0/configuration.html#8.2.3
httpLogFormat: log_source="haproxy-default" log_type="http" c_ip="%ci" c_port="%cp"
req_date="%tr" fe_name_transport="%ft" be_name="%b" server_name="%s" res_time="%TR"
tot_wait_q="%Tw" Tc="%Tc" Tr="%Tr" Ta="%Ta" status_code="%ST" bytes_read="%B"
bytes_uploaded="%U" captrd_req_cookie="%CC" captrd_res_cookie="%CS" term_state="%tsc"
actconn="%ac" feconn="%fc" beconn="%bc" srv_conn="%sc" retries="%rc" srv_queue="%sq"
backend_queue="%bq" captrd_req_headers="%hr" captrd_res_headers="%hs" http_request="%r"