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

news2025/6/2 7:20:42

目录

一、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.设置主机名

hostnamectl set-hostname elk1
hostnamectl set-hostname elk2
hostnamectl set-hostname elk3

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

vi /etc/hosts
192.168.16.142  elk1
192.168.16.143  elk2
192.168.16.144  elk3

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

 useradd es

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

dnf -y install java-11 tar
java -version

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

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

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主配置文件

#第一台更改
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.创建数据存放路径并授权

mkdir -p /elk/data
mkdir -p /elk/logs
chown -R es:es /elk/
chown -R es:es /usr/local/elasticsearch

d.启动es

su - es

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

e.查看节点信息

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

4.安装logstash(elk1上)

a.在logstash服务器上安装logstash

#安装
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.测试安装结果

#采集日志(启动)
/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上)

dnf install -y httpd
systemctl start httpd

b.安装filebeat(elk2上)

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上)

 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上)

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上)

/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上)

/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml

6.安装Kibana(elk1上)

a.在elk1上安装Kibana

tar zxf kibana-7.10.0-linux-x86_64.tar.gz
mv kibana-7.10.0-linux-x86_64 /usr/local/kibana

b.修改Kibana主配置文件

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服务

su - es
nohup /usr/local/kibana/bin/kibana &nohup /usr/local/kibana/bin/kibana &

d.验证Kibana

http://192.168.16.142:5601/

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2393514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

酒店管理系统设计与实现

本科毕业设计(论文) 设计(论文)题目 酒店管理系统设计与实现 学生姓名 学生学号 所在学院 专业班级 校内指导教师 李建 企业指导教师 毕业设计(论文)真实性承诺及声明 学生对毕业设计(论文)真实性承诺 本人郑重声明:所提交的毕业设计(论文)作品是本人在指导教师的指…

OpenCV---pointPolygonTest

一、基本概念与用途 pointPolygonTest 是 OpenCV 中用于判断点与多边形关系的重要函数,常用于: 目标检测:判断像素点是否属于检测到的轮廓区域碰撞检测:检测物体是否重叠图像分割:确定点是否在分割区域内几何分析&am…

Qt 的简单示例 -- 地址簿

这个工程里有两个窗口,都是QWidget派生的窗口 主窗口: 1. 运用了布局,按钮控件,单行编辑框,富文本编辑框等窗口部件; 2. 运用了 QMap 类; 3. 实现了点击按钮弹出子窗口的功能,这里子…

什么是DevOps的核心目标?它如何解决传统开发与运维之间的冲突?​

在当今数字化转型加速的时代,DevOps 已成为软件开发领域备受瞩目的明星理念。今天,本文将聚焦于 DevOps 的核心目标,并深入探讨它如何巧妙化解传统开发与运维之间的冲突,为大家揭开 DevOps 的神秘面纱并分享实用经验。本次介绍的与…

Android studio 查看aar源码出现/* compiled code */

如图查看aar源码时看不到具体实现,在排除是sdk版本导致的问题后,下面说解决方法 打开设置,找到插件 输入decompiler 搜索 这个是自带的反编译工具,启用就好了

用HTML5+JavaScript实现汉字转拼音工具

用HTML5JavaScript实现汉字转拼音工具 前一篇博文(https://blog.csdn.net/cnds123/article/details/148067680)提到,当需要将拼音添加到汉字上面时,用python实现比HTML5JavaScript实现繁琐。在这篇博文中用HTML5JavaScript实现汉…

基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计

摘要 随着医疗信息化的不断推进以及“互联网医疗”模式的广泛普及,传统医院挂号流程中存在的排队时间长、资源分配不均等问题日益凸显,急需通过数字化手段加以解决。本研究设计并实现了一套基于Java、SpringBoot、Vue与UniAPP技术栈的医院预约挂号微信小…

ONNX模型的动态和静态量化

引言  通常我们将模型转换为onnx格式之后,模型的体积可能比较大,这样在某些场景下就无法适用。最近想在移动端部署语音识别、合成模型,但是目前的效果较好的模型动辄几个G,于是便想着将模型压缩一下。本文探索了两种压缩方法&…

如何用Python抓取Google Scholar

文章目录 [TOC](文章目录) 前言一、为什么要抓取Google Scholar?二、Google Scholar 抓取需要什么三、为什么代理对于稳定的抓取是必要的四、一步一步谷歌学者抓取教程4.1. 分页和循环4.2. 运行脚本 五、完整的Google Scholar抓取代码六、抓取Google Scholar的高级提…

Wireshark对usb设备进行抓包找不到USBPcap接口的解决方案

引言 近日工作需要针对usb设备进行抓包,但按照wireshark安装程序流程一步步走,即使勾选了安装USBPcap安装完成后开启wireshark依然不显示USBPcap接口,随设法进行解决。 最终能够正常显示USBPcap接口并能够正常使用进行抓包 解决方案&#x…

Socket 编程 UDP

目录 1. UDP网络编程 1.1 echo server 1.1.1 接口 1.1.1.1 创建套接字 1.1.1.2 绑定 1.1.1.3 bzero 1.1.1.4 htons(主机序列转网络序列) 1.1.1.5 inet_addr(主机序列IP转网络序列IP) 1.1.1.6 recvfrom(让服务…

Jenkins实践(8):服务器A通过SSH调用服务器B执行Python自动化脚本

Jenkins实践(8):服务器A通过SSH调用服务器B执行Python自动化脚本 1、需求: 1、Jenkins服务器在74上,Python脚本在196服务器上 2、需要在服务器74的Jenkins上调用196上的脚本执行Python自动化测试 2、操作步骤 第一步:Linux Centos7配置SSH免密登录 Linux Centos7配置S…

lua的注意事项2

总之,下面的返回值不是10,a,b 而且

前端八股之HTML

前端秘籍-HTML篇 1. src和href的区别 src 用于替换当前元素,href 用于在当前文档和引用资源之间确立联系。 (1)src src 是 source 的缩写,指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置&#xff1…

鲲鹏Arm+麒麟V10,国产化信创 K8s 离线部署保姆级教程

Rainbond V6 国产化部署教程,针对鲲鹏 CPU 麒麟 V10 的离线环境,手把手教你从环境准备到应用上线,所有依赖包提前打包好,步骤写成傻瓜式操作指南。别说技术团队了,照着文档一步步来,让你领导来都能独立完成…

【C++ Qt】认识Qt、Qt 项目搭建流程(图文并茂、通俗易懂)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章将开启Qt的学习,Qt是一个较为古老但仍然在GUI图形化界面设计中有着举足轻重的地位,因为它适合嵌入式和多种平台而被广泛使用…

IoT/HCIP实验-1/物联网开发平台实验Part2(HCIP-IoT实验手册版)

文章目录 概述产品和设备实例的产品和设备产品和设备的关联单个产品有多个设备为产品创建多个设备产品模型和物模型设备影子(远程代理) 新建产品模型定义编解码插件开发编解码插件工作原理消息类型与二进制码流添加消息(数据上报消息&#xf…

Replacing iptables with eBPF in Kubernetes with Cilium

source: https://archive.fosdem.org/2020/schedule/event/replacing_iptables_with_ebpf/attachments/slides/3622/export/events/attachments/replacing_iptables_with_ebpf/slides/3622/Cilium_FOSDEM_2020.pdf 使用Cilium,结合eBPF、Envoy、Istio和Hubble等技术…

数学建模之最短路径问题

1 问题的提出 这个是我们的所要写的题目,我们要用LINGO编程进行编写这个题目,那么就是需要进行思考这个怎么进行构建这个问题的模型 首先起点,中间点,终点我们要对这个进行设计 2 三个点的设计 起点的设计 起点就是我们进去&am…

测试概念 和 bug

一 敏捷模型 在面对在开发项目时会遇到客户变更需求以及合并新的需求带来的高成本和时间 出现的敏捷模型 敏捷宣言 个人与交互重于过程与工具 强调有效的沟通 可用的软件重于完备的文档 强调轻文档重产出 客户协作重于合同谈判 主动及时了解当下的要求 相应变化…