kubernetes下用logstash代替efk中的fluentd

www.allocmem.com · · 2932 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

目前我们的系统架构,从阿里云的docker compose迁移到了自建的kubernetes,而我们的日志系统也几经周折。从最开始的阿里云docker compose环境下的elk + kafka,使用了一段时间后由于老板觉得阿里云的kafka收费价格不怎么划算,并且线上服务器的资源吃紧,然后切换到了阿里云的日志服务。线上切换到kubernetes以后,又使用efk搜集了一段时间日志,后来发现fluentd搜集的日志存在一些延迟问题和准确性问题,并且变更配置搜集特定的日志时较为繁琐,于是准备把fluentd换为logstash + rabbit,期间对比了下redis,rabbit和kafka,最终选择了在用的自建的rabbit集群,由于近期事情较多,精力有限,此文只会阐述关于logstash和rabbit相关使用的过程,关于rabbit自建集群,以及k8s的efk,以及elk搭建,后面会逐一补充。

简要步骤

  1. 编写logstash的配置文件logstash.conf 建议先在本地使用docker部署logstash,然后在本地进行测试,成功后再部署到kubernetes环境

        input {
            rabbitmq {
              type => "app-log"
              host => "your rabbitmq host"
              user => "your user"
              password => "your password"
              port => 5672
              exchange => "exchange_logs"
              exchange_type => "direct"
              queue => "queue_logs"
              ack => false
              durable => true
            }
           }
    
    
           output {
            elasticsearch {
              hosts => ["elasticsearch.kube-ops:9200"]
              index => "logstash-%{type}-%{+YYYY.MM.dd}"
              document_type => "%{type}"
              flush_size => 20000
              idle_flush_time => 10
              template_overwrite => true
            }
            stdout {
                codec => rubydebug
            }
           }
    

    output同时输出到es和控制台,便于调试

  2. 编写logstash的k8s configMap:

        kind: ConfigMap
        apiVersion: v1
        metadata:
          name: logstash-conf
          namespace: kube-ops
        data:
          logstash.conf: |
           input {
            rabbitmq {
              type => "app-log"
              host => "rabbitmq...."
              user => "..."
              password => "..."
              port => 5672
              exchange => "exchange_logs"
              exchange_type => "direct"
              queue => "queue_logs"
              ack => false
              durable => true
            }
           }
    
    
           output {
            elasticsearch {
              hosts => ["elasticsearch.kube-ops:9200"]
              index => "logstash-%{type}-%{+YYYY.MM.dd}"
              document_type => "%{type}"
              flush_size => 20000
              idle_flush_time => 10
              template_overwrite => true
            }
            stdout {
                codec => rubydebug
            }
           }
    

    执行

        kubectl create -f logstash-configMap.yaml
    
  3. 建议在本地先使用docker进行调试,如果没有问题,则可以进行下一步,部署到k8s中

        docker run -d  -v ~/a/docker/efk-deploy/1.7/bac/es2/qatrans/logstash/logstash.conf:/etc/logstash/logstash.conf  logstash:5.6.4 logstash -f /e
        tc/logstash/logstash.conf
    
    
    
  4. 部署到k8s logstash.yaml如下:

        apiVersion: v1
        kind: Service
        metadata:
          name: logstash
          namespace: kube-ops
        spec:
          ports:
          - port: 5044
            targetPort: beats
          selector:
            type: logstash
          clusterIP: None
        \---
        apiVersion: extensions/v1beta1
        kind: Deployment
        metadata:
          name: logstash
          namespace: kube-ops
        spec:
          template:
            metadata:
              labels:
                type: logstash
            spec:
              containers:
              - image: anteoy/logstash:5.6.4
                name: logstash
                ports:
                - containerPort: 5044
                  name: beats
                command:
                - logstash
                - '-f'
                - '/etc/logstash_c/logstash.conf'
                volumeMounts:
                - name: config-volume
                  mountPath: /etc/logstash_c/
                resources:
                  limits:
                    cpu: 1000m
                    memory: 2048Mi
                  # requests:
                  #   cpu: 512m
                  #   memory: 512Mi
              volumes:
              - name: config-volume
                configMap:
                  name: logstash-conf
                  items:
                  - key: logstash.conf
                    path: logstash.conf
    

    执行: $ kubectl create -f logstash.yaml

    参考

    https://www.elastic.co/guide/en/logstash/current/plugins-inputs-rabbitmq.html https://gist.github.com/dblessing/a9d5a68da56eb451553a

本文来自:www.allocmem.com

感谢作者:www.allocmem.com

查看原文:kubernetes下用logstash代替efk中的fluentd

2932 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传