ELK日志分析系统

目录

ELK日志分析系统概述

核心组件

工作原理

应用场景

优势

三大核心解析

Elastucsearch

核心特性

应用场景

Logstash 

输入(Input)

过滤器(Filter)

输出(Output)

管道(Pipeline)

插件(Plugin)

事件(Event)

Kibana核心概念

核心定位与功能

关键技术组件

架构与集成

核心功能模块

 部署ELK日志分析


ELK日志分析系统概述

核心组件

  1. Elasticsearch(ES)

    • 功能:一个分布式、RESTful风格的搜索和数据分析引擎,用于存储、检索和分析日志数据。它支持全文搜索、结构化搜索、数据分析等多种功能,能够快速处理海量日志数据。
    • 特点
      • 分布式架构:能够水平扩展,处理大规模数据。
      • 实时搜索:支持实时数据索引和搜索,响应速度快。
      • 高可用性:通过副本机制保证数据的高可用性。
  2. Logstash

    • 功能:一个开源的服务器端数据处理管道,负责从各种数据源(如日志文件、网络流、数据库等)收集数据,进行转换和处理,然后将数据发送到Elasticsearch进行存储和分析。
    • 特点
      • 数据丰富:支持多种数据输入和输出插件,能够处理各种格式的数据。
      • 灵活转换:通过过滤器插件对数据进行清洗、转换和丰富。
      • 高可靠性:支持数据持久化和重试机制,确保数据不丢失。
  3. Kibana

    • 功能:一个开源的数据可视化和探索平台,用于对Elasticsearch中的数据进行可视化展示和分析。它提供了丰富的图表和仪表板功能,帮助用户直观地理解日志数据。
    • 特点
      • 直观界面:用户友好的Web界面,方便用户进行数据查询和可视化。
      • 灵活定制:支持自定义仪表板和图表,满足不同用户的分析需求。
      • 实时监控:能够实时监控日志数据的变化,及时发现潜在问题。

工作原理

ELK日志分析系统的工作流程通常包括以下几个步骤:

  1. 数据采集:使用Logstash或Beats等工具从各种数据源收集日志数据。
  2. 数据处理:Logstash对收集到的数据进行清洗、转换和丰富,然后发送到Elasticsearch。
  3. 数据存储:Elasticsearch将处理后的数据存储在分布式索引中,支持快速搜索和分析。
  4. 数据可视化:Kibana从Elasticsearch中检索数据,并通过图表和仪表板进行可视化展示。

应用场景

ELK日志分析系统广泛应用于各种需要日志管理和分析的场景,包括但不限于:

  • IT运维监控:实时监控服务器、网络设备和应用程序的日志,及时发现和解决潜在问题。
  • 安全审计:收集和分析安全日志,检测异常行为和潜在的安全威胁。
  • 业务分析:分析业务系统的日志数据,了解用户行为、系统性能和业务趋势。
  • 合规性检查:确保企业的日志管理符合相关法规和标准的要求。

优势

  • 开源免费:ELK组件均为开源软件,用户可以免费使用并根据需要进行定制和扩展。
  • 高度可扩展:支持水平扩展,能够处理大规模日志数据。
  • 功能丰富:提供了强大的日志收集、处理、存储和可视化功能,满足各种日志分析需求。
  • 社区支持:拥有庞大的用户社区和丰富的文档资源,方便用户获取帮助和支持。

三大核心解析

Elastucsearch

核心特性

  1. 分布式架构:Elasticsearch天然支持分布式,数据可分散存储在多个节点上,每个节点都能处理部分数据和请求。通过自动分片与副本机制,数据被分割成多个分片,并为每个分片创建多个副本,确保数据的高可用性和系统的稳定性。分片机制还有助于提高查询性能,多个分片可并行处理查询请求。
  2. 高性能搜索:采用倒排索引结构,能快速定位包含特定关键词的文档,无需遍历整个文档集合,即使面对海量数据也能在短时间内返回查询结果。同时,Elasticsearch支持复杂的查询操作,如精确匹配、模糊匹配、范围查询等,能迅速返回结果。
  3. 实时数据处理:支持近实时搜索(NRT),数据写入后几乎可以立即进行搜索,这对于需要及时获取最新数据的应用场景非常重要。
  4. 强大的聚合能力:聚合是Elasticsearch的一项核心功能,允许用户对搜索结果进行统计分析。例如,可以按时间、地理位置、分类等维度进行数据聚合,帮助用户获取有价值的洞察。
  5. 易于扩展:提供了RESTful API,支持与其他系统进行集成,易于横向扩展。它能够处理不同的数据格式(如JSON、XML等)并支持多种编程语言(如Java、Python、.NET、Go、Node.js等)。
  6. 高可用性与容错:自动管理数据的副本,确保数据不会丢失。即使某些节点发生故障,也能继续提供服务。分片和副本的配置允许Elasticsearch在集群内进行负载均衡。

应用场景

  1. 全文搜索:Elasticsearch凭借其强大、可扩展和快速的搜索功能,在全文搜索场景中表现出色。它允许用户以近乎实时的响应执行复杂的查询,常用于大型网站和应用程序的搜索功能。
  2. 实时分析:能够实时执行分析,适用于跟踪实时数据(如用户活动、交易或传感器输出)的仪表板。可以对结构化和非结构化数据进行索引和分析,支持聚合操作和复杂的数据可视化。
  3. 日志和事件数据分析:Elasticsearch常用于聚合、监控和分析来自各种来源的日志和事件数据。它是ELK堆栈(Elasticsearch、Logstash、Kibana)的关键组件,用于管理系统和应用程序日志,以识别问题和监控系统运行状况。
  4. 安全信息和事件管理(SIEM):可用作SIEM工具,帮助企业实时分析安全事件,提高网络安全防护能力。
  5. 电子商务:可用于构建电子商务网站的产品搜索功能。它可以根据用户的查询实时地返回相关的产品结果,并支持过滤、排序和推荐等功能。基于用户的行为和兴趣,Elasticsearch可以构建推荐系统,推荐相关的内容和产品,提升用户体验和转化率。
  6. 地理空间数据分析:通过地理空间索引和搜索功能支持地理数据,这对于需要管理和可视化地理信息的应用程序(如地图和基于位置的服务)非常有用。它使得执行邻近搜索和基于位置的数据可视化成为可能。
  7. 业务数据分析:Elasticsearch还可用于企业数据分析、市场调研等业务分析场景。它可以对海量数据进行搜索、聚合和分析,支持多种数据格式和数据源,帮助用户了解业务情况、市场趋势等。

Logstash 

 Logstash的核心概念主要围绕其数据处理流程展开,包括输入(Input)、过滤器(Filter)、输出(Output)三大核心组件,以及管道(Pipeline)插件(Plugin)等重要概念。

输入(Input)

定义:负责从各种数据源收集数据,是Logstash处理流程的起点。
特点

  • 支持多种数据源:如日志文件、网络流、数据库、消息队列(Kafka、RabbitMQ)、系统指标(CPU、内存)等。
  • 插件化设计:通过输入插件(如filesyslogjdbcbeats等)实现灵活扩展。
    示例
input {
file {
path => "/var/log/nginx/*.log" # 监控Nginx日志文件
start_position => "beginning" # 从文件开头读取
}
}

过滤器(Filter)

定义:对输入数据进行清洗、转换和丰富,是Logstash的核心处理环节。
特点

  • 数据转换:支持解析、字段提取、格式转换、条件过滤等操作。
  • 常用插件
    • grok:解析非结构化日志(如Apache日志)为结构化字段。
    • mutate:重命名、删除、替换字段。
    • date:解析时间戳并统一格式。
    • json:解析JSON格式数据。
    • geoip:根据IP地址添加地理位置信息。
      示例
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" } # 解析Apache日志
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] # 解析时间字段
target => "@timestamp" # 覆盖默认时间戳
}
mutate {
remove_field => ["message"] # 删除原始日志字段
}
}

输出(Output)

定义:将处理后的数据发送到目标存储或服务,是Logstash处理流程的终点。
特点

  • 支持多种目标:如Elasticsearch、数据库、文件、消息队列、监控系统等。
  • 插件化设计:通过输出插件(如elasticsearchfilekafkastatsd等)实现灵活扩展。
    示例
output {
elasticsearch {
hosts => ["http://localhost:9200"] # 输出到Elasticsearch
index => "nginx-logs-%{+YYYY.MM.dd}" # 按日期创建索引
}
stdout { codec => rubydebug } # 同时输出到控制台(调试用)
}

管道(Pipeline)

定义:Logstash的数据处理流程由一个或多个管道组成,每个管道包含输入、过滤器和输出三个阶段。
特点

  • 独立运行:每个管道独立处理数据,互不干扰。
  • 配置文件:通常通过.conf文件定义管道配置,如logstash.conf
    示例
# 完整管道配置示例
input { ... }
filter { ... }
output { ... }

插件(Plugin)

定义:Logstash通过插件扩展功能,包括输入、过滤器和输出插件。
特点

  • 丰富生态:官方和社区提供了大量插件,覆盖常见数据源和目标。
  • 自定义开发:支持用户基于Ruby开发自定义插件。
    常用插件类型
  • 输入插件filesyslogjdbckafkabeats等。
  • 过滤器插件grokmutatedatejsongeoip等。
  • 输出插件elasticsearchfilekafkastatsdhttp等。

事件(Event)

定义:Logstash处理的基本单位是事件(Event),代表一条数据记录。
特点

  • 结构化数据:事件包含字段(Field)和值(Value),如{ "message": "error", "status": 500 }
  • 生命周期:事件在管道中依次经过输入、过滤器和输出阶段,可能被修改或丢弃。

Kibana核心概念

核心定位与功能

Kibana是ELK技术栈(Elasticsearch、Logstash、Kibana)的核心组件,专为Elasticsearch设计,提供交互式仪表盘、实时搜索、数据探索及可视化功能。它支持安全分析、运维监控、业务智能等多场景需求,通过直观界面降低数据分析门槛。

关键技术组件

  1. 查询语言
    • KQL(Kibana Query Language):简化查询语法,支持字段匹配、逻辑组合(如status:200 AND user.name:"John Doe"),隐藏底层复杂性,适合初学者。
    • Lucene语法:支持复杂查询(如通配符、正则表达式),满足高级分析需求。
  2. 可视化工具
    • 基础图表:柱状图、折线图、饼图、表格等,支持快速数据展示。
    • 高级图表:热力图、桑基图、标记地图(集成GeoIP),满足复杂场景需求。
    • 时序分析:Timelion功能支持时间序列表达式语言,可分析时序数据。
  3. 交互与定制
    • 动态交互:支持图表联动过滤,用户可通过拖拽布局调整仪表盘。
    • 自定义指标:通过脚本字段扩展数据维度,增强分析灵活性。

架构与集成

  1. 前后端架构
    • 前端:基于React框架,提供直观的用户界面。
    • 后端:基于Node.js,通过REST API与Elasticsearch交互。
  2. 深度集成
    • 数据交互:Kibana与Elasticsearch无缝集成,支持实时数据查询与分析。
    • 插件扩展:支持前后端插件(如UI组件、数据处理逻辑),可通过插件增强功能。

核心功能模块

  1. Discover:原始数据探索工具,支持字段过滤、高亮显示。
  2. Visualize:图表创作模块,支持多种图表类型与自定义样式。
  3. Dashboard:仪表盘整合工具,可将多个图表组合为动态监控面板。
  4. Canvas:自由画布式数据展示,适合生成动态报告。
  5. Machine Learning:集成Elasticsearch机器学习,提供异常检测与预测面板。
  6. Maps:地理空间数据可视化,支持热力图层与轨迹绘制。
  7. Lens:快速拖拽式可视化生成器,降低使用门槛。

 部署ELK日志分析

环境准备
在开始部署前,需要确保所有服务器满足以下要求:

所有服务器已安装CentOS 8系统
关闭防火墙或开放必要端口:

sudo dnf install elasticsearch -y


安装Java 11(Elasticsearch 7.x+需要)
配置主机名解析(/etc/hosts)

# 安装Java 11
sudo dnf install java-11 -y

# 配置主机名解析
cat << EOF | sudo tee -a /etc/hosts
192.168.10.101 web-server
192.168.10.102 logstash-server
192.168.10.103 es-node1
192.168.10.104 es-node2


Elasticsearch集群部署(192.168.10.103/104)
添加Elastic官方仓库

# 创建仓库文件
cat << EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF


安装Elasticsearch

sudo dnf install elasticsearch -y


配置Elasticsearch集群
        仓库配置:添加Elastic官方YUM源
        安装命令:sudo dnf install elasticsearch -y
        配置文件(/etc/elasticsearch/elasticsearch.yml):

cluster.name: elk-cluster  
node.name: es-node1/es-node2  
network.host: 192.168.10.103/104  
discovery.seed_hosts: ["103", "104"]  
cluster.initial_master_nodes: ["es-node1"]


        系统优化:调整内核参数(vm.max_map_count=262144)、用户限制
       启动服务:sudo systemctl start elasticsearch
系统优化

# 调整系统参数
cat << EOF | sudo tee /etc/sysctl.d/elasticsearch.conf
vm.max_map_count=262144
fs.file-max=65536
EOF

sudo sysctl -p /etc/sysctl.d/elasticsearch.conf

# 调整用户限制
cat << EOF | sudo tee /etc/security/limits.d/elasticsearch.conf
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
EOF

# 设置JVM堆内存大小(根据实际内存调整,建议不超过物理内存的50%)
sudo sed -i 's/-Xms1g/-Xms1g/g' /etc/elasticsearch/jvm.options
sudo sed -i 's/-Xmx1g/-Xmx1g/g' /etc/elasticsearch/jvm.options

启动Elasticsearch并设置开机自启

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

 验证集群状态

curl -X GET "localhost:9200/_cluster/health?pretty"

 Logstash部署(192.168.10.102)

sudo dnf install logstash -y

配置Logstash

安装命令:sudo dnf install logstash -y

配置文件(/etc/logstash/conf.d/apache_logs.conf):

input { beats { port => 5044 } }  
filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } }  
output { elasticsearch { hosts => ["103:9200", "104:9200"] } }

启动Logstash并设置开机自启

sudo systemctl enable logstash
sudo systemctl start logstash

 Kibana部署(在Elasticsearch节点1上:192.168.10.103)

安装Kibana

sudo dnf install kibana -y

 配置Kibana

安装命令:sudo dnf install kibana -y

配置文件(/etc/kibana/kibana.yml):

server.host: "192.168.10.103"  
elasticsearch.hosts: ["http://103:9200", "http://104:9200"]

 启动Kibana并设置开机自启

sudo systemctl enable kibana
sudo systemctl start kibana

Filebeat部署(Apache服务器:192.168.10.101)

安装Filebeat

sudo dnf install filebeat -y

配置Filebeat

安装命令:sudo dnf install filebeat -y

配置文件(/etc/filebeat/filebeat.yml):

filebeat.inputs:  
- type: log  
  paths: /var/log/httpd/access_log  
  fields: { type: "apache_access" }  
output.logstash: { hosts: ["102:5044"] }

加载Kibana仪表盘

sudo filebeat setup --dashboards

 启动Filebeat并设置开机自启

sudo systemctl enable filebeat
sudo systemctl start filebeat

 测试与验证

层级核心组件功能描述
数据采集层Logstash收集日志数据,初步清洗格式化
数据处理层Logstash Filter过滤、转换、丰富日志数据(如脱敏、提取字段)
数据存储层Elasticsearch分布式存储与检索日志数据
数据可视化层Kibana交互式可视化展示分析结果
管理层Elasticsearch集群管理、节点监控、分片策略配置
  •  ES集群状态:curl http://103:9200/_cluster/health?pretty
  • Logstash日志:tail -f /var/log/logstash/logstash-plain.log
  • Kibana界面:访问 http://103:5601,创建索引模式 filebeat-*

验证Elasticsearch集群状态

curl -X GET "192.168.10.103:9200/_cluster/health?pretty"

 输出示例:

{
  "cluster_name" : "elk-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

验证Logstash接收数据

sudo tail -f /var/log/logstash/logstash-plain.log

 验证Kibana界面

在浏览器中访问:http://192.168.10.103:5601

 创建索引模式

  • 登录Kibana后,导航到"Management" > "Index Patterns"
  • 点击"Create index pattern"
  • 输入filebeat-*作为索引模式名称
  • 选择@timestamp作为时间过滤字段
  • 点击"Create index pattern"

 查看日志数据

  • 导航到"Discover"
  • 选择刚创建的索引模式
  • 调整时间范围,查看Apache访问日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值