使用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 | 完全解耦,性能最高,管理起来最方便 | 需要统一日志收集规则,目录和输出方式 | 
综合以上优缺点,我们选择使用方案二。
该方案在扩展性、个性化、部署和后期维护方面都能做到均衡,因此选择该方案。
我们创建了自己的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日志。
本文转自中文社区-
使用Logstash收集Kubernetes的应用日志
关注公众号
					低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 
							
								
								    上一篇
								    
								
								kubernetes1.8.1安装指南,离线安装,内网安装
使用kubeadm部署k8s集群 三步装 集群:[离线包地址](https://market.aliyun.com/products/56014009/cmxz022571.html#sku=yuncode1657100000) 基础环境 关闭swap swapoff -a 再把/etc/fstab文件中带有swap的行删了,没有就无视 装这两工具如果没装的话 yum install -y ebtables socat IPv4 iptables 链设置 CNI插件需要 sysctl net.bridge.bridge-nf-call-iptables=1 墙外安装 在国内是很难使用这种方式安装了,推荐查看离线安装的方案 装docker yum install -y docker systemctl enable docker && systemctl start docker 装kubeadm kubectl kubelet cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=...
 - 
							
								
								    下一篇
								    
								
								IT专家们谈OpenStack和Kubernetes的未来
一位来自451 Research的分析师Carl Brooks表示:“如果你正确构建了运营云,并使用像K8s这样的容器技术,将会使它变得更加可行。 Brooks说,这对OpenStack私有云构建来说很重要。就像eBay,作为OpenStack与K8s共同的知名客户,他们有很庞大的资源投入到OpenStack以构建大家所熟知的很复杂的环境。可见OpenStack在企业中仍得到了非常重要的应用,因此,他预测OpenStack将成为容器部署组合中的一部分。 Brooks还说道,事实上,OpenStack越来越重视stack应用的高层构建,这意 味着OpenStack能成功使抽象化和自动化的概念不再依赖IT的基础架构。 Openstack和K8s呈“三明治”结构 目前市场还未确定OpenStack和K8s在企业中应该集合在多层架构中还是分开部署扮演不同的角色。 红帽的OpenShift产品中将OpenStack和K8s相结合,使得这个产品取得了被认可的成功。负责某大型欧洲旅游企业基础设施运营的工程师表示,他更偏向于用红帽的OpenStack版本来管理支撑OpenShift中K8s集群的网络和...
 
相关文章
文章评论
共有0条评论来说两句吧...

			
				
				
				
				
				
				
				
微信收款码
支付宝收款码