基於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 能直接根據類型編輯得到聚合函數結果的圖表
    • 實時監控

相關文章
相關標籤/搜索