使用Logstash收集Kubernetes的应用日志

栏目: 服务器 · 发布时间: 7年前

内容简介:使用Logstash收集Kubernetes的应用日志

使用Logstash收集Kubernetes的应用日志

(题图:798艺术区 May 14,2017)

前言

本文同步更新到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收集Kubernetes的应用日志

我们创建了自己的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的应用日志


以上所述就是小编给大家介绍的《使用Logstash收集Kubernetes的应用日志》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Professional JavaScript for Web Developers

Professional JavaScript for Web Developers

Nicholas C. Zakas / Wrox / 2009-1-14 / USD 49.99

This eagerly anticipated update to the breakout book on JavaScript offers you an in-depth look at the numerous advances to the techniques and technology of the JavaScript language. You'll see why Java......一起来看看 《Professional JavaScript for Web Developers》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器