2017-11-25 11 views
0

사용자 지정 Apache 컨테이너 (Kubernetes가있는 포드에서 배포 됨)에서 생성 된 로그를 Stackdriver 수집기로 보내려면 따라야하는 단계를 알고 싶습니다.Stackdriver를 사용하여 Kubernetes 클러스터의 사용자 지정 도커 컨테이너

표준 아파치 (또는 nginx) 컨테이너로 포드를 만들면 access.log 및 error.log가 Stackdriver에 자동으로 전송된다는 사실을 알고있었습니다.

은 사실 나는 ---> 로깅 ---> 내가 관련된 아무것도 표시되지 않는 대신 로그 내 사용자 지정 아파치 ...

는 Kubernetes 대시 보드와 Google 클라우드 대시 보드에 모두 로그를 볼 수 있어요

제안 사항이 있으십니까?

답변

0

일부 연구를 마친 후 사용자 지정 Apache 컨테이너에서 로그 전달자 문제가 해결되었습니다.

"표준 리디렉션"(/ dev/stdout 또는/proc/self/fd/1 사용)이 작동하지 않는 이유는 "로깅 에이전트가있는 사이드카 컨테이너"

apiVersion: v1 
data: 
    fluentd.conf: | 
    <source> 
     type tail 
     format none 
     path /var/log/access.log 
     pos_file /var/log/access.log.pos 
     tag count.format1 
    </source> 

    <source> 
     type tail 
     format none 
     path /var/log/error.log 
     pos_file /var/log/error.log.pos 
     tag count.format2 
    </source> 

    <match **> 
     type google_cloud 
    </match> 
kind: ConfigMap 
metadata: 
    name: my-fluentd-config 

2)이 개 컨테이너 포드를 만들 : 사용자 정의 아파치 + 로그 에이전트

1) 당신이 Fluentd에 구성을 설정거야 configMag 파일을 만듭니다. 두 컨테이너 모두 로그 폴더를 마운트합니다.

apiVersion: v1 
kind: Pod 
metadata: 
    name: my-sidecar 
    labels: 
    app: my-sidecar 
spec: 
    volumes: 
    - name: varlog 
    emptyDir: {} 
    - name: config-volume 
    configMap: 
     name: my-fluentd-config 

    containers: 
    - name: my-apache 
    image: <your_custom_image_repository> 
    ports: 
     - containerPort: 80 
     name: http 
     protocol: TCP 
    volumeMounts: 
    - name: varlog 
     mountPath: /var/log 

    - name: log-agent 
    image: gcr.io/google_containers/fluentd-gcp:1.30 
    env: 
    - name: FLUENTD_ARGS 
     value: -c /etc/fluentd-config/fluentd.conf 
    volumeMounts: 
    - name: varlog 
     mountPath: /var/log 
    - name: config-volume 
     mountPath: /etc/fluentd-config 

3) 내-아파치 용기에 입력 : 만 로그 에이전트는 Fluentd에 설정 마운트

및 변경/다음 파일 사용하는 httpd.conf 파일을 확인하십시오

ErrorLog /var/log/error.log 

CustomLog /var/log/access.log common 

(변경 사항이 있으면 아파치를 다시 시작해야합니다.))

4) 이제 Google 클라우드 콘솔에서 -> 당신은 같은 필터를 사용하여 스택 드라이버의 아파치 액세스/오류 로그를 볼 수 있습니다 로그 :

resource.type="container" 
labels."compute.googleapis.com/resource_name"="my-sidecar" 
0

Nginx 컨테이너의 기본 동작부터 시작하여 access.log 및 error.log에 로그를 보냅니다. 파일 모두 따라서는 Kubernetes 대시 보드 및 Google 클라우드 대시 보드 로그에 액세스 할 수 있습니다

access.log -> /dev/stdout 
error.log -> /dev/stderr 

을 다음과 같이 심볼릭 링크 (소프트 링크)를 가지고있다. access.log의와하는 error.log는 심볼릭 링크가있는 경우 사용자 정의 Apache 또는 Nginx에 서버를 가지고

내가 당신을 제안 문제에

솔루션 확인하기는/dev/표준 출력/dev에/stderr 파일 각각.

심볼릭 링크가없는 경우 로그에 액세스하려면 두 파일 모두에 심볼릭 링크를 만들어야합니다. 명령입니다.

ln -s source_file myfile 
+0

나는/dev에 대한 링크를 만들려고/stdout (예를 들면)하지만 작동하지 않습니다. 내 pure apache2 컨테이너의 httpd.conf도 확인했는데 액세스 로그는 CustomLog/proc/self/fd/1 공통 으로 설정되어 있고 컨테이너 로그는 Stackdriver에서 작동합니다. 나는이 방법으로 순수한 HTTP의 액세스 로그 변경 다른 시도 만들려면 : 때 CustomLog "로그/access_log를"다음 을 결합 내가 같이 링크를 만들어 : access.log의 -이 경우도>는/dev/표준 출력 과 로그 작업. 하지만 내 사용자 지정 아파치에 동일한 시도를하면 Stackdriver에 아무 로그도 표시되지 않습니다 .. – suikoy

+0

구성 파일의 access_log가 켜져 있는지 확인할 수 있습니까? –

+0

사실 CustomLog "logs/access_log"를 설정하면 사용자 정의 아파치에서 실제로 작동합니다. 여기서 access_log는 링크가 아닌 파일이고 내 웹 서버의 모든 액세스를 볼 수 있습니다. 로그를/dev/stdout 또는/proc/self/fd/1로 리디렉션하려고하면 문제가 발생합니다. 그 경우 아파치는 항상 작동하지만 stackdriver 또는 kubernetes 로그에서 아무 것도 볼 수 없습니다 ... – suikoy