当前位置: 首页 > news >正文

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

文章目录

  • 一、ELK日志分析系统
    • 1、ELK的组成部分
    • 2、日志服务器
    • 3、日志处理步骤
  • 二、Elastticsearsh概述
    • 1、Elasticsearch特性
    • 2、分片和副本
      • 3、es和传统数据库的区别
  • 二、Logstash概述
    • 1、Log Stash主要组件
  • 三、Kibana 概述
    • 1、Kibana主要功能
  • 四、ELK的优点
  • 五、部署ELK日志分析系统
    • 1、部署环境
      • 1.1 了解架构部署
      • 1.2 关闭防火墙、修改主机名(所有主机)
    • 3、部署ElasticSearch(node1、node2)
      • 3.1 安装ES服务
      • 3.2 真机访问,查看节点信息
      • 3.3 真机检测集群健康,查看集群状态
    • 4、安装Elasticsearch-head插件(node1、node2)
      • 4.1 编译安装node
      • 4.2 安装phantomjs
      • 4.3 安装 Elasticsearch-head 数据可视化工具
      • 4.4 修改Elasticsearch主配置文件
      • 4.5 启动elasticsearch-head服务
      • 4.5 通过Elasticsearch-head 查看ES信息
      • 4.6 插入索引
      • 4.8 浏览器查看索引信息
    • 5、部署 Logstash服务(Apache节点操作)
      • 5.1 安装logstash
      • 5.2 安装java环境(jdk)
      • 5.3 安装logstash
      • 5.4 测试logstash(端口5044)
      • 5.5 做对接配置(logstas--->ES)
      • 5.6 访问测试
    • 6、部署Kibana(在node1节点上操作)
      • 6.1 安装kibana
      • 6.2 修改kibana的主配置文件
      • 6.3 启动kibana服务
      • 6.4 验证kibana
      • 6.5 将Apache服务器日志(访问的、错误的)添加到ES并通过Kibaba显示apache服务器
      • 6.6 浏览器访问

一、ELK日志分析系统

1、ELK的组成部分

E: Elasticsearch

L: Logstash

K: Kibana

2、日志服务器

优点

  • 提高安全性
  • 集中化管理

缺点

  • 对日志分析困难

3、日志处理步骤

①将日志进行集中化管理

②将日志格式化(Logstash)并输出到Elasticsearch

③对格式化后的数据进行索引和存储

④前端数据的展示(Kibana)

二、Elastticsearsh概述

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

1、Elasticsearch特性

Elasticsearch的核心概念

接近时实(NRT)

  • 搜索速度非常的快,轻微的延迟。

集群(cluster)

  • 将一个或多个节点组织在一起,组成一个cluster集群。
  • 集群有一个唯一标志的名字,默认Elasticasearch,每个节点基于集群名字加入到集群中,且在集群中使用自己的名字来身份标识。

节点(node)

  • 每一个节点就是一台单台服务器。

索引(index)

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

类型(type)

  • 在一个索引中,你可以定义一个或多种类型。
  • 比如:当我们存储一个购物平台的数据时,可以定义一个用户数据类型,产品数据类型等。

文档(document)

  • 一个文档是一个可被索引的基础信息单元
#索引(库)----》类型(表)------》文档(记录)

2、分片和副本

什么是分片?

  • 索引存储的数据可能超过单个节点的硬件限制。
  • 为了解决这个问题,ES提供了将索引分成多个分片的功能,当在创建索引时,可以定义想要的分片数量,每一个分片就是一个全功能独立的索引。

为什么要分片?

  • 水平分割扩展,增大存储量
  • 分布式并跨越分片操作, 提高性能和吞吐量

什么是副本?

  • 为了健壮性,高可用性,可以故障切换。
  • es将分片复制一份或多份放在不同的节点主机上,称为分片副本。

为什么要副本?

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

3、es和传统数据库的区别

①结构名称不同

  • 关系型数据库:数据库–>表–>行—>列

  • Elasticsearch:索引—>类型—>文档---->字段

②ES分布式,传统数据库遍历式索引

  • ES支持分片和复制,从而方便水平分割和扩展,复制保证可es的高可用与高吞吐。

  • 在es中,当你创建一个索引(数据库)的时候,你可以指定你想要的分片的数量,每个分片本身也是一个功能完善并且独立的索引(数据库),索引可以被防止到集群中的任何节点上。

分片的优点

1、允许你水平分割/扩展你的内容容量
2、允许你在分片之上进行分布式的,并行的操作,进而提高性能/吞吐量
3、分片的分布,它的文档怎么聚合回搜索请求,完全有Elasticsearch管理

③ES采用倒排索引,传统数据库采用B+树索引

  • 正排索引:id---->values
  • 倒排索引:values—>id

④ES没有用户验证和权限控制

⑤ES没有事务的概念,不支持回滚,误删不能恢复

⑥ES免费,完全开源,传统的数据库部分免费

二、Logstash概述

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

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

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

1、Log Stash主要组件

  • **Shipper(日志收集):**负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常远程代理端(agent)只需要运行这个组件即可
  • **Indexer(日志存储):**负责接收日志并写入到本地文件
  • **Broker(日志Hub):**负责连接多个Shipper和多个Indexer
  • **Search and Storage:**允许对事件进行搜索和存储
  • **Web Interface:**基于Web的展示界面

三、Kibana 概述

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

1、Kibana主要功能

①Elasticsearch无缝之集成

  • kibana架构为ES 定制,可以将任意结构和非结构加入到ES索引。

②整合数据

  • 更好的对ES 数据进行分析处理 。能够处理海量数据,智能的分析数据。

③让更多团队成员收益

④接口灵活,分享容易

  • 使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。

⑤配置简单

  • 自带web服务器,快速启动运行

⑥可视化多数据源

  • Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache flume、 Fluentd 等。

⑦简单数据导出

  • Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。

四、ELK的优点

**1、处理方式灵活:**Elasticsearch是全文索引,具有强大的搜索能力

**2、配置相对简单,**Kibana的配置非常简单,Eslasticsearch则全部使用Json接口,配置也不复杂,Logstash的配置使用模块的方式,配置也相对简单。

**3、检索性高,**ELK架构通常可以达到百亿数据的查询秒级响应

**4、集群线性扩展,**Elasticsearch本身没有单点的挂念,自动默认集群模式,Elasticsearch和Logstash都可以

5、灵活扩展

6、页面美观。

五、部署ELK日志分析系统

1、部署环境

1.1 了解架构部署

主机名ip地址主要软件系统
node120.0.0.55ElasticSearh、Kibanacentos7.5
node220.0.0.56ElasticSearhcentos7.5
apache20.0.0.57Logstash、Apachecentos7.5

在这里插入图片描述

日志分析系统原理

  • 首先有Apache产生大量的日志在本机中,那么Logstash就会input获取日志,然后进行Filter Plugin(过滤日志和格式处理),最后将处理好的日志outpu发送日志到ES的cluster集群中。

  • ES将收到的日志进行索引和存储。

  • 最后可以使用Kibana进行查看分析日志。

1.2 关闭防火墙、修改主机名(所有主机)

systemctl disable --now firewalld
setenforce 0 

hostnamectl set-hostname {名字}

在这里插入图片描述

3、部署ElasticSearch(node1、node2)

3.1 安装ES服务

node1和node2配置基本类似,唯一区别就是在配置文件中主机名不一样。下面以node1为例配置。

#安装JDK,默认的是open jdk,不建议使用(ES是java开发的)。上传jdk的rpm包到/opt目录下安装

cd /opt
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

source /etc/profile

java -version

在这里插入图片描述

===============配置本机主机名解析=================
echo "20.0.0.55 node1" >> /etc/hosts
echo "20.0.0.56 node2" >> /etc/hosts

==============安装Elsaticsearch================
#上传rpm包到/opt目录下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm

systemctl daemon-reload
systemctl enable elasticsearch.service

在这里插入图片描述

#安装好后,生成的配置文件路径为:/etc/elasticsearch/elasticsearch.yml

cp /etc/elasticsearch/elasticsearch.yum{,.bak}

vim /etc/elasticsearch/elasticsearch.yum
##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行,取消注释,不在启动的时候锁定内存(前端缓存,与IOPS-性能测试方式,每秒读写次数相关)
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

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

systemctl start elasticsearch

netstat -antp |grep 9200

在这里插入图片描述

3.2 真机访问,查看节点信息

20.0.0.55:9200
20.0.0.56:9200

在这里插入图片描述

3.3 真机检测集群健康,查看集群状态

20.0.0.55:9200/_cluster/health?pretty
20.0.0.56:9200/_cluster/health?pretty

在这里插入图片描述

20.0.0.55:9200/_cluster/state?pretty
20.0.0.56:9200/_cluster/state?pretty

在这里插入图片描述

4、安装Elasticsearch-head插件(node1、node2)

为什么要安装这个插件?

  • 因为上述查看集群的方式,非常不方便,所以可以通过安装这个插件,来管理集群。
  • 安装 Elasticsarch-head 需要提前安装好依赖软件 node 和 phantomjs。

注意:两台机器安装步骤一样,这边还是以node1为例

4.1 编译安装node

node是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

yum -y install gcc gcc-c++ make 

cd /opt

tar xzvf node-v8.2.1.tar.gz

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

在这里插入图片描述

4.2 安装phantomjs

phantomjs是一个基于 webkit 的 JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

#上传安装包上传到/opt目录下

cd /opt
tar -jxvf 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

在这里插入图片描述

4.3 安装 Elasticsearch-head 数据可视化工具

上面两个插件安装好后,就可以安装ElasticSearch-head可视化工具

#将包上传到/opt目录下

tar -zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head
npm install

在这里插入图片描述

4.4 修改Elasticsearch主配置文件

vim /etc/elasticsearch/elasticsearch.yml

##末行添加以下内容
http.cors.enabled: true			##开启跨域访问支持,默认为false
http.cors.allow-origin: "*"		##指定跨域访问允许的域名地址为所有

systemctl restart elasticsearch
netstat -natp |grep 9200

在这里插入图片描述

4.5 启动elasticsearch-head服务

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

netstat -natp |grep 9100

在这里插入图片描述

4.5 通过Elasticsearch-head 查看ES信息

浏览器访问:20.0.0.55:9100地址并连接群集,如果看到群集的健康值为green,代表群集很健康。

20.0.0.55:9100
20.0.0.56:9100

在这里插入图片描述

4.6 插入索引

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

#插入索引

在这里插入图片描述

4.8 浏览器查看索引信息

浏览器访问 20.0.0.55:9100 查看索引信息,可以看见索引默认被分片为 5 个,并且有一个副本。

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

在这里插入图片描述

在这里插入图片描述

5、部署 Logstash服务(Apache节点操作)

  • Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache 服务器上,用于收集 Apache 的日志信息并发送到 Elasticsearch。

5.1 安装logstash

yum -y install httpd
systemctl start httpd

在这里插入图片描述

5.2 安装java环境(jdk)

#将jdk包上传至/opt目录下

cd /opt
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

source /etc/profile

java -version

在这里插入图片描述

5.3 安装logstash

#上传压缩包到/opt目录下
cd /opt
rpm -ivh logstash-5.5.1.rpm

systemctl start logstash
systemctl enable logstash

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

在这里插入图片描述

5.4 测试logstash(端口5044)

①logstasg命令常用选项

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

②定义输入和输出流

  • 标准输入、输出: 输入财通标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
image-20220829190038261
  • rubydebug 输出: 使用rubydebug输出详细格式显示.
  • codec: 为一种解码器。将内容解码后输出
logstash -e 'input { stdin{} } output { stdout { codec=>rubydebug} }'

在这里插入图片描述

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

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.55:9200"] } }'

在这里插入图片描述

结果不在标准输出显示,而是发送至 ES,可浏览器访问 http://20.0.0.55:9100 查看索引和数据
在这里插入图片描述

5.5 做对接配置(logstas—>ES)

#修改配置文件,让其收集系统日志/var/log/messgaes,并将其输入到ES中
chmod +r /var/log/messages

vim /etc/logstash/conf.d/system.conf

input {
    file{
        path =>"/var/log/messages"
        ##指定要收集的日志的位置
        type =>"system"
         ##自定义日志类型标识
        start_position =>"beginning"
         ##表示从开始处收集
    }
}
output {
    elasticsearch{
        ##输出到ES
        hosts =>["20.0.0.55:9200", "20.0.0.56:9200"]
        ##指定ES服务器的地址和端口,为避免单机故障,建议写全
        index =>"system-%{+YYYY.MM.dd}"
        ##指定输出到ES的索引格式
    }
}
systemctl restart logstash.service

在这里插入图片描述

5.6 访问测试

浏览器访问 20.0.0.55:9100 查看索引信息
在这里插入图片描述

6、部署Kibana(在node1节点上操作)

6.1 安装kibana

#将安装包上传/opt目录下
rpm -ivh kibana-5.5.1-x86_64.rpm

在这里插入图片描述

6.2 修改kibana的主配置文件

cp /etc/kibana/kibana.yml{,.bak}

vim /etc/kibana/kibana.yml

##2行,取消注释,kibana服务的默认监听端口为5601
server.port: 5601
##7行,取消注释,设置kibana的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
##21行,取消注释,设置和ES建立连接的地址和端口
elasticsearch.url: "http://20.0.0.55:9200"
##30行,取消注释,设置在ES中添加.kibana索引
kibana.index: ".kibana"

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

6.3 启动kibana服务

systemctl start kibana.service 
systemctl enable kibana.service 

netstat -natp | grep 5601
 

在这里插入图片描述

6.4 验证kibana

浏览器访问:20.0.0.55:5601

第一次登录需要添加一个 ES 索引

点击 create 创建

索引添加完成后,点击 Discover 按钮可查看图表信息及日志信息

数据展示可以分类显示,例如:在 Available Fileds 中的 host

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

6.5 将Apache服务器日志(访问的、错误的)添加到ES并通过Kibaba显示apache服务器

在apache服务器上操作

 
[root@apache opt]# 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 => ["20.0.0.55:9200", "20.0.0.56:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
	if [type] == "error" {
        elasticsearch {
            hosts => ["20.0.0.55:9200", "20.0.0.56:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}
[root@apache opt]# cd /etc/logstash/conf.d
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf

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

6.6 浏览器访问

浏览器访问20.0.0.55:9100 查看索引是否创建

浏览器访问20.0.0.55:5601 登录kibana,添加apache_access-*和apache_error-*索引,查看日志信息。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

相关文章:

  • MyBatis一对多查询,MyBatis中resultMap的使用,MyBatis中collection注意事项,MyBatis的级联搜索
  • STC15单片机-RS-485通信
  • 【JAVA-1】JDK、JRE安装及卸载,有手就会!
  • Python 操作MySql数据库(封装、优雅)
  • 《蓝海战略》让你竞争中获得优势
  • RequestMapping注解
  • 实战Spring Boot集成quartz任务调度框架
  • 神经网络深度学习(五)初始化
  • jvm虚拟机学习一class文件
  • 【编程题】【Scratch四级】2021.12 森林运动会
  • chapter 01 字符串的那些事
  • 给Python漫画分集标题下载工具开发Qt界面
  • 电子学会2022年6月青少年软件编程(图形化)等级考试试卷(二级)答案解析
  • 【Redis实战】生产中使用Redis的一些注意事项
  • 线性代数学习笔记8-3:二次型、合同矩阵、标准型、规范型
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【译】理解JavaScript:new 关键字
  • AHK 中 = 和 == 等比较运算符的用法
  • Akka系列(七):Actor持久化之Akka persistence
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • input实现文字超出省略号功能
  • maya建模与骨骼动画快速实现人工鱼
  • Vue 2.3、2.4 知识点小结
  • 产品三维模型在线预览
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 前端路由实现-history
  • 前端相关框架总和
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何解决微信端直接跳WAP端
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一文看透浏览器架构
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​Java并发新构件之Exchanger
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $.ajax中的eval及dataType
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (solr系列:一)使用tomcat部署solr服务
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)丶RabbitMQ的六大核心
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)基于IDEA的JAVA基础10
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ***测试-HTTP方法
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core Swagger 过滤部分Api