5 系列是 elastic 下一代的產品線, elastic 希望所有的產品未來都統一成同一個系列版本,所有的產品都會升到 5 這個大版本。除了插件的 API 變化較大之外,在使用上沒有太大變化。
在 2.x 中:
# event get api
request_url = event[@source]
# event set api
event['city'] = area.city.name
在 5.0 中:
# event get api
request_url = event.get(@source)
# event set api
event.set('city',area.city.name)
安裝java環境
yum install java-1.8.0-openjdk
export JAVA_HOME=/usr/bin/java
# cd /usr/local/src/
# wget https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz
# tar zxvf logstash-2.4.0.tar.gz
# mv logstash-2.4.0 ../
# cd logstash-2.4.0
# bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
hello world
Settings: Default pipeline workers: 2
Pipeline main started
{
"message" => "hello world",
"@version" => "1",
"@timestamp" => "2016-10-08T22:08:48.267Z",
"host" => "0.0.0.0"
}
按照饒的ELK stack 權威指南 logstash5.0 的部署步驟是行不通的,必須先定義conf文件,直接運行bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'是會報錯的。
<b>
以上示例通過重新設置了叫”stdout”的output(添加了”codec”參數),我們就可以改變Logstash的輸出表現。類似的我們可以通過在你的配置文件中添加或者修改inputs、outputs、filters,就可以隨意的格式化日志數據。
<b>
Logstash 會給事件添加一些額外信息。最重要的就是 @timestamp,用來標記事件的發生時間。因為這個字段涉及到 Logstash 的內部流轉,所以必須是一個 joda 對象,如果你嘗試自己給一個字符串字段重命名為 @timestamp 的話,Logstash 會直接報錯。必須使用 filters/date 插件來管理這個特殊字段。
此外:
host 標記事件發生在哪里。
type 標記事件的唯一類型。
tags 標記事件的某方面屬性。這是一個數組,一個事件可以有多個標簽。
你可以隨意給事件添加字段或者從事件里刪除字段。事實上事件就是一個 Ruby 對象,或者更簡單的理解為就是一個哈希也行。
每個 logstash 過濾插件,都會有四個方法叫 add_tag, remove_tag, add_field 和 remove_field。它們在插件過濾匹配成功時生效。
<b>
語法
<b>
包括有區域,注釋,數據類型(布爾值,字符串,數值,數組,哈希),條件判斷,字段引用等。
<b>
區段(section)
<b>
Logstash 用 {} 來定義區域。區域內可以包括插件區域定義,你可以在一個區域內定義多個插件。插件區域內則可以定義鍵值對設置。示例如下:
input {
stdin {}
syslog {}
}
<b>
數據類型
<b>
Logstash 支持少量的數據值類型:
- bool
debug => true
- string
host => "hostname"
- number
port => 514
- array
match => ["datetime", "UNIX", "ISO8601"]
- hash
options => {
key1 => "value1",
key2 => "value2"
}
字段引用(field reference)
<b>
字段是 Logstash::Event 對象的屬性。我們之前提過事件就像一個哈希一樣,所以你可以想象字段就像一個鍵值對。
如果你想在 Logstash 配置中使用字段的值,只需要把字段的名字寫在中括號 [] 里就行了,這就叫字段引用。
對于嵌套字段(也就是多維哈希表,或者叫哈希的哈希),每層的字段名都寫在 [] 里就可以了。
logstash 的數組也支持倒序下標,即 [geoip][location][-1] 可以獲取數組最后一個元素的值。
Logstash 還支持變量內插,在字符串里使用字段引用的方法是這樣:
"the longitude is %{[geoip][location][0]}"
條件判斷(condition)
<b>
表達式支持下面這些操作符:
- ==(等于), !=(不等于), <(小于), >(大于), <=(小于等于), >=(大于等于)
- =~(匹配正則), !~(不匹配正則)
- in(包含), not in(不包含)
- and(與), or(或), nand(非與), xor(非或)
- ()(復合表達式), !()(對復合表達式結果取反)
通常來說,你都會在表達式里用到字段引用。為了盡量展示全面各種表達式,下面虛擬一個示例:
if "_grokparsefailure" not in [tags] {
} else if [status] !~ /^2\d\d/ or ( [url] == "/noc.gif" nand [geoip][city] != "beijing" ) {
} else {
}
<b>
命令行參數
<b>
Logstash 提供了一個 shell 腳本叫 logstash 方便快速運行。它支持以下參數:
- -e
意即執行。我們在 "Hello World" 的時候已經用過這個參數了。事實上你可以不寫任何具體配置,直接運行 bin/logstash -e '' 達到相同效果。這個參數的默認值是下面這樣:
input {
stdin { }
}
output {
stdout { }
}
- --config 或 -f
意即文件。真實運用中,我們會寫很長的配置,甚至可能超過 shell 所能支持的 1024 個字符長度。所以我們必把配置固化到文件里,然后通過 bin/logstash -f agent.conf 這樣的形式來運行。此外,logstash 還提供一個方便我們規劃和書寫配置的小功能。你可以直接用 bin/logstash -f /etc/logstash.d/ 來運行。logstash 會自動讀取 /etc/logstash.d/ 目錄下所有 *.conf 的文本文件,然后在自己內存里拼接成一個完整的大配置文件,再去執行。
<b>
logstash 列出目錄下所有文件時,是字母排序的。而 logstash 配置段的 filter 和 output 都是順序執行,所以順序非常重要。采用多文件管理的用戶,推薦采用數字編號方式命名配置文件,同時在配置中,嚴謹采用 if 判斷限定不同日志的動作。
<b>
- --configtest 或 -t
意即測試。用來測試 Logstash 讀取到的配置文件語法是否能正常解析。Logstash 配置語法是用 grammar.treetop 定義的。尤其是使用了上一條提到的讀取目錄方式的讀者,尤其要提前測試。
<b>
- --log 或 -l
意即日志。Logstash 默認輸出日志到標準錯誤。生產環境下你可以通過 bin/logstash -l logs/logstash.log 命令來統一存儲日志。
<b>
- --pipeline-workers 或 -w
運行 filter 和 output 的 pipeline 線程數量。默認是 CPU 核數。
<b>
- --pipeline-batch-size 或 -b
每個 Logstash pipeline 線程,在執行具體的 filter 和 output 函數之前,最多能累積的日志條數。默認是 125 條。越大性能越好,同樣也會消耗越多的 JVM 內存。
<b>
- --pipeline-batch-delay 或 -u
每個 Logstash pipeline 線程,在打包批量日志的時候,最多等待幾毫秒。默認是 5 ms。
<b>
- --pluginpath 或 -P
可以寫自己的插件,然后用 bin/logstash --pluginpath /path/to/own/plugins 加載它們。
<b>
- --verbose
輸出一定的調試日志。
<b>
- --debug
輸出更多的調試日志。
<b>
plugin 用法說明
Usage:
bin/plugin [OPTIONS] SUBCOMMAND [ARG] ...
Parameters:
SUBCOMMAND subcommand
[ARG] ... subcommand arguments
Subcommands:
install Install a plugin
uninstall Uninstall a plugin
update Install a plugin
list List all installed plugins
Options:
-h, --help print help
可以通過 bin/plugin list 查看本機現在有多少插件可用
# bin/logstash-plugin list
logstash-codec-collectd
logstash-codec-dots
logstash-codec-edn
logstash-codec-edn_lines
logstash-codec-es_bulk
logstash-codec-fluent
logstash-codec-graphite
logstash-codec-json
logstash-codec-json_lines
logstash-codec-line
logstash-codec-msgpack
logstash-codec-multiline
logstash-codec-netflow
logstash-codec-oldlogstashjson
logstash-codec-plain
logstash-codec-rubydebug
logstash-filter-anonymize
logstash-filter-checksum
logstash-filter-clone
logstash-filter-csv
logstash-filter-date
logstash-filter-dns
logstash-filter-drop
logstash-filter-fingerprint
logstash-filter-geoip
logstash-filter-grok
logstash-filter-json
logstash-filter-kv
logstash-filter-metrics
logstash-filter-multiline
logstash-filter-mutate
logstash-filter-ruby
logstash-filter-sleep
logstash-filter-split
logstash-filter-syslog_pri
logstash-filter-throttle
logstash-filter-urldecode
logstash-filter-useragent
logstash-filter-uuid
logstash-filter-xml
logstash-input-beats
logstash-input-couchdb_changes
logstash-input-elasticsearch
logstash-input-eventlog
logstash-input-exec
logstash-input-file
logstash-input-ganglia
logstash-input-gelf
logstash-input-generator
logstash-input-graphite
logstash-input-heartbeat
logstash-input-http
logstash-input-http_poller
logstash-input-imap
logstash-input-irc
logstash-input-jdbc
logstash-input-kafka
logstash-input-log4j
logstash-input-lumberjack
logstash-input-pipe
logstash-input-rabbitmq
logstash-input-redis
logstash-input-s3
logstash-input-snmptrap
logstash-input-sqs
logstash-input-stdin
logstash-input-syslog
logstash-input-tcp
logstash-input-twitter
logstash-input-udp
logstash-input-unix
logstash-input-xmpp
logstash-input-zeromq
logstash-output-cloudwatch
logstash-output-csv
logstash-output-elasticsearch
logstash-output-email
logstash-output-exec
logstash-output-file
logstash-output-ganglia
logstash-output-gelf
logstash-output-graphite
logstash-output-hipchat
logstash-output-http
logstash-output-irc
logstash-output-juggernaut
logstash-output-kafka
logstash-output-lumberjack
logstash-output-nagios
logstash-output-nagios_nsca
logstash-output-null
logstash-output-opentsdb
logstash-output-pagerduty
logstash-output-pipe
logstash-output-rabbitmq
logstash-output-redis
logstash-output-s3
logstash-output-sns
logstash-output-sqs
logstash-output-statsd
logstash-output-stdout
logstash-output-tcp
logstash-output-udp
logstash-output-xmpp
logstash-output-zeromq
logstash-patterns-core