ELK日志分析系统(filebeat+logstash+elasticsearch+kibana)

一、ELK 平台介绍

1、ELK 概述

        日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
        通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的 syslog,将所有服务器上的日志收集汇总。
        集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk 和 wc 等 Linux 命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
        开源实时日志分析 ELK 平台能够完美的解决我们上述的问题,ELK 由 ElasticSearch、Logstash 和 Kiabana 三个开源工具组成。

工具名称简介
Elasticsearch开源分布式搜索引擎,特点有分布式、零配置、自动发现、索引自动分片、索引副本机制、restful 风格接口、多数据源、自动搜索负载等
Logstash完全开源工具,可对日志进行收集、过滤,存储供后续使用(如搜索 )
Kibana开源免费工具,为 Logstash 和 Elasticsearch 提供日志分析友好的 Web 界面,助力汇总、分析和搜索重要数据日志

进行日志处理分析,一般需要经过一下几步:
(1)将日志进行集中化管理
(2)将日志格式化(Logstash)并输出到 Elasticsearch
(3)对格式化后的数据进行索引和存储(Elasticsearch)
(4)前端数据的展示(Kibana)

2、Elasticsearch

2.1、ElasticSearch 概述

        Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

2.2 Elasticsearch 核心概念

(1)接近实时(NRT)

        Elasticsearch 是一个接近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是 1 秒)。

(2)集群(cluster)

一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。一个集群由一个唯一的名字标识,这个名字默认就是 “elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。

(3)节点(node)

        一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于 Elasticsearch 集群中的哪些节点。
一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做 “elasticsearch” 的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做 “elasticsearch” 的集群中。
在一个集群里,只要你想,可以拥有任意多个节点。而且,如果当前你的网络中没有运行任何 Elasticsearch 节点,这时启动一个节点,会默认创建并加入一个叫做 “elasticsearch” 的集群。

(4)索引(index)

        一个索引是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。

(5)类型(type)

        在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类 / 分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。

(6)文档(document)

        一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以 JSON(Javascript Object Notation)格式来表示,而 JSON 是一个到处存在的互联网数据交互格式。
在一个 index/type 里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引 / 赋予一个索引的 type。

(7)分片和复制(shards & replicas)

        一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有 10 亿文档的索引占据 1TB 的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,这些份就叫做分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的 “索引”,这个 “索引” 可以被放置到集群中的任何节点上。分片很重要,主要有两方面的原因:

1)允许你水平分割 / 扩展你的内容容量。

2)允许你在分片(潜在地,位于多个节点上)之上进行分布式的、并行的操作,进而提高性能 / 吞吐量。

        至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的。

        在一个网络 / 云的环境里,失败随时都可能发生,在某个分片 / 节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片,或者直接叫复制。

        复制之所以重要,有两个主要原因:在分片 / 节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原 / 主要(original/primary)分片置于同一节点上是非常重要的。扩展你的搜索量 / 吞吐量,因为搜索可以在所有的复制上并行运行。总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。
        默认情况下,Elasticsearch 中的每个索引被分片 5 个主分片和 1 个复制,在两个节点的场景中,每个索引将会有 5 个主分片和另外 5 个副本分片,每个索引总共就有 10 个分片。但是在 Elasticsearch 7.0 以后的版本中默认分片数做了调整中,默认索引的主分片(Primary Shards)数量为 1,副本分片(Replica Shards)数量为 1

3、Logstash

3.1 Logstash 介绍

Logstash 有 JRuby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出。Ligstash 具有强大的插件功能,常用于日志处理。
Logstash 的设计理念:Logstash 只做三件事,数据输入、数据加工、数据输出

3.2、Logstash 工作的三个阶段

(1)input 数据输入端,可以接收来自任何地方的源数据
插件功能描述
file从文件中读取
syslog监听在 514 端口的系统日志信息,并解析成 RFC3164 格式
redis从 redis - server list 中获取,并解析成 RFC3164 格式
beat接收来自 Filebeat 的事件
(2)Filter 数据中转层,主要进行格式处理,数据类型转换、数据过滤、字段添加,修改等,常用的过滤器如下。
插件功能描述
grok通过正则解析和结构化任何文本
mutate在事件字段执行一般的转换,可重命名、删除、替换和修改事件字段
drop完全丢弃事件,如 debug 事件
clone复制事件,可能添加或者删除字段
geoip添加有关 IP 地址地理位置信息
(3)output 是 logstash 工作的最后一个阶段,负责将数据输出到指定位置,兼容大多数应用,常用的有:elasticsearch:发送事件数据到 Elasticsearch,便于查询,分析,绘图。
插件功能描述
elasticsearch发送事件数据到 Elasticsearch,便于查询、分析、绘图
file将事件数据写入到磁盘文件上
mongodb将事件数据发送至高性能 NoSQL mongodb,便于永久存储、查询、分析,大数据分片
redis将数据发送至 redis - server,常用于中间层暂时缓存
graphite发送事件数据到 graphite

4、Kibana

4.1 Kibana 介绍

        Kibana 是一个设计使用和 Elasticsearch 配置工作的开源分析和可视化平台。可以用它进行搜索、查看、集成 Elasticsearch 中的数据索引。可以利用各种图表、报表、地图组件轻松的对数据仅进行可视化分析

4.2、Kibana 主要功能

Elasticsearch 无缝集成
整合数据
复杂数据分析
让更多的团队成员收益
接口灵活
配置简单
可视化多数据源
简单数据导出

二、实验案例

拓扑

资源列表

主机名ip 地址操作系统软件包
-192.168.10.101Openeuler24filebeat、httpd
-192.168.10.102Openeuler24logstash
elk1192.168.10.103Openeuler24Elasticsearch、kibana
elk2192.168.10.104Openeuler24Elasticsearch

1、基础配置

1.1、关闭防火墙及内核保护

hostnamectl set-hostname elk1
hostnamectl set-hostname elk2vim /etc/hosts
###添加内容###
192.168.10.103 elk1
192.168.10.104 elk2systemctl stop firewalld
systemctl disable firewalld
setenforce 0vim /etc/selinux/config
###编辑内容###
SELINUX=disabled

1.2、添加程序用户

useradd elk
passwd elk              ###密码“elk”######加入到wheel组中
gpasswd -a elk wheel###关闭命令使用认证
visudo###编辑内容###
%wheel ALL=(ALL)       NOPASSWD: ALL        ###110行###切换到程序用户并加载完整的环境###
su - elk

1.3、部署环境

sudo dnf -y install java

1.4、修改用户可用的硬件资源

sudo vim /etc/security/limits.conf
###添加内容###
elk soft nofile 65535
elk hard nofile 65535
elk soft nproc  65535
elk hard nproc  65535
elk soft memlock unlimited
elk hard memlock unlimited

1.5、从内核方面为进程分配更大的可用内存区

sudo vim /etc/sysctl.conf
###添加内容###
vm.max_map_count=655360

1.6、重启加载配置文件

sudo reboot

2.安装elasticsearch

2.1、切换到指定目录拉取安装包

cd /opt
su - elk

2.2、解压elasticsearch并移动到合适位置

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

2.3、编辑JAVA文件

sudo vim /usr/local/elasticsearch/config/jvm.options
###编辑内容###
-Xms2g
-Xmx2g

2.4、修改elasticsearch配置文件

sudo vim /usr/local/elasticsearch/config/elasticsearch.yml###编辑内容###
cluster.name: aaa
node.name: elk1
path.data: /path/to/data
path.logs: /path/to/logs
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["elk1", "elk2"]
cluster.initial_master_nodes: ["elk1"]

2.5、创建数据存放路径

sudo mkdir -p /path/to/data
sudo mkdir -p /path/to/logs
sudo chown -R elk:elk /path
sudo chown -R elk:elk /usr/local/elasticsearch/

2.6、启动并查看监听

/usr/local/elasticsearch/bin/elasticsearch &
netstat -anpt | grep 9200

3、安装logstash

3.1、关闭防火墙及内核保护

systemctl stop firewalld
setenforce 0
dnf -y install java
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/

3.2、编辑配置文件

chmod o+r /var/log/messages
touch /usr/local/logstash/system.conf
vim /usr/local/logstash/system.conf###编辑内容###
input {file {path => "/var/log/messages"type => "system"start_position => "beginning"}}output {elasticsearch {hosts=> ["192.168.10.103:9200","192.168.10.104:9200"]index=> "system-%{+YYYY.MM.dd}"}}

3.3、启动并查看监听

/usr/local/logstash/bin/logstash -f /usr/local/logstash/system.conf &
netstat -anpt | grep java

4、部署filebeat

4.1、安装apache

systemctl stop firewalld
setenforce 0
dnf -y install httpd
systemctl start httpd
echo "filebeataaaaaa" > /var/www/html/index.html

4.2、安装filebeat

tar zxf filebeat-7.10.0-linux-x86_64.tar.gz
mv filebeat-7.10.0-linux-x86_64 /usr/local/filebeat
cd /usr/local/filebeat/
mv filebeat.yml filebeat.yml.bak
vim filebeat.yml
###编辑内容###
filebeat.inputs:
- type: logpaths:- /var/log/httpd/access_logoutput.logstash:hosts: ["192.168.10.102:5044"]###检查配置文件###
./filebeat test config -c filebeat.yml

4.3、修改用户可用的硬件资源

vim /etc/security/limits.conf
###编辑内容###
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
* soft memlock unlimited
* hard memlock unlimitedvim /etc/sysctl.conf
###编辑内容###
vm.max_map_count=655360

4.4、启动filebeat服务

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

4.5、查看监听

netstat -anpt | grep filebeat

4.6、修改 logstash 的配置文件,使日志输出到 elasticsearch

vim /usr/local/logstash/config/beats.conf
###编辑内容###
input {beats {port => "5044"codec => "json"}
}output {elasticsearch {hosts => ["192.168.10.103:9200"]index => "weblog-beat-%{+YYYY.MM.dd}"}
}

4.7、运行服务

/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/beats.conf --path.data=/usr/local/logstash/config.d/web01 &

5、安装 Kibana

5.1、在 elk1 上安装 Kibana

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

5.2、修改配置文件

vim /usr/local/kibana/config/kibana.yml
###编辑内容###
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.10.103:9200"]
kibana.index: ".kibana"
i18n.locale: "zh-CN"

5.3、修改归属并启动服务

chown -R elk:elk /usr/local/kibana/
su - elk
/usr/local/kibana/bin/kibana &

5.4、访问:

http://192.168.10.103:5601

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

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

相关文章

JS基础4—jQuery

jQuery常用内容 jQuery 介绍jQuery 获取方式基本选择器 (最常用)层级选择器 (基于元素间关系)过滤选择器 (基于特定条件) jQuery事件绑定jQuery 方法调用jQuery遍历jQuery 获取与设置jQuery 添加与删除jQuery CSS 类jQuery - AJAX 总结 jQuery 介绍 jQuery 是一个轻量级、快速…

时钟周期是什么?

时钟周期(Clock Cycle)是什么? 时钟周期(Clock Cycle)是计算机系统中一个最基础的时间单位,也称为时钟节拍或时钟周期时间(Clock Period)。它由系统时钟发生器产生的一个周期性脉冲…

如何用SEO优化长尾关键词?

内容概要 在SEO优化领域,长尾关键词扮演着至关重要的角色,它们能有效提升网站在搜索引擎中的可见度和流量转化率。本文将全面解析如何通过系统方法优化长尾关键词,涵盖从基础理论到实战应用的完整流程。核心内容包括利用专业工具进行关键词挖…

电子面单系统开发全解析

一、如果要做电子面单系统,怎么做? 开发电子面单系统是一项复杂且涉及多方面考量的工程,涵盖需求分析、系统架构设计、技术选型、接口对接、安全性保障、第三方服务选择以及部署与维护等关键环节。 电子面单系统开发步骤 需求分析&#xf…

UE5 - 制作《塞尔达传说》中林克的技能 - 18 - 磁力抓取器

让我们继续《塞尔达传说》中林克技能的制作!!! UE版本:5.6.0 VS版本:2022 本章节的核心目标:磁力抓取器 先让我们看一下完成后的效果: 18_磁力抓取器 大纲如下: 引言功能架构与核心逻辑物理材质与场景配置代码实现:从识别到操控操作说明1.引言 在《塞尔达传说》中,林…

基于ApachePOI实现百度POI分类快速导入PostgreSQL数据库实战

目录 前言 一、百度POI分类简介 1、数据表格 2、分类结构 二、从Excel导入到PG数据库 1、Excel解析流程 2、数据入库 3、入库成果及检索 三、总结 前言 在上一篇博文中,我们对高德POI分类进行了深入剖析 并对Excel 中 POI 分类数据的存储结构特点进行了详细介…

学习经验分享【41】YOLOv13:基于超图增强自适应视觉感知的实时目标检测

YOLO算法更新速度很快,已经出到V13版本,后续大家有想发论文或者搞项目可更新自己的baseline了。 摘要:YOLO 系列模型凭借其卓越的精度和计算效率,在实时目标检测领域占据主导地位。然而,YOLOv11 及早期版本的卷积架构&…

Handling outliers in non-blind image deconvolution论文阅读

Handling outliers in non-blind image deconvolution 1. 研究目标与实际意义2. 创新方法:基于EM的异常值建模2.1 新模糊模型2.1.1 目标函数2.2 EM框架:迭代优化二元掩码2.2.1 E步:计算后验权重 E [ m x ] E[m_x] E[mx​]2.2.2 M步:加权正则化反卷积2.3 优化加速技术2.3.1…

Redis 功能扩展:Lua 脚本对 Redis 的扩展

Redis 是一个高性能的内存数据库,支持多种数据结构,如字符串、哈希、列表、集合和有序集合。为了增强其功能,Redis 引入了 Lua 脚本支持,使开发者可以编写自定义的脚本,确保操作的原子性并提高复杂操作的性能。本文将详…

七天学完十大机器学习经典算法-06.支持向量机(SVM):分类边界的艺术——深入浅出指南

接上一篇《七天学完十大机器学习经典算法-05.从投票到分类:K近邻(KNN)算法完全指南》 想象你要在操场上为两个班级划活动区域,如何画出一条最公平的分界线?这条线不仅要分开两班学生,还要让两个班都离分界线尽可能远——这就是支持…

python如何安装PyQt6-stubs依赖包

PyQt6-stubs 是为 PyQt6 提供类型提示(Type Hints)和 IDE 智能补全支持的第三方补丁包,特别适用于 PyCharm、VS Code 等现代 IDE。它对开发者在编码时帮助极大。 一、安装方法 需要提前安装好git,然后克隆PyQt6-stubs源码&#xf…

创宇智脑 MCP 赋能 AiPy,IP 风险调查效率实现 10 倍飞跃,威胁分析一键生成

还记得上个月那个焦头烂额的凌晨三点吗?监控大屏突然疯狂闪烁,500 多个 IP 地址同时出现异常访问,密密麻麻的数据流在屏幕上跳动,像极了一张让人窒息的大网。我和团队成员瞪着布满血丝的眼睛,手动排查每一个 IP&#x…

使用SRS+ffmpeg实现https推流flv

1修改SRS的live.conf配置如下: # Live streaming config for SRS. # see full.conf for detail config.listen 1935; max_connections 1000; srs_log_tank console; daemon off;http_api {enabled on;listen …

力扣网编程题:合并两个有序数组(双指针解法)

一. 简介 上一篇文章对"合并两个有序数组"题目,使用了暴力解法,算法时间复杂度比较高。文章如下: 力扣网编程题:合并两个有序数组(直接解法)-CSDN博客 本文满足进阶要求,算法时间复…

数据结构之 【树的简介】(树的(相关)概念、二叉树的概念、部分性质、满二叉树、完全二叉树)

目录 1.树的概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 1.4树在实际中的应用 2.二叉树概念及结构 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4应用题 1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构,由 n(n…

Redis-7.4.3-Windows-x64下载安装使用

Redis软件包下载地址链接:https://github.com/redis-windows/redis-windows/releases 检查或者修改配置文件redis.conf: #如果允许外部其他主机访问本机redis,设置成:bind 0.0.0.0 bind 127.0.0.1 protected-mode yes #设置端口…

Educational Codeforces Round 180 (Rated for Div. 2)

AB 略 C 对于axayaz>max(2*az,an),枚举y z 二分x D 首先,长度为1的边的已经有n-1条,那么构造的图中只能存在一条长度为2的好边。我们先构造出一个图只存在n-1条好边,我们发现对于一个点所有连接它的边要不均指向它要不均背…

CAD文件处理控件Aspose.CAD教程:在 Python 中将 DGN 文件转换为 PDF

概述 将DGN文件转换为PDF对许多行业至关重要,包括工程和建筑行业。能够轻松地以 PDF 格式共享设计,增强协作和可访问性。通过使用Aspose.CAD for Python via .NET的强大功能,开发人员可以高效地自动化此过程。这款 CAD 转换器 SDK 简化了转换…

宁德时代携手问界,以“厂中厂”模式加速扩产

6月30日,宁德时代在赛力斯超级工厂的两条CTP2.0高端电池包产线正式投产。这是宁德时代在重庆布局的首个基地,并首次采用“厂中厂”合作模式,为问界系列车型本地化生产供应动力电池系统。重庆市、四川省广安市有关负责人,赛力斯集团…

工作中常用的Git操作命令(一)

说明 时间过得真快,一转眼吗喽也是好歹工作几年了,把这些年平时用的git命令整理记录一下,分几个文章,囊括了常用的命令,工作日常很多时候都是使用svn,回到宿舍自己的项目才是git,就问你离不离谱…