ELK技術棧-Logstash的詳細使用

本文作者:羅海鵬,叩丁狼高級講師案站。原創(chuàng)文章躬审,轉載請注明出處。

前言

在第九章節(jié)中蟆盐,我們已經安裝好Logstash組件了承边,并且啟動實例測試它的數(shù)據(jù)輸入和輸出,但是用的是最簡單的控制臺標準輸入和標準輸出石挂,那這節(jié)我們就來深入的學習Logstash的詳細使用博助。

常用啟動參數(shù)

我們在上一節(jié)中演示了啟動Logstash的實例,其中我們啟動的時候給Logstash腳本傳入了-e的參數(shù)痹愚,但實際上富岳,Logstash的啟動參數(shù)有很多蛔糯,我們來看一下各個啟動參數(shù)的作用:

  • -e #立即啟動實例,例如:./logstash -e "input {stdin {}} output {stdout {}}"
  • -f #指定啟動實例的配置文件窖式,例如:./logstash -f config/test.conf
  • -t #測試配置文件的正確性蚁飒,例如:./logstash -f config/test.conf -t
  • -l #指定日志文件名稱,例如:./logstash -f config/test.conf -l logs/test.log
  • -w #指定filter線程數(shù)量萝喘,不指定默認是5淮逻,例如:./logstash-f config/test.conf -w 8

配置文件語法

文件結構

我們剛剛知道,啟動參數(shù)可以指定一個配置文件阁簸,那么接下來就有必要來了解一下配置文件的結構:
Logstash通過{}來定義區(qū)域爬早,區(qū)域內可以定義插件,一個區(qū)域內可以定義多個插件强窖,如下:

input {
    #標準輸入源插件
    stdin {
    }
    #普通文件源插件
    file {
        path => ["/var/log/*.log", "/var/log/message"]
       ....
    }
   ......
}
filter {
      #grok過濾插件
      grok {
            match => ["message", "%{HTTPDATE:logdate}"]
            .....
      }
     #date過濾插件
     date {
            match => ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"]
           .....
    }
   .....
}
output {
     stdout {
     }
     elasticsearch {
        hosts => ["127.0.0.1:9200"]
        ....
    }
    .....
}

我們先大概了解一下配置文件的結構,接下來我們再詳細看這些插件的配置削祈。

數(shù)據(jù)類型

Logstash配置文件支持的數(shù)據(jù)類型有:
1翅溺、Boolean,例如:ssl_enable => true
2髓抑、Number咙崎,例如:port => 33
3、String吨拍,例如:name => “Hello world”
4褪猛、hash,例如:options => {key1 => “value1”, key2 => “value2”}
5羹饰、array伊滋,例如:match => [“datetime”, “UNIX”, “ISO8601”]

字段引用

Logstash數(shù)據(jù)流中的數(shù)據(jù)被稱之為Event對象,Event以JSON結構構成队秩,Event的屬性被稱之為字段笑旺,如果你想在配置文件中引用這些字段,只需要把字段的名字寫在中括號[]里就行了馍资,如[type]筒主,對于嵌套字段每層字段名稱都寫在[]里就可以了,比如:[tags][type]鸟蟹;除此之外乌妙,對于Logstash的arrag類型支持下標與倒序下表,如:[tags][type][0][tags][type][-1]
以下的內容就是一個Event對象:

{
      "message" => "hello logstash",
      "@version" => "1",
      "@timestamp" => 2018-08-13T17:32:01.122Z,
      "host" => "localhost.localdomain"
}

條件判斷

Logstash支持下面的操作符:
1建钥、==(等于), !=(不等于), <(小于), >(大于), <=(小于等于), >=(大于等于)
2藤韵、=~(匹配正則), !~(不匹配正則)
3、in(包含), not in(不包含)
4熊经、and(與), or(或), nand(非與), xor(非或)
5荠察、()(復合表達式), !()(對復合表達式結果取反)
例如以下的條件判斷:

if "_grokparsefailure" not in [tags] {
} 
else if [status] !~ /^2\d\d/ or ( [url] == "/noc.gif" nand [geoip][city] != "beijing" ) {
} 
else {
}

環(huán)境變量引用

Logstash支持引用系統(tǒng)環(huán)境變量置蜀,環(huán)境變量不存在時可以設置默認值,例如:

export TCP_PORT=12345
input {
  tcp {
    port => "${TCP_PORT:54321}"
  }
}

常用輸入插件

在第九章中悉盆,我們已經使用是標準輸入盯荤,以鍵盤的輸入數(shù)據(jù)作為Logstash數(shù)據(jù)源,但實際上我們也知道焕盟,Logstash的數(shù)據(jù)源有很多秋秤,每種數(shù)據(jù)源都有相應的配置,在Logstash中脚翘,這些數(shù)據(jù)源的相應配置稱為插件灼卢,我們常用的輸入插件有:file、jdbc来农、redis鞋真、tcp、syslog沃于,這些輸入插件會監(jiān)聽數(shù)據(jù)源的數(shù)據(jù)涩咖,如果新增數(shù)據(jù),將數(shù)據(jù)封裝成Event進程處理或者傳遞繁莹,更多的輸入插件大家可以看Logstash官網檩互,接下來我們以file和jdbc兩個輸入插件作為例子,來學習輸入插件的使用咨演,其他輸入插件使用起來大同小異闸昨,大家自行擴展。

file輸入插件

讀取文件插件主要用來抓取文件的數(shù)據(jù)變化信息薄风,以此作為Logstash的數(shù)據(jù)源饵较。

  • 配置示例:

    input{
    file {
      path => ["/var/log/*.log", "/var/log/message"]
      type => "system"
      start_position => "beginning"
    }
    }
    output{
    stdout{}
    }
    
    
  • 常用參數(shù)

參數(shù)名稱 數(shù)據(jù)類型 默認值 描述
path array 用于匹配被監(jiān)控的文件,如”/var/logs/*.log”或者 “/var/log/message”遭赂,必須使用絕對路徑
type string Event的type字段告抄,如果采用elasticsearch做store,在默認情況下將作為elasticsearch的type
sincedb_path string “$HOME/.sincedb*” 文件讀取記錄嵌牺,必須指定一個文件而不是目錄打洼,文件中保存沒個被監(jiān)控的文件等當前inode和byteoffset
sincedb_write_interval number 15 間隔多少秒寫一次sincedb文件
start_position string “end” 值為“beginning”和“end”,從文件等開頭還是結尾讀取文件內容逆粹,默認是結尾募疮,如果需要導入文件中的老數(shù)據(jù),可以設置為“beginning”僻弹,該選項只在第一次啟動logstash時有效阿浓,如果文件已經存在于sincedb的記錄內,則此配置無效
stat_interval number 1 間隔多少秒檢查一下文件是否被修改蹋绽,加大此參數(shù)將降低系統(tǒng)負載芭毙,但是增加了發(fā)現(xiàn)新日志的間隔時間
close_older number 3600 設置文件多少秒內沒有更新就關掉對文件的監(jiān)聽
codec string “plain” 輸入數(shù)據(jù)之后對數(shù)據(jù)進行解碼
add_field hash {} 用于向Event中添加字段
delimiter string “\n” 文件內容的行分隔符筋蓖,默認按照換行進行Event對象封裝,也就是說一行數(shù)據(jù)就一個Event對象
discover_interval number 15 間隔多少秒查看一下path匹配的路徑下是否有新文件產生
exclude array path匹配的文件中指定例外退敦,如:path => “/var/log/“粘咖;exclude =>”*.gz”
id string 區(qū)分兩個相同類型的插件,比如兩個filter
ignore_older number 忽略歷史修改侈百,如果設置3600秒瓮下,logstash只會發(fā)現(xiàn)一小時內被修改過的文件,一小時之前修改的文件的變化不會被讀取钝域,如果再次修改該文件讽坏,所有的變化都會被讀取,默認被禁用
tags array 可以在Event中增加標簽例证,以便于在后續(xù)的處理流程中使用

jdbc輸入插件

該插件可以使用jdbc把關系型數(shù)據(jù)庫的數(shù)據(jù)作為Logstash的數(shù)據(jù)源

  • 配置示例:

    input {
    jdbc {
      jdbc_driver_library => "/opt/logstash/mysql-connector-java-5.1.36-bin.jar"
      jdbc_driver_class => "com.mysql.jdbc.Driver"
      jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
      jdbc_user => "mysql"
      jdbc_password => "123456"
      parameters => { "favorite_artist" => "Beethoven" }
      schedule => "* * * * *"
      statement => "SELECT * from songs where artist = :favorite_artist"
    }
    }
    output{
    stdout{}
    }
    
    
  • 常用參數(shù)(空 = 同上)

參數(shù)名稱 數(shù)據(jù)類型 默認值 描述
jdbc_driver_library string jdbc連接驅動的jar包位置
jdbc_driver_class string jdbc驅動類
jdbc_connection_string string 數(shù)據(jù)庫的連接地址
jdbc_user string 數(shù)據(jù)庫的用戶名
jdbc_password string 數(shù)據(jù)庫的密碼
jdbc_paging_enabled boolean false 開啟分頁
jdbc_page_size number 100000 每頁查詢多少條數(shù)據(jù)
statement string 執(zhí)行的SQL查詢語句
parameters hash {} 設置SQL查詢語句的參數(shù)
use_column_value boolean false 是否需要在程序中使用查詢出來的列
tracking_column string 需要在程序中使用哪個查詢出來的列
clean_run boolean false 是否應該保留先前的運行狀態(tài)
colums_charset hsah {} 特定列的字符編碼路呜。此選項將覆蓋指定列的原來charset配置
schedule string 定時執(zhí)行數(shù)據(jù)讀取的任務,使用cornexpression表達式:分织咧、時胀葱、天、月烦感、年巡社,全部為*默認含義為每分鐘執(zhí)行任務膛堤,該cornexpression表達式于Linux系統(tǒng)的crontab使用方式一樣手趣,如果不會使用cornexpression表達式,可以查看crontab相關文檔肥荔。不設置的話绿渣,只執(zhí)行一次數(shù)據(jù)的讀取
lowercase_column_names boolean true 是否需要把查詢出來的列名轉換成小寫,也就是說即使列名是駝峰的燕耿,也會轉成全部都是小寫的中符,默認為轉小寫,如果不需要誉帅,則設置為false
record_last_run boolean true 是否記錄數(shù)據(jù)庫中最后一條數(shù)據(jù)的位置
last_run_metadata_path string 記錄數(shù)據(jù)庫中最后一條數(shù)據(jù)的位置信息存放路徑
add_field
codec
id
tags
type

常用過濾插件

豐富的過濾器插件的是 logstash威力如此強大的重要因素淀散,過濾器插件主要處理流經當前Logstash的事件信息,可以添加字段蚜锨、移除字段档插、轉換字段類型,通過正則表達式切分數(shù)據(jù)等亚再,也可以根據(jù)條件判斷來進行不同的數(shù)據(jù)處理方式郭膛。我們常用的過濾插件有:grok、date氛悬、geoip则剃、mutate耘柱、json、Split棍现、ruby调煎,更多的過濾插件大家可以看Logstash官網,接下來我們以grok轴咱、date和geoip這3個過濾插件作為例子汛蝙,來學習過濾插件的使用,其他過濾插件使用起來大同小異朴肺,大家自行擴展窖剑。

grok正則插件

grok正則捕獲是Logstash中將非結構化數(shù)據(jù)解析成結構化數(shù)據(jù)以便于查詢的最好工具,非常適合解析system log戈稿,web log西土, database log等任意的 log文件。

  • 內置正則表達式調用
    grok提供100多個常用正則表達式可供使用鞍盗,這100多個正則表達式定義在logstash/vendor/bundle/jruby/x.x/gems/logstash-patterns-core-xxx/patterns/grok-patterns文件中需了,想要靈活的匹配各種數(shù)據(jù),那么必須查看該文件般甲,大概了解grok提供了什么內置的正則表達式肋乍。調用它們的語法如下:%{SYNTAX:SEMANTIC}
    SYNTAX:表示內置的正則表達式的名稱
    SEMANTIC:表示在Event中創(chuàng)建該字段名來存儲匹配到的值
    例如:輸入的數(shù)據(jù)內容為“[debug] 127.0.0.1 - test log content”,我們想提取127.0.0.1這個IP地址敷存,那么可以使用以下語法來匹配:%{IP:client}墓造,將獲得“client: 127.0.0.1”的結果,該結果將成為Event的一個新的字段和字段值锚烦;如果你在捕獲數(shù)據(jù)時想進行數(shù)據(jù)類型轉換可以使用%{NUMBER:num:int}這種語法觅闽,默認情況下,所有的返回結果都是string類型涮俄,當前Logstash所支持的轉換類型僅有“int”和“float”蛉拙;

  • 自定義表達式調用
    與預定義表達式相同,你也可以將自定義的表達式配置到Logstash中彻亲,然后就可以像于定義的表達式一樣使用孕锄;以下是操作步驟說明:
    1、在Logstash根目錄下創(chuàng)建文件夾“patterns”苞尝,在“patterns”文件夾中創(chuàng)建文件“extra”(文件名稱無所謂畸肆,可自己選擇有意義的文件名稱);
    2野来、在文件“extra”中添加表達式恼除,格式:patternName regexp,名稱與表達式之間用空格隔開即可,例如:POSTFIX_QUEUEID [0-9A-F]{10,11}
    3豁辉、使用自定義的表達式時需要在grok插件配置“patterns_dir”屬性令野,屬性值為extra文件所在的目錄。

  • 配置示例
    日志文件http.log每行內容為:55.3.244.1 GET /index.html 15824 0.043 message-id:BEF25A72965
    grok表達式:表達式:%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
    配置文件內容:

    input {
    file {
      path => "/var/log/http.log"
    }
    }
    filter {
    grok {
      patterns_dir => ["./patterns"]
      match => {"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} message\-id:%{POSTFIX_QUEUEID:queueid}"}
    }
    }
    output{
      stdout{}
    }
    
    

    輸出結果:

    client: 55.3.244.1
    method: GET
    request: /index.html
    bytes: 15824
    duration: 0.043
    queueid: BEF25A72965
    
    
  • 示例解析
    1徽级、/var/log/http.log文件每一行的格式為55.3.244.1 GET /index.html 15824 0.043 message-id:BEF25A72965气破,到時候會把每一行數(shù)據(jù)封裝成一個Event。
    2餐抢、使用grok過濾插件處理該文件现使,match為匹配Event中的message,message就是該文件的一行數(shù)據(jù)旷痕,比如55.3.244.1 GET /index.html 15824 0.043 message-id:BEF25A72965碳锈。
    3、匹配message的內容使用%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} message\-id:%{POSTFIX_QUEUEID:queueid}表達式欺抗,把一條message拆成client售碳、method、request绞呈、bytes贸人、duration、queueid這6個字段佃声,并添加到Event中艺智。
    4、其中%{POSTFIX_QUEUEID:queueid}為自定義表達式的調用圾亏,其他5個是grok內置的表達式調用十拣,如果需要使用自定義表達式,則需要在grok插件配置patterns_dir屬性召嘶,屬性值數(shù)據(jù)類型為array父晶,就是自定義表達式定義的文件所在的目錄哮缺。
    5弄跌、在表達式中,特殊字符需要使用\來轉義尝苇,比如-铛只,""[]這些特殊字符糠溜,所以我們上面實例中的message-id數(shù)據(jù)在用表達式匹配的時候是使用了message\-id去匹配了淳玩。

  • 常用參數(shù)(空 = 同上)

參數(shù)名稱 數(shù)據(jù)類型 默認值 描述
match array {} 設置pattern數(shù)組
patterns_dir array [] 指定自定義的pattern文件存放目錄,Logstash在啟動時會讀取文件夾內所有文件非竿,但前提是這些文件的內容是按照grok語法語法來定義的表達式變量
patterns_files_glob string “*” 用于匹配patterns_dir中的文件
add_field
add_tag
id
break_on_match boolean true match字段存在多個pattern時蜕着,當?shù)谝粋€匹配成功后結束后面的匹配,如果想匹配所有的pattern,將此參數(shù)設置為false
keep_empty_captures boolean false 如果為true承匣,捕獲失敗的字段獎設置為空值
clean_run boolean false 是否應該保留先前的運行狀態(tài)
colums_charset hsah {} 特定列的字符編碼蓖乘。此選項將覆蓋指定列的原來charset配置
overwrite array [] 覆蓋字段內容: match=> { “message” => “%{SYSLOGBASE} %{DATA:message}” } overwrite=> [ “message” ]
periodic_flush boolean false 定期調用filter的flush方法
remove_field array [] 從Event中刪除指定字段: remove_field=> [ “fieldname” ]
remove_tag array [] 刪除“tags”中的值: remove_tag=> [ “tagname” ]
tag_on_failure array [“_grokparsefailure”] 當沒有匹配成功時,將此array添加到“tags”字段內
tag_on_timeout string “_groktimeout” 當匹配超時時韧骗,將此字符串內容添加到“tags”字段內
timeout_millis number 30000 設置單個match到超時時間嘉抒,單位:毫秒,如果設置為0袍暴,則不啟用超時設置

date時間處理插件

在講date插件的使用前些侍,我們需要先講解一下Logstash的時間記錄方式。在Logstash產生了一個Event對象的時候政模,會給該Event設置一個時間岗宣,字段為“@timestamp”,同時淋样,我們的日志內容一般也會有時間狈定,但是這兩個時間是不一樣的,因為日志內容的時間是該日志打印出來的時間习蓬,而“@timestamp”字段的時間是input插件接收到了一條數(shù)據(jù)并創(chuàng)建Event的時間纽什,所有一般來說的話“@timestamp”的時間要比日志內容的時間晚一點,因為Logstash監(jiān)控數(shù)據(jù)變化躲叼,數(shù)據(jù)輸入芦缰,創(chuàng)建Event導致的時間延遲。這兩個時間都可以使用枫慷,具體要根據(jù)自己的需求來定让蕾。
但是不管“@timestamp”字段的時間還是日志內容中的時間,其時間格式一般都不是我們想要的或听,所以我們就需要使用date插件探孝,把時間格式轉成我們想要的格式,比如:比如將Apr 17 09:32:01(MMM dd HH:mm:ss)轉換為04-17 09:32:01 (MM-dd HH:mm:ss)誉裆。

  • 配置示例:

    filter {
      date {
          match => ["timestamp","dd/MMM/YYYY:HH:mm:ss Z"]
      } 
    }
    
    
  • 示例解析
    timestamp是自定義的Event字段织鲸,用于存放通過grok解析到的日志內容中的時間,dd/MMM/YYYY:HH:mm:ss Z是日志內容中的時間格式妇拯,比如:16/Sep/2018:00:42:38 +0800再沧,匹配到了之后,date插件會默認把該時間轉成本地格式的時間斩跌,并且覆蓋掉Event為我們創(chuàng)建的[@timestamp](https://github.com/timestamp "@timestamp")字段中的時間绍些。

  • 常用參數(shù)(空 = 同上)

參數(shù)名稱 數(shù)據(jù)類型 默認值 描述
add_field
add_tag
periodic_flush
id
remove_field
remove_tag
remove_tag
tag_on_failure
match array [] 時間字段匹配,可自定多種格式耀鸦,直到匹配到或者匹配結束柬批,格式:[ field,formats… ],如:match=> [ “l(fā)ogdate”, “MMM dd yyyy HH:mm:ss”, “MMM d yyyy HH:mm:ss”, “ISO8601” ]
target string @timestamp 指定match匹配并且轉換為date類型的存儲位置(字段),默認覆蓋到“@timestamp
timezone string 指定時間格式化的時區(qū)

geoip插件

geoip插件是用于根據(jù)IP地址來確定該IP的歸屬地氮帐,默認的數(shù)據(jù)來源于Maxmind公司GeoLite2(https://dev.maxmind.com/geoip/geoip2/geolite2/)數(shù)據(jù)庫锻霎,該數(shù)據(jù)庫內嵌在geoip插件中,存儲位置為:logstash/vendor/bundle/jruby/x.x/gems/logstash-filter-geoip-x.x-java/vendor目錄中揪漩,數(shù)據(jù)庫文件名分別為GeoLite2-City.mmdbGeoLite2-ASN.mmdb旋恼。
從Maxmind的描述 ——“GeoLite2數(shù)據(jù)庫是免費的IP地理位置數(shù)據(jù)庫,可與MaxMind收費的GeoIP2數(shù)據(jù)庫相媲美奄容,但沒有GeoIP2準確”冰更。 有關更多詳細信息,請參閱GeoIP Lite2許可證昂勒。
Maxmind的商業(yè)數(shù)據(jù)庫GeoIP2(https://www.maxmind.com/en/geoip2-databases)也支持geoip插件蜀细。簡單來說就是兩個數(shù)據(jù)庫一個免費的一個商業(yè)的,免費的不如商業(yè)的地理位置精準戈盈。
如果您需要使用內嵌的GeoLite2以外的數(shù)據(jù)庫奠衔,則可以直接從Maxmind網站下載數(shù)據(jù)庫,并使用數(shù)據(jù)庫選項指定其位置(下面會講到如果使用數(shù)據(jù)選項)塘娶。

  • 配置示例:

    filter {
       if [remote_ip] !~ "^127\.|^192\.168\.|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[01]\.|^10\." {
          geoip {
               source => "remote_ip"
               database => "/usr/share/GeoIP/GeoLite2-Country.mmdb"
          }
      }
    }
    
    
  • 示例解析
    由于geoip使用的ip數(shù)據(jù)庫不能匹配私網地址归斤,所以在使用geoip插件前,先判斷一下ip地址是否為私網ip刁岸,如果不是脏里,這使用geoip插件。source為指定一個ip地址虹曙,為其查詢歸屬地等信息迫横,remote_ip為Event中存儲ip地址的自定義字段,database為IP地址數(shù)據(jù)庫所在的位置酝碳,不指定的話矾踱,使用geoip插件內置的GeoLite2-City默認數(shù)據(jù)庫。

  • 常用參數(shù)(空 = 同上)

參數(shù)名稱 數(shù)據(jù)類型 默認值 描述
add_field
add_tag
periodic_flush
id
remove_field
remove_tag
remove_tag
source string 要通過geoip插件查詢的IP地址所在的字段
tag_on_failure array [“_geoip_lookup_failure”] 如果ip地址查詢不到地理位置信息疏哗,這在標簽中添加該值
cache_size number 1000 由于geoip查詢很耗時間呛讲,所以默認情況下,查詢過一次的ip地址會緩存起來沃斤,目前geoip沒有內存數(shù)據(jù)驅逐策略圣蝎,設置的緩存用完了就不能在緩存新的數(shù)據(jù)了刃宵,所以緩存需要設置一個合理值衡瓶,太小查詢性能增加不明顯,太大就很占用服務器的內存
target string “geoip” 把IP地址匹配到的信息放到該字段中
database string 使用的Maxmind數(shù)據(jù)庫文件的路徑牲证。 如果不指定哮针,則默認數(shù)據(jù)庫是GeoLite2-City。 GeoLite2-City,GeoLite2-Country十厢,GeoLite2-ASN是Maxmind支持的免費數(shù)據(jù)庫等太。 GeoIP2-City,GeoIP2-ISP蛮放,GeoIP2-Country是Maxmind支持的商業(yè)數(shù)據(jù)庫缩抡。
default_database_type string “City” 該字段的值只能接受”City”和”ASN”,GeoLite2數(shù)據(jù)庫下細分為GeoLite2-City包颁,GeoLite2-ASN和GeoLite2-Country瞻想,geoip插件內嵌了GeoLite2-City和GeoLite2-ASN,默認使用GeoLite2-City娩嚼,如果需要使用GeoLite2-ASN蘑险,則需設置該字段并設置為ASN
fields array 要包含在Event中的geoip字段的信息(每個數(shù)據(jù)庫的信息都不一樣)。 默認情況下岳悟,所有信息都會列出佃迄。對于內置的GeoLite2-City數(shù)據(jù)庫,可以使用以下信息:city_name, continent_code, country_code2, country_code3, country_name, dma_code, ip, latitude, longitude, postal_code, region_name 和 timezone

常用輸出插件

經過以上的學習贵少,我們已經學習了Logstash三大主件中的其中兩個了呵俏,分別是input和filter,那現(xiàn)在我們就來學習最后一個組件:output滔灶。
每個數(shù)據(jù)流經過input和filter后柴信,最終要由output輸出,以上的內容我們都是使用最簡單的標準輸出:stdout宽气,把數(shù)據(jù)輸出到顯示器随常,但實際上stdout只是Logstash的其中一個輸出插件而已,它的常用輸出插件有:Elasticsearch萄涯,Redis绪氛,F(xiàn)ile,TCP等等涝影,更多的輸出插件大家可以看Logstash官網枣察,接下來我們以Elasticsearch和Redis輸出插件作為例子,來學習輸出插件的使用燃逻,其他過濾插件使用起來大同小異序目,大家自行擴展。

elasticsearch輸出插件

用于將Event信息寫入到Elasticsearch中伯襟,官方推薦插件猿涨,ELK技術棧必備插件。

  • 配置示例

    output {
      elasticsearch {
          hosts => ["127.0.0.1:9200"]
          index => "logstash-%{type}-%{+YYYY.MM.dd}"
          document_type => "%{type}"
      }
    }
    
    
  • 常用參數(shù)(空 = 同上)

參數(shù)名稱 數(shù)據(jù)類型 默認值 描述
add_field
add_tag
periodic_flush
flush_size
id
remove_field
remove_tag
codec
enable_metric
hosts array elasticsearch服務器集群所在的地址
index string [無] 文檔索引庫名稱
document_type string [無] 文檔類型姆怪,不指定的話叛赚,類型名為“doc”
document_id string [無] 文檔id澡绩,不指定的話,由elasticsearch自動生成
user string [無] elasticsearch用戶名
password string [無] elasticsearch集群訪問密碼
parent string “nil” 為文檔子節(jié)點指定父節(jié)點的id
pool_max number 1000 elasticsearch最大連接數(shù)
pool_max_per_route number 100 每個“endpoint”的最大連接數(shù)
proxy string 代理URL
template string 設置自定義的文檔映射模版存放路徑
template_name string 設置使用的默版名稱
template_overwrite boolean false 是否始終覆蓋現(xiàn)有模版
manage_template boolean true 是否啟用elasticsearch模版俺附,Logstash自帶一個模版肥卡,但是只有名稱匹配“l(fā)ogstash-*”的索引才會應用該默版
parameters hash 添加到elasticsearch URL后面的參數(shù)鍵值對
timeout number 60 網絡超時時間

redis輸出插件

用于將Event寫入Redis中進行緩存,由于Redis數(shù)據(jù)庫是先把數(shù)據(jù)存在內存的事镣,所以效率會非常高步鉴,是一個常用的logstash輸出插件

  • 配置示例

    output {
      redis {
          host => ["127.0.0.1"]
          port => 6379
          data_type => "list"
          key => "logstash-list"
      }
    }
    
    
  • 常用參數(shù)(空 = 同上)

參數(shù)名稱 數(shù)據(jù)類型 默認值 描述
add_field
add_tag
periodic_flush
flush_size
id
remove_field
remove_tag
codec
enable_metric
hosts array [“127.0.0.1”] redis服務列表,如果配置多個璃哟,將隨機選擇一個唠叛,如果當前的redis服務不可用,將選擇下一個
port number 6379 文檔索引庫名稱
db number 0 使用的redis數(shù)據(jù)庫編號沮稚,默認使用0號數(shù)據(jù)庫
password string redis的密碼
data_type string 存儲在redis中的數(shù)據(jù)類型艺沼,只能使用“l(fā)ist”和“channel”這兩個值。如果使用“l(fā)ist”蕴掏,將采用“RPUSH”操作障般,如果是“channel”,將采用“PUBLISH”操作
key string 給redis設置一個key盛杰,來存儲收集到的數(shù)據(jù)庫
batch boolean false 是否啟用redis的batch模式挽荡,僅在data_type=”list”時有效
batch_events number 50 batch大小,batch達到此大小時執(zhí)行“RPUSH”

后記

那到這里即供,我們已經介紹了Logstash配置文件的語法和常用插件的配置方式了定拟,這些常用的插件都是使用頻率非常高的,所有我們后面需要來做一個Logstash的實戰(zhàn)案例逗嫡,綜合運用我們這章所學的內容青自。

想獲取更多技術視頻,請前往叩丁狼官網:http://www.wolfcode.cn/openClassWeb_listDetail.html

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末驱证,一起剝皮案震驚了整個濱河市延窜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抹锄,老刑警劉巖逆瑞,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伙单,居然都是意外死亡获高,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門吻育,熙熙樓的掌柜王于貴愁眉苦臉地迎上來念秧,“玉大人,你說我怎么就攤上這事扫沼〕龅” “怎么了庄吼?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵缎除,是天一觀的道長严就。 經常有香客問我,道長器罐,這世上最難降的妖魔是什么梢为? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮轰坊,結果婚禮上铸董,老公的妹妹穿的比我還像新娘。我一直安慰自己肴沫,他們只是感情好粟害,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颤芬,像睡著了一般悲幅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上站蝠,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天汰具,我揣著相機與錄音,去河邊找鬼菱魔。 笑死留荔,一個胖子當著我的面吹牛,可吹牛的內容都是我干的澜倦。 我是一名探鬼主播聚蝶,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼藻治!你這毒婦竟也來了既荚?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤栋艳,失蹤者是張志新(化名)和其女友劉穎恰聘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吸占,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡晴叨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了矾屯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兼蕊。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖件蚕,靈堂內的尸體忽然破棺而出孙技,到底是詐尸還是另有隱情产禾,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布牵啦,位于F島的核電站亚情,受9級特大地震影響,放射性物質發(fā)生泄漏哈雏。R本人自食惡果不足惜楞件,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裳瘪。 院中可真熱鬧土浸,春花似錦、人聲如沸彭羹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽派殷。三九已至还最,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愈腾,已是汗流浹背憋活。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留虱黄,地道東北人悦即。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像橱乱,于是被迫代替她去往敵國和親辜梳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容