• 欢迎访问V小白网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入V小白 暂无QQ群
  • 欢迎访问V小白网站,这是第二个滚动条

在 Kubernetes中,fluentd 以 sidecar 模式收集日志,并发送至 ElasticSearch

其他分类 admin 2019年6月28日 10:36 365 0 个评论

1. 简介

ElasticSearch 在日志收集和分析领域非常流行,而 fluentd 是一种万用型的日志收集器,当然也支持 ES(ElasticSearch)。不过在 Kubnernetes 环境中,问题会变得有点复杂,问题在于是否要把 fluentd 放进跑业务代码的容器里:放在一起的话,fluentd 明显和业务无关;不放在一起的话,fluentd 又如何访问到跑业务容器里的日志呢。 这个问题有多种解决方式,感兴趣的话,可以参考这个链接:Logging Architecture。在这里要介绍的是 sidecar 模式,sidecar 就是题图中的摩托挎斗,对应到 Kubernetes 中,就是在 Pod 中再加一个 container 来跑非核心的代码,来保证隔离性,并尽量缩减容器镜像的大小。

2. 部署

接下来我们就开始部署吧,要先准备好 fluentd 的配置文件,<source> 部分指定的是要上传的日志文件;<match> 部分指定的是日志要传输到哪里,这里指定的就是 ElasticSearch,真正使用的时候要注意根据具体环境替换 <ES-IP>。

$ cat fluentd-config-sidecar.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-config
data:
  fluentd.conf: |
    &lt;source&gt;
      type tail
      format none
      path /var/log/1.log
      pos_file /var/log/1.log.pos
      tag count.format1
    &lt;/source&gt;

    &lt;source&gt;
      type tail
      format none
      path /var/log/2.log
      pos_file /var/log/2.log.pos
      tag count.format2
    &lt;/source&gt;

    &lt;match **&gt;
      type elasticsearch
      host &lt;ES-IP&gt;
      port 9200
      include_tag_key true
      tag_key @log_name
      logstash_format true
      flush_interval 10s
    &lt;/match&gt;

接下来是创建 Pod 的 yaml 文件,其中包含了两个 container:count 和 count-agent。count 是主程序,产生日志;count-agent 是发送日志的 sidecar。这里面由几处需要注意一下:

  • emptyDir:表示创建一个空的目录,之所以用这个种方式挂载日志,原因是 emptyDir 对 Pod 内的全部 container 都可见。

  • fluentd 使用的镜像:原来的镜像是存放在 google container registry 里的,国内无法访问,所以使用了阿里云的源作为替代。

  • FLUENTD_ARGS 环境变量:是 fluentd 的启动参数。

$ cat counter-pod-sidecar.yaml
apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: count
    image: busybox
    args:
    - /bin/sh
    - -c
    - &gt;
      i=0;
      while true;
      do
        echo "$i: $(date)" &gt;&gt; /var/log/1.log;
        echo "$(date) INFO $i" &gt;&gt; /var/log/2.log;
        i=$((i+1));
        sleep 1;
      done
    volumeMounts:
    - name: varlog
      mountPath: /var/log
  - name: count-agent
    image: registry.cn-beijing.aliyuncs.com/k8s-mqm/fluentd-elasticsearch:v2.1.0
    env:
    - name: FLUENTD_ARGS
      value: -c /etc/fluentd-config/fluentd.conf
    volumeMounts:
    - name: varlog
      mountPath: /var/log
    - name: config-volume
      mountPath: /etc/fluentd-config
  volumes:
  - name: varlog
    emptyDir: {}
  - name: config-volume
    configMap:
      name: fluentd-config

3. 参考文档


V小白 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:在 Kubernetes中,fluentd 以 sidecar 模式收集日志,并发送至 ElasticSearch
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到
0个小伙伴在吐槽