67-日志分析系统ELK-ELK架构简述

时间:2023-02-24 11:01:11

ELK 概述

ELK是三个项目的简称,分别是Elasticsearch、Logstash 和 Kibana

  • Elasticsearch 是一个实时的全文搜索,存储库和分析引擎。
  • Elasticsearch 是一个分布式的免费开源搜索和分析引擎,适用于包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据。
  • Elasticsearch 支持数据的实时全文搜索搜索、支持分布式和高可用、提供API接口,可以处理大规模的各种日志数据的处理,比如: Nginx、Tomcat、系统日志等功能。
  • Elasticsearch 基于 Java 语言开发,利用全文搜索引擎 Apache Lucene 实现
  • 应用场景
  • 应用程序搜索
  • 网站搜索
  • 企业搜索
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序性能监测
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析
  • 基本概念
  • Near Realtime(NRT) 几乎实时
  • Cluster 集群
  • Node节点
  • Index 索引
  • Type 类型
  • Document 文档
  • Shards & Replicas 分片与副本
  • 相关概念在关系型数据库和ElasticSearch中的对应关系

关系型数据库

Elasticsearc

数据库Database

索引Index,支持全文检索

表Table

类型Type

数据行Row

文档Document,但不需要固定结构,不同文档可以具有不同字段集合

数据列Column

字段Field

  • Logstash 是数据处理的管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如Elasticsearch 等存储库中。
  • 架构图

67-日志分析系统ELK-ELK架构简述

  • Logstash 是一个基于Java实现的开源的服务器端数据处理管道,允许您在将数据索引到Elasticsearch 之前同时从多个来源采集数据,并对数据进行过滤和转换。

  • 可以通过插件实现日志收集和转发,支持日志过滤,支持普通log、自定义json格式的日志解析。

  • Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
  • Kibana 是一款适用于 Elasticsearch 的基于Javascript语言实现的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图。Kibana 同时还包括诸如 Canvas 和 Elastic Maps 等高级应用程序;Canvas 允许用户基于自身数据创建定制的动态信息图表,而 Elastic Maps 则可用来对地理空间数据进行可视化。
  • 主要是通过接口调用elasticsearch的数据,并进行前端数据可视化的展现。比如:
  • 搜索、查看并可视化 Elasticsearch 中所索引的数据,并通过创建柱状图、饼图、表格、直方图和地图对数据进行分析。
  • 日志处理和分析
  • 基础设施指标和容器监测
  • 应用程序性能监测 (APM)
  • 地理空间数据分析和可视化
  • 安全分析
  • 业务分析
  • 借助网络界面来监测和管理 Elastic Stack 实例并确保实例的安全
  • 针对基于 Elastic Stack 开发的内置解决方案(面向可观测性、安全和企业搜索应用程序),将其访问权限集中到一起

ELK 应用场景

运维主要应用场景:

  • 将分布在不同主机的日志统一收集,并进行转换,通过集中的Web UI 进行查询和管理
  • 通过查看汇总的日志,找到故障的根本原因
  • Web 展示和报表功能
  • 实现安全和事件等管理

大数据运维主要应用场景:

  • 查询聚合, 大屏分析
  • 预测告警, 网络指标,业务指标安全指标
  • 日志查询,问题排查,基于API可以实现故障恢复和自愈
  • 用户行为,性能,业务分析

ELK 应用架构

67-日志分析系统ELK-ELK架构简述

#日志访问入口采用代理,一般用nginx,或者haproxy(kibana默认没有权限管理,可用代理策略)
#进入Kibana应用内查看日志展示页面
#Kibana数据来源Elasticsearch
#Elasticsearch中的数据是经过Logstash清洗过的干净数据
#Logstash收集的服务器原始数据来源于filebeat对服务器各项数据的采集
#为了减轻日志收集的压力,在服务器和Logstash之间加上Redis缓存,如果日志数据量巨大可以用Kafaka消息队列处理(kafaka数据存在硬盘,读取数据是追加式)