如何从openshift路由器(HAproxy)获取访问日志

时间:2018-01-30 10:25:23

标签: kubernetes openshift openshift-origin

如何从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).

但是没有关于用户流量(客户端/服务器请求/响应)的信息

请告诉我如何调试此代理的工作?

3 个答案:

答案 0 :(得分:4)

您需要将路由器指向syslog服务器以调试输出。默认情况下不输出访问日志。您正在查看Go流程的日志。

我前段时间创建了一个rsyslog container来帮助调试自定义路由器的问题。这将记录到stdout仅用于调试目的。按照自述文件中的说明在默认项目中进行部署。如果您需要任何进一步的帮助,请大声说出来。

答案 1 :(得分:2)

在 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 -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"

答案 2 :(得分:1)

在openshift 3.11中,您可以使用oc adm router命令创建一个新路由器,并启用扩展日志记录

  1. 新路由器
oc adm router myrouter --extended-logging
  1. 启用调试日志记录
oc set env dc/myrouter ROUTER_LOG_LEVEL=debug
  1. 记录日志
oc logs -f myrouter-x-xxxxx -c syslog