基于ELK的分布式日志实时分析与可视化系统设计

目录

一、ELK平台介绍

1.ELK概述

2.Elasticsearch

3.Logstash

4.Kibana

二、部署ES群集

1.资源清单

2.基本配置

3.安装Elasticsearch(elk1上、elk2上、elk3上)

4.安装logstash(elk1上)

5.Filebeat

6.安装Kibana(elk1上)


一、ELK平台介绍

1.ELK概述

a.日志主要包括系统日志、应用程序日志和安全日志

b.日志被分散的存储在不同的设备上

c.集中管理日志后,日志的统计和检索利用grep、awk、wc实现

d.ELK的组成

Elasticsearch

Logstash

Kibana

2.Elasticsearch

a.概述

是一个基于Lucene的搜索服务器

它提供了一个分分布式多用户能力的全文搜索引擎,基于RESTful web接口

  • 能够达到实时搜索、稳定、可靠、快速、安装使用方便

b.核心概念

接近实时(NRT):意味着数据从被索引到可被搜索之间存在极短的延迟(通常1秒内)。这是由于 Lucene 的倒排索引机制和 Elasticsearch 的刷新(refresh)机制决定的,默认每1秒刷新一次,使新数据可见

集群(Cluster):是由一个或多个节点(Node)组成的集合,共同存储数据并提供联合索引和搜索能力。

节点(node):是集群中的一个独立服务器,存储数据并参与索引和搜索

索引(index):是类似数据库中的"表",用于存储具有相似结构的文档(Documents)

类型(type):用于逻辑划分索引中的不同数据结构(类似数据库的"表")。

文档(document):是 Elasticsearch 中的基本数据单元,以 JSON 格式存储。

分片和复制(shards & replicas):

分片(Shards):索引可以被拆分为多个分片,提高并行处理能力。分片是独立索引单元,可分布在不同节点上。

副本(Replicas):

每个分片可以有多个副本,提供高可用性(节点故障时数据不丢失)和负载均衡(查询可并行执行)。默认情况下,ES 为每个索引创建1个主分片 + 1个副本(可在索引模板中调整)

3.Logstash

a.介绍

由JRsuby语言编写,运行在Java虚拟机上,是一款强大的数据处理工具

可以实现数据传输、格式处理、格式化输出

设计理念:数据输入、数据加工、数据输出

b.工作的三个阶段

input数据输入端,可以接收来自任何地方的源数据

Filter数据中转层,主要进行格式处理,数据类型转换,数据过滤,字段添加、修改等

Output是logstash工作的最后一个阶段,负责将书籍输出到指定位置,兼容大多数应用

4.Kibana

a.介绍

是一个设计使用和Elasticsearch配置工作的开源分析和可视化平台

可以用它进行搜索、查看、集成Elasticserach中的数据索引

可以利用各种图标、报表、地图组件轻松的对数据进行可视化分析

b.主要功能

Elasticsearch无缝集成:支持直接查询、过滤和聚合 ES 索引中的数据

整合数据:支持从多个 Elasticsearch 索引、Logstash 管道或 Beats 采集的数据进行统一分析。

复杂数据分析:支持 聚合(Aggregations) 操作,如 terms(分组统计)、date_histogram(时间序列分析)、avg(平均值计算)等

让更多的团队成员收益:提供 Dashboard(仪表盘) 功能,可将多个可视化图表组合,并支持共享链接或嵌入到其他系统(如 Confluence、Web 应用

接口灵活:提供 REST API,允许开发者以编程方式管理 Kibana 对象

配置简单:通过 Management 模块可轻松管理索引模式、用户权限、警报规则等

可视化多数据源:支持多种图表类型(柱状图、折线图、饼图、热力图等),并可结合 Maps 插件展示地理数据。

简单数据导出:支持将查询结果或图表导出为 CSV、PDF、PNG 格式,方便分享或进一步分析。

二、部署ES群集

1.资源清单

|---------------------|--------------------|----------|-----------------------------------|
| 操作系统 | IP地址 | 主机名 | 软件包 |
| OpenEuler 24.03 | 192.168.16.142 | elk1 | Elasticsearch、logstash、kibana |
| OpenEuler 24.03 | 192.168.16.143 | elk2 | Elasticsearch、filebeat、httpd |
| OpenEuler 24.03 | 192.168.16.144 | elk3 | Elasticsearch、 |

2.基本配置

a.设置主机名

bash 复制代码
hostnamectl set-hostname elk1
hostnamectl set-hostname elk2
hostnamectl set-hostname elk3

b.在ES主机上设置Host文件(elk1上、elk2上、elk3上)

bash 复制代码
vi /etc/hosts
192.168.16.142  elk1
192.168.16.143  elk2
192.168.16.144  elk3

c.创建es运行用户(elk1上、elk2上、elk3上)

bash 复制代码
 useradd es

d.安装java环境(elk1上、elk2上、elk3上)

bash 复制代码
dnf -y install java-11 tar
java -version

e.设置访问限制(elk1上、elk2上、elk3上)

bash 复制代码
vi /etc/security/limits.conf

es soft nofile 65535
es hard nofile 65535
es soft nproc 65535
es hard nproc 65535
es soft memlock unlimited
es hard memlock unlimited

vi /etc/sysctl.conf
vm.max_map_count=655360

sysctl -p

3.安装Elasticsearch(elk1上、elk2上、elk3上)

a.安装Elasticsearch

bash 复制代码
tar zxf elasticsearch-7.10.0-linux-x86_64.tar.gz 
mv elasticsearch-7.10.0 /usr/local/elasticsearch
vi /usr/local/elasticsearch/config/jvm.options

-Xmx2g        #22
-Xmx2g

b.更改Elasticsearch主配置文件

bash 复制代码
#第一台更改
vi /usr/local/elasticsearch/config/elasticsearch.yml

cluster.name: kgc-elk-cluster   #17行,群集名称
node.name: elk1    #23行,本节点主机名
path.data: /elk/data    #33行,数据文件路径
path.logs: /elk/logs    #37行,日志文件路径
bootstrap.memory_lock: false    #43行,锁定物理内存
network.host: 0.0.0.0    #55行,监听地址
http.port: 9200    #59行,监听端口
discovery.seed_hosts: ["elk1", "elk2","elk3"]    #68行,群集中的主机列表
cluster.initial_master_nodes: ["elk1"]    #72行,master主机名称
    
#推送配置文件到第二台
scp /usr/local/elasticsearch/config/elasticsearch.yml elk2:/usr/local/elasticsearch/config/elasticsearch.yml

#推送配置文件到第三台
scp /usr/local/elasticsearch/config/elasticsearch.yml elk3:/usr/local/elasticsearch/config/elasticsearch.yml

#第二台更改
vi /usr/local/elasticsearch/config/elasticsearch.yml
node.name: elk2    #23行,本节点主机名

#第三台更改
vi /usr/local/elasticsearch/config/elasticsearch.yml
node.name: elk3    #23行,本节点主机名

c.创建数据存放路径并授权

bash 复制代码
mkdir -p /elk/data
mkdir -p /elk/logs
chown -R es:es /elk/
chown -R es:es /usr/local/elasticsearch

d.启动es

bash 复制代码
su - es

nohup /usr/local/elasticsearch/bin/elasticsearch &
exit

e.查看节点信息

bash 复制代码
ss -nlpt | grep 9200
LISTEN 0      4096               *:9200            *:*    users:(("java",pid=3136,fd=253))

4.安装logstash(elk1上)

a.在logstash服务器上安装logstash

bash 复制代码
#安装
tar zxf logstash-7.10.0-linux-x86_64.tar.gz 
mv logstash-7.10.0 /usr/local/logstash
chmod -R 777 /usr/local/logstash/data

#添加服务
vi /usr/local/logstash/system.conf

input { 
file{ 
path =>"/var/log/messages" 
type =>"system" 
start_position =>"beginning" 
} 
} 
output { 
elasticsearch { 
hosts => ["192.168.16.142:9200"] 
index =>"system-%{+YYYY.MM.dd}" 
} 
}

#添加读权限
chmod +r /var/log/messages

b.测试安装结果

bash 复制代码
#采集日志(启动)
/usr/local/logstash/bin/logstash -f /usr/local/logstash/system.conf
#访问验证(elk3上)
curl -XGET "http://localhost:9200/_cat/indices"
#green open system-2025.05.20 xnX0OgCxTmGZ6Msy5A1aXA 1 1 14184 0 5.8mb 2.8mb

5.Filebeat

a.在产生日志的客户端上安装Filebeat(elk2上)

bash 复制代码
dnf install -y httpd
systemctl start httpd

b.安装filebeat(elk2上)

bash 复制代码
tar zxf filebeat-7.10.0-linux-x86_64.tar.gz
mv filebeat-7.10.0-linux-x86_64 /usr/local/filebeat

c.配置web01服务器filebeat的输出(elk2上)

bash 复制代码
 vi /usr/local/filebeat/filebeat.yml
 
 filebeat.inputs:
- type: log
  paths:
    - /var/log/httpd/access_log

output.logstash:
  hosts: ["192.168.16.142:5044"]

d.修改logstash的配置文件(elk1上)

bash 复制代码
vi /usr/local/logstash/config/beats.conf

input {
  beats {
    port => "5044"
    codec => "json"
 }
}
seccomp:
  enabled: false
output{
       elasticsearch {
          hosts => ["192.168.16.142:9200"]
          index => "weblog-beat-%{+YYYY.MM.dd}"
    }
}

e.运行logstash并验证(elk1上)

bash 复制代码
/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/beats.conf --path.data=/usr/local/logstash/config.d/web01 &> /tmp/logstash.log &

f.启动(elk2上)

bash 复制代码
/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml

6.安装Kibana(elk1上)

a.在elk1上安装Kibana

bash 复制代码
tar zxf kibana-7.10.0-linux-x86_64.tar.gz
mv kibana-7.10.0-linux-x86_64 /usr/local/kibana

b.修改Kibana主配置文件

bash 复制代码
vi /usr/local/kibana/config/kibana.yml

server.port: 5601    #2行
server.host: "0.0.0.0"    #7行
elasticsearch.hosts: ["http://192.168.16.142:9200"]    #28行
kibana.index: ".kibana"    #32行


chown -R es:es /usr/local/kibana

c.启动Kibana服务

bash 复制代码
su - es
nohup /usr/local/kibana/bin/kibana &nohup /usr/local/kibana/bin/kibana &

d.验证Kibana

bash 复制代码
http://192.168.16.142:5601/

e.将elk1主机的系统日志添加到kinnba

相关推荐
厚衣服_33 分钟前
第十二篇:MySQL 分布式架构演进与云原生数据库探索
分布式·云原生·架构
代码的余温32 分钟前
Marshalling与Demarshalling深度解析
java·分布式·跨进程通信
灰小猿1 小时前
分布式项目保证消息幂等性的常见策略
java·redis·分布式·高并发·springcloud
Akamai中国2 小时前
使用 Akamai 分布式云与 CDN 保障视频供稿传输安全
分布式·安全·云计算·音视频
预测及优化3 小时前
新能源集群划分+电压调节!基于分布式能源集群划分的电压调节策略!
分布式·能源·强化学习·数据驱动·综合能源·集群划分·电压调整
忆雾屿3 小时前
云原生时代 Kafka 深度实践:03进阶特性与最佳实践
java·分布式·后端·kafka
Xiao Ling.3 小时前
RabbitMQ
分布式·rabbitmq
wxiaohe13 小时前
【技能篇】RabbitMQ消息中间件面试专题
分布式·面试·rabbitmq
菠萝0112 小时前
分布式CAP理论
数据库·c++·分布式·后端
万米商云19 小时前
商城前端监控体系搭建:基于 Sentry + Lighthouse + ELK 的全链路监控实践
前端·elk·sentry