使用Logstash收集Kubernetes的应用日志

前言

本文同步更新到Github仓库kubernetes-handbook中。

很多企业内部都有自己的ElasticSearch集群,我们没有必要在kubernetes集群内部 再部署一个,而且这样还难于管理,因此我们考虑在容器里部署logstash收集日志到已有的ElasticSearch集群中。

方案选择

Kubernetes官方提供了EFK的日志收集解决方案,但是这种方案并不适合所有的业务场景,它本身就有一些局限性,例如:

  • 所有日志都必须是out前台输出,真实业务场景中无法保证所有日志都在前台输出
  • 只能有一个日志输出文件,而真实业务场景中往往有多个日志输出文件
  • Fluentd并不是常用的日志收集工具,我们更习惯用logstash
  • 我们已经有自己的ELK集群且有专人维护,没有必要再在kubernetes上做一个日志收集服务

基于以上几个原因,我们决定使用自己的ELK集群。

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

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

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

该方案在扩展性、个性化、部署和后期维护方面都能做到均衡,因此选择该方案。

20170516222039

我们创建了自己的logstash镜像。创建过程和使用方式见https://github.com/rootsongjc/docker-images

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

测试

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

创建应用yaml文件logstash-test.yaml

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本文转自中文社区- 使用Logstash收集Kubernetes的应用日志
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值