logstash上篇已經(jīng)說過了是用于在elk系統(tǒng)中是充當一個管道的作用,用來將filebeat中的數(shù)據(jù)傳輸?shù)絜lasticsearch中派哲。
其實logstash還可以做一件事掺喻,設(shè)置elasticsearch的index储矩、targer、field(索引持隧、目標逃片、字段)屡拨,你可以做一個簡單的理解索引是數(shù)據(jù)庫褥实,目標是表,字段就是字段咯损离,那么設(shè)置這些有什么用呢?
1.搜索日志的時候可以用了做查詢條僻澎;2.可以用kibana做分析圖表。
修改配置logstash的文件
filter {
??????? if [message] =~ "Hibernate:*" {
??????????????? drop { }
??????? }
??????? if "response" in [message] {
??????????????? grok {
??????????????????????? match => {"message" => "%{TIMESTAMP_ISO8601}? %{LOGLEVEL} %{NUMBER} --- \[%{DATA}\] %{GREEDYDATA}: client\[%{DATA:device}\] response: {PATH=%{UNIXPATH:uri}, HTTP_METHOD=%{WORD}}, use time: %{NUMBER:usetime_0:int}ms"}
??????????????? }
??????? }
??????? if ":url:http:" in [message] {
??????????????? grok {
??????????????????????? match => {"message" => "%{TIMESTAMP_ISO8601}? %{LOGLEVEL} %{NUMBER} --- \[%{DATA}\] %{GREEDYDATA}: 資金存管接口-\[%{DATA:requestid}\]-響應(yīng):url:http://%{URIHOST:urihost}%{URIPATH:uripath} , result:%{GREEDYDATA:param}, 耗時:%{NUMBER:usetime:int}ms"
??????????????????????? }
??????????????? }
??????? }
??????? json {
??????????????? source => "param"
??????????????? target => "param_json"
??????? }
??????? if [param] {
??????????????? ruby {
??????????????????????? code => "
??????????????????????? kv=event.get('param_json')
??????????????????????? kv.each do |k,v|
??????????????????????????????? if k != 'data'
??????????????????????????????????????? event.set(k,v)
??????????????????????????????? end
??????????????????????? end"
??????????????????????? remove_field => ["param_json","param"]
??????????????????????? remove_tag => ["param_json","param"]
??????????????? }
??????? }
}
filter中有很多插件,也有自己的語法
logstash中有很多默認的field秉氧,message是日志文件的內(nèi)容
grok是用來設(shè)置日志格式來提取field,利用%{XXXX:a}這種語法
“XXXX”是一套封裝好的匹配格式參考:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
”a“就是自定義的字段名稱(注意不要與默認的字段名稱重復(fù))谬运,還可以在”a“后加上”:int“這個是設(shè)置字段格式(默認的是string),官網(wǎng)上說只支持int和float兩種梆暖。
kibana中有一個功能叫Grok Debugger可以很方便的調(diào)試
這一天有個日志文件的分享需求,解析日志文件中json中的某個公參字段厚掷,其他的字段就很隨意了级解,沒有任何價值了
json配置source設(shè)置需要解析的字段名稱冒黑,target是別名
ruby是一種一直高級語言勤哗,作為logstash插件可以更加靈活的過濾操作日志文件
ruby {
code => "
kv=event.get('param_json')
kv.each do |k,v|
if k != 'data'
event.set(k,v)
end
end"
remove_field => ["param_json","param"]
remove_tag => ["param_json","param"]
}
event是logstash中的內(nèi)置對象,set(“字段名稱”,"值")芒划,其中的值一般情況都是另一個字段的別名冬竟,不用擔心會出現(xiàn)兩個不同名字的相同內(nèi)容的字段,使用每個插件中都有的remove_field就可以去掉泵殴。
作為高級語言if for 語句是必不可少的,因此你可以靈活的個性的操作你所需要的字段笑诅。
總結(jié)
在從沒聽過elk到能夠熟練的使用kibana制作統(tǒng)計圖表,我花了將近一個月時間(天資愚鈍+工作繁忙)弦叶,其中走了不少的彎路,作為一名開發(fā)對linux系統(tǒng)的不熟悉成了最大的瓶頸湾蔓,期間不止一次的想放棄,最后還是興趣和好奇驅(qū)使著我克服了這些默责。
其實elk中還有很多其他公司開發(fā)的一些好用的插件可以使用(開源的優(yōu)勢),比如elasticAlert可以實時監(jiān)控并發(fā)送郵件進行報警桃序,后來elastic又出來了一種插件watcher烂瘫,不過得安裝listen