基于ELK 搭建网站流量可视化监控平台

ELK 组成::java

  • 经过上图咱们能够看到,ELK 是由三个Elastic 的产品组合而成,
  • 分别是ElasticSearch、Logstash 和Kibana。
  • 三者之间是的部署关系以下图所示:
      • Logstash 就比如是挖矿工,将原料采集回来存放到ElasticSearch 这个仓库中,
      • Kibana 再将存放在ElasticSearch 中的原料进行加工包装成产品,输出到web 界面。
  • 基本工做原理以下图所示:

Logstash 原理分析及环境搭建nginx

  • 下载Logstash 6.5.1,解压便可
  • 启动方式一:命令行输入:
    • ./bin/logstash -e 'input { stdin {} } output { stdout {} }'
  • 启动方式二:在config 目录下新建logstash.conf 文件,编辑如下内容:
    • input {
        stdin {}
      }
      output {
        stdout {}
      }
    • 控制台输入如下命令:
      • ./bin/logstash -f config/logstash.conf

访问日志生产平台的搭建git

  • 为让演示效果更加真实,
    • 这里直接利用Nginx 产生的访问日志做为流量监控的元数据。
  • 所以,本身要先搭建Nginx运行环境,
    • 并部署一个能够访问的web 项目。
  • 而后,在logstash 的安装目录新建一个patterns 目录,
    • 在此目录下建立nginx 空白文件,
  • 内容以下:
NGINXACCESS %{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\]"(?:%{WORD:verb} %{URIPATH:uri}%{URIPARAM:param}(?:HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)

NGINXACCESSLOG %{NGINXACCESS} %{QS:referrer} %{QS:agent} %{QS:x_forwarded_for}

对logstash.conf 中的内容进行修改:github

input{
        file {
            path => ["D:/nginx-1.14.0/logs/access.log"]
            type =>"nginx_access"
            start_position =>"beginning"
        }
    }
    filter{
        if [type] =="nginx_access" {
        grok {
            patterns_dir =>"D:/logstash-5.5.2/config/patterns/"
            match =>{
                "message" =>"%{NGINXACCESS}"
            }
        }
        date {
            match => ["timestamp", "dd/MMM/YYYY:HH:mm:ss Z"]
        } if[param] {
            ruby {
                init =>"@kname = ['quote','url_args']"
                code =>"
                        new_event =
                        LogStash::Event.new (Hash[ @kname.zip(event.get('param').split('?'))])
                        new_event.remove('@timestamp')
                        event.append(new_event)
                "
            } if[url_args] {
                ruby {
                    init =>"@kanme = ['key','value']"
                    code =>"event.set('nested_args',event.get('url_args').split('&').clllect {|i|Hash[ @kanme.zip(i.split('='))]})"
                    remove_field => ["url_args", "param", "quote"]
                }
            }
            mutate {
                convert => ["response", "integer"]
                remove_field =>"timestamp"
            }
        }
    }
}
output{
        stdout{
        codec=>rubydebug
        }
}
  • 启动logstash 即可以将Nginx 日志同步到logstash 中来。
    • gork 内置表达式查询地址:
      • https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

Logstash 与ElasticSearch 集成web

  • 在logstash.config 追加如下内容,便可与ElasticSearch 实现无缝集成:
elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "logstash-%{type}-%{+YYYY.MM.dd}"
        document_type => "%{type}"
        sniffing => true
        #user => "tom"
        #password => "123456"
    }

利用Kibana 实现网站流量可视化json

  • 此时,只要web 程序产生访问日志,
  • 就会被Logstash 同步到ElasticSearch 中来,
  • 同时,会被Kibana 拉取到同时以可视化的界面展示出来
    • Kinaba 能直接根据类型编辑得到聚合函数结果的图表
    • 实时监控

相关文章
相关标签/搜索