简单认识ELK日志分析系统

一. ELK日志分析系统概述

1.ELK 简介

ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。
好处
(1)提高安全性
(2)集中存放日志
(3)缺陷:对日志的分析困难

2.ELK日志分析系统组成

1 、ElasticSearch

概述
(1)提供了一个分布式多用户能力的全文搜索引擎,通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档。
(2)Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。

ElasticSearch核心概念(作用)
(1)接近实时
(2)集群(es数据日志搜索)
(3)节点
(4)索引(es)
索引(库)——类型(表)——文档(记录)
(5)分片和副本(备份——每个都有副本,如其中一个挂了,副本还可以继续正常工作、容灾)

2 、Kiabana

概念
通常与 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据,可以用来汇总、分析和搜索重要数据。

总:将Elasticsearch中的数据优化可视化的展示出来

主要功能
(1)Elasticsearch无缝之集成
(2)整合数据,复杂数据分析
(3)让更多团队成员受益
(4)接口灵活,分享更容易
(5)配置简单,可视化多数据源
(6)简单数据导出

3、 Logstash

概念
(1)一款强大的数据数据处理工具
(2)可实现数据传输,格式处理,格式化输出(输出给es)
(3)数据输入,数据加工(如过滤、改写等)以及数据输出
Logstash主要组件
(1)shipper:主要负责监控日志,日志变动,集新的日志
(2)indexer:存储(日志存储者)主要是日志接收和写入本地
(3)broker:连接组件,并对组件进行搜索日志文件存储另一个平台上
(4)search and storage:搜索和存储
(5)web interface:展示web界面

Logstash理念、作用
input(数据采集) filter(数据过滤) output(数据输出)

4、 可以添加的其它组件

Filebeat
Filebeat概念

(1)轻量级的开源日志文件数据搜集器。

(2)通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于 EFLK 架构当中。行解析

Filebeat 结合 logstash 带来好处
(1)通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻 Elasticsearch 持续写入数据的压力
(2)从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取
(3)将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件
(4)使用条件数据流逻辑组成更复杂的处理管道

缓存/消息队列(redis、kafka、RabbitMQ等)
可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。

Fluentd
概念

是一个流行的开源数据收集器。

特点
由于 logstash 太重量级的缺点:

(1)解决Logstash 性能低、资源消耗比较多等问题,随后就有 Fluentd 的出现。
(2)相比较 logstash,Fluentd 更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。
(3)在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。

3.为什么要使用 ELK

(1)由于会通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

(2)单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。数十上百台服务器会很繁琐并且效率低下,使用集中化的日志管理:开源的syslog,将所有服务器上的日志收集汇总

(3)一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

总:日志集中化、集中化管理

提高效率、性能安全

4.完整日志系统基本特征

收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持 UI 分析
警告:能够提供错误报告,监控机制

5.ELK 的工作过程

1、 ELK 的工作原理

(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3)Elasticsearch 对格式化后的数据进行索引和存储。
(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

2、 ELK 的数据流图示

在这里插入图片描述

二.部署ELK日志分析系统

web服务器部署logstash+kibana:192.168.116.50
es节点1:192.168.116.60
es节点2:192.168.116.70

1.节点服务器安装elasticsearch

(1)需要先准备好相关的安装包(后三个用于前端图形化展示es状态)

在这里插入图片描述
(2)部署jdk环境

yum -y install java-1.8.0-openjdk-devel.x86_64

在这里插入图片描述
(3)安装es
在这里插入图片描述
(4)修改配置文件

vim /etc/elasticsearch/elasticsearch.yml
#yml键值对格式 键: 值(冒号后面要加一个括号)
cluster.name: my-elk-cluster    #集群名称
node.name: node1       #当前节点名称
node.master: true      #开启主节点
node.data: true        #开启数据节点(两个都开启是混合模式)path.data: /var/lib/elasticsearch    #数据文件
path.logs: /var/log/elasticsearch    #日志文件bootstrap.memory_lock: true     #锁定使用内存(禁用交换分区使性能下降)network.host: 192.168.116.60    #监听地址(本机ip)
http.port: 9200                 #es和客户端通信的端口(默认9200)
transport.tcp.port: 9300        #es节点之间通信的端口(默认9300)#启用发现机制(es内置发现模块,通过单播发现集群内的服务节点)
discovery.zen.ping.unicast.hosts: ["192.168.116.60:9300", "192.168.116.70:9300"]

另一台节点配置文件也修改
在这里插入图片描述
ES三类节点说明

master主节点:
主要功能:维护元数据,管理集群节点状态;不负责数据写入和查询。
配置要点:内存可以相对小一些,但是机器一定要稳定,最好是独占的机器。
配置格式:node.master: true ;node.data: false

data数据节点
主要功能:负责数据的写入与查询,压力大。
配置要点:大内存,最好是独占的机器。
配置格式:node.master: false;node.data: true

client客户端节点
主要功能:负责任务分发和结果汇聚,分担数据节点压力。
配置要点:大内存,最好是独占的机器。
配置格式:node.master: false; node.data: false

还有一种混合节点 node.master: true 和 node.data: true ,这种在生产环境中不建议使用,我们这里的实验测试环境会将主节点和数据节点放在一台主机上。

三类节点分配比例

一般来说,主节点最多3台,数据节点可以为每个主节点分配 2~4 台(3个主节点就是一共6~12台),客户端可以为数据节点总数的1/3左右。
根据读写情况来决定,写多则数据节点多,读多则客户端多。

(5)优化系统(放开内存、进程数和文件限制)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(6)优化es拥有的内存使用权限

    由于ES构建基于lucene,而lucene设计强大之处在于lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene的索引文件segements是存储在单文件中的,并且

不可变,对于OS来说,能够很友好地将索引文件保持在cache中,以便快速访问。因此,我们很有必要将一半的物理内存留给lucene,另一半的物理内存留给es(TM heap)。

  • 在ES内存设置方面,可以遵循以下原则

      当机器内存小于64G时,遵循通用的原则,508给ES,50%留给操作系统,供lucene使用;当机器内存大于64G时,遵循原则:建议分配给Es分配4~32G 的内存即可,其它内存留给操作系统,供lucene使用。
    

在这里插入图片描述
在这里插入图片描述
(7)启动(注意es启动最低需要4G内存)
在这里插入图片描述
(8)依次安装其余三个软件

#安装node.js(大约10分钟)
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install#安装phantomjs
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin/
cp phantomjs /usr/local/bin#安装 Elasticsearch-head-master 数据可视化工具
unzip elasticsearch-head-master.zip
cd elasticsearch-head-master/
npm install

(9)在es配置文件中添加跨域访问配置,并重启服务

vim /etc/elasticsearch/elasticsearch.yml
#添加
http.cors.enabled: true
http.cors.allow-origin: "*"#重启服务加载配置
systemctl restart elasticsearch.service

在这里插入图片描述
(10)启动可视化工具(开启端口为9100)

cd /opt/elasticsearch-head-master/
npm run start &

在这里插入图片描述

在这里插入图片描述
(11)测试插入索引

#通过命令插入一个测试索引,索引为 index-demo,类型为 test。
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
(12)删除索引

curl -X DELETE '192.168.116.60:9200/index-demo'

在这里插入图片描述

2.web服务器安装logstash和kibana

(1)准备logstash和kibana的安装包,和jdk环境

在这里插入图片描述
在这里插入图片描述
(2)安装启动logstash,并将命令加入系统识别路径
在这里插入图片描述
在这里插入图片描述
(3)测试使用logstash

logstash [选项] ...
-f   通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e   从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t   测试配置文件是否正确,然后退出。

使用命令行输入标准输出到屏幕
在这里插入图片描述
在这里插入图片描述
测试命令行输入,标准输出到es的节点中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(4)测试无误后,自定义logstash配置文件

Logstash 配置文件基本由三部分组成:input、output 以及 filter(根据需要选择使用)input{...}:表示从数据源采集数据,常见的数据源如Kafka、日志文件等。output{...}:表示将logstash收集的数据经由过滤器处理之后输出到Elasticsearch。filter{...}:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式.grok:对若干个大文本字段进行再分割成一些小字段(?<字段名>正则表达式)字段名:正则表达式匹配到的内容。date:对数据中的时间格式进行统一和格式化。mutate:可以重命名,删除,替换和修改事件中的字段。比如对一些无用的字段进行剔除,或增加自定义的字段。mutiline:对多行数据进行统一编排,将多行数据汇总为一个单一的行。
#在logstash配置文件目录下,创建配置文件
cd /etc/logstash/conf.d/
ls

在这里插入图片描述
(5)加载配置文件,实现日志输出到es

logstash -f 配置文件名        

在这里插入图片描述
logstash -f 配置文件名

3.安装使用kibana

(1)安装和修改配置文件,并启动kibana
在这里插入图片描述

vim /etc/kibana/kibana.yml
#修改主要配置
#取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
#取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
#取消注释,配置es服务器的ip,如果是集群则配置该集群中master节点的ip
elasticsearch.url:  ["http://192.168.116.60:9200","http://192.168.116.70:9200"] 
#取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
#取消注释,配置kibana的日志文件路径(需手动创建),不然默认是messages里记录日志
logging.dest: /var/log/kibana.log#创建日志文件,并修改归属权限
touch /var/log/kibana.log
chown kibana:kibana /var/log/kibana.log#启动kibana
systemctl start kibana.service

在这里插入图片描述
(2)使用kibana

访问kibana服务器的5601端口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三.Filebeat+ELK 部署

nginx服务器部署filebeat:192.168.116.40
logstash+kibana服务器:192.168.116.50
es节点1:192.168.116.60
es节点2:192.168.116.70
#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
#下载nginx,添加测试页面
#配置nginx官方源
cd /etc/yum.repos.d/
vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1#下载并启动
yum -y install nginx
systemctl enable --now nginx#添加测试页面
cd /usr/share/nginx/html/
echo '<h1>this is nginxlog test1 webpage</h1>' > test1.html
echo '<h1>this is nginxlog test2 webpage</h1>' > test2.html

准备filebeat安装包,解压安装
在这里插入图片描述

tar xf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64 /usr/local/filebeat

修改filebeat配置文件 /usr/local/filebeat/filebeat.yml

在这里插入图片描述
在这里插入图片描述
启动filebeat

nohup ./filebeat -e -c filebeat.yml        nohup后台启动(不会因为退出终端而终端)-e        同时输出到屏幕(便于实验),也可以使用重定向到文件中-c        指定配置文件

在这里插入图片描述
修改logstash配置文件

在这里插入图片描述
启动logstash
在这里插入图片描述
在这里插入图片描述
测试索引收集日志

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是此索引包含了nginx的access.log和error.log,我们可以在配置文件中添加条件判断分割日志,然后重启服务测试
在这里插入图片描述
在这里插入图片描述
在客户端访问nginx测试页面,然后刷新es,出现了分割的索引
在这里插入图片描述
在kibana中创建对应索引

在这里插入图片描述
之后就可以查看了
在这里插入图片描述

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

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

相关文章

计算机网络—TCP和UDP、输入url之后显示主页过程、TCP三次握手和四次挥手

TCP基本认识 TCP是面向连接的、可靠的&#xff0c;基于字节流的传输层通信协议。 图片来源小林coding 序号&#xff1a;传输方向上字节流的字节编号。初始时序号会被设置一个随机的初始值&#xff08;ISN&#xff09;&#xff0c;之后每次发送数据时&#xff0c;序号值 ISN…

知识图谱实战应用23-【知识图谱的高级用法】Neo4j图算法的Cypher查询语句实例

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用23-【知识图谱的高级用法】Neo4j图算法的Cypher查询语句实例,Neo4j图算法是一套在Neo4j图数据库上运行的算法集合。这些算法专门针对图数据结构进行设计,用于分析、查询和处理图数据。图算法可以帮助我们发现图中的模…

【面试题】 本地运行的前端代码,如何让他人访问?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 有时候&#xff0c;我前端写好了项目&#xff0c;想要给其他人看一下效果&#xff0c;可以选择将代码部署到test环境&#xff0c;也可以选择让外部通过i…

Vue-----package.json

前言 package.json是Node.js应用程序中的配置文件&#xff0c;它在Vue项目中同样非常重要。在Vue中&#xff0c; package.json文件包含了有关你的应用程序的重要信息&#xff0c;如版本号、依赖项、脚本等。 文件结构 package.json文件通常包含以下内容&#xff1a; {"n…

九、Spring 声明式事务学习总结

文章目录 一、声明式事务1.1 什么是事务1.2 事务的应用场景1.3 事务的特性&#xff08;ACID&#xff09;1.4 未使用事务的代码示例1.5 配置 Spring 声明式事务学习总结 一、声明式事务 1.1 什么是事务 把一组业务当成一个业务来做&#xff1b;要么都成功&#xff0c;要么都失败…

看跨境电商世界区域分布,Live Market教你深入参与跨境创业

随着全球化发展带来互联网技术的进步和平台经济的触角伸向全球&#xff0c;跨境电商越来越成为全球贸易的重要组成部分。根据国际数据公司&#xff08;IDC&#xff09;的最新数据显示&#xff0c;全球前五大跨境电商平台分别是亚马逊、阿里巴巴、eBay、Wish和京东全球购。这五家…

Example: Beam Allocation in Multiuser Massive MIMO阅读笔记一

文章目录 A Machine Learning FrameworkApplication of Supervised Learning to Resource AllocationResearch Challenges and Open IssuesLow-Complexity ClassifierMulti-BS CooperationFast Evolution of Scenarios Conclusion A Machine Learning Framework 对于现有的云计…

mysql 数据库引擎介绍

一、数据库引擎 数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务&#xff0c;从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储…

nuxt脚手架创建项目

在初始化时遇到一个依赖找不到的问题&#xff0c;记录一下&#xff0c;如有遇到同样问题的小伙伴&#xff0c;希望能给你们一点指引。 从安装脚手架开始&#xff0c;首先 一&#xff1a;安装nuxt脚手架 1. C盘全局安装&#xff1a; npm i -g create-nuxt-app 安装后可creat…

【开源项目--稻草】Day06

【开源项目--稻草】Day06 1. 学生提问与解答功能2. 显示create.html2.1 HomeController中代码2.2 复用网页的标签导航条 3. 创建问题发布界面3.1 富文本编辑器 4.多选下列框5.动态加载所有标签和老师6. 发布问题的业务处理 1. 学生提问与解答功能 学生提问: 提问时指定标签和回…

【《快速构建AI应用——AWS无服务器AI应用实战》——基于云的解决方案快速完成人工智能项目的指南】

基于云的人工智能服务可以自动完成客户服务、数据分析和财务报告等领域的各种劳动密集型任务。其秘诀在于运用预先构建的工具&#xff0c;例如用于图像分析的Amazon Rekognition或用于自然语言处理的AWS Comprehend。这样&#xff0c;就无须创建昂贵的定制软件系统。 《快速构…

【UE4】多人联机教程(重点笔记)

效果 1. 创建房间、搜索房间功能 2. 根据指定IP和端口加入游戏 步骤 1. 新建一个第三人称角色模板工程 2. 创建一个空白关卡&#xff0c;这里命名为“InitMap” 3. 新建一个控件蓝图&#xff0c;这里命名为“UMG_ConnectMenu” 在关卡蓝图中显示该控件蓝图 打开“UMG_Connec…

全志D1-H (MQ-Pro)驱动 OV5640 摄像头

内核配置 运行 m kernel_menuconfig 勾选下列驱动 Device Drivers ---><*> Multimedia support --->[*] V4L platform devices ---><*> Video Multiplexer[*] SUNXI platform devices ---><*> sunxi video input (camera csi/mipi…

<dependency> idea中为什么这个变黄色

在IDE中&#xff0c;当你的代码出现黄色高亮时&#xff0c;通常表示存在警告或建议的提示。对于Maven的<dependency>标签来说&#xff0c;黄色高亮可能有以下几种原因&#xff1a; 依赖项未找到&#xff1a;黄色高亮可能表示IDE无法找到指定的依赖项。这可能是由于配置错…

第 357 场力扣周赛题解

A 故障键盘 简单模拟 class Solution { public:string finalString(string s) {string res;for (auto c: s)if (c ! i)res.push_back(c);elsereverse(res.begin(), res.end());return res;} };B 判断是否能拆分数组 区间dp&#xff1a;定义 p i , j p_{i,j} pi,j​表示子数组 n…

uniapp echarts 点击失效

这个问题网上搜了一堆&#xff0c;有的让你降版本&#xff0c;有的让你改源码。。。都不太符合预期&#xff0c;目前我的方法可以用最新的echarts。 这个方法就是由npm安装转为CDN&#xff0c;当然你可能会质疑用CDN这样会不稳定&#xff0c;那如果CDN的地址是本地呢&#xff1…

Linux下共享windows 一键搞定

编写脚本 [rootlocalhost ~]# vim dd.sh#!/bin/bash yum -y install samba mkdir -p /home/shar sss dddecho " [share]comment Shared Folderpath /homebrowseable yeswritable yesguest ok yes " > /etc/samba/smb.confchmod x /home/* useradd qqqq s…

2023 电赛 E 题 激光笔识别有误--使用K210/Openmv/树莓派/Jetson nano实现激光笔在黑色区域的目标检测

1. 引言 1.1 激光笔在黑色区域目标检测的背景介绍 在许多应用领域&#xff0c;如机器人导航、智能家居和自动驾驶等&#xff0c;目标检测技术的需求日益增加。本博客将聚焦于使用K210芯片实现激光笔在黑色区域的目标检测。 激光笔在黑色区域目标检测是一个有趣且具有挑战性的…

AssetBundleBrowser导入报错解决方案

第一次导入AssetBundleBrowser遇到报错有 Assets\Scenes\AssetBundles-Browser-master\AssetBundles-Browser-master\Tests\Editor\ABModelTests.cs(13,7): error CS0246: The type or namespace name Boo could not be found (are you missing a using directive or an assem…

web系统测试思路

一、输入框 1、字符型输入框&#xff1a; &#xff08;1&#xff09;字符型输入框&#xff1a;英文全角、英文半角、数字、空或者空格、特殊字符“~&#xff01;#&#xffe5;%……&*&#xff1f;[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时&#xff0c;…