• ELK搭建


    ELK

    一:介绍

    ELK平台是一套完整的日志集中处理解决方案,它不是一个单独的服务,是一系列服务,由(Elasticsearch、Logstash、Kibana)组成,完成更强大的用户对日志的查询、排序、统计需求

    日志服务器

    提高安全性

    集中存放日志

    缺陷

    对日志的分析困难

    日志处理步骤

    1:将日志进行集中管理

    2:将日志进行格式化(logstash)并输出到(elasticsearch)

    3:对格式化后的数据进行索引和存储(Elasticsaerch)

    4:前端数据的展示(Kibana)

    elasticsearch

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

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

    Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档

    Kibana:一个针对Elasticsearch的开源分析及可视化平台

    搜索、查看存储在es索引中的数据

    通过各种图表进行高级数据分析及展示

    主要功能

    整个数据,复杂数据分析

    让更多团队成员收益

    接口灵活、分享更容易

    配置简单,可视化多数据源

    简单数据导出

    Kibana通常与Elasticsearch一起部署,Kibana是Elasticsearch的一个功能强大的数据可视化Dashboard,Kibana提供图形化的web界面来浏览E1 asticsearch日志数据,可以用来汇总、分析和搜索重要数据。

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

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

    主要组成

    shipper

    lndexer

    broker

    search and storage

    web interface

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

    Logstash由Ruby语言编写,运行在Java虚拟机(JvN)上,是一款强大的数据处理工具,
    可以实现数据传输、格式处理、格式化输出。Logstash具有强大的插件功能,常用于日志处理。

    image-20220829162850674

    可以添加的其它组件
    Filebeat:轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户湍安装Filebeat,并指定目录与日志格式,Filebeat就能快速收集数据,并发送给logstash进行解析,或是直接发给Elasticsearch存储,性能上相比运行于JVN上的logstash优势明显,是对它的替代。常应用于EFK架构当中。
    filebeat结合1 ogstash带来好处:
    1)通过Logstash具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻Elasticsearch持续写入数据的压力

    2)从其他数据源(例如数据库,s3对象存储或消息传递队列)中提取

    3)将数据发送到多个目的地,例如s3,HDFS(Hadoop分布式文件系统)或写入文件

    4)使用条件数据流逻辑组成更复杂的处理管道

    缓存/消息队列(redis、kafka、RabbitMQ等):可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。

    ·Fluentd:是一个流行的开源数据收集器。由于Logstash太重量级的缺点,Logstash性能低、资源消耗比较多等问题,随后就有Fluentd的出现。相比较logstash,Fluentd更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为logstash的一种替代方案,常应用于EFK架构当中。在Kubernetes集群中也常使用EFK作为日志数据收集的方案。

    在Kubernetes集群中一般是通过Daemonset来运行Fluentd,以便它在每个Kubernetes工作节点上都可以运行一个Pod.它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到E1 asticsearch集群,在该集群中对其进行索引和存储。

    核心概念

    接近实时

    集群

    节点

    索引

    ​ 索引(库)—》类型(表)–》文档(记录)

    分片和副本

    image-20220829171751735

    3、完整日志系统基本特征
    收集:能够采集多种来源的日志数据
    传输:能够稳定的把日志数据解析过滤并传输到存储系统
    存储:存储日志数据
    分析:支持UI分析
    警告:能够提供错误报告,监控机制
    4、ELK的工作原理:
    (1)在所有需要收集日志的服务器上部署Logstash:或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署Logstash。
    (2)Logstash收集日志,将日志格式化并输出到Elasticsearch群集巾。
    (3)Elasticsearch对格式化后的数据进行索引和存储。
    (4)Kibana从Es群集中查询数据生成图表,并进行前端数据的展示。
    总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

    搭建

    image-20220829165459432

    名称ip部署
    node1192.168.64.20es/kibana
    node2192.168.64.15es
    Apacha192.168.64.16logstash

    一:环境准备

    更改主机名,关闭防火墙

    hosenamectl set-hostname node1
    hosenamectl set-hostname node2
    hosenamectl set-hostname logstash
    systemctl stop firewalld
    
    • 1
    • 2
    • 3
    • 4

    node节点配置

    配置域名解析

    vim /etc/hosts
    
    • 1

    image-20220829171340052

    下载Java环境

    yun install -y java
    
    
    • 1
    • 2

    把包拖进去

    image-20220829173354696

    把包复制给node2

    image-20220829173422813

    两边同时进行

    image-20220829173516244

    两边同时进行

    image-20220829173536982

    image-20220829173722243

    image-20220829174132827

    修改配置文件node1

    vim /etc/elasticsearch/elasticsearch.yml
    
    • 1

    image-20220829184404996

    image-20220829184601980

    image-20220829184640967

    image-20220829184713838

    image-20220829184812819

    查看node1配置,反向过滤以#开头的配置

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

    image-20220829184856776

    配置node2节点的配置文件

    image-20220829185152931

    image-20220829185215210

    image-20220829185437023

    image-20220829185445439

    node1和node2 只有第23行不一样,其他都一样

    查看node2配置文件

    image-20220829185605260

    node1和node2创建数据存放路径并授权

    mkdir -p /data/elk_data  
    #与我们刚刚在配置文件中修改的第33行一样
     chown elasticsearch:elasticsearch /data/elk_data/
    #设置属主属组
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20220829190020098

    开启服务,并查看端口9200

    systemctl start elasticsearch.service 
    netstat -natp | grep 9200
    
    • 1
    • 2

    image-20220829190651519

    这个端口需要等一段时间才能看到,所以不要着急,可以先看看服务有没有起来,起来了就等一等就会好了

    image-20220829190751526

    浏览器访问node1的信息

    image-20220829190938861

    image-20220829191312827

    浏览器访问node2信息

    image-20220829191011705

    image-20220829191245340

    安装Elasticsearch-haed插件

    Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
    安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
    node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
    phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
    node1节点 192.168.64.20

    node2节点 192.168.64.15

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

    image-20220829192032229

    image-20220829192300806

    编译安装时会花费很长时间,建议把cpu调大,直接上j8!

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

    image-20220829200136760

    image-20220829200358874

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

    image-20220829201153857

    (4)#修改 Elasticsearch 主配置文件

    vim /etc/elasticsearch/elasticsearch.yml
    
    • 1

    直接跳到最后

    image-20220829204740771

    重启服务

    systemctl restart elasticsearch
    
    • 1

    image-20220829201742801

    (5)启动 elasticsearch-head 服务
    #必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败

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

    image-20220829202253572

    在node1上监听端口

    image-20220829202351768

    node2上监听端口

    image-20220829202428660

    浏览器访问

    image-20220829202535429

    image-20220829202654954

    插入索引

    node1上插入索引测试

    #通过命令插入一个测试索引,索引为 index-demo,类型为 test。
    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
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    image-20220829205006570

    node2

    image-20220829205032862

    在浏览器上验证

    image-20220829205254723

    查看索引

    image-20220829205336830

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

    安装Logstash

    修改主机名

    hostnamectl set-hostname apache
    su
    
    • 1
    • 2

    安装httpd并启动

    yum install -y httpd
    systemctl start httpd
    
    • 1
    • 2

    image-20220829230500511

    安装Java环境

    yum install -y java
    java -version
    
    • 1
    • 2

    image-20220829230653267

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

    image-20220829230916143

    image-20220829231011414

    image-20220829231243735

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

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

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

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

    image-20220829231733090

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

    image-20220829232050630

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

    image-20220829232623703

    定义 logstash配置文件

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

    (1)#给日志目录可读权限
    chmod o+r /var/log/messages					#让 Logstash 可以读取日志
    
    • 1
    • 2

    image-20220829232856982

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

    vim /etc/logstash/conf.d/system.conf
    
    • 1
    input {
        file{
            path =>"/var/log/messages"						#指定要收集的日志的位置
            type =>"system"									#自定义日志类型标识
            start_position =>"beginning"					#表示从开始处收集
        }
    }
    output {
        elasticsearch {										#输出到 elasticsearch
            hosts => ["192.168.59.115:9200"]	#指定 elasticsearch 服务器的地址和端口
            index =>"system-%{+YYYY.MM.dd}"		#指定输出到 elasticsearch 的索引格式
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    image-20220829233430663

    重启服务

    systemctl restart logstash
    
    • 1

    image-20220829233714435

    打开浏览器,查看索引信息

    image-20220829233802065

    查看索引对应日志文件

    image-20220829233846773

    部署KIBANA(在node1上)

    安装软件包

    image-20220829234032223

    image-20220829234053958

    设置kibana的主配置文件

    vim /etc/kibana/kibana.yml
    
    • 1

    image-20220829234546358

    image-20220829234706705

    image-20220829234813166

    启动服务

    systemctl start kibana
    systemctl enable kibana
    netatat -natp | grep 5601
    
    • 1
    • 2
    • 3

    image-20220829234954327

    验证kibana,浏览器访问连接的主机加上kibana端口号

    image-20220829235110238

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

    image-20220829235249416

    image-20220829235318811

    将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示

    apache服务器(192.168.64.16)

    vim /etc/logstash/conf.d/apache_log.conf
    
    • 1
    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.64.20:9200"]
                index => "apache_access-%{+YYYY.MM.dd}"
            }
        }   
            if [type] == "error" {
            elasticsearch {
                hosts => ["192.168.64.20:9200"]
                index => "apache_error-%{+YYYY.MM.dd}"
            }
        }
        }
    
    
    • 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

    image-20220830000031034

    cd /etc/logstash/conf.d/
    /usr/share/logstash/bin/logstash -f apache_log.conf	将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
    
    • 1
    • 2

    进入kibana的界面,可以看到多了两个索引信息

    image-20220830000527709

    浏览器访问node1的5601端口

    添加索引apache_error-*

    image-20220830000716962

    就可以看到相对应的了
    image-20220830000819859

  • 相关阅读:
    HUAWEI永远滴神、华为顶级网络专家总结出了这份网络协议开源手册
    2、模块传参和依赖
    Vue前端导出Excel文件
    计算机毕业设计django基于python仓库管理系统(源码+系统+mysql数据库+Lw文档)
    矩阵白化原理及推导
    解决Office Word另存为PDF卡死的问题
    Linux基础知识总结篇
    三、T100应付管理之采购应付-入库应付管理篇
    AbstractHandlerMethodMapping类的功能简介说明
    为什么iphone邮箱里已发送邮件是空的
  • 原文地址:https://blog.csdn.net/H_YANG__/article/details/126924258