前言
在第九章節(jié)中,我們已經(jīng)安裝好Logstash組件了允乐,并且啟動實例測試它的數(shù)據(jù)輸入和輸出弃舒,但是用的是最簡單的控制臺標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出花履,那這節(jié)我們就來深入的學(xué)習(xí)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
配置文件語法
文件結(jié)構(gòu)
我們剛剛知道逾苫,啟動參數(shù)可以指定一個配置文件,那么接下來就有必要來了解一下配置文件的結(jié)構(gòu):
Logstash通過{}來定義區(qū)域枚钓,區(qū)域內(nèi)可以定義插件铅搓,一個區(qū)域內(nèi)可以定義多個插件,如下:
input {
#標(biāo)準(zhǔn)輸入源插件
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"]
....
}
.....
}
我們先大概了解一下配置文件的結(jié)構(gòu)秘噪,接下來我們再詳細看這些插件的配置狸吞。
數(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結(jié)構(gòu)構(gòu)成脓斩,Event的屬性被稱之為字段木西,如果你想在配置文件中引用這些字段,只需要把字段的名字寫在中括號[]
里就行了随静,如[type]
八千,對于嵌套字段每層字段名稱都寫在[]
里就可以了,比如:[tags][type]
燎猛;除此之外恋捆,對于Logstash的arrag類型支持下標(biāo)與倒序下表,如:[tags][type][0]
和[tags][type][-1]
以下的內(nèi)容就是一個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愤钾、()(復(fù)合表達式), !()(對復(fù)合表達式結(jié)果取反)
例如以下的條件判斷:
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)境變量不存在時可以設(shè)置默認值葬凳,例如:
export TCP_PORT=12345
input {
tcp {
port => "${TCP_PORT:54321}"
}
}
常用輸入插件
在第九章中绰垂,我們已經(jīng)使用是標(biāo)準(zhǔn)輸入室奏,以鍵盤的輸入數(shù)據(jù)作為Logstash數(shù)據(jù)源火焰,但實際上我們也知道,Logstash的數(shù)據(jù)源有很多胧沫,每種數(shù)據(jù)源都有相應(yīng)的配置昌简,在Logstash中,這些數(shù)據(jù)源的相應(yīng)配置稱為插件绒怨,我們常用的輸入插件有:file纯赎、jdbc、redis南蹂、tcp犬金、syslog,這些輸入插件會監(jiān)聽數(shù)據(jù)源的數(shù)據(jù),如果新增數(shù)據(jù)晚顷,將數(shù)據(jù)封裝成Event進程處理或者傳遞峰伙,更多的輸入插件大家可以看Logstash官網(wǎng),接下來我們以file和jdbc兩個輸入插件作為例子该默,來學(xué)習(xí)輸入插件的使用瞳氓,其他輸入插件使用起來大同小異,大家自行擴展栓袖。
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)控的文件等當(dāng)前inode和byteoffset |
sincedb_write_interval | number | 15 | 間隔多少秒寫一次sincedb文件 |
start_position | string | "end" | 值為“beginning”和“end”塔橡,從文件等開頭還是結(jié)尾讀取文件內(nèi)容梅割,默認是結(jié)尾,如果需要導(dǎo)入文件中的老數(shù)據(jù)葛家,可以設(shè)置為“beginning”户辞,該選項只在第一次啟動logstash時有效,如果文件已經(jīng)存在于sincedb的記錄內(nèi)癞谒,則此配置無效 |
stat_interval | number | 1 | 間隔多少秒檢查一下文件是否被修改底燎,加大此參數(shù)將降低系統(tǒng)負載,但是增加了發(fā)現(xiàn)新日志的間隔時間 |
close_older | number | 3600 | 設(shè)置文件多少秒內(nèi)沒有更新就關(guān)掉對文件的監(jiān)聽 |
codec | string | “plain” | 輸入數(shù)據(jù)之后對數(shù)據(jù)進行解碼 |
add_field | hash | {} | 用于向Event中添加字段 |
delimiter | string | “\n” | 文件內(nèi)容的行分隔符弹砚,默認按照換行進行Event對象封裝双仍,也就是說一行數(shù)據(jù)就一個Event對象 |
discover_interval | number | 15 | 間隔多少秒查看一下path匹配的路徑下是否有新文件產(chǎn)生 |
exclude | array | 無 | path匹配的文件中指定例外,如:path => “/var/log/“桌吃;exclude =>”*.gz” |
id | string | 無 | 區(qū)分兩個相同類型的插件朱沃,比如兩個filter |
ignore_older | number | 無 | 忽略歷史修改,如果設(shè)置3600秒茅诱,logstash只會發(fā)現(xiàn)一小時內(nèi)被修改過的文件逗物,一小時之前修改的文件的變化不會被讀取,如果再次修改該文件瑟俭,所有的變化都會被讀取翎卓,默認被禁用 |
tags | array | 無 | 可以在Event中增加標(biāo)簽,以便于在后續(xù)的處理流程中使用 |
jdbc輸入插件
該插件可以使用jdbc把關(guān)系型數(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連接驅(qū)動的jar包位置 |
jdbc_driver_class | string | 無 | jdbc驅(qū)動類 |
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 | {} | 設(shè)置SQL查詢語句的參數(shù) |
use_column_value | boolean | false | 是否需要在程序中使用查詢出來的列 |
tracking_column | string | 無 | 需要在程序中使用哪個查詢出來的列 |
clean_run | boolean | false | 是否應(yīng)該保留先前的運行狀態(tài) |
colums_charset | hsah | {} | 特定列的字符編碼摆寄。此選項將覆蓋指定列的原來charset配置 |
schedule | string | 無 | 定時執(zhí)行數(shù)據(jù)讀取的任務(wù)失暴,使用cornexpression表達式:分坯门、時、天逗扒、月田盈、年,全部為*默認含義為每分鐘執(zhí)行任務(wù)缴阎,該cornexpression表達式于Linux系統(tǒng)的crontab使用方式一樣允瞧,如果不會使用cornexpression表達式,可以查看crontab相關(guān)文檔蛮拔。不設(shè)置的話述暂,只執(zhí)行一次數(shù)據(jù)的讀取 |
lowercase_column_names | boolean | true | 是否需要把查詢出來的列名轉(zhuǎn)換成小寫,也就是說即使列名是駝峰的建炫,也會轉(zhuǎn)成全部都是小寫的畦韭,默認為轉(zhuǎn)小寫,如果不需要肛跌,則設(shè)置為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威力如此強大的重要因素艺配,過濾器插件主要處理流經(jīng)當(dāng)前Logstash的事件信息,可以添加字段衍慎、移除字段转唉、轉(zhuǎn)換字段類型,通過正則表達式切分數(shù)據(jù)等稳捆,也可以根據(jù)條件判斷來進行不同的數(shù)據(jù)處理方式赠法。我們常用的過濾插件有:grok、date乔夯、geoip砖织、mutate、json末荐、Split侧纯、ruby,更多的過濾插件大家可以看Logstash官網(wǎng)甲脏,接下來我們以grok眶熬、date和geoip這3個過濾插件作為例子,來學(xué)習(xí)過濾插件的使用剃幌,其他過濾插件使用起來大同小異聋涨,大家自行擴展。
grok正則插件
grok正則捕獲是Logstash中將非結(jié)構(gòu)化數(shù)據(jù)解析成結(jié)構(gòu)化數(shù)據(jù)以便于查詢的最好工具负乡,非常適合解析system log,web log脊凰, database log等任意的 log文件抖棘。
內(nèi)置正則表達式調(diào)用
grok提供100多個常用正則表達式可供使用关带,這100多個正則表達式定義在logstash/vendor/bundle/jruby/x.x/gems/logstash-patterns-core-xxx/patterns/grok-patterns
文件中袍祖,想要靈活的匹配各種數(shù)據(jù),那么必須查看該文件,大概了解grok提供了什么內(nèi)置的正則表達式滞伟。調(diào)用它們的語法如下:%{SYNTAX:SEMANTIC}
SYNTAX:表示內(nèi)置的正則表達式的名稱
SEMANTIC:表示在Event中創(chuàng)建該字段名來存儲匹配到的值
例如:輸入的數(shù)據(jù)內(nèi)容為“[debug] 127.0.0.1 - test log content”,我們想提取127.0.0.1這個IP地址鹤盒,那么可以使用以下語法來匹配:%{IP:client}
国章,將獲得“client: 127.0.0.1”的結(jié)果,該結(jié)果將成為Event的一個新的字段和字段值芙盘;如果你在捕獲數(shù)據(jù)時想進行數(shù)據(jù)類型轉(zhuǎn)換可以使用%{NUMBER:num:int}這種語法驯用,默認情況下,所有的返回結(jié)果都是string類型儒老,當(dāng)前Logstash所支持的轉(zhuǎn)換類型僅有“int”和“float”蝴乔;自定義表達式調(diào)用
與預(yù)定義表達式相同,你也可以將自定義的表達式配置到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每行內(nèi)容為:55.3.244.1 GET /index.html 15824 0.043 message-id:BEF25A72965
grok表達式:表達式:%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
配置文件內(nèi)容:
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{}
}
輸出結(jié)果:
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的內(nèi)容使用%{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}
為自定義表達式的調(diào)用芝囤,其他5個是grok內(nèi)置的表達式調(diào)用似炎,如果需要使用自定義表達式,則需要在grok插件配置patterns_dir
屬性悯姊,屬性值數(shù)據(jù)類型為array羡藐,就是自定義表達式定義的文件所在的目錄。
5挠轴、在表達式中传睹,特殊字符需要使用\
來轉(zhuǎn)義,比如-
岸晦,""
欧啤,[]
這些特殊字符,所以我們上面實例中的message-id
數(shù)據(jù)在用表達式匹配的時候是使用了message\-id
去匹配了启上。 - 常用參數(shù)(空 = 同上)
參數(shù)名稱 | 數(shù)據(jù)類型 | 默認值 | 描述 |
---|---|---|---|
match | array | {} | 設(shè)置pattern數(shù)組 |
patterns_dir | array | [] | 指定自定義的pattern文件存放目錄邢隧,Logstash在啟動時會讀取文件夾內(nèi)所有文件,但前提是這些文件的內(nèi)容是按照grok語法語法來定義的表達式變量 |
patterns_files_glob | string | "*" | 用于匹配patterns_dir中的文件 |
add_field | |||
add_tag | |||
id | |||
break_on_match | boolean | true | match字段存在多個pattern時冈在,當(dāng)?shù)谝粋€匹配成功后結(jié)束后面的匹配倒慧,如果想匹配所有的pattern,將此參數(shù)設(shè)置為false |
keep_empty_captures | boolean | false | 如果為true包券,捕獲失敗的字段獎設(shè)置為空值 |
clean_run | boolean | false | 是否應(yīng)該保留先前的運行狀態(tài) |
colums_charset | hsah | {} | 特定列的字符編碼纫谅。此選項將覆蓋指定列的原來charset配置 |
overwrite | array | [] | 覆蓋字段內(nèi)容: match=> { “message” => “%{SYSLOGBASE} %{DATA:message}” } overwrite=> [ “message” ] |
periodic_flush | boolean | false | 定期調(diào)用filter的flush方法 |
remove_field | array | [] | 從Event中刪除指定字段: remove_field=> [ “fieldname” ] |
remove_tag | array | [] | 刪除“tags”中的值: remove_tag=> [ “tagname” ] |
tag_on_failure | array | [“_grokparsefailure”] | 當(dāng)沒有匹配成功時,將此array添加到“tags”字段內(nèi) |
tag_on_timeout | string | “_groktimeout” | 當(dāng)匹配超時時溅固,將此字符串內(nèi)容添加到“tags”字段內(nèi) |
timeout_millis | number | 30000 | 設(shè)置單個match到超時時間付秕,單位:毫秒,如果設(shè)置為0侍郭,則不啟用超時設(shè)置 |
date時間處理插件
在講date插件的使用前询吴,我們需要先講解一下Logstash的時間記錄方式。在Logstash產(chǎn)生了一個Event對象的時候亮元,會給該Event設(shè)置一個時間猛计,字段為“@timestamp”,同時爆捞,我們的日志內(nèi)容一般也會有時間奉瘤,但是這兩個時間是不一樣的,因為日志內(nèi)容的時間是該日志打印出來的時間嵌削,而“@timestamp”字段的時間是input插件接收到了一條數(shù)據(jù)并創(chuàng)建Event的時間毛好,所有一般來說的話“@timestamp”的時間要比日志內(nèi)容的時間晚一點望艺,因為Logstash監(jiān)控數(shù)據(jù)變化苛秕,數(shù)據(jù)輸入肌访,創(chuàng)建Event導(dǎo)致的時間延遲。這兩個時間都可以使用艇劫,具體要根據(jù)自己的需求來定吼驶。
但是不管“@timestamp”字段的時間還是日志內(nèi)容中的時間,其時間格式一般都不是我們想要的店煞,所以我們就需要使用date插件蟹演,把時間格式轉(zhuǎn)成我們想要的格式,比如:比如將Apr 17 09:32:01(MMM dd HH:mm:ss)轉(zhuǎn)換為04-17 09:32:01 (MM-dd HH:mm:ss)
顷蟀。
- 配置示例:
filter {
date {
match => ["timestamp","dd/MMM/YYYY:HH:mm:ss Z"]
}
}
- 示例解析
timestamp
是自定義的Event字段酒请,用于存放通過grok解析到的日志內(nèi)容中的時間,dd/MMM/YYYY:HH:mm:ss Z
是日志內(nèi)容中的時間格式鸣个,比如:16/Sep/2018:00:42:38 +0800羞反,匹配到了之后,date插件會默認把該時間轉(zhuǎn)成本地格式的時間囤萤,并且覆蓋掉Event為我們創(chuàng)建的@timestamp
字段中的時間昼窗。 - 常用參數(shù)(空 = 同上)
參數(shù)名稱 | 數(shù)據(jù)類型 | 默認值 | 描述 |
---|---|---|---|
add_field | |||
add_tag | |||
periodic_flush | |||
id | |||
remove_field | |||
remove_tag | |||
remove_tag | |||
tag_on_failure | |||
match | array | [] | 時間字段匹配,可自定多種格式涛舍,直到匹配到或者匹配結(jié)束澄惊,格式:[ field,formats… ],如:match=> [ “l(fā)ogdate”, “MMM dd yyyy HH:mm:ss”, “MMM d yyyy HH:mm:ss”, “ISO8601” ] |
target | string | “@timestamp” | 指定match匹配并且轉(zhuǎn)換為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ù)庫內(nèi)嵌在geoip插件中没佑,存儲位置為:logstash/vendor/bundle/jruby/x.x/gems/logstash-filter-geoip-x.x-java/vendor
目錄中毕贼,數(shù)據(jù)庫文件名分別為GeoLite2-City.mmdb
和GeoLite2-ASN.mmdb
。
從Maxmind的描述 ----“GeoLite2數(shù)據(jù)庫是免費的IP地理位置數(shù)據(jù)庫图筹,可與MaxMind收費的GeoIP2數(shù)據(jù)庫相媲美帅刀,但沒有GeoIP2準(zhǔn)確”。 有關(guān)更多詳細信息远剩,請參閱GeoIP Lite2許可證扣溺。
Maxmind的商業(yè)數(shù)據(jù)庫GeoIP2(https://www.maxmind.com/en/geoip2-databases)也支持geoip插件。簡單來說就是兩個數(shù)據(jù)庫一個免費的一個商業(yè)的瓜晤,免費的不如商業(yè)的地理位置精準(zhǔn)锥余。
如果您需要使用內(nèi)嵌的GeoLite2以外的數(shù)據(jù)庫,則可以直接從Maxmind網(wǎng)站下載數(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ù)庫不能匹配私網(wǎng)地址嘲恍,所以在使用geoip插件前,先判斷一下ip地址是否為私網(wǎng)ip雄驹,如果不是佃牛,這使用geoip插件。source為指定一個ip地址医舆,為其查詢歸屬地等信息俘侠,remote_ip為Event中存儲ip地址的自定義字段,database為IP地址數(shù)據(jù)庫所在的位置蔬将,不指定的話爷速,使用geoip插件內(nèi)置的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地址查詢不到地理位置信息霞怀,這在標(biāo)簽中添加該值 |
cache_size | number | 1000 | 由于geoip查詢很耗時間惫东,所以默認情況下,查詢過一次的ip地址會緩存起來毙石,目前geoip沒有內(nèi)存數(shù)據(jù)驅(qū)逐策略廉沮,設(shè)置的緩存用完了就不能在緩存新的數(shù)據(jù)了,所以緩存需要設(shè)置一個合理值胁黑,太小查詢性能增加不明顯废封,太大就很占用服務(wù)器的內(nèi)存 |
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插件內(nèi)嵌了GeoLite2-City和GeoLite2-ASN,默認使用GeoLite2-City陈症,如果需要使用GeoLite2-ASN蔼水,則需設(shè)置該字段并設(shè)置為ASN |
fields | array | 無 | 要包含在Event中的geoip字段的信息(每個數(shù)據(jù)庫的信息都不一樣)。 默認情況下录肯,所有信息都會列出趴腋。對于內(nèi)置的GeoLite2-City數(shù)據(jù)庫,可以使用以下信息:city_name, continent_code, country_code2, country_code3, country_name, dma_code, ip, latitude, longitude, postal_code, region_name 和 timezone |
常用輸出插件
經(jīng)過以上的學(xué)習(xí),我們已經(jīng)學(xué)習(xí)了Logstash三大主件中的其中兩個了优炬,分別是input和filter颁井,那現(xiàn)在我們就來學(xué)習(xí)最后一個組件:output。
每個數(shù)據(jù)流經(jīng)過input和filter后蠢护,最終要由output輸出雅宾,以上的內(nèi)容我們都是使用最簡單的標(biāo)準(zhǔn)輸出:stdout,把數(shù)據(jù)輸出到顯示器糊余,但實際上stdout只是Logstash的其中一個輸出插件而已秀又,它的常用輸出插件有:Elasticsearch单寂,Redis贬芥,F(xiàn)ile,TCP等等宣决,更多的輸出插件大家可以看Logstash官網(wǎng)蘸劈,接下來我們以Elasticsearch和Redis輸出插件作為例子,來學(xué)習(xí)輸出插件的使用尊沸,其他過濾插件使用起來大同小異威沫,大家自行擴展。
elasticsearch輸出插件
用于將Event信息寫入到Elasticsearch中洼专,官方推薦插件棒掠,ELK技術(shù)棧必備插件。
- 配置示例
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服務(wù)器集群所在的地址 |
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 | 無 | 設(shè)置自定義的文檔映射模版存放路徑 |
template_name | string | 無 | 設(shè)置使用的默版名稱 |
template_overwrite | boolean | false | 是否始終覆蓋現(xiàn)有模版 |
manage_template | boolean | true | 是否啟用elasticsearch模版雾袱,Logstash自帶一個模版,但是只有名稱匹配“l(fā)ogstash-*”的索引才會應(yīng)用該默版 |
parameters | hash | 無 | 添加到elasticsearch URL后面的參數(shù)鍵值對 |
timeout | number | 60 | 網(wǎng)絡(luò)超時時間 |
redis輸出插件
用于將Event寫入Redis中進行緩存官还,由于Redis數(shù)據(jù)庫是先把數(shù)據(jù)存在內(nèi)存的芹橡,所以效率會非常高,是一個常用的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服務(wù)列表望伦,如果配置多個林说,將隨機選擇一個,如果當(dāng)前的redis服務(wù)不可用屯伞,將選擇下一個 |
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設(shè)置一個key剑梳,來存儲收集到的數(shù)據(jù)庫 |
batch | boolean | false | 是否啟用redis的batch模式唆貌,僅在data_type=”list”時有效 |
batch_events | number | 50 | batch大小,batch達到此大小時執(zhí)行“RPUSH” |
后記
那到這里垢乙,我們已經(jīng)介紹了Logstash配置文件的語法和常用插件的配置方式了锨咙,這些常用的插件都是使用頻率非常高的,所有我們后面需要來做一個Logstash的實戰(zhàn)案例追逮,綜合運用我們這章所學(xué)的內(nèi)容酪刀。