经过一番研究,我已经解决了我的自定义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"
我试图创建一个链接到/ dev /标准输出(例如),但不起作用。 我也检查了我的纯apache2容器的httpd.conf,访问日志设置为: CustomLog/proc/self/fd/1 common 和容器日志与Stackdriver一起工作。 要再次尝试我改变了这样的纯HTTP的访问日志: 的CustomLog“日志/访问日志”组合 然后我创建的链接为: access.log里 - >的/ dev /标准输出 ,并且在这种情况下,日志工作。 但是,如果我对我的自定义apache进行了相同的尝试,我从来没有看到Stackdriver上的任何日志.. – suikoy
您可以检查配置文件中的access_log是否打开? –
如果我设置CustomLog“logs/access_log”,其中access_log是一个文件而不是一个链接,我确实在我的自定义apache上工作,我可以看到我的web服务器上的每个访问权限。当我尝试将日志重定向到/ dev/stdout或/ proc/self/fd/1时,问题就出现了。在这种情况下,Apache总是工作,但我无法看到任何stackdriver或kubernetes日志... – suikoy