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

ELK 组成::

51a1d9e6751d749f1b767e0e5356e75f7fe.jpg

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

Logstash 原理分析及环境搭建

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

访问日志生产平台的搭建

  • 为让演示效果更加真实,
    • 这里直接利用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 中的内容进行修改:

    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 集成

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

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

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

a0291f74437ac4279923b06746ef64d76c2.jpg

转载于:https://my.oschina.net/u/3847203/blog/2991586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值