zoukankan      html  css  js  c++  java
  • CentOS 7下ELK(6.2.4)++LogStash+Filebeat+Log4j日志集成环境搭建

    本文来自转载:https://www.cnblogs.com/JetpropelledSnake/p/9893566.html

    0x01 环境说明与准备

    Filebeat一般安装在产生日志的服务器,这里tomcat在windows 10 x64下,所以Filebeat也需要安装在windows下。

    # CentOS 7.4 64位 ip 192.168.26.135 
    # 防火墙关闭 Selinux关闭

    版本为安装时的最新版本:

    复制代码
    # Elasticsearch 6.2.4
    
    # Kibana 6.2.4
    
    # Logstash 6.2.4

    # elasticsearch-head(从github直接clone)

    # filebeat 6.2.4

    # phantomjs-2.1.1-linux-x84_64 (配合npm指令使用)

    # node-v4.9.1-linux-x64 (记住文件夹路径,需要增加到bash_profile中)
    复制代码

    官网下载并解压。

    因为ES主要通过restful api对外提供服务,所以一般安装ES时顺带安装elasticsearch-head,它提供了web控制台。

    elasticsearch-head通过源码的方式托管在git上,所以需要安装下git,直接yum安装即可。

    # yum install git

    同时elasticsearch-head是一个nodejs应用,所以还需要具有node, 需要安装phantomjs。(安装教程可以参考这篇博客)

    所以在正式开始前,我们需要确保centos下下列基础设施已经具备:

    1、git已经安装。

    # yum install git

    2、如果希望源码安装nodejs,确保gcc满足node的要求,或者直接使用已经编译好的版本。

    笔者直接使用编译好的版本,可从https://nodejs.org/en/download/releases/选择具体的版本,基础运行环境最好不要使用最新版本,这里我们使用v4.9。下载解压后即可用。

    注意安装版本和下载解压后的文件路径,下面要加到.bash_profile中。

    3、因为elk不能使用root运行,所以需要新建一个elk用户并设置环境变量。

    # groupadd elk
    
    # useradd -g elk elk

    设置elk用户的环境变量:

    # su - elk

    vim .bash_profile  增加如下:注意node-v4.9.1的文件夹路径

    # export NODE_HOME=/usr/local/app/node-v4.9.1-linux-x64
    # PATH=$NODE_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
    # export NODE_PATH=$NODE_HOME/lib/node_modules
    # export PATH

    4、下载ELK套件本身并解压:

    复制代码
    # cd /usr/local/app    (这是此次实验的安装路径)
    
    # wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz
    
    # wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
    
    # wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.4.tar.gz
    
    # wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz
    
    # git clone https://github.com/mobz/elasticsearch-head
    复制代码

     

    0x02 安装ElasticSearch

    因为使用的是vmware,总共内存才分配了1G,所以为了避免OOM,对ES以及logstash内存均进行了调整,限制为256M

    因为es需要非root用户运行,所以对于ES相关的所有操作均在elk用户下运行。

    # su - elk

    更改ES配置:

     

    # vim elasticsearch.yml
    复制代码
    # 确保下列参数被正确设置:
    
    cluster.name: logger   # ES集群的名字
    
    node.name: node-1
    
    path.data: /usr/local/app/elasticsearch-6.2.4/data
    
    path.logs: /usr/local/app/elasticsearch-6.2.4/log
    
    bootstrap.memory_lock: false   # 对于非专用ES,建议设置为false,默认为true
    bootstrap.system_call_filter: false
    
    network.host: 0.0.0.0  # 支持远程访问
    
    http.port: 9200 # restful api访问接口
    
    http.cors.enabled: true      #允许ES head跨域访问
    http.cors.allow-origin: "*"   #允许ES head跨域访问
    复制代码

    接着改另外一个配置文件

    # vim jvm.options # JVM参数在这个文件中设置,当然命令行也可以
    -Xms256m
    -Xmx256m

    上述配置调整完成后,就可以启动ES了。

     

    应按线程保护的方式启动,这样关掉窗口,还能继续运行

     ./elasticsearch -d

    windows下浏览器访问下http://192.168.26.135:9200

     ElasticSearch安装完成。

    0x03 启动ElasticSearch的TroubleShooting

     报错细节,请参考这篇博客

    0x04 安装ElasticSearch-head

    需要注意的是,虽然ES head可以认为是es的插件,但是它不能放在$ES_HOME/plugins目录下,因为它并不符合ES插件的规范,否则ES启动会失败。

    [elk@localhost elasticsearch-head]$ pwd
    /usr/local/app/elasticsearch-head
    [elk@localhost elasticsearch-head]$ npm config set registry https://registry.npm.taobao.org
    # npm install

    可能会遇到如下报错

    复制代码
    Please report this full log at https://github.com/Medium/phantomjs
    
    npm ERR! Darwin 15.0.0
    
    npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
    
    npm ERR! node v4.4.3
    
    npm ERR! npm  v3.10.9
    
    npm ERR! code ELIFECYCLE
    
    npm ERR! phantomjs-prebuilt@2.1.14 install: `node install.js`
    
    npm ERR! Exit status 1
    
    npm ERR! 
    
    npm ERR! Failed at the phantomjs-prebuilt@2.1.14 install script 'node install.js
    复制代码

    如果出现上述错误,则执行下列名称:

    # npm install phantomjs-prebuilt@2.1.14 --ignore-scripts

    然后重新执行

    # npm install

    这样ES head就安装好了。不要急着启动!!!

    如果只是本机访问,下面的配置修改不是必须的。如果要其他机器访问,则需要修改,一般来说,只要是服务器应用,都是通过远程访问的。

    [elk@elk1 elasticsearch-head]$ vim Gruntfile.js

    搜索server,在其options对象属性下增加一个hostname属性,值为"*",如下:

     

    现在就可以启动es head了,如下:

     

     此方式启动更合适,可以关掉窗口不受影响

    npm  run start &

     windows下浏览器访问下http://192.168.26.135:9100

     0x04 安装Logstash

    logstash和kibana可以使用root用户来启动。

    Logstach需要搭配指定的配置文件启动创建一个logstash配置文件,比如logstash-es.conf,配置从filebeat读取数据源,输出到es。

    为了简化起见,忽略过滤器(实际生产中,一般需要配置过滤器对日志进行规范化处理和分类)

    # vim logstash-es.conf

    加入如下内容:

    为了测试方便,同时开启控制台输入和输出。

    复制代码
    input {
      stdin { }
      beats {
        port => 5000
        ssl => false
      }
    }
    output {
        elasticsearch {
            action => "index"
            hosts => "127.0.0.1:9200"
            index  => "logstash-%{+YYYY-MM}"
        }
        stdout { codec=> rubydebug }
    }
    复制代码

     配置jvm文件

    # vim jvm.options   #设置最多使用256m内存

     启动logstash

    # ./bin/logstash -f ./config/logstash-es.conf

    随便输入个字符串测试下,如上,看下http://192.168.26.135:9100

    这样logstash对于写入es和从控制台输入的配置就正确了,filebeat还需要等我们后面验证。我们先完成Kibana的安装与配置。

    0x05 Kibana安装

    kibana也是个nodejs应用。首先来修改kibana的配置:

    #  cd kibana-6.2.4-linux-x86_64/config/

    更改配置文件

    # vim kibana.yml  # 确保下列配置正确
    server.port: 5601
    
    server.host: "192.168.26.135"
    
    elasticsearch.url: "http://localhost:9200"  # 此处localhost=192.168.26.135,需要写ES Server的IP

    上述配置完成后,就可以启动了

     此方式启动更合适,可以关掉窗口不受影响

    ./kibana &

    访问下http://192.168.26.135:5601

    第一次访问的时候,会要求设置Index Pattern,因为我们在logstash-es.conf中设置为logstash-%{+YYYY-MM},所以设置为logstash-*就可以了。

    # 这里有可能会遇到要求你创建Index的情况,请参考官网的指导文件和该博客导入json文件即可
    # 官网指导文件 https://www.elastic.co/guide/en/kibana/6.x/tutorial-load-dataset.html
    # 如何批量导入数据到Kibana,https://www.cnblogs.com/hai-ping/p/6068946.html

    Discover是主要的查询交互界面,如下所示:

     有时候在访问discover的时候,提示no results found,如下所示:

    这通常是由于默认的查询时间范围太短的原因,可以通过右上角的TimeRange来设置查询的时间范围。

     

    到这里,ELK的环境搭建与基本配置就完成了。

    更多的配置与优化参见各官方文档

    0x06 Filebeat安装与配置

    采用Filebeat作为源端代理之后,准确的说,跟log4j已经没有关系了。所以这里假设读者知道log4j的配置,生成的文件在d:httxlogs目录。

    因为windows下Filebeat的启动脚本是使用powershell脚本编写的,所以确保安装了ps,windows 10下自带。

    从https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-windows-x86_64.zip下载windows版本的filebeat。filebeat可以安装在任何目录,这里以D:filebeat为例。

    打开配置文件D:filebeatfilebeat.yml,确保下列设置正确:

    复制代码
    filebeat.prospectors:
    - type: log
      enabled: true  #启用配置
      paths:
        - D:httxlogs*  #设置监控路径
    #output.elasticsearch:   #禁用ES写入
    output.logstash:            #启用logstash写入
      # The Logstash hosts
      hosts: ["192.168.26.135:5000"]
    复制代码

    安装与启动filebeat。

    打开powershell,执行如下命令:

    复制代码
    PS C:Usersadmin> cd 'D:filebeat'
    PS D:filebeat> .install-service-filebeat.ps1
    
    安全警告
    请只运行你信任的脚本。虽然来自 Internet 的脚本会有一定的用处,但此脚本可能会损坏你的计算机。如果你信任此脚本,请使用
    Unblock-File cmdlet 允许运行该脚本,而不显示此警告消息。是否要运行 D:chrome下载filebeatinstall-service-filebeat.ps1?
    [D] 不运行(D)  [R] 运行一次(R)  [S] 暂停(S)  [?] 帮助 (默认值为“D”): R
    
    Status   Name               DisplayName
    ------   ----               -----------
    Stopped  filebeat           filebeat
    
    
    PS D:filebeat> Start-Service filebeat
    PS D:filebeat> Stop-Service filebeat
    复制代码

    filebeat的日志在C:ProgramDatafilebeatlogs目录下,这是写死的,不知道哪里可以更改。

    filebeat会定期输出日志以及遇到的异常信息。

    最后,我们再回到kibana控制台,看下log4j相关的日志,如下:

     

    左边控制要显示哪些列,比如显示来源和主机:

     

    到此为止,整个ELK+log4j的集成本身就完成了。但是要达到高效可用的步骤,下列问题还需要进一步研究:

    1、filebeat读取文件似乎是以行为单位,这在exception堆栈下是不可接受的,需要logstash或者其他方式二次处理。

    2、es head的控制台应该来说作为es的监控还可以,但是作为日志交互基本上没什么用,效果太差了。kibana还不错,只不过filter不是起码应该固定么??

    3、elk的详细配置以及优化。

    4、filebeat日志中出现"sync.go:105: ERR Failed to publish events (host: 10.172.0.165:5044:10200), caused by: write tcp ",但是不影响日志的发送。

    参考:

    https://serverfault.com/questions/911440/filebeat-cant-connect-to-logstash-on-another-server

    https://elasticsearch.cn/question/3157

    其他:

    [ERROR][logstash.plugins.registry] Tried to load a plugin's code, but failed. {:exception=>#<LoadError: no such file to load -- logstash/inputs/log4j>, :path=>"logstash/inputs/log4j", :type=>"input", :name=>"log4j"}
    解决方法:运行bin/logstash-plugin install logstash-input-log4j 安装log4j插件,默认情况下,插件没有绑定,参考https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
    log4j:ERROR Could not connect to remote log4j server at [192.168.230.128]. We will try again later
    解决方法:logstash的log4j监听地址由127.0.0.1改成ip比如192.168.230.128

    log4j:WARN Detected problem with connection: java.net.SocketException: Connection reset by peer: socket write error
    采用低版本的ELK比如2.x版本,ELK 2.x之后的版本就是5.x、6.x,3.x、4.x是跳版了的。

  • 相关阅读:
    Spring--IOC
    神奇的小东西
    视图层发起请求的方式
    jdbc “贾琏欲执事”
    线程的五种状态
    java的<<左移,>>右移,>>>无符号右移
    直接插入排序(单链表排序)
    单链表相关知识以及指针引用相关知识
    将一个数n分解为若干个从小到大排列的质数的积 ,求质数因子
    最小二乘法
  • 原文地址:https://www.cnblogs.com/fuanyu/p/14722206.html
Copyright © 2011-2022 走看看