Elasticsearch 利用 ELK 做大数据分析

Logstash 入门及架构介绍

Logstash:ELT 工具 / 数据搜集处理引擎。支持 200 多个插件

image-20240331113412571

Logstash Concepts

Logstash 的概念:

  • Pipeline
    • 包含了 input-filter-output 三个阶段的处理流程
    • 插件生命周期管理
    • 队列管理
  • Logstash Event
    • 数据在内部流转时的具体表现形式。数据在 input 阶段被转换为 Event,在 output 被转化成目标格式数据
    • Event 其实是一个 Java Object,在配置文件中,对 Event 的属性进行增删改查

Logstash 架构简介

Codec(Code / Decode):将原始数据 decode 成 Event;将 Event encode 成目标数据

image-20240331113553411

Logstash 配置文件结构

image-20240331113621413

  • bin/logstash –f demo.conf
  • Pipeline
    • Input / Filter / Output
  • Codec
    • Line / json

Input Plugins

一个 Pipeline 可以有多个 input 插件:https://www.elastic.co/guide/en/logstash/8.13/input-plugins.html

  • Stdin / File
  • Beats / Log4J / Elasticsearch / JDBC / Kafka / Rabbitmq / Redis
  • JMX / HTTP / Websocket / UDP / TCP
  • Google Cloud Storage / S3
  • Github / Twitter

Output Plugins

  • 将 Event 发送到特定的目的地,是 Pipeline 的最后一个阶段
  • 常见 Output Plugins:https://www.elastic.co/guide/en/logstash/8.13/output-plugins.html
    • Elasticsearch
    • Email / Pageduty
    • Influxdb / Kafka / Mongodb / Opentsdb / Zabbix ○ Http / TCP / Websocket

Codec Plugins

  • 将原始数据 decode 成 Event;将 Event encode 成目标数据
  • 内置的 Codec Plugins:https://www.elastic.co/guide/en/logstash/8.13/codec-plugins.html
    • Line / Multiline
    • JSON / Avro / Cef (ArcSight Common Event Format)
    • Dots / Rubydebug

Filter Plugins

  • 处理 Event
  • 内置的 Filter Plugins:https://www.elastic.co/guide/en/logstash/8.13/filter-plugins.html
    • Mutate – 操作 Event 的字段
    • Metrics – Aggregate metrics
    • Ruby – 执行 Ruby 代码

Queue

image-20240331114116995

多 Pipelines 实例

image-20240331114136624

  • pipeline.works: Pipeline 线程数,默认是 CPU 核数
  • pipeline.batch.size:Batcher 一次批量获取等待处理的文档数,默认 125。需结合 jvm.options调节
  • pipeline.batch.delay:Batcher 等待时间

Logstash Queue

  • In Memory Queue
    • 进程 Crash,机器宕机,都会引起数据的丢失
  • Persistent Queue
    • Queue.type.persisted (默认是 memory)
      • Queue.max_bytes: 4gb
    • 机器当机,数据也不会丢失;数据保证会被消费;可以替代 Kafka 等消息队列缓冲区的作用

https://www.elastic.co/guide/en/logstash/8.13/resiliency.html

Codec Plugin Demo

Single Line:

image-20240331114355217

Multiline:

设置参数:

  • Pattern:设置行匹配的正则表达式
  • What:如果匹配成功,那么匹配行属于上一个事件还是下一个事件
    • Previous / Next
  • Negate true / false:是否对 pattern 结果取反
    • True / False

异常日志:

image-20240331114648283

image-20240331114654877

Input Plugin Demo

File:

  • 支持从文件中读取数据,如日志文件
  • 文件读取需要解决的问题
    • 只被读取一次。重启后需要从上次读取的位置继续(通过 sincedb 实现)
  • 读取到文件新内容,发现新文件
  • 文件发生归档操作(文档位置发生变化,日志 rotation),不能影响当前的内容读取

Filter Plugin Demo

Filter Plugin 可以对 Logstash Event 进行各种处理,例如解析,删除字段,类型转换

  • Date:日期解析
  • Dissect:分割符解析
  • Grok:正则匹配解析
  • Mutate:处理字段。重命名,删除,替换
  • Ruby:利用 Ruby 代码来动态修改 Event

Mutate:

  • 对字段做各种操作
  • Convert 类型转换
  • Gsub 字符串替换
  • Split / Join / Merge 字符串切割,数组合并字符串,数组合并数组
  • Rename 字段重命名
  • Update / Replace 字段内容更新替换
  • Remove_field 字段删除

利用 JDBC 插件导入数据到 Elasticsearch

同步数据库数据到 Elasticsearch

需求:将数据库中的数据同步到 ES,借助 ES 的全文搜索,提高搜索速度

  • 需要把新增用户信息同步到 Elasticsearch 中
  • 用户信息 Update 后,需要能被更新到 Elasticsearch
  • 支持增量更新
  • 用户注销后,不能被 ES 所搜索到

JDBC Input Plugin & 设计实现思路

image-20240331114959410

  • 支持通过 JDBC Input Plugin 将数据从数据库从读到 Logstash
    • 需要自己提供所需的 JDBC Driver
  • Scheduling
    • 语法来自 Rufus-scheduler
    • 扩展了 Cron,支持时区
  • State
    • Tracking_column / sql_last_value

demo:https://spring.io/guides/gs/accessing-data-mysql

Beats 介绍

image-20240331115805908

  • Light weight data shippers
    • 以搜集数据为主
    • 支持与 Logstash 或 ES 集成
  • 全品类 / 轻量级 / 开箱即用 / 可插拔 / 可扩展 / 可视化

Metricbeat 简介

  • 用来定期搜集操作系统,软件的指标数据
    • Metric v.s Logs
      • Metric:可聚合的数据,定期搜集
      • Logs:文本数据,随机搜集
  • 指标存储在 Elasticsearch 中,可以通过 Kibana 进行实时的数据分析

Metricbeat 组成

  • Module
    • 搜集的指标对象,例如不同的操作系统,不同的数据库,不同的应用系统
  • Metricset
    • 一个 Module可以有多个 metricset
    • 具体的指标集合。以减少调用次数为原则进行划分
      • 不同的 metricset 可以设置不同的抓取时长

Module

  • Metricbeat 提供了大量的开箱即用的 Module
    • https://www.elastic.co/guide/en/beats/metricbeat/8.13/metricbeat-modules.html
  • 通过执行 metricbeat module list 查看
  • 通过执行 metricbeat moudle enable module_name 定制

Metricsets

每个 Module 都有自己的 metricsets,以 System Module 为例

  • core
  • CPU
  • disk IO
  • filesystem
  • load
  • memory

Metricbeat Event

image-20240331120410246

Packetbeat

  • Packetbeat - 实时网络数据分析,监控应用服务器之间的网络流量
    • 常见抓包工具 - Tcpdump /wireshark
    • 常见抓包配置 - Pcap 基于 libpcap,跨平台 / Af_packet 仅支持 Linux,基于内存映射嗅探,高性能
  • Packetbeat 支持的协议
    • ICMP / DHCP / DNS / HTTP / Cassandra / Mysql / PostgresSQL / Redis / MongoDB / Memcache /
      TLS
  • Network flows:抓取记录网络流量数据,不涉及协议解析

https://www.elastic.co/guide/en/beats/packetbeat/current/packetbeat-installation-configuration.html

使用 Index Pattern 配置数据

给图表展示和数据分析做准备

image-20240331121015069

  • Management
    • Index Patterns / Saved Objects (导出备份)
  • Created Index Pattern (Save As default Pattern)
    • Fields: Type,Searchable/Aggregation / Format(Number / Image)
    • Script Fields

使用 Kibana Discovery 探索数据

Discovery:

image-20240331121345696

基本可视化组件介绍 Visualize

使用内置数据搭建可视化的 Visualize 页面

  • 账户存款
    • Pie Chart (Inspector)
  • 日志相关
    • Area Chart (X 轴 Y 轴, 顺序,etc)
    • Bar Chart

image-20240331122114065

image-20240331121914502

构建 Dashboard

Dashboard 是一组相关主题的可视化组件

image-20240331122029153

用 Monitoring 和 Alerting 监控 Elasticsearch 集群

X-Pack Monitoring:

  • X-Pack 提供了免费集群监控的功能
  • 使用 Elasticsearch 监控 Elasticsearch
    • Xpack.monitoring.collection.interval 默认设置 10 秒
  • 在生产环境中,建议搭建 dedicated 集群用于 ES 集群的监控。有以下几个好处
    • 减少负载和数据
    • 当被监控集群出现问题,还能看到监控相关的数据

image-20240331122617939

https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html#monitoring-settings

配置 Monitoring

image-20240331122306424

Watcher for Alerting

  • 需要 Gold 账户
  • 一个 Watcher 由 5个部分组成
    • Trigger – 多久被触发一次(例如:5 分钟触发一次)
    • Input – 查询条件(在所有日志索引中查看 “ERROR” 相关)
    • Condition –查询是否满足条件(例如:大于 1000 条返回)
    • Actions – 执行相关操作(例如:发送邮件)

Overall

Kinaba:Stack Monitoring

Oveview:

image-20240331122715235

Nodes:

image-20240331122756538

Index

image-20240331122805418

Index Level

image-20240331122846712

用 APM 进行程序性能监控

Elastic 全栈监控

image-20240331122912684

APM 提供用户操作层面的监控。

核心应用指标:

  • 请求响应时间
  • 未处理的错误及异常
  • 可视化调用关系
  • 发现性能瓶颈
  • 代码下钻

APM

https://www.elastic.co/cn/observability/application-performance-monitoring

image-20240331123006989

APM 如何整合到 Elastic Stack

image-20240331123037996

安装文档:https://www.elastic.co/guide/en/apm/index.html

用机器学习实现异常检测

用机器学习异常检测所解决的问题,主要是解决一些基于规则或者 Dashboard 难以实时发现的问题,例如:

  • IT 运维
    • 如何知道系统正常运行 / 如何调节阈值触发合适的报警 / 如何进行归因分析
  • 信息安全
    • 哪些用户构成了内部威胁 / 系统是否感染了病毒
  • 物联网 / 数据采集监控
    • 工厂和设备是否正常运营

什么是正常:

  • 随着时间的推移,某个个体一直表现出一致的行为
  • 某个个体和他的同类比较,一直表现出和其他个体一致的行为

什么是异常:

  • 和自己比 - 个体的行为发生了急剧的变化
  • 和他人比 - 个体明显区别于其他的个体

image-20240331123647818

很多时候判定异常需要一定的指导。

相关术语

  • Elastic 平台的机器学习功能
    • Elastic 的ML,主要针对时序数据的异常检测和预测
  • 非监督机器学习
    • 不需要使用人工标签的数据来学习,仅仅依靠历史数据自动学习
  • 贝叶斯统计
    • 一种概率计算方法,使用先验结果来计算现值或者预测未来的数值
  • 异常检测
    • 异常代表的是不同的,但未必代表的是坏的 / 定义异常需要一些指导,从哪个方面去看

如何学习 正常

  • 观察不同的人每天走路的步数,由此预测明天他会走多少步
  • 需要观察不同的人,需要观察多久?
    • 一天/一周/一个月/一年/十年
  • 直觉: 观察的数据多,你的预测越准确
  • 使用这些观察来创建一个模型
    • 概率分布函数:使用这个模型找出什么事几乎不可能的事件

机器学习帮你自动挑选模型

  • 使用成熟的机器学习技术,挑选适合数据的正确的统计模型
  • 更好的模型 = 更好的异常检测 = 更少的误报和漏报
  • 出现在低概率区域,发现异常

模型与需要考虑任何的周期

image-20240331123854672

周期选择:

  • 需要一定周期的学习,才能使的置信区间的范围更小
  • 时间太长:影响因素太多,导致随机分布
  • 时间太短:完全是随机波动

ES ML:单指标 / 多指标 / 种群分析

image-20240331123923657

单指标任务

image-20240331123946665

  • Create New Job
  • 选择 Index Pattern,选择 Fare quote
  • 选择单指标任务
    • Aggregation
    • Field
    • Bucket Span (取决于用户的数据业务 / 数据的采样时间 / 波动情况 / 需要预测的频率,做一个桶的时间分隔)
    • Use full data

多指标检测

  • 多个指标
  • 按照某个字段进行分类
  • 什么是影响因子
    • 影响因子是一个字段
    • 这个字段从逻辑分析上看,是可能造成异常的原因
    • 不一定必须是一个检测器,但是这个字段通常能够被用于区分数据
    • 对影响因子也可以打分,打分是基于其多大程度会影响到异常

image-20240331124543610

种群分析

  • 如何分析
    • 种群之间比较
    • 不和自己的过去比较
  • 适用情景
    • 个体具备高 Cardinality
    • 少数个体从时间上是稀疏的
    • 作为整体看,群体行为是均匀的
  • 不适用的场景
    • 个体的行为各自都不相同

用 Elastic Stack 进行日志管理

日志的重要性

  • 为什么重要
    • 运维:医生给病人看病。日志就是病人对自己的陈述
    • 恶意攻击,恶意注册,刷单,恶意密码猜测
  • 挑战
    • 关注点很多,任何一个点都有可能引起问题
    • 日志分散在很多机器,出了问题时,才发现日志被删了
    • 很多运维人员是消防员,哪里有问题去哪里

集中化日志管理

image-20240331124735423

image-20240331124745948

Filebeat 简介

简介:

  • A log data shipper for local files
  • 读取日志文件,Filebeat 不做数据的解析,加工处理
    • 日志是非结构化数据
    • 需要进行处理后,以结构化的方式保存到 Elasticsearch
  • 保证数据至少被读取一次
  • 处理多行数据,解析 JSON 格式 ,简单的过滤

image-20240331124935298

Filebeat 执行流程

  • 定义数据采集:Prospector 配置。通过 filebeat.yml
  • 建立数据模型::Index Template
  • 建立数据处理流程:Ingest Pipeline
  • 存储并提供可视化分析:ES + Kibana Dashboard

Modules 开箱即用

image-20240331125012332

  • 大量开箱即用的日志模块
    • 简化使用流程
    • 减少开发的投入
    • 最佳参考实践
  • 一些命令
    • ./filebeat modules list
    • ./Filebeat modules enable nginx

image-20240331125225210

用 Canvas 进行数据的实时展示

https://www.elastic.co/guide/en/kibana/current/canvas.html

实时展示数据,并且达到完美像素级要求:

  • 用更加酷炫的方式,演绎你的数据
    • 基于 ES 实现准实时的数据分析
  • 更好的想法,更大的屏幕
    • 品牌宣传,会议大屏
  • 高度定制化
    • 调色板 / CSS / 拖放元素

个性化方式展现你的数据:

  • 公司的 Logo
  • 符合公司的配色方案以及设计元素
  • Kibana 中免费提供

案例

日志分析:

image-20240331125429162

基础设施监控

image-20240331125612194

APM

image-20240331125628568

安全运维

image-20240331125724453

业务分析

image-20240331125743691

Elastic App Search

Elastic 的 Swiftype 团队推出了一款强大的新搜索产品供开发人员使用。这款新产品名为 App Search,是一种搜索即服务解决方案,简化了为各种软件应用构建丰富搜索体验的过程 — 从电子商务网站到 SaaS 应用再到移动应用。

https://www.elastic.co/cn/webinars/elastic-app-search-overview-and-demo

https://www.elastic.co/guide/en/app-search/current/index.html

架构:

image-20240331130129973