Contents
  1. 1. 总体架构
  2. 2. elasticsearch
  3. 3. kafka
  4. 4. logstash、flume、kafka-connect-elasticsearch

总体架构

最近自己搭建了一套ELK,在摸索中总结了一下,这个post不是一个step by step安装教程。
现在初步的架构是这样:

logs表示从客户端收集到的日志,收集日志通常使用logstash、flume、自己写的python工具等。
kafka是作为一个缓冲和标准的数据传输接口。
logstash作为kafka和es的桥梁、原本想使用其他方式、比如flume、kafka-connect-elasticsearch等工具直接把json格式录入es、不过遇到版本问题,我安装的es版本5.4太新了,一些工具都没update,就先用logstash吧
当前算是初代架构,后面看情况调整。

elasticsearch

elasticsearch是一个全文索引的存储引擎吧,能快速搜索海量数据
安装还是使用apt

1
2
3
4
5
6
7
# 导入PGP Key
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# 从APT库安装
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update
sudo apt-get install elasticsearch

ps 如果安装es6的话用

1
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

基本上导入了上面的elastic源就能apt安装logstash、elasticsearch、kibana,很方便,而且版本都最新。

配置就不多写了,网上也很多,下面记录一下常用的管理命令

  1. 查看es的index

    1
    2
    3
    4
    5
    curl -XGET 'wx_es_1:9200/_cat/indices?v'
    health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
    yellow open logstash-wgw-accesslog-2017.06.07 3lj8lgN5T9qYU1BW2y07hQ 5 1 2548 0 4.6mb 4.6mb
    yellow open logstash-wgw-accesslog-2017.06.06 GC-ElhrLQu2rNfYtvR4XSg 5 1 2335781 0 2.1gb 2.1gb
    yellow open packetbeat-2017.06.08 KsS2uikmTES3OkZwPu5TpQ 5 1 2340461 0 487.6mb 487.6mb
  2. 删除一个index

    1
    curl -XDELETE 'wx_es_1:9200/wx-qiniu/?pretty'
  3. 添加模板
    比如下面template_2模板就定义了所有wx-*索引的logtime字段格式,类似 15/Jun/2017:15:36:10 +0800

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    curl -XPUT http://wx_es_1:9200/_template/template_2 -d '{
    "template" : "wx-*",
    "mappings" : {
    "type1" : {
    "properties": {
    "logtime": {
    "type" : "date",
    "format" : "dd/MMM/YYYY:HH:mm:ss Z"
    }
    }
    }
    }
    }'

更详细参考
ElasticSearch 模板文件配置
ELKstack中文指南

kafka

kafka是作为一个缓冲和标准的数据传输接口,kafka处理消息的速度据说是rabbitmq的N倍,第一次尝试。
kafka使用了二进制包安装,解压就ok,启动需要依赖zookeeper
常用命令:

  1. 查看kafka topic

    1
    bin/kafka-topics.sh --list --zookeeper zk1-test:2182
  2. 使用console consumer
    调试的时候方便输出消息查看

    1
    bin/kafka-console-consumer.sh  --topic wx-qiniu --bootstrap-server  wx_es_1:9092
  3. 使用console producter
    调试的时候方便输入消息数据

    1
    bin/kafka-console-producer.sh --topic logs-wx --broker-list wx_es_1:9092
  4. 删除topic
    server.properties中的delete.topic.enable=true需要设置成true,才能使用命令直接删除topic和数据

    1
    bin/kafka-topics.sh --delete --topic testl --zookeeper zk1-test:2182

logstash、flume、kafka-connect-elasticsearch

这里说的其实是kafka与es的数据通信问题,logstash是elastic官方原生支持,更新快,但是感觉作为中间通信层,不够简洁高效(猜测的)。
flume作为常见的log收集和传输工具,结构上实现了source->channel->sink 的形式,输入输出比较灵活,例如可以多个sink分别把数据传入es和jstrom等。
kafka-connect-elasticsearch是最先考虑的,直接在log收集时把数据格式化成json,通过kafka的connect实现数据传入es,版本问题不支持。

长远来说,flume可能更优先考虑,也可能是多种方式,反正比较灵活。

Contents
  1. 1. 总体架构
  2. 2. elasticsearch
  3. 3. kafka
  4. 4. logstash、flume、kafka-connect-elasticsearch