使用Logstash收集Kubernetes的应用日志

不少企业内部都有本身的ElasticSearch集群,咱们没有必要在kubernetes集群内部再部署一个,并且这样还难于管理,所以咱们考虑在容器里部署logstash收集日志到已有的ElasticSearch集群中。git

方案选择

Kubernetes官方提供了EFK的日志收集解决方案,可是这种方案并不适合全部的业务场景,它自己就有一些局限性,例如:github

  • 全部日志都必须是out前台输出,真实业务场景中没法保证全部日志都在前台输出
  • 只能有一个日志输出文件,而真实业务场景中每每有多个日志输出文件
  • Fluentd并非经常使用的日志收集工具,咱们更习惯用logstash
  • 咱们已经有本身的ELK集群且有专人维护,没有必要再在kubernetes上作一个日志收集服务

基于以上几个缘由,咱们决定使用本身的ELK集群。web

Kubernetes集群中的日志收集解决方案docker

编号 方案 优势 缺点
1 每一个app的镜像中都集成日志收集组件 部署方便,kubernetes的yaml文件无须特别配置,能够为每一个app自定义日志收集配置 强耦合,不方便应用和日志收集组件升级和维护且会致使镜像过大
2 单首创建一个日志收集组件跟app的容器一块儿运行在同一个pod 低耦合,扩展性强,方便维护和升级 须要对kubernetes的yaml文件进行单独配置,略显繁琐
3 将全部的Pod的日志都挂载到宿主机上,每台主机上单独起一个日志收集Pod 彻底解耦,性能最高,管理起来最方便 须要统一日志收集规则,目录和输出方式

综合以上优缺点,咱们选择使用方案二。api

该方案在扩展性、个性化、部署和后期维护方面都能作到均衡,所以选择该方案。app

20170516222039

咱们建立了本身的logstash镜像。建立过程和使用方式见https://github.com/rootsongjc/docker-images工具

镜像地址:index.tenxcloud.com/jimmy/logstash:5.3.0性能

测试

咱们部署一个应用对logstash的日志收集功能进行测试。测试

建立应用yaml文件logstash-test.yamlui

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: logstash-test
  namespace: default
spec:
  replicas: 3
  template:
    metadata:
      labels:
        k8s-app: logstash-test
    spec:
      containers:
      - image: sz-pg-oam-docker-hub-001.tendcloud.com/library/logstash:5.3.0
        name: logstash
        resources:
          requests:
            cpu: 100m
            memory: 500M
        volumeMounts:
        - name: app-logs
          mountPath: /log
        env: 
        - name: LogFile
          value: '["/log/*","/log/usermange/common/*"]'
        - name: ES_SERVER
          value: 172.23.5.255:9200
        - name: INDICES
          value: logstash-docker
        - name: CODEC
          value: plain 
      - image: sz-pg-oam-docker-hub-001.tendcloud.com/library/analytics-docker-test:Build_8
        name : app
        volumeMounts:
        - name: app-logs
          mountPath: /usr/local/TalkingData/logs
      volumes:
      - name: app-logs
        emptyDir: {}

注意事项

  • 将app的/usr/local/TalkingData/logs目录挂载到logstash的/log目录下。
  • logstash容器大概须要500M以上内存。
  • 该文件能够在manifests/test/logstash-test.yaml找到。
  • 我使用了本身的私有镜像仓库,测试时请换成本身的应用镜像。
  • logstash的环境变量的值配置请参考https://github.com/rootsongjc/docker-images

建立应用

部署Deployment

kubectl create -f logstash-test.yaml

查看http://172.23.5.255:9200/_cat/indices将能够看到列表有这样的indices:

green open logstash-docker-2017.05.16      VkFWx3b_Ss6n4keDmXm-TQ 5 1   2078     0   1.6mb 795.3kb

访问Kibana的web页面,查看logstash-docker-2017.05.16的索引,能够看到logstash收集到了app日志。

20170516222047

相关文章
相关标签/搜索