ELK介绍
ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈.
image
Elasticsearch
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写.
Logstash
Logstash是一个具有实时渠道能力的数据收集引擎.
Kibana
Kibana 是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图.
环境搭建
介绍使用docker技术搭建
docker官方镜像地址:https://www.docker.elastic.co
本地配置
- 使用mac在本地搭建,内存8g
- elk镜像版本6.5.3
Elasticsearch
代码语言:javascript复制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
Kibana
代码语言:javascript复制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是不需要账号和密码登录,如果需要权限管理,还需要安装权限认证插件.
Logstash
代码语言:javascript复制docker runl -p 5043:5043
docker.elastic.co/logstash/logstash:6.5.3
使用docker-compose运行
上面的运行方式需要启动多个镜像比较麻烦,使用docker-compose可以把命令写到yaml文件中,管理多个镜像启动.
参考项目:https://github.com/xinxi1990/ELK_Docker
在根目录下执行:docker-compose -f docker-compose.yml up -d
会一次启动Elasticsearch、Logstash、Kibana三个镜像
上面仅仅启动了elk服务,但是里面压根没一条数据日志.下面说下几种加载数据的方法.
Elasticsearch接口
通过请求post接口写数据给Elasticsearch.
代码语言:javascript复制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日志
第二种方式是加载本地已经存在log日志,使用另外一个镜像叫filebeat
Filebeat介绍
Filebeat是一个日志文件托运工具,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch或者logstarsh中存放.
安装
代码语言:javascript复制docker run
docker.elastic.co/beats/filebeat:6.5.3
setup -E setup.kibana.host=kibana:5601
-E output.elasticsearch.hosts=["elasticsearch:9200"]
配置filebeat.yml
参考官方:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-configuration.html
我本地有几个log日志,配置如下:
代码语言:javascript复制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
kafka数据源
在日常工作中,日志可能不存在本地,比如存在服务器上. 日志类型有后端错误日志、nginx接入日志、客户端埋点日志等,可以通过拉取kafka日志,在elk平台展示.
当然这里有一个必须的条件是有日志的生产端和消费端, 那么可以使用logstash去消费kafka的日志,然后交给elasticsearch搜索和解析吗,最终在Kibana展示.
logstash配置
代码语言:javascript复制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
- input input是输入源,配置kafka的ip 端口,可是多个服务器. 订阅的topics名字、多久拉取数据等参数.
- filter filter相当于过滤器,可以写条件判断来过滤不需要的数据
- output output是输出源,输出到elasticsearch服务上并且定义索引,最后可以把内容打印出来
下图是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