自动化工具 ELK 入门

xinxi · 2018年12月19日 · 最后由 佳佳 回复于 2018年12月19日 · 680 次阅读

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

友情提示下elk有些费内存,如果是阿里云的2g机器估计很难启动成功.

Elasticsearch

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

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

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.

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中存放.

安装

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日志,配置如下:

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配置

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

共收到 1 条回复 时间 点赞

楼主高产👍 ES用在查询业务中也不错

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册