logstash 2.4 安裝測試

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

后臺運行

* 標準的 service 方式

采用 RPM 安裝,發行包內,都自帶有 sysV 或者 systemd 風格的啟動程序/配置,你只需要直接使用即可。/etc/init.d/logstash 腳本中,會加載 /etc/init.d/functions 庫文件,利用其中的 daemon 函數,將 logstash 進程作為后臺程序運行。
所以,只需把自己寫好的配置文件,統一放在 /etc/logstash/conf.d 目錄下(注意目錄下所有配置文件都應該是 .conf 結尾,且不能有其他文本文件存在。),然后運行 service logstash start 命令即可。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容