ELK日志分析系统

发布于:2025-06-16 ⋅ 阅读:(17) ⋅ 点赞:(0)

目录

一.ELK概述

2.Elasticaserch

2.1ElasticSearch概述

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

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

(3)节点(node)一个节点是你集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。

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

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

(6)文档(document)一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON(Javascript Object Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。

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

3.Logstash

3.1 Logstash介绍

(1)input 数据输入端,可以接收来自任何地方的源数据。file:从文件中读取syslog:监听在514端口的系统日志信息,并解析成RFC3164格式。redis:从redis-server list 中获取beat:接收来自Filebeat的事件

常用的过滤器如下。grok:通过(2)Filter 数据中转层,主要进行格式处理,数据类型转换、数据过滤、字段添加,修改等,正则解析和结构化任何文本。mutate:在事件字段执行一般的转换。可以重命名、删除、替换和修改事件字段。drop:完全丢弃事件,如debug事件。clone:复制事件,可能添加或者删除字段。geoip:添加有关IP地址地理位置信息。

(3)output 是logstash工作的最后一个阶段,负责将数据输出到指定位置,兼容大多数应用,常用的有:elasticsearch:发送事件数据到Elasticsearch,便于查询,分析,绘图。file:将事件数据写入到磁盘文件上。mongodb:将事件数据发送至高性能NoSQL mongodb,便于永久存储,查询,分析,大数据分片。redis:将数据发送至redis-server,常用于中间层暂时缓存。graphite:发送事件数据到graphite。statsd:发送事件数据到 statsd。

 4.kibana

4.1Kibana介绍

4.2 Kibana 主要功能

1.基本配置

1.1 为103,104同步进行设置

1.2 在两台节点上设置主机名

1.3 关闭防火墙和seLinux 和永久关闭

1.4创建运行用户 和密码 添加wheel组

1.5安装java环境

1.6 为用户设置资源访问限制

2.安装Elasticsearch

2.1更改Elasticsearch主配置文件

2.2创建数据库存放路径并授权

2.3启动es 查看状态

2.4查看节点信息

三.安装logstash

1.在logstash服务器上安装logstash

1.1关闭防火墙和selinux

2.测试安装结果

(1)直接将消息输出到屏幕上

(2)logstash配置文件

四.filebeat

2.安装filebeat

3.配置web01 服务器filebeat的输出

(1)修改filebeat文件,将filebeat输出的日志输出到远程的logstash

(2)启动filebeat服务

4.修改logstash的配置文件。使日志输出到elasticsearsh

5. 运行logstash 并验证

五.安装kibana

1.在elk1上安装kibana

2.修改kibana主配置文件

3.启动Kibana服务

4.验证kibana

(1)浏览器访问

(2)将elk主机的系统日志添加到kibana

2.如果想添加第二个日志,在主菜单中找到Management -- 》Stack Management,然后点击Kibana下的Index Patterns,再点击右上角的Create index patter


一.ELK概述

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。

>Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,
自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动
搜索负载等
>Logstash 是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将
其存储供以后使用(如,搜索
?Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和
ElasticSearch 提供的日志分析友好的Web 界面,可以帮助您汇总、分析和搜
索重要数据日志。

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

2.Elasticaserch

2.1ElasticSearch概述

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,副本分片(ReplicaShards)数量为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 中获取
beat:接收来自Filebeat的事件

常用的过滤器如下。
grok:通过(2)Filter 数据中转层,主要进行格式处理,数据类型转换、数据过滤、字段
添加,修改等,正则解析和结构化任何文本。
mutate:在事件字段执行一般的转换。可以重命名、删除、替换和修改事件字段。
drop:完全丢弃事件,如debug事件。
clone:复制事件,可能添加或者删除字段。
geoip:添加有关IP地址地理位置信息。

(3)output 是logstash工作的最后一个阶段,负责将数据输出到指定位置,
兼容大多数应用,常用的有:
elasticsearch:发送事件数据到Elasticsearch,便于查询,分析,绘图。
file:将事件数据写入到磁盘文件上。
mongodb:将事件数据发送至高性能NoSQL mongodb,便于永久存储,查询,分析,
大数据分片。
redis:将数据发送至redis-server,常用于中间层暂时缓存。
graphite:发送事件数据到graphite。
statsd:发送事件数据到 statsd。

 4.kibana

4.1Kibana介绍

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

4.2 Kibana 主要功能

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

二.环境部署ES群集

1.基本配置

1.1 为103,104同步进行设置

1.2 在两台节点上设置主机名

vim /etc/hosts

192.168.10.103 elk1

192.168.10.104elk2

1.3 关闭防火墙和seLinux 和永久关闭

set enforce0

systemctl stop firewalld

vim /etc/selinux/config

disabled

1.4创建运行用户 和密码 添加wheel组

useradd es

passwd es

gpasswd -a es wheel

1.5安装java环境

sudo dnf -y install java-11

1.6 为用户设置资源访问限制

sudo vim /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

备注:

es soft nofile 65535:一个进程最多能打开的的文件数

es hard nofile 65535

es soft nproc 65535:一个用户最多能创建的进程数

es hard nproc 65535

es soft memlock unlimited:最大锁定内存地址空间(unlimited不限制)

es hard memlock unlimited

sudo  vim /etc/sysctl.conf

vm.max_map_count=655360
sudo reboot

备注:
它的默认值是65536
限制一个进程可以拥有VMA(虚拟内存区域 )的数量。虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的候,这些区域将被创建。

这个参数会影响中间件可以开启的线程数量,如果值过小,有时可能会导致有些中间件无法开启足够的线程,进而报错。

2.安装Elasticsearch

cd /opt/

elasticsearch-7.10.0-linux_x86_64.tar.gz

su -es

cd opt/

ls

tar zxvf elasticsearch-7.10.0-linux-x86_64.tar.gz

ls

sudo mv elasticsearch-7.10.0 /etc/elasticsearch

cd /etc/elasticsearch

cd config/

ls

sudo vim jvm.options

-xms2g

-xmx2g

备注:
JVM(java虚拟机)提供了大量的参数配置,可以通过配置这些参数对JVM进行调优。
Xms

英文解释:Initial heap size(in bytes)
中文释义:堆区初始值
使用方法 :- Xms2g 或 -XX:InitialHeapSize=2048m

Xmx
英文解释:Maximum heap size(in bytes)
中文释义:堆区最大值
使用方法:
:- Xmx2g 或 -XX:MaxHeapSize=2048m

2.1更改Elasticsearch主配置文件

sudo vim /elasticsearch.yml

cluster. name: kgc-elk-cluster

node. name: elk1

path. data: /elk/data

path. logs: /elk/logs

bootstrap. memory_lock: false

network.host: 0.0.0.0

http.port: 9200

discovery. seed_hosts: ["elk1", "elk2", "elk3"]

cluster. initial_master_nodes: ["elk1"]

2.2创建数据库存放路径并授权

sudo mkdir -p /path/to/data

sudo mkdr -p /path/to/logs

sudo chown -R es:es /path/to/

sudo chown -R es:es /etc/elasticsearth

2.3启动es 查看状态

/etc/elasticsearth/bin/elsticsearth &

netstat -anpt | grep 9200

2.4查看节点信息

http://192.168.10.103:9200/_cat/nodes

192. 168. 10. 101 12 65 0 0.03 0.01 0.00 cdhilmrstw * elk1

192.168. 10. 102 22 97 0 0.12 0.05 0.01 cdhilmrstw - elk2

192.168. 10. 103 20 91 0 0.01 0.02 0.00 cdhilmrstw - elk3
三.安装logstash
1.在logstash服务器上安装logstash
1.1关闭防火墙和selinux
set enforce0

systemctl stop firewalld

systemctl disable forewalld
dnf -y installjava-11

logstash-7.10.0-linux-x86_64.tar.gz

tar zxvf logstash-7.10.0-linux-x86_64.tar.gz

mv logstash-7.10.0 /etc/logstash

chmod -R 777 /etc/logstash/data/

2.测试安装结果

(1)直接将消息输出到屏幕上

/etc/logstash/bin/logstaash -e ' input { stdin {} } output { stdout {codec => rubydebug} }'

注意:执行该命令后稍微等一下,会出现一个消息格式,可以输入一些字符串,作为该消息的内容
退出按Ctrl+C,如果命令失败,删除logstash目录的的data子目录
例如下列显示:

nihao
{
"@timestamp" => 2020-03-14T03:20:24.229Z,

"@version" => "1",

"host" => "elk1",

"message" => "nihao "
}

(2)logstash配置文件

Logstash 配置文件基本由三部分组成:input、output 以及 filter(根据
需要)。因此标准的配置文件格式如下所示。
input { ... }
filter { ... }
output { ... }

在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文
件,则格式如下所示。
input {
file { path =>"/var/log/messages" type =>"syslog"}
file { path =>"/var/log/apache/access.log" type =>"apache"}

}

下面通过修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。

chmod o+r /var/log/messages//让 Logstash 

 11 /var/log/messages
-rw ---- r --. 1 root root 2730043 Sep 11 14:21 /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.101:9200"]

index =>"system-%{+YYYY. MM. dd}"

  }

}

运行logstash 查看索引列表多出一个索引   查看索引数据

/usr/local/logstash/bin/logstash -f /usr/local/logstash/system. conf

 curl -XGET "http://localhost:9200/_cat/indices?v"



curl-XGET "http://localhost:9200/system-2025.04.28/_se

arch?pretty" -H 'Content-Type: application/json' -d' {"query": { "matc

h_all": {} },"size": 10}'

四.filebeat

 dnf  -y install httpd

 systemctl start httpd
 
 echo'www.kgc.com' > /var/www/html/index.html

curl 192.168.10.102
vww.kgc. com
 
 cat /var/log/httpd/access_log
92.168.10.102 - - [28/Apr/2025:20:31:02 +0800] "GET / HTTP/1.1" 2002 "-" "curl/8.4.0"


 cat /var/log/httpd/error_log

cat /var/log/httpd/error_log

2.安装filebeat

 tar zxvf filebeat-7.10.0-linux-x86_64. tar. gz

 mv filebeat-7.10.0-1inux-x86_64 /usr/local/filebeat

3.配置web01 服务器filebeat的输出

(1)修改filebeat文件,将filebeat输出的日志输出到远程的logstash

cd /usr/local/filebeat/

mv filebeat.yml filebeat.yml.bak

vim filebeat.yml

filebeat. inputs:

- type: log

paths:

- /var/log/httpd/access_log

output. logstash:

hosts: ["192.168. 10. 102:5044"]

(2)启动filebeat服务

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

4.修改logstash的配置文件。使日志输出到elasticsearsh

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}"
}
  }

备注:
Codec 是 logstash 从1.3.0 版开始新引入的概念(Codec来自Coder(编码)/decoder(解码)两个单词的首字母缩写)。

在此之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。但现在,我们可以在输入 期处理不同类型的数据,这全是因为有了codec 设置。所以,Logstash 不只是一个input|filter |output 的数据流,而是一个input | decode | filter |encodeoutput的数据流!codec 就是用来 decode、encode 事件的。

codec 的引入,使得 logstash 可以更好更方便的与其他有自定义数据格式的运维产品共存,比如 graphite、fluent、netflow、collectd,以及使用 msgpack、json、edn 等通用数据格式的其他产品等

5. 运行logstash 并验证

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

备注:
如果需要同时运行多个logstash,需要使用不同的路径保存不同的日志数据。-- path.data用来指定数据文件路径

查看索引,发现新增了一个weblog-beat-2025.04.28的索引

curl -XGET "http://localhost:9200/_cat/indices?v"

五.安装kibana

1.在elk1上安装kibana

dnf -y install kibana-7.10.0-linux_x84_64.tar.gz

tar zxvf kibana-7.10.0-linux-x86_64. tar. gz

mv kibana-7.10.0-1inux-x86_64 /usr/local/kibana

2.修改kibana主配置文件

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"

chown -R es:es /usr/local/kibana/
3.启动Kibana服务
su - es

nohup /usr/local/kibana/bin/kibana &

4.验证kibana

(1)浏览器访问

http://192.168.10.101:5601

(2)将elk主机的系统日志添加到kibana

2.如果想添加第二个日志,在主菜单中找到Management -- 》Stack Management,然后点击Kibana下的Index Patterns,再点击右上角的Create index patter

补充:
某些情况下需要删除索引数据,例如删除历史索引,释放磁盘空间

删除索引:
删除单个索引:curl-X DELETE"http://localhost:9200/索引名”。
批量删除:使用通配符(如 logs -* )或逗号分隔索引名

例如:

curl -XGET "http://localhost:9200/_cat/indices?v"

curl -X DELETE "http://localhost:9200/system-2025.
04.28"
{"acknowledged":true}

 curl -XGET "http://localhost:9200/_cat/indices?v"


网站公告

今日签到

点亮在社区的每一天
去签到