前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ELK入门

ELK入门

作者头像
测试加
发布2022-03-24 16:01:36
4890
发布2022-03-24 16:01:36
举报

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试加 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ELK介绍
    • Elasticsearch
      • Logstash
        • Kibana
        • 环境搭建
          • 本地配置
            • Elasticsearch
              • Kibana
                • Logstash
                  • 使用docker-compose运行
                    • Elasticsearch接口
                      • 加载本地log日志
                        • Filebeat介绍
                        • 安装
                        • 配置filebeat.yml
                      • 创建索引
                        • 展示数据
                          • 选择可视化模版
                          • 饼形数据
                        • kafka数据源
                          • logstash配置
                      • 结语
                      • 学习贴
                      相关产品与服务
                      容器服务
                      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档