2017-11-25 202 views
0

我想知道爲了將我自定義的apache容器中創建的日誌(部署在帶有Kubernetes的容器中)發送到Stackdriver收集器需要遵循哪些步驟。Kubernetes集羣中的自定義碼頭集裝箱使用Stackdriver日誌

我注意到,如果我用標準apache(或nginx)容器創建一個窗格,access.log和error.log會自動發送到Stackdriver。

其實我能看到日誌上都Kubernetes儀表盤和谷歌雲儀表盤--->日誌--->日誌 相反,我沒有看到任何有關我的自定義的Apache ...

有什麼建議嗎?

回答

0

經過一番研究,我已經解決了我的自定義apache容器中的日誌轉發器的問題。

我不知道爲什麼「標準重定向」(使用/ dev/stdout或/ proc/self/fd/1)無法正常工作,我跟蹤的解決方案稱爲「帶有日誌代理的sidecar容器」

1)創建configMag文件,其中將設置一個fluentd配置:

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)創建2個容器莢:自定義的Apache +日誌劑。兩個容器都會安裝一個日誌文件夾。只有登錄代理將安裝fluentd配置:

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)進入了我的Apache容器:

和變化/檢查httpd.conf中使用下列文件:

ErrorLog /var/log/error.log 

CustomLog /var/log/access.log common 

(如果你改變了某些東西,記得重新啓動apache ..)

4)現在,在谷歌雲端控制檯 - >日誌記錄,你就可以看到爲Stackdriver apache的訪問/錯誤日誌中包含的過濾器:

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

讓我們從Nginx容器的默認行爲開始,它將日誌發送到access.log和error.log。這兩個文件有符號鏈接(軟鏈接)如下

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

因此,您可以訪問Kubernetes儀表板和谷歌雲儀表板中的日誌。

解決您的問題

當你有自定義的Apache或Nginx的服務器,我建議你檢查的access.log和error.log有符號鏈接在/ dev /標準輸出爲/ dev/stderr文件。

如果沒有符號鏈接,則需要爲兩個文件創建它才能訪問日誌。 這是執行此操作的命令。

ln -s source_file myfile 
+0

我試圖創建一個鏈接到/ dev /標準輸出(例如),但不起作用。 我也檢查了我的純apache2容器的httpd.conf,訪問日誌設置爲: CustomLog/proc/self/fd/1 common 和容器日誌與Stackdriver一起工作。 要再次嘗試我改變了這樣的純HTTP的訪問日誌: 的CustomLog「日誌/訪問日誌」組合 然後我創建的鏈接爲: access.log裏 - >的/ dev /標準輸出 ,並且在這種情況下,日誌工作。 但是,如果我對我的自定義apache進行了相同的嘗試,我從來沒有看到Stackdriver上的任何日誌.. – suikoy

+0

您可以檢查配置文件中的access_log是否打開? –

+0

如果我設置CustomLog「logs/access_log」,其中access_log是一個文件而不是一個鏈接,我確實在我的自定義apache上工作,我可以看到我的web服務器上的每個訪問權限。當我嘗試將日誌重定向到/ dev/stdout或/ proc/self/fd/1時,問題就出現了。在這種情況下,Apache總是工作,但我無法看到任何stackdriver或kubernetes日誌... – suikoy