在kubernetes集群中部署logstash步骤如下:

1:logstash安装文件(目前最新版本2.3.4);

2:编写Dockerfile及执行点脚本文件run.sh,并且修改logstash conf文件,配置为消费指定rabbitmq queue,并持久化消息至目标elasticsearch集群,制作logstash镜像;

3:推送镜像至某个Docker源,可以是公网的源,也可以是公司内部源;

4:在kubernetes主节点编写logstash镜像对应的RC文件;

5:在kubernetes集群中创建logstash pods;

6:测试验证

================================================================================================

1:logstash安装文件(目前最新版本2.3.4)

logstash目前最新版本安装包:logstash-2.3.4.tar.gz,可事先下载COPY进Docker镜像,也可以通过wget的方式在Dockerfile中配置下载;

================================================================================================

2:编写Dockerfile及执行点脚本文件run.sh,并且修改logstash conf文件,配置为消费指定rabbitmq queue,并持久化消息至目标elasticsearch集群,制作logstash镜像

由于logstash运行依赖于其配置文件,需要根据实际使用场景对配置文件的in,filter,out三个模块进行配置,因此需要先建立好conf文件;

我的使用场景是logstash作为rabbitmq中日志信息队列的消费者,获得rabbitmq推送的消息后,推送至out模块配置的elasticsearch集群,以供kibana使用(ELK框架)。

这是一个比较典型的应用场景,也可以根据实际需求配置logstash为redis或其它数据源的消费者;

如下是我的场景中的logstash配置文件(log-pipeline.conf):

 input {
   http {
   }
   rabbitmq {
         host => "localhost"
         port => 5672
         queue => "example.queue"
         key => ""
         user => "guest"
         password => "guest"
         durable => true
   }
 }
 filter {
   date {
         match => [ "timestamp","yyyy-MM-dd HH:mm:ss" ]
   }
 }
 output {
    elasticsearch {
         hosts => ["localhost:9200"]
         index => "logstash-*"
    }
 }

配置文件中的所有配置项都是默认值,实际参数是配置在kubernetes集群的RC文件中的;

同时,我们这里打开了http这个in模块,接受http直接推送消息,默认端口是8080;

现在我们可以建立Dockerfile:

 FROM centos:7.2.1511
 MAINTAINER JiaKai "jiakai@gridsum.com"
 COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
 RUN yum update -y -q && yum install -y -q java-headless which && rm -rf /var/cache/yum
 ENV LOGSTASH_VERSION 2.3.4
 COPY ./logstash-${LOGSTASH_VERSION}.tar.gz /opt/logstash-${LOGSTASH_VERSION}.tar.gz
 RUN tar -xzf /opt/logstash-${LOGSTASH_VERSION}.tar.gz && \
     mv -f /logstash-${LOGSTASH_VERSION} /opt/logstash && \
     rm -f /opt/logstash-${LOGSTASH_VERSION}.tar.gz
 ENV CONF_FILE /log-pipeline.conf
 COPY ./log-pipeline.conf ${CONF_FILE}
 COPY ./run.sh /run.sh
 RUN chmod a+wx ${CONF_FILE} && chmod a+x /run.sh
 # logstash-input-http plugin default port 8080
 EXPOSE 8080
 CMD ["/run.sh"]

Dockerfile中需要注意的是,logstash的运行依赖于java环境及which组件,需要在基础镜像的基础上安装,同时要注意清除yum缓存,打开8080端口为为了支持logstash的http模块(在我的应用场景中也可以不打开);

Dockerfile的入口点run.sh文件如下:

 #!/bin/sh
 set -e
 RABBIT_HOST=${RABBIT_HOST:-localhost}
 RABBIT_PORT=${RABBIT_PORT:-5672}
 RABBIT_QUEUE=${RABBIT_QUEUE:-example.queue}
 RABBIT_USER=${RABBIT_USER:-guest}
 RABBIT_PWD=${RABBIT_PWD:-guest}
 ES_URLS=${ES_URLS:-localhost:9200}
 ES_INDEX=${ES_INDEX:-logstash-*}

 sed -i "s;^.*host => .*;        host => \"${RABBIT_HOST}\";" ${CONF_FILE}
 sed -i "s;^.*port => .*;        port => ${RABBIT_PORT};" ${CONF_FILE}
 sed -i "s;^.*queue => .*;        queue => \"${RABBIT_QUEUE}\";" ${CONF_FILE}
 sed -i "s;^.*user => .*;        user => \"${RABBIT_USER}\";" ${CONF_FILE}
 sed -i "s;^.*password => .*;        password => \"${RABBIT_PWD}\";" ${CONF_FILE}
 sed -i "s;^.*hosts => .*;        hosts => [\"${ES_URLS}\"];" ${CONF_FILE}
 sed -i "s;^.*index => .*;        index => \"${ES_INDEX}\";" ${CONF_FILE}

 exec /opt/logstash/bin/logstash -f ${CONF_FILE}

需要注意的是在配置文件的修改中,字符串参数需要双引号,因此sh中以\"包含起来;

完成以上3个文件的创建,即可通过

sudo docker build -t="jiakai/logstash:2.3.4" .

来创建logstash的Docker镜像;

无误的话将得到名为jiakai/logstash,Tag为2.3.4的logstash镜像,可以通过

sudo docker run -e RABBIT_HOST=10.XXX.XXX.XXX -e RABBIT_PORT=5672 -e RABBIT_QUEUE=Gridsum.LawDissector.NLog.Targets.LogMessage:Gridsum.LawDissector.NLog.Targets -e RABBIT_USER=XXX -e RABBIT_PWD=XXX -e ES_URLS=10.XXX.XXX.XXX:XXXX -e ES_INDEX=ld.log-%{+YYYY.MM} -i -t 913defa45d4c

来启动该镜像,其中913defa45d4c是我的Docker镜像ID,根据实际更改即可,无误的话,这时候我们查看Rabbitmq中指定的队列的consumer,会多出一个我们执行Docker镜像的宿主机的消费者,且这个IP是docker0的IP;

===============================================================================================

3:推送镜像至某个Docker源,可以是公网的源,也可以是公司内部源

推送镜像之前需要为镜像重新标记(TAG),这里以公司的内部源为例,将制作好的镜像推送至目标源:

sudo docker Tag jiakai/logstash:2.3.4 10.200.XXX.XXX:5000/gridsum/logstash:2.3.4

===============================================================================================

4:在kubernetes主节点编写logstash镜像对应的RC文件

5:在kubernetes集群中创建logstash pods;

6:测试验证。

由于我们场景中的logstash无需对外提供服务,仅仅作为rabbitmq的消费者存在,因此无需在kubernetes中提供logstash service,至需要利用RC保持logstash的高可用服务即可,因此我们建立logstash的RC文件:

 apiVersion: v1
 kind: ReplicationController
 metadata:
   name: logstash
   namespace: default
   labels:
     component: elk
     name: logstash
 spec:
   replicas: 1
   selector:
     component: elk
     name: logstash
   template:
     metadata:
       labels:
         component: elk
         name: logstash
     spec:
       containers:
       - name: logstash
         image: 10.XXX.XXX.XXX:5000/gridsum/logstash:2.3.4
         env:
         - name: RABBIT_HOST
           value: 10.XXX.XXX.XXX
         - name: RABBIT_PORT
           value: "5672"
         - name: RABBIT_QUEUE
           value: Gridsum.LawDissector.NLog.Targets.LogMessage:Gridsum.LawDissector.NLog.Targets
         - name: RABBIT_USER
           value: XXX
         - name: RABBIT_PWD
           value: XXX
         - name: ES_URLS
           value: 10.XXX.XXX.XXX:XXXX
         - name: ES_INDEX
           value: ld.log-%{+YYYY.MM}
         ports:
           - containerPort: 8080
             name: http
             protocol: TCP

文件保存为logstash-controller.yaml,之后在kubernetes集群主节点上执行

kubectl create -f logstash-controller.yaml

启动该RC;通过

kubectl get pods

检查logstash pod是否正常运行(running),同时检查rabbitmq对应的queue是否正确由这个logstash pod消费,再从elasticsearch集群确认消费的日志消息时候已经正确推送ELK。

经过以上步骤,即可通过kubernetes集群提供高可用的logstash服务,为ELK框架提供支持。

使用kuernetes提供高可用的logstash服务的更多相关文章

  1. 使用kuernetes提供高可用的kibana服务

    在kubernetes集群中部署kibana步骤如下: 1:kibana安装文件(目前最新版本4.5.1): 2:编写Dockerfile及执行点脚本文件run.sh,制作Kibana镜像: 3:推送 ...

  2. heartbeat单独提供高可用服务

    本文目录:1.简介2.安装heartbeat 2.1 编译安装Heartbeat3.heartbeat相关配置文件 3.1 配置文件ha.cf 3.2 配置文件authkeys 3.3 配置文件har ...

  3. 每天响应数亿次请求,腾讯云如何提供高可用API服务?

    每天响应数亿次请求,腾讯云如何提供高可用API服务? https://mp.weixin.qq.com/s/OPwlHcqkaTT_gcwHfr5Shw 李阳 云加社区 2020-09-16 导语 | ...

  4. 搭建高可用的Redis服务,需要注意这些方面!

    搭建高可用的Redis服务,需要注意这些方面! HorstXu 占小狼的博客 今天 ◎作者 | HorstXu www.cnblogs.com/xuning/p/8464625.html 基于内存的R ...

  5. [ Openstack ] Openstack-Mitaka 高可用之 网络服务(Neutron)

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  6. [ Openstack ] Openstack-Mitaka 高可用之 计算服务(Nova)

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  7. [ Openstack ] OpenStack-Mitaka 高可用之 镜像服务(glance)

    目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...

  8. MaxCompute,基于Serverless的高可用大数据服务

    摘要:2019年1月18日,由阿里巴巴MaxCompute开发者社区和阿里云栖社区联合主办的“阿里云栖开发者沙龙大数据技术专场”走近北京联合大学,本次技术沙龙上,阿里巴巴高级技术专家吴永明为大家分享了 ...

  9. suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用

    文章目录 编译部署nginx 下载nginx源码包 编译nginx 配置nginx.conf 配置nginx为systemctl管理 分发nginx二进制文件和配置文件 启动kube-nginx服务 ...

随机推荐

  1. AC日记——二叉树最大宽度和高度 1501 codevs

    1501 二叉树最大宽度和高度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver     题目描述 Description   给出一个二叉树,输出它的最大宽 ...

  2. iOS多线程开发资源抢夺和线程间的通讯问题

    说到多线程就不得不提多线程中的锁机制,多线程操作过程中往往多个线程是并发执行的,同一个资源可能被多个线程同时访问,造成资源抢夺,这个过程中如果没有锁机制往往会造成重大问题.举例来说,每年春节都是一票难 ...

  3. JavaScript Number 对象

    JavaScript Number 对象 Number 对象 Number 对象是原始数值的包装对象. Number 创建方式 new Number(). 语法 var num = new Numbe ...

  4. 根据Unicode编码用C#语言把它转换成汉字的代码

    rt 根据所具有的Unicode编码用C#语言把它转换成汉字的代码 var s = System.Web.HttpUtility.HtmlDecode(Utf8Str); var o = Newton ...

  5. ubuntu Apache 2命令

    Task: Start Apache 2 Server /启动apache服务# /etc/init.d/apache2 startor$ sudo /etc/init.d/apache2 start ...

  6. 在GoF设计模式

    在GoF设计模式中,结构型模式有: 1.适配器模式 Adapter   适配器模式是将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.   ...

  7. stack overflow错误分析

    stack overflow(堆栈溢出)就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据. 或者解释为 在长字符串中嵌入一段代码,并将过程的返回地址 ...

  8. 最佳实践 —— 详细谈谈如何减小APK体积

    转载请注明出处: http://www.cnblogs.com/soaringEveryday/p/5254520.html 随着Android移动开发的需求越来越复杂,我们不可避免的遇到发布出去的a ...

  9. gravity、layout_gravity及orientation

    gravity.layout_gravity及orientation 最近在弄一个简单的界面:横向,添加一张准备好的背景图,在界面右边居中放置一个按钮.实现过程中发现对布局的主要属性没有想象中地那么熟 ...

  10. dig 常用的域名查询工具

    dig 命令是常用的域名查询工具,可以用来测试域名系统工作是否正常. 语法: dig (选项) (参数) 选项: @<服务器地址>: 指定进行域名解析的域名服务器: -b: 当主机具有多个 ...