自动化工具 ELK 入门

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

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 用在查询业务中也不错

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