• ELK快速部署(踩坑记录、常见报错解决)及常用架构讲解


    ELK = Elasticserach + Logstash + kibana(包含但不仅限于)

    简介:

    Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;

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

    Kibana:数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示;

    Filebeat:ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发,是对它的替代。在需要采集日志数据的 server 上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取数据,迅速发送到 Logstash 进行解析,亦或直接发送到 Elasticsearch 进行集中式存储和分析

    ELK常用架构及使用场景说明

    1、最简单架构

    在这种架构中,只有一个 Logstash、Elasticsearch 和 Kibana 实例。Logstash 通过输入插件从多种数据源(比如日志文件、标准输入 Stdin 等)获取数据,再经过滤插件加工数据,然后经 Elasticsearch 输出插件输出到 Elasticsearch,通过 Kibana 展示。

    2、以Logstash 作为日志搜集器

    这种结构因为需要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工作。

    3、以Beats 作为日志搜集器

    这种架构引入 Beats 作为日志搜集器。目前 Beats 包括四种:

     Packetbeat(搜集网络流量数据);

     Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);

     Filebeat(搜集文件数据);

     Winlogbeat(搜集 Windows 事件日志数据)。

    Beats 将搜集到的数据发送到 Logstash,经 Logstash 解析、过滤后,将其发送到 Elasticsearch 存储,并由 Kibana 呈现给用户。

    这种架构解决了 Logstash 在各服务器节点上占用系统资源高的问题。相比 Logstash,Beats 所占系统的 CPU 和内存几乎可以忽略不计。另外,Beats 和 Logstash 之间支持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通信安全。

    因此这种架构适合对数据安全性要求较高,同时各服务器性能比较敏感的场景

    4、引入消息队列模式

    Beats 还不支持输出到消息队列新版本除外:5.0版本及以上),所以在消息队列前后两端只能是 Logstash 实例。logstash从各个数据源搜集数据,不经过任何处理转换仅转发出到消息队列(kafka、redis、rabbitMQ等),logstash从消息队列取数据进行转换分析过滤,输出到elasticsearch,并在kibana进行图形化展示

    模式特点:这种架构适合于日志规模比较庞大的情况。但由于 Logstash 日志解析节点和 Elasticsearch 的负荷比较重,可将他们配置为集群模式,以分担负荷。引入消息队列,均衡了网络传输,从而降低了网络闭塞,尤其是丢失数据的可能性,但依然存在 Logstash 占用系统资源过多的问题

    工作流程:Filebeat采集—>  logstash转发到kafka—>  logstash处理从kafka缓存的数据进行分析—>  输出到es—>  显示在kibana

    基于第一种最简单的架构部署:了解工作流程

    系统环境:

    Centos 7.3

    IP:192.168.152.253

    JDK:java version "1.8.0_191"(须>=1.8)

    Elasticserach-6.3.2  —>  Elasticsearch-7.5.2

    logstash-7.3.1

    kibana-7.5.2

    注:Elasticsearch版本须与kibana版本相同,否则连接报错!!!

    别问我为什么知道的,实力踩坑。

    一、下载JDK

    ORACLE官网下载JDK很慢,并且不支持迅雷、wget等下载方式

    https://repo.huaweicloud.com/java/jdk/

    以上是华为的一个JDK下载地址,非常迅速。

    下载完毕之后,加入PATH

    vim /etc/profile

    export JAVA_BIN=/usr/local/jdk1.8.0_191/bin/ PATH=$PATH:$MYSQL_BIN:$PHP_BIN:$JAVA_BIN

    写到最后

    保存后执行  source /etc/profile  即刻生效

    java -version 可查看版本

    二、部署Elasticserach

    # 此博客有分享ES各版本安装包,本文采用elasticsearch-7.5.2
    https://blog.csdn.net/weixin_37281289/article/details/101483434
    
    # 下载完毕后上传至服务器
    # 解压
    tar zxvf elasticsearch-7.5.2-linux-x86_64.tar.gz -C /usr/local/  
    useradd elasticsearch  #创建用户
    chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-7.5.2/
    su - elasticsearch

    1、修改配置文件

    vim elasticsearch.yml

    ###以下配置均根据自身习惯配置即可
    ### network.host若是监听本机则写本机,0.0.0.0代表所有
    path.data: /var/data/elasticsearch
    path.logs: /var/log/elasticsearch
    network.host: 192.168.152.253  #监听的网络地址
    http.port: 9200
    http.cors.enabled: true  #这两条是负责elasticsearch-head连接elasticsearch的
    http.cors.allow-origin: "*"

    2、启动服务:

    [elasticsearch@TestCentos7 elasticsearch-6.3.2]$ bin/elasticsearch -d  #启动
    [elasticsearch@TestCentos7 elasticsearch-6.3.2]$ netstat -tnl
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      -                   
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -                   
    tcp6       0      0 :::111                  :::*                    LISTEN      -                   
    tcp6       0      0 :::22                   :::*                    LISTEN      -                   
    tcp6       0      0 ::1:25                  :::*                    LISTEN      -  

    发现并没有启动成功,于是查看日志报错:

    报错1:Native controller process has stopped - no new native processes can be started

    解决:

    vim /etc/security/limits.conf
    elasticsearch soft nofile 65536
    elasticsearch hard nofile 65536
    elasticsearch soft nproc 4096
    elasticsearch hard nproc 4096
    
    vim /etc/security/limits.d/20-nproc.conf
    *          soft    nproc     4096
    root       soft    nproc     unlimited
    
    ### 将*号改为用户名
    
    elasticsearch  soft    nproc     4096
    root       soft    nproc     unlimited
    
    vim /etc/sysctl.conf 
    vm.max_map_count = 655360
    :wq
    
    执行:sysctl -p

    报错2:[ERROR][o.e.b.Bootstrap          ] [TestCentos7] node validation exception[1] bootstrap checks failed

    解决:

    vim config/elasticsearch.yml
    #将下行注释取消,并改为以下内容
    node.name: node-1
    cluster.initial_master_nodes: ["node-1"]

    再次启动:

    [elasticsearch@TestCentos7 elasticsearch-7.5.2]$ bin/elasticsearch -d
    [elasticsearch@TestCentos7 elasticsearch-7.5.2]$ netstat -tnl
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
    tcp        0      0 192.168.152.253:25      0.0.0.0:*               LISTEN     
    tcp6       0      0 :::111                  :::*                    LISTEN     
    tcp6       0      0 192.168.152.253:9200    :::*                    LISTEN     
    tcp6       0      0 192.168.152.253:9300    :::*                    LISTEN     
    tcp6       0      0 :::22                   :::*                    LISTEN     
    tcp6       0      0 ::1:25                  :::*                    LISTEN
    
    #启动成功 9200端口 与 9300端口
    9200端口 与 9300端口区别:
    - 9200作为Http协议,主要用于外部通讯
    - 9300作为Tcp协议,jar之间就是通过tcp协议通讯
    - ES集群之间是通过9300进行通讯

    3、安装 elasticsearch-head 插件(非必须安装)

    elasticsearch-head是Elasticsearch的图形化界面,方便用户对数据进行增删改查,基于REST的进行数据交互

    两种安装方式 1、docker安装 2、git安装

    1、使用docker的集成好的elasticsearch-head

    docker run -p 9100:9100 mobz/elasticsearch-head:5 

    2、使用git安装elasticsearch-head

    yum install -y epel git
    
    yum install -y npm 
    或 
    wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz
    tar zxvf node-v10.14.1-linux-x64.tar.gz -C /usr/local
    #然后将此目录加入PATH
    
    git clone git://github.com/mobz/elasticsearch-head.git
    cd elasticsearch-head
    npm install phantomjs-prebuilt@2.1.16 --ignore-scripts
    npm install
    npm run start  #启动
    
    ############可选配置#############
    1、设置默认的连接地址
    vim /usr/local/elasticsearch-head/_site/app.js
    4374   this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.152.253:9200";
    
    2、修改默认监听的服务器端口
    vim /usr/local/elasticsearch-head/Gruntfile.js
     97     port: 9100,
     
    -------------------------

    另外,如果head一直无法连接上ES,则可以试着修改默认的连接地址

    启动成功后,访问http://ip:9100访问

    三、搭建Nginx

    直接 yum 安装

    yum -y install nginx

    vim /etc/nginx/nginx.conf #编辑配置文件

    http{  #http模块中
    log_format json '{"@timestamp":"$time_iso8601",'   #配置NGINX的日志格式 json
                            '"host":"$server_addr",'
                            '"clientip":"$remote_addr",'
                            '"size":$body_bytes_sent,'
                            '"responsetime":$request_time,'
                            '"upstreamtime":"$upstream_response_time",'
                            '"upstreamhost":"$upstream_addr",'
                            '"http_host":"$host",'
                            '"url":"$uri",'
                            '"xff":"$http_x_forwarded_for",'
                            '"referer":"$http_referer",'
                            '"agent":"$http_user_agent",'
                   '"status":"$status"}';
    access_log /var/log/nginx/access.log_json json; #配置日志路径 json格式 error_log /var/log/nginx/error.log; }

    四、搭建Logstash

    1、官方安装指南:

    https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

    不管是按照哪种方法安装都巨慢,找到了一个大佬提供的网盘:

    #直接在此下载,美滋滋https://blog.csdn.net/weixin_37281289/article/details/101483434

    2、下载完毕后,上传至服务器,解压

    tar zxvf logstash-7.3.1.tar.gz -C /usr/local/
    cd /usr/local/logstash-7.3.1/

    测试:

    bin/logstash -e 'input { stdin {} } output { stdout {} }'
    注:
      -e          执行操作
      input       标准输入
      { stdin }   插件
      output      标准输出
      { stdout }  插件

    输入: Hello World

    输出:

     基本功能已经实现

    3、配置配置文件

    vim stdin.conf

    input{
            file {
                    path => "/var/log/nginx/access.log_json"
                    codec => "json"
                    type => "nginx"
            }
    }
    filter{
            mutate {
                    split => ["upstreamtime",","]
            }
            mutate {
                    convert => ["upstreamtime","float"]
            }
    }
    output{
            elasticsearch {
                    hosts => ["192.168.152.253"]
                    index => "logstash-%{+YYYY.MM.dd}"
            }
    }
    
    #启动服务
    [root@TestCentos7 logstash-7.3.1]# bin/logstash -f config/stdin.conf

    启动成功后,访问Nginx服务器,会将access.log传输至ES中:

    五、搭建kibana

    1、下载

    #同样是这个链接,下载对应版本的kibana https://blog.csdn.net/weixin_37281289/article/details/101483434

    2、解压,修改配置文件

    tar zxvf kibana-7.5.2-linux-x86_64.tar.gz -C /usr/local/
    
    vim /usr/local/kibana-7.5.2-linux-x86_64/config/kibana.yml
    ....
    elasticsearch.hosts: ["http://192.168.152.253:9200"]  #设置ES的主机地址
    server.host: "0.0.0.0"  #可访问主机
    server.port: 5601  #监听端口
    ...

    3、启动

    [root@TestCentos7 kibana-7.5.2-linux-x86_64]# bin/kibana --allow-root

    警告1:Generating a random key for xpack.security.encryptionKey. To prevent sessions from being invalidated on restart, please set xpack.security.encryptionKey in kibana.yml

    在 kibana.yml 中添加此配置:
    xpack.security.encryptionKey: "something_at_least_32_characters"
    
    官方文档:https://www.elastic.co/guide/en/kibana/6.x/using-kibana-with-security.html

    启动成功后,访问http://ip:5601

     

    至此ELK搭建完毕  继续学习如何使用它把~

  • 相关阅读:
    OWA or ECP stops working after you install a security update
    【PHP】熟悉php对应的DES相关加解密,与java、C#对接加解密工程
    SOAPUI中文教程使用断言
    【死磕Java并发】深入分析synchronized的实现原理
    【死磕 NIO】— 深入分析Buffer
    【死磕Java并发】内存模型之happensbefore
    【死磕Java并发】Java内存模型之重排序
    【死磕 NIO】— Proactor模式是什么?很牛逼吗?
    【死磕Java并发】—–深入分析volatile的实现原理
    音视频技术应用(14) FFmpeg 转mp4 格式 为yuv, rgb 格式
  • 原文地址:https://www.cnblogs.com/v-fan/p/12602034.html
Copyright © 2020-2023  润新知