logstash 介紹

logstash

它一個有jruby語言編寫的運行在java虛擬機上的具有收集
分析轉發數據流功能的工具

  • 能集中處理各種類型的數據
  • 能標準化不通模式和格式的數據
  • 能快速的擴展自定義日志的格式
  • 能非常方便的添加插件來自定義數據

安裝logstash

  • 安裝jdk
  • rpm包安裝

logstash運行參數

  • -f 制定配置文件,目錄或者通配符加載配置信息
  • -e 用于指定字符串輸入
  • -w 指定filterworkers的數量,指定logstash工作線程數量
  • -l 指定logstash默認日志寫入文件中,默認是控制臺輸出
  • --quiet 靜默模式 僅僅只有error級別log輸出
  • --verbose info級別的log輸出
  • --debug debug級別日志的log輸出
  • --V 查看logstash版本
  • -p 可以寫自己的插件,然后指定好路徑使用她們
  • -t 測試logstash讀取到的配置文件語法能否正常解析

配置語法

  • input
  • filter
  • output

語法格式

  • 區域
    • 用{}定義區域
    • 一個區域可以定義多個插件
  • 數據類型
    • boolen: 布爾 a => true
    • Bytes: 字節 a => "10MiB"
    • Strings:字符串 a => "hello world"
    • Number: 數值 a => 1024
    • Array: 數組 match => ["datatime","UNIX","ISO8601"]
    • Hash: 哈希 options => { key1 => "value1",key2 => "value2" }
    • 編碼解碼: codec: codec => "json"
    • 密碼型: my_passwd => "password"
    • 路徑: my_path => "/tmp/logstash"
    • 注釋: #
  • 條件判斷
    • ==,!= ,< ,> ,<= ,>=
    • =~
    • in,not in
    • and ,or , nand, xor
    • (), !()
    • if expression {
      } else if expression {
      ...
      } else {
      ...
      }
  • 字段引用
    • %{[response][status]}

logstash插件

  • inputs 輸入
  • codecs 解碼
  • filters 過濾
  • outputs 輸出

logstash-plugins

logstash inputs 配置

  • stdin
  • file
  • tcp/udp
  • rsyslog
  • redis
  • kafka
  • beats
input {
    stdin {
    } 
}
outpu {
    stdout {
    } 
}

stdin

stdin {
    add_field => { "a" => "b" }
    codec => "json"
    tags => "["a","b"]"
    type => "my_type"

} 

file

  • close_older number No
  • delimiter string No
  • discover_interval number No
  • exclude array No
  • ignore_older number No
  • max_open_files number No
  • path array Yes
  • sincedb_path string No
  • sincedb_write_interval number No
  • start_position string, one of ["beginning", "end"] No
  • stat_interval number No
input {
    file {
        path => ["/var/log/nginx/access.log"] 
        type => "nginx-log"  
        start_position => 'beginning'
    } 
} 
output {
    stdout {} 
}


tcp/udp

input {
    tcp {
        port => 9090 
        mode => "server"
        ssl_enable => false 
        
    }
}
output {
    stdout {} 
    
} 
nc 127.0.0.1:9090 < data

input {
    udp {
        host => "127.0.0.1" 
        port => 5050        
    }   
} 
output {
    stdout {} 
    
} 

#python udp客戶端
import socket 
port = 5050
host = "127.0.0.1"
file_input = raw_input("\033[32;1mPlease input: \033[0m")
s = socket.socket(socket.AF_INET,socket_SOCK_DGRAM) 
s.sendto(file_input,(host,port))

rsyslog

input {
    syslog {
        host => "127.0.0.1" 
        type => "syslog" 
        port => 518 
        
    } 

} 
output {
    stdout { } 

} 
###
vim /etc/rsyslog.conf 
*.* @@127.0.0.1:518
### 
logger 命令模擬發送日志

編碼

# plain
input {
    stdin {
        codec => 'plain'
    } 
} 
output {
    stdout { }  
} 
# json
input {
    stdin {} 

} 
output {
    stdout {
        codec => "json" 
    }

} 
#json_lines
input {
    tcp {
        port => 12345
        host => '127.0.0.1'
        codec => json_lines 
    
    }
}
output {
    stdout { } 
}
#rubydebug 
input {
    stdin {
        codec => json 
    }
} 
output {
    stdout {
        codec => rubydebug 
    }
} 

multiline

input {
    stdin {
        codec => multiline {
            charset => ""     #字符編碼
            max_bytes =>        #最大字節數
            max_lines =>      #最大行數,默認500
            multiline_tag =>  #設置一個事件標簽,默認multiline
            pattern =>          #string匹配規則
            patterns_dir =>    #array多個匹配規則
            negate => false   #設置正向匹配還是反向匹配
            what   => next    #匹配的內容后,后面多行的日志是向前靠攏還是向后靠攏,previous,next
        }
    
    
    }
}
input {
    stdin {
        codec = multiline {
            pattern => "^\["
            negate => true
            what => previous
        
        }
    
    }
} 
output {
    stdout {
        codec => rubydebug 
    
    } 
} 

logstash filter 配置

  • json file
  • grok file
  • kv file

grok filter

kv filter

logstash output 配置

  • file輸出
  • tcp/udp方式輸出
  • elasticsearch
  • redis
  • kafka
  • hdfs
  • email

output file

output {
    file {
        path => "/root/access_result"
        #message_format => "%{ip}" 
        #path => "/root/access_%{+YYYY.MM.DD}_%{host}.txt"  
        #gzip => true 
    
    }
    stdout {
        codec => rebydebug 
        
    }
}
output {
    tcp {
        codec => json_lines 
        host => "127.0.0.1"
        port => "4050"
        mode => "server"
    }

}

output {
        udp {
            host => "127.0.0.1"
            port => 4050
        }
} 
output {
    elasticsearch {
        host => "127.0.0.1" 
        protocol => "http" 
        index => "test_output-%{type}-%{+YYYY.MM.dd}"
        document_type => "nginx" 
        workers => 5

    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 本文是elasticsearch官方文檔logstash的翻譯,你也可 查看原文 注:Logstash意思是日志存...
    陽春是你閱讀 6,870評論 0 3
  • 本人陸陸續續接觸了ELK的1.4,2.0,2.4,5.0,5.2版本,可以說前面使用當中一直沒有太多感觸,最近使用...
    三杯水Plus閱讀 4,118評論 0 12
  • Logstash使用配置 運行:bin/logstash -f /home/logstash.conf logst...
    會飛的魚Coo閱讀 40,798評論 2 10
  • 在我年度計劃里,有一項最重要的事就是,2017年結婚。 二月一直忙著做交易計劃,把結婚的事給忘記了。面包比愛情重要...
    Joy君閱讀 130評論 0 0