ELK的一些技巧和知识记录
总体架构
最近自己搭建了一套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 | # 导入PGP Key |
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,很方便,而且版本都最新。
配置就不多写了,网上也很多,下面记录一下常用的管理命令
查看es的index
1
2
3
4
5curl -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删除一个index
1
curl -XDELETE 'wx_es_1:9200/wx-qiniu/?pretty'
添加模板
比如下面template_2模板就定义了所有wx-*索引的logtime字段格式,类似 15/Jun/2017:15:36:10 +08001
2
3
4
5
6
7
8
9
10
11
12
13curl -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
常用命令:
查看kafka topic
1
bin/kafka-topics.sh --list --zookeeper zk1-test:2182
使用console consumer
调试的时候方便输出消息查看1
bin/kafka-console-consumer.sh --topic wx-qiniu --bootstrap-server wx_es_1:9092
使用console producter
调试的时候方便输入消息数据1
bin/kafka-console-producer.sh --topic logs-wx --broker-list wx_es_1:9092
删除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可能更优先考虑,也可能是多种方式,反正比较灵活。