2017-11-25 201 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