ELK日志分析系统,概述及部署

本文介绍如何搭建ELK日志分析系统,包括Elasticsearch、Logstash和Kibana的配置与使用。通过详细步骤说明如何实现日志的集中化管理、格式化、索引存储及前端展示。

ELK日志分析系统

ELK有三部分组成

  • Elasticsearch
  • Logstash
  • kibana

日志处理步骤

1、将日志进行集中化管理(beats)
Packetbeat (搜索网络流量数据)
Topbeat(收集系统、进程和文件系统级别的cpu和内存使用情况等数据)
Filebeat (搜集文件数据)
winlogbeat(搜集windows事件日志数据)
2、将日志格式化(Logstatsh)并输出到Elasticsearch
3、对格式化后的数据进行索引和存储(Elasticsearch)
4、前端数据的展示(kibana)
在这里插入图片描述

Elasticsearch介绍

Elasticsearch是一个基于lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口
Elasticsearch时Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎

Elasticsearch的基础核心概念

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


2、集群(cluster)
一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,

集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。

es具有集群机制,节点通过集群名称加入到集群中,同时在集群中的节点会有一个自己的唯一身份标识(自己的名称)


3、节点(node)
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,

默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。

节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。


4、索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有—个订单数据的

索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时

候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。

●索引相对于关系型数据库的库。


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

●类型相对于关系型数据库的表


6、文档( document )
一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有
某个订单的一个文档。文档以JSON (Javascript object
Notation)格式来表示,而JSON是一个到处存在的互联网数据交互格式。
在一个index/type里面,只要你想,你可以存储任意多的文档。注意,虽然一个文档在物理上位于一个索引中,实际上一个文
档必须在一个索引内被索引和分配一个类型。
文档相对于关系型数据库的列。


7、分片和副本(shards & replicas)
在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1B空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearct提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。

每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。

●分片的两个最主要原因: a.水平分割扩展,增大存储量
b.分布式并行跨分片操作,提高性能和吞吐量

分布式分片的机制和搜索请求的文档如何汇总完全是有elasticsearct控制的,这些对用户而言是透明的。

网络问题等等其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。

为此,elasticsearchi让我们将索引分片复制一份或多份,称之为分片副本或副本。

●副本也有两个最主要原因: a,高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上。
b. xxx能,增大吞吐量,搜索可以并行在所有副本上执行。


Logstash介绍

  • 一款强大的数据处理工具
  • 可实现数据传输、格式处理、格式化输出
  • 数据输入、数据加工(如过滤,改写等)以及数据输出

由三个组件组成:Input、Output、Filter Plugin

Input:获取日志
Output:输出日志
Filter Plugin:过滤日志、格式处理

Logstash主要组件

shipper:日志收集者

。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可;

Indexer:日志存储者。负责接收日志并写入到本地文件。

Broker:日志Hub。负责连接多个shipper和多个Indexer

search and storage:允许对事件进行搜索和存储;

web Interface:基于web的展示界面

正是由于以上组件在Logstash架构中可独立部署,才提供了更好的集群扩展性

Kibana概述

  • 一个针对Elasticsearch的开源分析及可视化平台
  • 搜索、查看存储在Elasticsearch索引中的数据
  • 通过各种图表进行高级数据分析及展示

kibana主要功能

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

部署ELK日志分析系统

环境配置

主机操作系统IP地址安装包 / 软件 / 工具
node1CentOS7192.168.80.10Elasticsearch/kibana
node2CentOS7192.168.80.20Elasticsearch
apacheCentOS7192.168.80.30httpd / Logstash
真机Windows192.168.80.1——

所有节点防火墙安全机制关闭

systemctl stop firewalld.service
setenforce 0

在这里插入图片描述

node1节点名字的修改(192.168.80.10)

hostnamectl set-hostname node1
su

node2节点的修改(192.168.80.20)

hostnamectl set-hostname node2
su

apache节点的修改(192.168.80.30)

hostnamectl set-hostname apache
su

在这里插入图片描述

配置elasticsearch环境(node1、node2)

node1(192.168.80.10)
node2(192.168.80.20)
其他都一样,只有主机名不一样

echo '192.168.80.10 node1' >> /etc/hosts
echo '192.168.80.20 node2' >> /etc/hosts

	
cd /opt
rz elasticsearch-5.5.0.rpm

rpm -ivh elasticsearch-5.5.0.rpm

systemctl daemon-reload
systemctl enable elasticsearch.service

在这里插入图片描述

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

vim /etc/elasticsearch/elasticsearch.yml

==17==
cluster.name: my-elk-cluster

==23==
node.name: node1						
#这里node2节点设置为node2

==33==
path.data: /data/elk_data 

==37==
path.logs: /var/log/elasticsearch/

==43==
bootstrap.memory_lock: false 

==55==
network.host: 0.0.0.0

==59==
http.port: 9200

==68==
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

grep -v "^#" /etc/elasticsearch/elasticsearch.yml

mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/

systemctl start elasticsearch
netstat -antp |grep 9200

在这里插入图片描述

用真机访问,节点信息

http://192.168.80.10:9200
http://192.168.80.20:9200

在这里插入图片描述
在这里插入图片描述
检测集群健康状态

http://192.168.80.10:9200/_cluster/health?pretty
http://192.168.80.20:9200/_cluster/health?pretty

在这里插入图片描述
在这里插入图片描述

查看集群状态

http://192.168.80.10:9200/_cluster/state?pretty
http://192.168.80.10:9200/_cluster/state?pretty

在这里插入图片描述
在这里插入图片描述

安装elasticsearch-head插件

上述查看集群的方式,及其不方便,我们可以通过安装elasticsearch-head插件后,来管理集群

node1(192.168.80.10)
node2(192.168.80.20)
都要安装
node-v8.2.1.tar.gz 安装

yum -y install gcc gcc-c++ make 

cd /opt
rz node-v8.2.1.tar.gz
tar xzvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure 
make
make install

在这里插入图片描述
在这里插入图片描述

phantomjs-2.1.1-linux-x86_64.tar.bz2 安装

cd /usr/local/src
rz phantomjs-2.1.1-linux-x86_64.tar.bz2

tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2


cd phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

cd /usr/local/src/
rz elasticsearch-head.tar.gz

tar xzvf elasticsearch-head.tar.gz

在这里插入图片描述

cd elasticsearch-head/
npm install

vim /etc/elasticsearch/elasticsearch.yml
==末行插入==
http.cors.enabled: true
http.cors.allow-origin: "*"

systemctl restart elasticsearch

cd /usr/local/src/elasticsearch-head/
npm run start &

netstat -lnupt |grep 9100
netstat -lnupt |grep 9200

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

使用真机测试

打开浏览器输入

http://192.168.80.10:9100 
http://192.168.80.20:9100 

可以看见群集很健康是绿色

在Elasticsearch 后面的栏目中输入

http://192.168.80.10:9200   
http://192.168.80.20:9200 

在这里插入图片描述
在这里插入图片描述

在node1上创建索引(192.168.80.10)

curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

在这里插入图片描述
再在真机上访问

http://192.168.184.10:9100

在这里插入图片描述

安装logstash(192.168.80.30)

安装logstash并做一些日志搜集输出到elasticsearch中
apache(192.168.80.30)

yum -y install httpd
systemctl start httpd

cd /opt
rz logstash-5.5.1.rpm 

rpm -ivh logstash-5.5.1.rpm   

systemctl start logstash.service     
systemctl enable logstash.service

在这里插入图片描述
在这里插入图片描述

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

logstash -e 'input { stdin{} } output { stdout{} }'

Logstash API endpoint {:port=>9600}
www.baidu.com                					    ####需要输入www.baidu.com
2021-05-11T09:28:59.896Z apache www.baidu.com
www.sina.com.cn                                     ####需要输入www.sina.com.cn
2021-05-11T09:29:09.291Z apache www.sina.com
Ctrl + c

在这里插入图片描述

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

Logstash API endpoint {:port=>9600}
www.baidu.com
{
"@timestamp" => 2021-05-11T10:00:40.320Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"

}
Ctrl + c

在这里插入图片描述

使用logstash将信息写入elasticsearch中,输入 输出 对接

[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.80.10:9200"] } }'

Logstash API endpoint {:port=>9600}
www.baidu.com                     ###输入内容
www.sina.com.cn                   ###输入内容
www.google.com.cn                 ###输入内容
Ctrl c

在这里插入图片描述
在这里插入图片描述

真机测试,查看索引信息

打开浏览器 输入http://192.168.184.10:9100/ 查看索引信息
多出 logstash-21.03.04
在这里插入图片描述

apache(192.168.80.30)做对接配置

chmod o+r /var/log/messages
ll /var/log/messages

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

在这里插入图片描述

systemctl restart logstash.service

在这里插入图片描述

真机测试

打开浏览器 输入http://192.168.184.10:9100/ 查看索引信息###

多出 system-2021.05.11

在这里插入图片描述

在node1主机安装kibana

cd /usr/local/src/
rz kibana-5.5.1-x86_64.rpm

rpm -ivh kibana-5.5.1-x86_64.rpm

cd /etc/kibana/
cp kibana.yml kibana.yml.bak

vim kibana.yml
2/ server.port: 5601               		 				#kibana打开的端口
7/ server.host: "0.0.0.0"          						#kibana侦听的地址
21/ elasticsearch.url: "http://192.168.80.10:9200"     #和elasticsearch建立联系
30/ kibana.index: ".kibana"              				#在elasticsearch中添加.kibana索引

systemctl start kibana.service 
systemctl enable kibana.service

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

真机测试

网页输入

192.168.80.10:5601

首次登录创建一个索引 名字:system-* ##这是对接系统日志文件
Index name or pattern ###下面输入system-*

然后点最下面的出面的create 按钮创建

然后点最左上角的Discover按钮 会发现system-*信息

然后点下面的host旁边的add 会发现右面的图只有 Time 和host 选项了 这个比较友好
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对接apache日志文件(访问、错误)

apache(192.168.80.30)

cd /etc/logstash/conf.d/

vim apache_log.conf
input {
       file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
        }
       file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
        }
        
      }
output {
        if [type] == "access" {
        elasticsearch {
          hosts => ["192.168.80.10:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.80.10:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }

/usr/share/logstash/bin/logstash -f apache_log.conf

在这里插入图片描述

真机测试
先输入http://192.168.80.30
在这里插入图片描述
再打开;浏览器输入http://192.168.80.10:9100/查看索引信息

能发现apache_error-2021.05.11 apache_access-2021.05.11
在这里插入图片描述
打开浏览器 输入http://192.168.184.10:5601
点击左下角有个management选项—index patterns—create index pattern
----分别创建apache_error-* 和 apache_access-* 的索引

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

es分片和副本默认分别是几个
5个分片 1个副本

ELK工作原理
通过logstash采集和过滤日志内容,并进行打包格式化
再通过elasticsearch 将格式化后的数据,简历索引,存储
再通过kibana,展示出来

logstash 工作原理
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值