使用 logstash, elasticsearch, kibana 搭建日誌分析系統

簡介

Logstash:接收,處理,轉發日誌
Elasticsearch:文檔型數據庫,實時的分佈式搜索和分析引擎
Kibana:查詢、生成報表的web GUIgit


Logstash

配置

在安裝目錄bin文件夾裏新建一個logstash.conf
填入如下配置github

input { stdin {} }

filter {
    grok {
        match => ["message",  "%{COMBINEDAPACHELOG}"]
    }
}

output { stdout { codec => rubydebug } }

配置文件語法相似Rubyweb

  • input: 數據的來源,能夠是文件,tcp等等
  • filter 以何種規則從字符串中提取出結構化的信息,grok是logstash裏的一款插件,能夠使用正則表達式匹配日誌,上文中的%{COMBINEDAPACHELOG}是內置的正則,用來匹配apache access日誌,更多pattern在這裏*
  • output 配置保存解析結果,能夠是文件,es數據庫等多種方式

* patterns本地路徑大體爲:logstash-1.5.0\vendor\bundle\jruby\1.9\gems\logstash-patterns-core-0.1.10\patterns正則表達式

而後執行 logstash -f logstash.conf ,windows下是logstash.bat數據庫

windows有個坑,路徑中有空格會啓動失敗,編輯logstash.bat文件,替換第6行爲
CALL "%SCRIPT_DIR%\setup.bat"apache

測試日誌

在控制檯輸入一條apache日誌json

127.0.0.1 - - [05/May/2015:15:45:21 +0800] "GET /t/10002 HTTP/1.1" 200 7593 "http://127.0.0.1/index" "Mozilla/4.0 (compatib1e; MSIE 6.1; Windows NT)"

返回結果
ubuntu

能夠看到原來的一行字符串,通過logstash的處理後,輸出json格式的結果,獲得有語義的結構化文檔windows

以上就是Logstash的主要功能:
1. 接收日誌 (input)
2. 處理成json格式的文檔 (filter)
3. 輸出日誌 (output)瀏覽器


日誌文件處理

再試試文件的 測試日誌

input {
    file {
        path => "D:/Program Files/logstash-1.5.0/log/access_test.log"
        type => "apache"
        start_position => "beginning"
    }
}

filter { 
    grok { 
        match => {
            "message" => "%{COMBINEDAPACHELOG}"
        }
    }
    date {
        locale => "en"
        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z", "ISO8601" ]
    }
}

output {
    file {
        path => "D:/Program Files/logstash-1.5.0/log/logstash-access_test.log"
        type => "apache"
        start_position => "beginning"
    }
}


Elasticsearch

啓動與管理

安裝管理監控工具Marvel

./bin/plugin -i elasticsearch/marvel/latest

啓動Elasticsearch

./bin/elasticsearch

ubuntu有個,主機重啓後,service啓動es報touch的pid文件不存在,按修改/etc/init.d/elasticsearch

訪問http://localhost:9200/?pretty查看引擎是否啓動
Marvel管理地址:http://localhost:9200/_plugin/marvel/

導入數據

修改logstash.conf的output部分

output {
    elasticsearch {
        host => "127.0.0.1"
        protocol => "http"
        index => "logstash-test-%{type}-%{host}"
        workers => 5
        template_overwrite => true
    }
}

再運行一次logstash,輸出的結果就導入elasticsearch了

Documents表明文檔數量,大約有兩萬多個


kibana

啓動

./bin/kibana

而後訪問http://127.0.0.1:5601/

建立一個索引模式,再點擊頂部的「Discover」
默認的過濾器只顯示15分鐘之內的日誌,須要點右上角的鐘表圖標修改一下時間段,切換到「Absolute」標籤

這裏改爲日誌的起止時間2014-11-012015-06-1

Discover

Discover界面功能主要分四部分
1. 搜索功能,能夠是Lucene語法,也開始是DSL
2. 左邊能夠按字段過濾,查看數量最多的Top 5
3. 很直觀的反映訪問量的直方圖,能夠自定義時間頻率,右上角是當前的結果總數
4. 篩選後的文檔結果

在搜索框輸入 response: not 200

Visualize

下面用獨立IP簡單統計用戶都用什麼瀏覽器

點擊 Visualize - Data Table - From a new search,填入下圖左側的查詢條件

至此,日誌分析平臺雛形已現,已經能夠從海量日誌中查詢咱們想要的數據,更多功能及應用見下篇。

相關文章
相關標籤/搜索