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


    一、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)

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

    2、分片和副本

    什么是分片?

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

    为什么要分片?

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

    什么是副本?

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

    为什么要副本?

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

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

    ①结构名称不同

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

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

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

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

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

    分片的优点

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

    ③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 {名字}
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    ===============配置本机主机名解析=================
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    #安装好后,生成的配置文件路径为:/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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

    grep -v "^#" /etc/elasticsearch/elasticsearch.yml
    
    mkdir -p /data/elk_data
    chown elasticsearch:elasticsearch /data/elk_data/
    
    systemctl start elasticsearch
    
    netstat -antp |grep 9200
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

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

    20.0.0.55:9200
    20.0.0.56:9200
    
    • 1
    • 2

    在这里插入图片描述

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

    20.0.0.55:9200/_cluster/health?pretty
    20.0.0.56:9200/_cluster/health?pretty
    
    • 1
    • 2

    在这里插入图片描述

    20.0.0.55:9200/_cluster/state?pretty
    20.0.0.56:9200/_cluster/state?pretty
    
    • 1
    • 2

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    4.4 修改Elasticsearch主配置文件

    vim /etc/elasticsearch/elasticsearch.yml
    
    ##末行添加以下内容
    http.cors.enabled: true			##开启跨域访问支持,默认为false
    http.cors.allow-origin: "*"		##指定跨域访问允许的域名地址为所有
    
    systemctl restart elasticsearch
    netstat -natp |grep 9200
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    4.5 启动elasticsearch-head服务

    cd /usr/local/src/elasticsearch-head
    npm run start &
    
    netstat -natp |grep 9100
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    4.5 通过Elasticsearch-head 查看ES信息

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

    20.0.0.55:9100
    20.0.0.56:9100
    
    • 1
    • 2

    在这里插入图片描述

    4.6 插入索引

    curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
    
    #插入索引
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    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
    
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    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/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    5.4 测试logstash(端口5044)

    ①logstasg命令常用选项

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

    ②定义输入和输出流

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

    在这里插入图片描述

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

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

    在这里插入图片描述

    结果不在标准输出显示,而是发送至 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    在这里插入图片描述

    5.6 访问测试

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

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

    6.1 安装kibana

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

    在这里插入图片描述

    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    6.3 启动kibana服务

    systemctl start kibana.service 
    systemctl enable kibana.service 
    
    netstat -natp | grep 5601
     
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    6.4 验证kibana

    浏览器访问:20.0.0.55:5601

    第一次登录需要添加一个 ES 索引
    
    点击 create 创建
    
    索引添加完成后,点击 Discover 按钮可查看图表信息及日志信息
    
    数据展示可以分类显示,例如:在 Available Fileds 中的 host
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

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

    6.6 浏览器访问

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

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

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

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

  • 相关阅读:
    2.4G频段的SI24R2E无线单发芯片技术问答,常见问题进行汇总解答
    个人深度学习环境配置
    关于elf文件load段上内存映射
    Favicon网页收藏图标在线制作PHP网站源码/ICO图片在线生成/支持多种图片格式转换
    大模型开发06:LangChain 概述
    HDF格式遥感影像批量转为TIFF格式:ArcPy实现
    类的成员之一:代码块
    from sklearn import cross_validation 报错的解决方法
    SaaSBase:Blue Prism是什么?
    关于在搭建微服务项目中使用openfeign作为rpc框架调用时,枚举对象无法进行转换问题
  • 原文地址:https://blog.csdn.net/m0_57515995/article/details/126681149