ELK

作者: MiniSoulBigBang | 来源:发表于2021-03-15 09:35 被阅读0次

    是npm install 而不是cnpm install
    是npm run start而不是 npm start
    此处是network.host
    kibana处是server.host

    ELK安装

    1 安装elasticsearch

    1.1 下载安装包并解压

    cd /usr/local
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.2.tar.gz
    tar -zxvf elasticsearch-6.6.2.tar.gz
    cd elasticsearch-6.6.2
    

    1.2 修改配置文件

    vi config/Elasticsearch.yml
    
    # 设置外网访问,默认外网无法访问
    network.host: 0.0.0.0 
    

    1.3 修改jvm分配大小

    vi config/jvm.options
    
    # xms要和xmx大小一致,内存大小根据自己需要调整
    -Xms512m
    -Xmx512m
    

    1.4 修改系统环境变量

    # 查看当前系统环境变量
    sysctl -a|grep vm.max_map_count
    # 结果
    65530
    
    vi /etc/sysctl.conf
    
    # 添加如下内容
    vm.max_map_count=262144
    
    # 此修改需重启才能生效,若不方便重启,执行如下命令即可,保证当前环境做了修改
    sysctl -w vm.max_map_count=262144
    

    1.5 修改最大文件描述符数量和用户最大线程数

    vim /etc/security/limits.conf
    
    # 添加如下内容,星号代表所用用户
    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 4096
    * hard nproc 4096
    

    1.6 启动

    # 添加用户
    useradd zhoutian
    echo "123456" | passwd zhoutian --stdin
    # 把elasticsearch设置为用户所属
    chown -R zhoutian:zhoutian  ./ 
    # 在root下修改权限文件,授予用户超级管理员的权限
    vi /etc/sudoers
    
    # 添加如下内容
    zhoutian ALL=(ALL)  ALL
    
    # 前台启动
    bin/elasticsearch
    # 后台启动
    bin/elasticsearch -d
    

    1.7 分词器

    将相关分词器下载后解压到elasticsearch的plugins目录下即可使用
    ik分词器下载地址
    https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v6.6.2
    拼音分词器下载地址
    https://github.com/medcl/elasticsearch-analysis-pinyin/releases/tag/v6.6.2

    2 安装head插件

    2.1 head插件主要用途

    elasticsearch-head是一个用来浏览、与Elastic Search簇进行交互的web前端展示插件。
    elasticsearch-head是一个用来监控Elastic Search状态的客户端插件。
    elasticsearch主要有以下操作——
    1)簇浏览,显示簇的拓扑并允许你执行索引(index)和节点层⾯的操作。
    2)查询接口,允许你查询簇并以原始json格式或表格的形式显示检索结果。
    3)显示簇状态,有许多快速访问的tabs用来显示簇的状态。
    4)支持持Restful API接口,包含了许多选项产生感兴趣的结果,包括:
    第一,请求方式:get、put、post、delete;json请求数据、节点node、路径path。
    第二,JSON验证器。
    第三,定时请求的能力。
    第四,用javascript表达式传输结果的能力。
    第五,统计⼀段时间的结果或该段时间结果⽐对的能力。
    第六,以简单图标的形式绘制传输结果

    2.2 安装node.js

    2.2.1 下载安装包并解压

    cd /usr/local/
    wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-x64.tar.xz
    tar -xJf node-v10.16.3-linux-x64.tar.xz 
    # 重命名
    mv node-v10.16.3-linux-x64 nodeJS
    

    2.2.2 修改配置文件

    vim /etc/profile
    
    # 在文件最后面追加node.js环境变量
    export NODE_HOME=/usr/local/node-v10.16.3-linux-x64
    export PATH=$NODE_HOME/bin:$PATH
    
    # 刷新配置文件
    source /etc/profile
    

    2.2.3 验证是否安装成功

    node -v
    npm -v
    

    2.3 安装head插件

    2.3.1 下载安装包并解压

    cd /usr/local/
    wget https://github.com/mobz/elasticsearch-head/archive/master.zip
    unzip master.zip
    

    2.3.2 执行安装命令

    cd elasticsearch-head-master/
    npm install
    

    2.3.3 运行

    npm run start
    

    2.3.4 连接配置

    此时未连接,需要配置才能连接:

    2.3.4.1 修改 Gruntfile.js文件:
    connect: {
                server: {
                    options: {
                        port: 9100,
                        base: '.',
                        keepalive: true,
                        hostname: '*' # 此行为新添加
                    }
                }
            }
    
    2.3.4.2 修改app.js
    vi _site/app.js
    
    this._super();
    this.prefs = services.Preferences.instance();
    -- 改为自己的elasticsearch的地址和端口
    this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.81.130:9200"; 
    
    2.3.4.3 启动CORS

    当head插件访问es时,您必须在elasticsearch中启动CORS,否则您的浏览器将拒绝跨域,因为默认情况下不允许跨域。

    vi elasticsearch-6.6.2/config/elasticearch.yml
    
    -- 在配置文件末尾添加如下内容,
    http.cors.enabled: true
    http.cors.allow-origin: "*" 
    

    由于这样配置的任何地方都可以访问,所以有安全风险。

    2.3.5 重启ES和head插件可访问

    3 安装logstash

    3.1 LogStash插件介绍

    Logstash是一个具有实时管道的开源数据收集引擎。可以动态地统⼀不同来源的数据,并将数据归到不同目的地。也是一个管理事件和日志工具。你可以用它来收集日志,分析它们,并将它们储存起来以供以后使用。
    Logstash 通常都是和 Kibana 以及 Elasticsearch 一起使用。

    3.2 logStash安装

    注意版本和elasticsearch、kibana 必须保持⼀致,es、kibana都是6.6.2版本

    3.2.1 下载安装包并解压

    cd /usr/local/
    wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.2.tar.gz
    tar -zxvf logstash-6.6.2.tar.gz
    

    3.2.2 启动

    cd logstash-6.6.2/bin/
    ./logstash -e 'input{ stdin{} } output{ stdout{} }'
    
    ./logstash -e 'input{ stdin{} } output{ stdout{ codec => json } }'
    

    日志内容写入elasticsearch。注意elasticsearch插件的语法格式:hosts 对应数组

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

    日志内容写入elasticsearch,同时输出到控制台

    ./logstash -e 'input{ stdin{} } output{ elasticsearch{hosts =>["192.168.81.130:9200"]} stdout{} }'
    

    3.3 logStash插件

    3.3.1 input插件

    输入较常用的几个插件:stdin、file、http、tcp

    3.3.2 output插件

    输入较常用的几个插件:stdout、file、http、tcp、elasticsearch

    3.3.3 codec插件

    codec(Code Decode)插件作用于input和output插件,负责将数据在原始与Logstash之间转换,常用的codec有:

    • plain 读取原始内容
    • dots 将内容简化为点进行输出
    • rubydebug 将内容按照ruby格式输出,方便调试
    • line 处理带有换行符的内容
    • json 处理json格式的内容
    • multiline 处理多⾏数据的内容

    3.4 logStash配置

    创建配置

    cd ../config
    touch logstash.conf
    

    详细配置如下

    input { stdin { } }
    output {
        elasticsearch { hosts => ["192.168.81.130:9200"] }
        stdout { codec => rubydebug }
    }
    

    启动logstash

    cd ../bin/
    ./logstash -f config/logstash.conf
    

    3.5 file日志收集

    创建新的配置文件

    mv logstash.conf file.conf
    

    详细配置如下

    input {
        file{
            path => "/var/log/messages" # 收集messages文件日志
            type => "system"
            start_position => "beginning" # 记录上次收集的位置
        }
    }
    output {
        elasticsearch {
            hosts => ["192.168.81.130:9200"] # 写入elasticsearch的地址
            index => "system-%{+YYYY.MM.dd}" # 定义索引的名称
        }
        stdout { codec => rubydebug }
    }
    

    启动logstash

    cd ../bin/
    ./logstash -f config/file.conf
    

    3.6 Java日志收集

    #在原来file文件的基础上进行编辑
    input {
        file{
            path => "/var/log/messages"
            type => "system"
            start_position => "beginning"
        }
        #加一个file插件收集elasticsearch日志
        #es就是java语言开发的。
        file{
            path => "/usr/local/elasticsearch-6.6.2/logs/elasticsearch.log"
            type => "es-info"
            start_position => "beginning"
        }
    }
    output {
        #判断,导入到不同的索引库,否则会放入同一个索引库中
        if [type] == "system"{
            elasticsearch {
                hosts => ["192.168.81.130:9200"]
                index => "system-%{+YYYY.MM.dd}"
            }
        }
        #判断,导入到不同的索引库,否则会放入同一个索引库中
        if [type] == "es-info"{
            elasticsearch {
                hosts => ["192.168.81.130:9200"]
                index => "es-info-%{+YYYY.MM.dd}"
            }
        }
        stdout { codec => rubydebug }
    }
    

    目前导入日志都是按照行导入的,但是有些日志多行是一句话,如果分开的话就不太容查看日志的完整的意思了。可以使用codec插件来进行解决,codec把多行日志合并为一行。

    file{
         path => "/usr/local/elasticsearch-6.6.2/logs/elasticsearch.log"
         type => "es-info"
         start_position => "beginning"
         # 使用正则表达式,合并多行日志
         codec => multiline {
             pattern => "^\[" # 发现中括号就合并日志
             negate => true
             what => "previous"
         }
     }
    

    4 安装Kibana

    4.1 kibana 插件介绍

    kibana 插件提供了Marvel监控的UI界面。kibana是一个与elasticsearch一起工作的开源的分析和可视化的平台。使用kibana可以查询、查看并与存储在elasticsearch索引的数据进行交互操作。使用kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。 kibana使得理解大容量的数据变得非常容易。它非常简单,基于浏览器的接口使我们能够快速的创建和分享显示elasticsearch查询结果实时变化的仪表盘。

    4.2 kibana下载

    wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.2-linux-x86_64.tar.gz
    tar -zxvf kibana-6.6.2-linux-x86_64.tar.gz
    

    4.3 环境配置

    cd /kibana-6.6.2-linux-x86_64/config/
    vi kibana.yml
    
    # 将默认配置改成如下
    server.port: 5601
    server.host: "192.168.81.130"
    elasticsearch.hosts: ["http://192.168.81.130:9200"]
    kibana.index: ".kibana"
    

    4.4 启动、访问与关闭

    # 前台启动
    ./bin/kibana
    # 后台启动
    nohup ./bin/kibana &
    

    访问地址:192.168.81.130:5601
    查看启动日志 : tail -f nohup
    kibana使用ps -ef|grep kibana是查不到进程的,主要原因大概是因为kibana是node写的。所以kibana 运行的时候是运行在node 里面。
    所以可以使用ps -ef|grep node查看到进程。但是带有node不一定就是kibana的进程。怎么办呢 ? 我们知道5601是kibana对外的tcp端口。所以使用netstat -tunlp|grep 5601就可以查到进程id了 。

    5 nginx日志

    5.1 JSON格式日志

    5.1.1 文本格式(默认格式)

    开启日志,把日志写入到日志文件


    01.png

    日志内容如下所示


    02.png

    发现日志都是一行普通文本格式的日志。这样不利于logstash收集整理,是否能把这些日志直接变成json格式呢。当然是可以的。

    5.1.2 JSON格式

    日志格式转换配置如下所示:


    03.png

    输出日志引用此格式输出日志:


    04.png

    日志输出效果如下所示:


    05.png

    发现日志已经完成变成json格式了。

    5.2 logstash收集

    5.2.1 配置文件

    # 把日志文件日志以json格式输入
    input {
        file{
            path => "/usr/local/src/logs/host.access.log"
            codec => json
        }
    }
    # 在logstash 控制台看一下输出日志的格式
    output {
        stdout { 
            codec => rubydebug 
        }
    }
    

    5.2.2 导入到es

    # 输入插件
    input {
        file{
            path => "/var/log/messages"
            type => "system"
            start_position => "beginning"
        }
        file{
            path => "/home/es/elasticsearch-6.2.4/logs/elasticsearch.log"
            type => "es-info"
            start_position => "beginning"
        }
        # 收集nginx日志
        file{
            path => "/usr/local/src/logs/host.access.log"
            type => "nginx-log"
            start_position => "beginning"
            codec => json
        }
    }
    # 输出插件
    output {
        if [type] == "system"{
            elasticsearch {
                hosts => ["192.168.66.66:9200"]
                index => "system-%{+YYYY.MM.dd}"
            }
        }
        if [type] == "es-info"{
            elasticsearch {
                hosts => ["192.168.66.66:9200"]
                index => "es-info-%{+YYYY.MM.dd}"
            }
        }
        # 添加nginx日志
        if [type] == "nginx-log"{
            elasticsearch {
                hosts => ["192.168.66.66:9200"]
                index => "nginx-log-%{+YYYY.MM.dd}"
            }
        }
        # 同时在控制台输出
        stdout { codec => rubydebug }
    }
    

    相关文章

      网友评论

          本文标题:ELK

          本文链接:https://www.haomeiwen.com/subject/rcgmqltx.html