ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈.
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写.
Logstash 是一个具有实时渠道能力的数据收集引擎.
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图.
介绍使用 docker 技术搭建
docker 官方镜像地址:https://www.docker.elastic.co
友情提示下 elk 有些费内存,如果是阿里云的 2g 机器估计很难启动成功.
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/.
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/
默认的 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"
}'
Kibana 前台展示刚才发送的 log 日志
第二种方式是加载本地已经存在 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"]
展示效果如下:
在日常工作中,日志可能不存在本地,比如存在服务器上.
日志类型有后端错误日志、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 连接成功
下图是 logstash 拿到 kafka 的数据
数据展示
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