不少企业内部都有本身的ElasticSearch集群,咱们没有必要在kubernetes集群内部再部署一个,并且这样还难于管理,所以咱们考虑在容器里部署logstash收集日志到已有的ElasticSearch集群中。git
Kubernetes官方提供了EFK的日志收集解决方案,可是这种方案并不适合全部的业务场景,它自己就有一些局限性,例如:github
基于以上几个缘由,咱们决定使用本身的ELK集群。web
Kubernetes集群中的日志收集解决方案docker
编号 | 方案 | 优势 | 缺点 |
---|---|---|---|
1 | 每一个app的镜像中都集成日志收集组件 | 部署方便,kubernetes的yaml文件无须特别配置,能够为每一个app自定义日志收集配置 | 强耦合,不方便应用和日志收集组件升级和维护且会致使镜像过大 |
2 | 单首创建一个日志收集组件跟app的容器一块儿运行在同一个pod中 | 低耦合,扩展性强,方便维护和升级 | 须要对kubernetes的yaml文件进行单独配置,略显繁琐 |
3 | 将全部的Pod的日志都挂载到宿主机上,每台主机上单独起一个日志收集Pod | 彻底解耦,性能最高,管理起来最方便 | 须要统一日志收集规则,目录和输出方式 |
综合以上优缺点,咱们选择使用方案二。api
该方案在扩展性、个性化、部署和后期维护方面都能作到均衡,所以选择该方案。app
咱们建立了本身的logstash镜像。建立过程和使用方式见https://github.com/rootsongjc/docker-images工具
镜像地址:index.tenxcloud.com/jimmy/logstash:5.3.0
性能
咱们部署一个应用对logstash的日志收集功能进行测试。测试
建立应用yaml文件logstash-test.yaml
。ui
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: {}
注意事项
/usr/local/TalkingData/logs
目录挂载到logstash的/log
目录下。manifests/test/logstash-test.yaml
找到。建立应用
部署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日志。