1. 程式人生 > >ELK日誌管理之——logstash配置語法

ELK日誌管理之——logstash配置語法

Logstash 設計了自己的 DSL —— 有點像 Puppet 的 DSL,或許因為都是用 Ruby 語言寫的吧 —— 包括有區域,註釋,資料型別(布林值,字串,數值,陣列,雜湊),條件判斷,欄位引用等。

一、基本語法組成

logstash.conf配置檔案裡至少需要有input和output兩個部分構成

input {
    #輸入
}
filter {
    #過濾匹配
}
output {
    #輸出
}

1、input配置

1.1、file{}(檔案讀取)
監聽檔案變化,記錄一個叫 .sincedb 的資料庫檔案來跟蹤被監聽的日誌檔案的當前讀取位(也就是時間戳)

input {

    file {

        path => ["/var/log/access.log", "/var/log/message"]      #監聽檔案路徑
        type => "system_log"                                     #定義事件型別
        start_position => "beginning"                             #檢查時間戳
    }

}

引數說明:
exclude :排除掉不想被監聽的檔案

stat_interval :logstash 每隔多久檢查一次被監聽檔案狀態(是否有更新),預設是 1 秒。

start_position :logstash 預設是從結束位置開始讀取檔案資料,也就是說 logstash 程序會以類似 tail -f 的形式執行。如果你是要匯入原有資料,把這個設定改成 “beginning”,logstash 程序就按時間戳記錄的地方開始讀取,如果沒有時間戳則從頭開始讀取,有點類似cat,但是讀到最後一行不會終止,而是繼續變成 tail -f。

1.2、codec(定義編碼型別)
優化建議:直接輸入預定義好的 JSON 資料,這樣就可以省略掉 filter/grok 配置,從而減輕過濾器 logstash 的 CPU 負載消耗;具體操作如下:
1.2.1、修改nginx配置檔案,新增如下

logformat json '{"@timestamp":"$time_iso8601",'

               '"@version":"1",'

               '"host":"$server_addr",'

               '"client":"$remote_addr",'

               '"size":$body_bytes_sent,'

               '"responsetime":$request_time,'      #$request_time沒有雙引號表明該值為int型別
               '"domain":"$host",'

               '"url":"$uri",'

               '"status":"$status"}';

access_log /var/log/nginx/access.log_json json;

1.2.2、重啟 nginx 應用,然後修改input/file 區段配置成下面這樣

input {

    file {

        path => "/var/log/nginx/access.log_json""

        codec => "json"

    }

}

2、filter過濾器配置

2.1、data(時間處理)

用來轉換日誌記錄中的時間字串,變成LogStash::Timestamp 物件,然後轉存到 @timestamp 欄位裡。

注意:因為在稍後的 outputs/elasticsearch 中index常用的 %{+YYYY.MM.dd} 這種寫法必須讀取 @timestamp資料,所以一定不要直接刪掉這個欄位保留自己的時間欄位,而是應該用 filters/date 轉換後刪除自己的欄位!至於elasticsearch 中index使用 %{+YYYY.MM.dd}這種寫法的原因後面會說明。

filter {

    grok {

        match => ["message", "%{HTTPDATE:logdate}"]

    }

    date {

        match => ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"]

    }

}

2.2、grok (正則匹配)

filter {

     grok {
         match => [ "message",  "\s+(?<status>\d+?)\s+" ]        #跟python的正則有點差別
     }
}

優化建議:如果把 “message” 裡所有的資訊都 grok 到不同的欄位了,資料實質上就相當於是重複儲存了兩份。所以可以用 remove_field 引數來刪除掉 message 欄位,或者用 overwrite 引數來重寫預設的 message 欄位,只保留最重要的部分。

filter {

    grok {

        patterns_dir => "/path/to/your/own/patterns"

        match => {

            "message" => "%{SYSLOGBASE} %{DATA:message}"

        }

        overwrite => ["message"]

    }

}

filter {

    grok {

        match => ["message", "%{HTTPDATE:logdate}"]

      remove_field => ["logdate"]

    }

}

2.3、GeoIP (地址查詢歸類)
GeoIP 是最常見的免費 IP 地址歸類查詢庫,同時也有收費版可以採購。GeoIP 庫可以根據 IP 地址提供對應的地域資訊,包括國別,省市,經緯度等,對於視覺化地圖和區域統計非常有用。

filter {
        geoip {
            source => "clientip"
            database => "/etc/logstash/GeoLiteCity.dat"       #需去官網下載ip庫放到本地
        }
}



filter {

        geoip {

            source => "message"               #如果能聯網可查詢線上ip庫
        }
}   

注:geoip 外掛的 “source” 欄位可以是任一處理後的欄位,比如 “clientip”,但是欄位內容卻需要小心!geoip 庫內只存有公共網路上的 IP 資訊,查詢不到結果的,會直接返回 null,而 logstash 的 geoip 外掛對 null 結果的處理是:不生成對應的 geoip.欄位。
所以在測試時,如果使用了諸如 127.0.0.1, 172.16.0.1, 182.168.0.1, 10.0.0.1 等內網地址,會發現沒有對應輸出!
GeoIP 庫資料較多,如果不需要這麼多內容,可以通過 fields 選項指定自己所需要的。下例為全部可選內容

filter {

    geoip {

        fields => ["city_name", "continent_code", "country_code2", "country_code3", "country_name", "dma_code", "ip", "latitude", "longitude", "postal_code", "region_name", "timezone"]

    }

}

相關推薦

ELK日誌管理——logstash配置語法

Logstash 設計了自己的 DSL —— 有點像 Puppet 的 DSL,或許因為都是用 Ruby 語言寫的吧 —— 包括有區域,註釋,資料型別(布林值,字串,數值,陣列,雜湊),條件判斷,欄位引用等。 一、基本語法組成 logstash.conf配置

ELK 學習筆記 Logstash基本語法

技術 logs erl 定義 -s images cnblogs img ron Logstash基本語法: 處理輸入的input 處理過濾的filter 處理輸出的output 區域 數據類型 條件判斷 字段引用 區域: Logstash中,是用{}

【20180417】ELK日誌管理filebeat收集分析mysql慢日誌

filebeat slow log pipeline slowlog 環境版本 filebeat: 6.2.3mysql: 5.6.38 錯誤信息 { "_index": "mysql-slow-2018.04.17", "_type": "doc", "_id": "AWLRiD

ELK日誌管理——elasticsearch部署

1、配置官方yum源 [root@localhost ~]# rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearc

ELK日誌處理使用logstash收集log4J日誌 和log4j日誌properties配置

Log4j 主要由三部分組成: loggers:負責採集日誌資訊。 appenders:負責將日誌資訊釋出到不同地方。 layouts:負責以各種風格格式化日誌資訊。 建立maven工程,pom中匯入日誌依賴: <dependency> <

ELK 學習筆記 Logstashfilter配置

表達式 under starting beginning name core dir date source Logstash之filter: json filter: input{ stdin{ } } filter{ jso

ELKLogstash配置方法

Logstash                        &

ELK日誌處理使用logstash收集log4J日誌

介紹一下如何從Java工程中匯出log4J日誌到Logstash。 一、log4j基礎 不能免俗的官方介紹: Log4j 是一個使用 Java 語言編寫的,可靠、快速、靈活的日誌框架(API),使用 Apache Software License 授權。它被移植到 C

ELK日誌分析系統搭建配置

elk我們主要用ELK日誌分析系統來分析Nginx訪問日誌,mysql慢查詢日誌,tomcat運行日誌以及系統日誌等。介紹:ELK:ElasticSearch+LogStash+Kibana=ElkStackElasticSearch:存儲、收索、分析(可以用solr替代)LogStash:收集器,輸入,處理

ELK日誌平臺----解耦配置文件

elk日誌分析平臺本文記錄了三個配置文件:第一個:all.conf 通過一個配置文件,配置輸入輸出,實例;第二個:shipper.conf配置logstash收集日誌內容到redis裏;第三個:indexer.conf配置logstash從redis裏讀取日誌內容輸出到Elasticsearch裏。第二個跟第

日誌管理小實驗:實現loganalyzer

spa 16px www oracle createdb analyzer name yum quick 實驗目的:以報表圖形格式展示數據庫,便於觀看和理解 實驗工具:三臺主機(A主機:centos7--配置數據庫 B主機:centos6--記錄日誌 C主機:ce

日誌管理 Docker logs - 每天5分鐘玩轉 Docker 容器技術(87)

docker 容器 教程 高效的監控和日誌管理對保持生產系統持續穩定地運行以及排查問題至關重要。在微服務架構中,由於容器的數量眾多以及快速變化的特性使得記錄日誌和監控變得越來越重要。考慮到容器短暫和不固定的生命周期,當我們需要 debug 問題時有些容器可能已經不存在了。因此,一套集中式的日誌管理

logstash配置語法

ali unary geoip path unix 字段 {} host 配置 Logstash 用 {} 來定義區域input { stdin {} syslog {}}數據類型booldebug => truestringhost => "

日誌管理及網路配置

一:系統的日誌管理 系統日誌是記錄系統中硬體,軟體和系統問題的資訊,同時還可以監視系統中發生的事件。使用者可以通過它來檢查錯誤發生的原因,或者尋找受到攻擊時攻擊者留下的痕跡。系統日誌包括系統日誌,應用程式日誌和安全日誌。 1.rsyslog的管理 /var/log/messages ##

Logstash 配置語法

轉載:http://www.ttlsa.com/elk/elk-logstash-configuration-syntax/ 資料型別 logstash支援的資料型別有: array 陣列可以是單個或者多個字串值。 path => [ "/var

commons-logging和Log4j 日誌管理/log4j.properties配置詳解

commons-logging和Log4j 日誌管理 (zz) 什麼要用日誌(Log)? 這個……就不必說了吧。 為什麼不用System.out.println()? 功能太弱;不易於控制。如果暫時不想輸出了怎麼辦?如果想輸出到檔案怎麼辦?如果想部分輸出怎麼辦?…… 為什麼

Vczh Library++ 3.0配置語法分析器(FpMacro及程式碼)

    上一篇文章基本上把分析的過程都講完了,於是這次就把FpMacro作為一個Demo拿了出來。不第一次就發的原因主要是那個時候FpMacro剛剛寫完,當然寫完就要用的,於是後來就在Vczh Library++ 3.0的庫裡面大量使用了FpMacro作為程式碼生成的一個工具,用來代替一部分的巨集

Vczh Library++3.0配置語法分析器(分析Demo:函式式巨集)

    上一篇文章提到了我開發了可配置語法分析器之後做了一個FpMacro用來生成C++有規律的程式碼。這一篇文章就從FpMacro入手,分析可配置語法分析器所需要具備的功能。首先讓我們來了解一下什麼是FpMacro。    FpMacro主要用來產生用C++巨集很難容易產生的程式碼(譬如BOOS

分散式日誌收集Logstash 筆記(二)

今天是2015年11月06日,早上起床,北京天氣竟然下起了大雪,不錯,最近幾年已經很少見到雪了,想起小時候冬天的樣子,回憶的影子還是歷歷在目。  進入正題吧,上篇介紹了Logstash的基礎知識和入門demo,本篇介紹幾個比較常用的命令和案例  通過上篇介紹,我們大體知道了整個logstash處理日誌的流程

ELK日誌檢索系統--FileBeat配置說明

0. FileBeat使用說明 FileBeat是一個日誌收集器,基於Logstash-Forwarder的原始碼。FileBeat一般以代理的身份執行在伺服器中,並監視使用者指定的目錄、檔案,同時把日誌檔案更新部分推送給Logstash解析或者直接推送給ES