ELK 日志分析系统的部署

一、ELK日志分析系统概述

1.1 ELK简介

ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch、 Logstash 和Kiabana三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求

  • ElasticSearch: 是基于Lucene (一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。


    Elasticsearch 是用Java 开发的,可通过RESTful Web接口,让用户可以通过浏览器与Elasticsearch 通信。

    Elasticsearch 是个分布式搜索和分析引擎,优点是能对大容量的数据进行接近实时的存储、搜索和分析操作。

  • Logstash: 作为数据收集引擎。 它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析 、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给Elasticsearch。


Logstash 由Ruby 语言编写,运行在Java虚拟机(JVM),

是一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出。

Logstash 具有强大的插件功能,常用于日志处理。

  • Kiabana: 是基于Node.js 开发的展示工具,可以为Logstash和ElasticSearch 提供图形化的日志分析Web界面展示,可以汇总、分析和搜索重要数据日志。

  • Filebeat: (可添加的组件)轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装


    Filebeat ,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给logstash 进行解析,或是直接发给Elasticsearch存储,性能上相比运行于JVM上的logstash 优势明显,是对它的替代。

1.2 完整日志系统基本特征

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

1.3 ELK日志处理步骤

【1】将日志进行集中化管理(Beats)
【2】将日志格式化(Logstash)并输出到Elasticsearch
【3】对格式化后的数据进行索引和存储(Elasticsearch)
【4】前端数据的展示(Kibana)

1.4 完整日志系统基本特征

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

二、Elasticsearch (日志存储与收集)

提供了一个分布式多用户能力的全文搜索引擎

2.1 Elasticsearch 核心概念

  • 接近实时

  • 集群

  • 节点

  • 索引

  • 索引(库) → 类型(表)文档(记录)

  • 分片和副本


    (默认情况下是5个分片、1个副本,这意味着,如果你的集群至少有两个节点,你的索引将会有5个分片和另外5个副本)

分片:

1.水平分割扩展,增大存储量

2.分布式并行跨分片操作,提供性能和吞吐量

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

网络问题等等其他问题可以在任何时候不期而至,为了健壮性,强烈建议要有个故障切换机制,无论何种故障以防止分片或者节点不可用,为此,elasticsearch让我们将索引分片复制一份或多份,称为分片副本或副本


副本:

  1. 高可用性,以应对分片或节点故障,出于这个原因,分片副本要在不同节点上
  2. 性能加强,增加吞吐量,搜索可以并行在所有副本上执行

2.2 es默认端口

es启动监听两个端口:9300和9200

  • 9300端口 是使用tcp客户端连接使用的端口;
  • 9200端口 是通过http协议连接es使用的端口;

三、 Logstash(日志收集)

3.1 logstash介绍

  • 一款强大的数据处理工具

  • 可实现数据分析、传输、格式处理 、格式化输出

  • 数据输入、数据加工(过滤、改写等)以及数据输出

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


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

四、Kibana(展示)

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

4.1 Kibana主要功能

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

五、ELK日志分析系统集群部署

环境:

服务器类型系统和IP地址需要安装的组件硬件方面
Node1节点CentOS7.4(64 位) 192.168.61.11Elasticsearch 、 Kibana2核4G
Node2节点CentOS7.4(64 位) 192.168.61.22Elasticsearch2核4G
Apache节点CentOS7.4(64 位) 192.168.61.44Logstash Apache2核4G

5.1 ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)

1.环境准备

#更改主机名 
Node1节点:hostnamectl set-hostname node1
Node2节点:hostnamectl set-hostname node2

#配置域名解析
vim /etc/hosts
192.168.61.22  node1
192.168.61.44  node2

#查看Java环境,如果没有安装,yum -y install java
java -version	

(1)更改主机名
在这里插入图片描述
在这里插入图片描述(2)配置域名解析
在这里插入图片描述
在这里插入图片描述
(3)查看Java环境
在这里插入图片描述
在这里插入图片描述
2.部署 Elasticsearch 软件

(1)#上传elasticsearch-5.5.0.rpm到/opt目录下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm 

(2)#加载系统服务
systemctl daemon-reload    
systemctl enable elasticsearch.service

(3)#修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200
--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

#查看主配置文件
grep -v "^#" /etc/elasticsearch/elasticsearch.yml

#将node1的配置文件拷贝一份在node2上并去node2上修改
scp /etc/elasticsearch/elasticsearch.yml node2:/etc/elasticsearch/
vim /etc/elasticsearch/elasticsearch.yml
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node2

(4)#创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/

(5)#启动elasticsearch是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200

(6)#查看节点信息
浏览器访问 ,查看节点 Node1、Node2 的信息
http://192.168.59.115:9200  http://192.168.59.116:9200 

#原谅色:green
http://192.168.61.22:9200/_cluster/health?pretty
http://192.168.61.44:9200/_cluster/health?pretty
#######  使用以上方式查看状态并不友好,可以通过 elasticsearch-head插件来直接管理  ####

(1)上传elasticsearch-5.5.0.rpm到/opt目录下
在这里插入图片描述

在这里插入图片描述
(2)加载系统服务
在这里插入图片描述
在这里插入图片描述
(3)修改elasticsearch主配置文件

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

将node1配置文件远程同步给node2
在这里插入图片描述

node2节点
在这里插入图片描述
在这里插入图片描述
(4)创建数据存放路径并授权
在这里插入图片描述
在这里插入图片描述
(5)启动elasticsearch是否成功开启

在这里插入图片描述
在这里插入图片描述
(6)查看节点信息

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

3.安装 Elasticsearch-head 插件

Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。

  • node: 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
  • phantomjs: 是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
(1)#编译安装 node
#上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y

cd /opt
tar zxf node-v8.2.1.tar.gz

cd node-v8.2.1/
./configure
make -j2 && make install

(2)#安装 phantomjs
#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

(3)#安装 Elasticsearch-head 数据可视化工具
#上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install

(4)#修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true				#开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"			#指定跨域访问允许的域名地址为所有

systemctl restart elasticsearch

(5)#启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &

> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100

(6)#通过 Elasticsearch-head 查看 Elasticsearch 信息通过浏览器访问 http://192.168.61.22:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。访问有问题 可以将localhost 改成ip地址
(7)#插入索引
##登录192.168.61.22 node1主机#####  索引为index-demo,类型为test,可以看到成功创建
[root@node1 ~]# curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

####在192.168.61.11  刷新浏览器输入看索引信息###
node1信息动作 01234 
node2信息动作 01234 
●上面图可以看见索引默认被分片5个,并且有一个副本

点击数据浏览--会发现在node1上创建的索引为index-demo,类型为test, 相关的信息

(1)编译安装 node
在这里插入图片描述在这里插入图片描述

node2操作相同

(2)#安装 phantomjs
在这里插入图片描述
在这里插入图片描述
(3)安装 Elasticsearch-head 数据可视化工具
在这里插入图片描述
在这里插入图片描述
(4)修改 Elasticsearch 主配置文件(这边展示node1的,node2与之相同)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(5)启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
服务启动会有一点慢,耐心等待一下吧!
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
(6)浏览器访问:http://192.168.61.22:9100/

5.2 ELK Logstash 部署(在 Apache 节点上操作)

1.安装Logstash

(1)#修改主机名
hostnamectl set-hostname apache
su

(2)#安装httpd并启动
yum -y install httpd
systemctl start httpd

(3)#安装java环境
yum -y install java
java -version

(4)#安装logstash
cd /opt
rpm -ivh logstash-5.5.1.rpm                           
systemctl start logstash.service                     
systemctl enable logstash.service
cd /usr/share/logstash/
ls
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

2.测试 Logstash(Apache)与elasticsearch(node)功能是否正常,做对接

Logstash这个命令测试
字段描述解释:
●	-f  通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
●	-e  后面跟着字符串 该字符串可以被当做logstash的配置(如果是“空”则默认使用stdin做为输入、stdout作为输出)
●	-t  测试配置文件是否正确,然后退出

logstash -f  配置文件名字      去连接elasticsearch  

(1)#输入采用标准输入 输出采用标准输出---登录192.168.61.22  在Apache服务器上
logstash -e 'input { stdin{} } output { stdout{} }'

16:45:21.422 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
16:45:21.645 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com   ##需要手动输入
2021-12-16T08:46:14.041Z apache www.baidu.com
www.sina.com     ##需要手动输入
2021-12-16T08:46:23.548Z apache www.sina.com

(2)#使用 rubydebug 输出详细格式显示,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

16:51:13.127 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>250}
16:51:13.174 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
16:51:13.205 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com  ##需要手动输入
{
    "@timestamp" => 2021-12-16T08:52:22.528Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}

(3)##使用logstash将信息写入elasticsearch中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.59.5:9200"] } }'

3.定义 logstash配置文件

Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。

(1)#给日志目录可读权限
chmod o+r /var/log/messages					#让 Logstash 可以读取日志
(2)#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。
vim /etc/logstash/conf.d/system.conf

input {
    file{
        path =>"/var/log/messages"						#指定要收集的日志的位置
        type =>"system"									#自定义日志类型标识
        start_position =>"beginning"					#表示从开始处收集
    }
}
output {
    elasticsearch {										#输出到 elasticsearch
        hosts => ["192.168.61.22:9200"]	#指定 elasticsearch 服务器的地址和端口
        index =>"system-%{+YYYY.MM.dd}"		#指定输出到 elasticsearch 的索引格式
    }
}

(4)#重启服务
systemctl restart logstash

(5)#登录192.168.59.116 真机
打开浏览器 输入http://192.168.61.22:9100/ 查看索引信息###

多出 system-xxxx

5.3 ELK Kiabana 部署(在 Node1 节点上操作)

(1)#安装 Kiabana
#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm

(2)#设置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.url: "http://192.168.59.115:9200" 
--30--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"

(3)#启动 Kibana 服务
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601

(4)#验证 Kibana
浏览器访问 http://192.168.59.115:5601

第一次登录需要添加一个 Elasticsearch 索引:
Index name or pattern
//输入:system-*			#在索引名中输入之前配置的 Output 前缀“system”
单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果

(5)#将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
vim /etc/logstash/conf.d/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.59.115:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
        if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.59.115:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }

cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf

6.#浏览器访问http://192.168.59.115:9100/测试,查看索引信息能发现
apache_error-2019.04.16     apache_access-2019.04.16 

#浏览器访问http://192.168.59.115:5601
点击左下角有个management选项---index  patterns---create index pattern
----分别创建apache_error-*   和     apache_access-* 的索引   

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值