• ELK安装配置及nginx日志分析


    一、ELK简介
    1、组成
    ELK是Elasticsearch、Logstash、Kibana三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合使用,而且又都先后归于 Elastic.co 公司名下,故有此简称。
    Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
    Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。
    kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
    2、工作流程
    在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。

    二、ELK安装及配置

    1、系统及软件版本介绍:
    系统:CentOS6.5_64
    elasticsearch:elasticsearch-2.3.5.tar.gz
    logstash:logstash-2.3.4.tar.gz
    kibana:kibana-4.5.4-linux-x64.tar.gz
    redis:redis-2.8.17.tar.gz
    JDK:jdk-8u73-linux-x64.tar.gz

    2、服务器规划
    在两台服务器安装ELK组件
    A(需要分析的nginx日志服务器):安装logstash(logstash agent)
    B(ELK服务端):安装elasticsearch、logstash(logstash index)、kibana、redis

    软件包安装目录:/data/elk

    3、创建用户

    # groupadd app
    # useradd -g app -d /data/elk elk

    4、安装及配置JDK
    logstash及elasticsearch需要JDK支持

    # su - elk
    $ tar zxf jdk-8u73-linux-x64.tar.gz
    $ vim .bash_profile (添加及修改如下内容)
    
    JAVA_HOME=/data/elk/jdk1.8.0_73
    PATH=${JAVA_HOME}/bin:$PATH:$HOME/bin
    
    export PATH JAVA_HOME
    
    $ . .bash_profile 

    执行java -version命令查看到如下内容表示JDK配置OK。

    java version "1.8.0_73"
    Java(TM) SE Runtime Environment (build 1.8.0_73-b02)
    Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode)

    注:以上3-4步在A、B服务器都需要进行操作。

    5、A服务器安装及配置logstash(logstash agent)

    $ tar zxf logstash-2.3.4.tar.gz
    $ mv logstash-2.3.4 logstash
    $ mkdir logstash/conf
    $ vim logstash/conf/logstash_agent.conf #手动创建logstash配置文件,添加如下内容
    input {
            file {
                    type => "nginx access log"
                    path => ["/app/nginx/logs/access.log"]  #nginx日志路径
            }
    }
    output {
            redis {
                    host => "123.56.xx.xx" #redis server IP
                    port => "6079" #redis server port
                    data_type => "list" #redis作为队列服务器,key的类型为list
                    key => "logstash:redis" #key的名称,可以自定义
            }
    }

    语法检查:

    $ ./logstash -t -f ../conf/logstash_agent.conf
    Configuration OK

    启动logstash(最好是在B服务器安装好redis后再进行启动):

    $ cd logstash/bin
    $ nohup ./logstash -f ../conf/logstash_agent.conf &
    $ tail -f nohup.out  #查看日志,输出以下内容,表示logstash正常启动
    {:timestamp=>"2016-12-05T11:06:35.407000+0800", :message=>"Pipeline main started"}

    注:以下安装及配置内容全部在B服务器上进行

    6、安装及配置redis

    这个比较简单(过程略,端口使用6079)

    启动redis

    /data/elk/redis/bin/redis-server /data/elk/redis/conf/redis.conf

    7、安装及配置elasticsearch

    $ tar zxf elasticsearch-2.3.5.tar.gz
    $ mv elasticsearch-2.3.5 elasticsearch
    $ mkdir elasticsearch/{logs,data}  #创建日志及数据存放目录
    $ vim elasticsearch/config/elasticsearch.yml  #修改如下内容
    cluster.name: server
    node.name: node-1
    path.data: /data/elk/elasticsearch/data
    path.logs: /data/elk/elasticsearch/logs
    network.host: 123.56.xx.xx
    http.port: 9200

    启动elasticsearch

    $ cd elasticsearch/
    $ nohup ./bin/elasticsearch &

    通过浏览器访问:

    http://123.56.xx.xx:9200/

    安装elasticsearch-head插件:

    $ cd elasticsearch/bin/
    $ ./plugin install mobz/elasticsearch-head

    访问http://123.56.xx.xx:9200/_plugin/head/,可以查看集群状态,集群的内容,执行搜索和普通的rest请求等:

    8、安装及配置logstash(logstash index)

    $ tar zxf logstash-2.3.4.tar.gz
    $ mv logstash-2.3.4 logstash
    $ mkdir logstash/conf
    $ vim logstash/conf/logstash_indexer.conf #手动创建logstash配置文件,添加如下内容
    input {
            redis {
                    host => "123.56.xx.xx"
                 port => "6079"
                    data_type => "list"
                    key => "logstash:redis"
                    type => "redis-input"
            }
    }
    filter {
            grok {
                 match => { "message" => "%{NGINXACCESS}" }
            }
         geoip {
                 source => "clientip"
                 add_tag => [ "geoip" ]
                 database => "/data/elk/logstash/GeoLiteCity.dat"
                 add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
                 add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
            }
           mutate {
                 convert => [ "[geoip][coordinates]", "float"]
        }
           date {
                 match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z" ]
                 remove_field => [ "timestamp" ]
            }
           useragent {
                 source => "http_user_agent"
                 target => "browser"
           }
    }
    
    output {
           elasticsearch {
                 hosts => ["123.56.xx.xx:9200"]
            }
           stdout {codec => rubydebug}
    }

    配置Logstash以使用GeoIP,下载最新的GeoLite城市数据库

    $ cd /data/elk/logstash
    $ curl -O "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"
    $ gzip -d GeoLiteCity.dat.gz

    添加geo_point映射

    curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
    curl -XPUT 'http://123.56.xx.xx:9200/_template/filebeat?pretty' -d@filebeat-index-template.json

    定义nginx日志匹配规则

    $ mkdir logstash/patterns
    $ vim nginx  #添加内容如下:
    NGUSERNAME [a-zA-Z.@-+_%]+
    NGUSER %{NGUSERNAME}
    NGINXACCESS %{IPORHOST:clientip} - %{NOTSPACE:remote_user} [%{HTTPDATE:timestamp}] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} %{NOTSPACE:http_x_forwarded_for}

    检查配置并启动logstash

    $ ./logstash -t -f ../conf/logstash_indexer.conf
    Configuration OK
    nohup ./logstash -f ../conf/logstash_indexer.conf &

     9、安装及配置kibana

    $ tar zxf kibana-4.5.4-linux-x64.tar.gz
    $ mv kibana-4.5.4 kibana
    $ vi kibana/config/kibana.yml #修改内容如下
    elasticsearch.url: "http://123.56.xx.xx:9200"

    启动kibana

    $ cd kibana/bin
    $ nohup ./kibana &

    访问kibana

    浏览器打开http://123.56.xx.xx:5601/

    创建索引

    使用默认的logstash-*的索引名称,并且是基于时间的,点击“Create”即可。

  • 相关阅读:
    array_values — 返回数组中所有的值
    array_unshift — 在数组开头插入一个或多个单元
    array_unique — 移除数组中重复的值
    array_uintersect — 计算数组的交集,用回调函数比较数据
    array_uintersect_uassoc — 带索引检查计算数组的交集,用单独的回调函数比较数据和索引
    职场中的起跑线上,从赢在一个办公邮箱开始
    可终身使用的会员邮箱靓号,到底有多酷?
    商务业务人员,用什么邮箱更能获得认可?
    电子邮箱有哪些类型,2020什么邮箱最火爆?
    外贸邮箱用哪个比较好?企业域名邮箱注册哪个好?
  • 原文地址:https://www.cnblogs.com/Eivll0m/p/6134426.html
Copyright © 2020-2023  润新知