ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈.
image
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写.
Logstash是一个具有实时渠道能力的数据收集引擎.
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图.
介绍使用docker技术搭建
docker官方镜像地址:https://www.docker.elastic.co
docker run -d -p 127.0.0.1:9200:9200 -p 9300:9300 --name
elasticsearch -e "discovery.type=single-node"
docker.elastic.co/elasticsearch/elasticsearch:6.5.3
启动成功后访问: http://0.0.0.0:9200/.
image
docker run -p 5601:5601
--name kib --link elasticsearch
-e ELASTICSEARCH_URL=http://elasticsearch:9200 docker.elastic.co/kibana/kibana:6.5.3
启动成功后访问: http://0.0.0.0:5601/
image
默认的Kibana是不需要账号和密码登录,如果需要权限管理,还需要安装权限认证插件.
docker runl -p 5043:5043
docker.elastic.co/logstash/logstash:6.5.3
上面的运行方式需要启动多个镜像比较麻烦,使用docker-compose可以把命令写到yaml文件中,管理多个镜像启动.
参考项目:https://github.com/xinxi1990/ELK_Docker
在根目录下执行:docker-compose -f docker-compose.yml up -d
会一次启动Elasticsearch、Logstash、Kibana三个镜像
上面仅仅启动了elk服务,但是里面压根没一条数据日志.下面说下几种加载数据的方法.
通过请求post接口写数据给Elasticsearch.
curl -XPOST http://127.0.0.1:9200/logstash-2015.06.21/testlog -H "Content-Type: application/json" -d '{
"date" : "1434966686000",
"user" : "chenlin7",
"mesg" : "first message into Elasticsearch"
}'
image
Kibana前台展示刚才发送的log日志
image
第二种方式是加载本地已经存在log日志,使用另外一个镜像叫filebeat
Filebeat是一个日志文件托运工具,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放.
docker run \
docker.elastic.co/beats/filebeat:6.5.3 \
setup -E setup.kibana.host=kibana:5601 \
-E output.elasticsearch.hosts=["elasticsearch:9200"]
参考官方:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-configuration.html
我本地有几个log日志,配置如下:
filebeat.prospectors:
- input_type: log
paths:
- /home/logs/customer/*.log
multiline:
pattern: ^\d{4}
negate: true
match: after
fields:
doc_type: customer
- input_type: log
paths:
- /home/logs/order/*.log
multiline:
pattern: ^\d{4}
negate: true
match: after
fields:
doc_type: order
output.logstash:
hosts: ["logstash:5044"]
展示效果如下:
image
image
image
image
image
在日常工作中,日志可能不存在本地,比如存在服务器上. 日志类型有后端错误日志、nginx接入日志、客户端埋点日志等,可以通过拉取kafka日志,在elk平台展示.
当然这里有一个必须的条件是有日志的生产端和消费端, 那么可以使用logstash去消费kafka的日志,然后交给elasticsearch搜索和解析吗,最终在Kibana展示.
input {
kafka {
bootstrap_servers => ["192.168.xxx.xxxx:9092"]
topics => ["error_logs"]
group_id => "test"
auto_offset_reset => "latest"
consumer_threads => 5
decorate_events => true
}
}
filter {
#定义时间戳的格式
date {
match => [ "timestamp", "yyyy-MM-dd-HH:mm:ss" ]
locale => "cn"
}
}
output {
elasticsearch {
hosts => ["192.168.129.25:9200"]
index => "kafka_log-%{+YYYY.MM.dd}"
}
stdout{
codec => rubydebug
}
}
logstash.confg配置包含三个部分,input、filter、output
下图是kafka连接成功
image
下图是logstash拿到kafka的数据
image
数据展示
image
ELK在实际工具中更多是运维角色在使用,但是在测试工作中也可以用来做的数据挖掘、监控线上数据等. 本文仅仅是ELK入门,更多技术细节还待挖掘.
Mac上搭建ELK https://blog.csdn.net/ywheel1989/article/details/60519151
使用Docker搭建ELK日志系统 https://zhuanlan.zhihu.com/p/32559371
https://www.jianshu.com/p/18074e1e719f
mysql慢日志查询(ELK方式) http://jovi.io/post/mysql-slow-log-to-elk/
Elasticsearch数据接口用例 https://blog.csdn.net/wangnan9279/article/details/79287862
集中式日志系统 ELK 协议栈详解 https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/index.html
使用Docker快速建立一个Kafka实例 https://segmentfault.com/a/1190000015627478
Apache Kafka系列(三) Java API使用 http://www.cnblogs.com/qizhelongdeyang/p/7354183.html
插件安装 https://github.com/mobz/elasticsearch-head
ELK-004-Beats-Filebeat配置项详解之prospectors https://blog.csdn.net/MasonQAQ/article/details/78009002