一、安裝
參考官方網站 Logstash
二、測驗安裝
首先,讓我們通過運行最基本的Logstash管道來測驗Logstash安裝,
Logstash管道具有兩個必需元素input和output,以及一個可選元素filter,輸入插件使用來自源的資料,過濾器插件根據您的指定修改資料,輸出插件將資料寫入目標,

測驗Logstash安裝,請運行最基本的Logstash管道,
例如,可以執行如下命令使 Logstash 程式運行于前臺
進入 Logstash 的安裝主目錄下執行:
bin/logstash -e ''
-e 選項用于設定 Logstash 處理資料的輸入和輸出
-e '' 這里使用了空字串等同于使用 -e input { stdin { type => stdin } } output { stdout { codec => rubydebug } }
input { stdin { type => stdin } } 表示 Logstash 需要處理的資料來源來自于標準輸入設備(鍵盤)
output { stdout { codec => rubydebug } } 表示 Logstash 把處理好的資料輸出到標準輸出設備(螢屏,也就是終端)
稍等片刻,當看到螢屏上輸出如下字樣,即可嘗試使用鍵盤輸入 hello 字樣
[2020-11-29T11:47:57,606][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
注意,你的時間肯定不和這里的一樣,這里是我當時啟動時候的時間,
輸出 hello 機會立刻看到終端輸出配格式化后的資料資訊

message欄位對應的值是 Logstash 接收到的一行完整的資料@version是版本資訊,可以用于建立索引使用(后面會講)@timestamp處理次資料的時間戳,可以用于建立索引和搜索type就是之前input中設定的值,這個值可以任意修改,但是,type是內置的變數,不能修改,用于建立索引和條件判斷等hosts表示從那個主機過來的資料
修改 type 的值為 nginx 的示例
bin/logstash -e "input { stdin { type => nginx } } output { stdout { codec => rubydebug } }"

三、配置輸入和輸出
在現實世界中,Logstash管道要復雜一些:它通常具有一個或多個輸入,過濾器和輸出插件,
在本部分中,您將創建一個Logstash管道,該管道使用標準輸入來獲取Apache Web日志作為輸入,決議這些日志以從日志中創建特定的命名欄位,然后將決議的資料輸出到標準輸出(螢屏上),并且,我們這次無需在命令列上定義管道配置,而是在組態檔中定義管道,
創建任意一個檔案,并寫入如下內容,作為 Logstash 的管道組態檔
first-pipeline.conf
input {
stdin { }
}
output {
stdout {}
}
運行如下命令可以測驗組態檔
bin/logstash -f first-pipeline.conf --config.test_and_exit
-f 用于指定管道組態檔,
運行如下命令啟動 Logstatsh
bin/logstash -f first-pipeline.conf --config.reload.automatic
--config.reload.automatic 會在你修改管道組態檔后自動加載,而不必重新啟動 Logstash,
啟動后復制如下內容到命令列中,并按下回車鍵
83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/imageskibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
將會看到如下輸出
{
"@version" => "1",
"message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/imageskibana-search.png HTTP/1.1\" 200 203023 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
"host" => "0.0.0.0",
"@timestamp" => 2020-12-27T14:55:54.076Z
}
2 使用Grok過濾器插件決議Web日志
現在,您有了一個作業管道,該管道從Filebeat中讀取日志行,
但是,您會注意到日志訊息的格式不是理想的,
您想決議日志訊息,以便能從日志中創建特定的命名欄位,
為此,您應該使用grok 過濾器插件,
使用grok過濾器插件,您可以將非結構化日志資料決議為結構化和可查詢的內容,
grok 過濾插件,會根據你感興趣的內容分配欄位名稱,并把這些內容和對應的欄位名稱進行系結,
grok 如何知道哪些內容是你感興趣的呢?它是通過自己預定義的模式來識別感興趣的欄位的,這個可以通過給其配置不同的模式來實作,
這里使用的模式是 %{COMBINEDAPACHELOG}
{COMBINEDAPACHELOG 使用以下模式從Apache日志中構造行:
| 原資訊 | 對應新的欄位名稱 |
|---|---|
| IP 地址 | clientip |
| 用戶 ID | ident |
| 用戶認證資訊 | auth |
| 時間戳 | timestamp |
| HTTP 請求方法 | verb |
| 請求的 URL | request |
| HTTP 版本 | httpversion |
| 回應碼 | response |
| 回應體大小 | bytes |
| 跳轉來源 | referrer |
| 客戶端代理(瀏覽器) | agent |
關于 grok 更多的用法請參考 grok 參考檔案
并且這里要想實作修改組態檔之后自動加載它,不能配置 input 為 stdin,
所以, 這里我們使用了 file
修改好的管道組態檔如下:
input {
file {
path => "/usr/local/logstash/access_log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
stdout {
codec => rubydebug
}
}
match => { "message" => "%{COMBINEDAPACHELOG}"} 的意思是:
當匹配到 “message” 欄位時,用戶模式 “COMBINEDAPACHELOG}” 進行欄位映射,
配置完成后,再次進行驗證
編輯示例日志檔案,并寫如如下內容
83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/imageskibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
重新啟動 logstash
bin/logstash -f first-pipeline.conf --config.reload.automatic
下面是輸出內容
{
"ident" => "-",
"agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
"request" => "/presentations/logstash-monitorama-2013/imageskibana-search.png",
"@timestamp" => 2020-12-28T13:55:03.369Z,
"referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
"auth" => "-",
"message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/imageskibana-search.png HTTP/1.1\" 200 203023 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
"host" => "0.0.0.0",
"clientip" => "83.149.9.216",
"httpversion" => "1.1",
"response" => "200",
"timestamp" => "04/Jan/2015:05:13:42 +0000",
"verb" => "GET",
"bytes" => "203023",
"@version" => "1"
}
你會發現原來的非結構化資料,變為結構化的資料了,
細心的你一定發現原來的 message 欄位仍然存在,假如你不需要它,可以使用 grok 中提供的常用選項之一: remove_filed 來移除這個欄位,
事實上 remove_field 可以移除任意的欄位,它可以接收的值是一個陣列,
修改后管道組態檔如下:
input {
file {
path => "/usr/local/logstash/access_log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
remove_field => [ "message" ]
}
}
output {
stdout { codec => rubydebug }
}
再次測驗,你會發現 message 不見了:
使用如下命令向示例日志檔案中輸入新的一行內容
echo '83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/imageskibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"' >> /usr/local/logstash/access_log
{
"ident" => "-",
"@timestamp" => 2020-12-28T15:02:47.938Z,
"httpversion" => "1.1",
"@version" => "1",
"auth" => "-",
"agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
"request" => "/presentations/logstash-monitorama-2013/imageskibana-search.png",
"timestamp" => "04/Jan/2015:05:13:42 +0000",
"bytes" => "203023",
"referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
"country_name" => "Russia",
"postal_code" => "144700",
"timezone" => "Europe/Moscow",
"country_code2" => "RU"
},
"verb" => "GET",
"clientip" => "83.149.9.216",
"host" => "0.0.0.0",
"response" => "200"
}
3 使用Geoip過濾器插件增強資料編輯
除決議日志資料以進行更好的搜索外,篩選器插件還可以從現有資料中獲取補充資訊,例如,geoip 插件可以通過查找到IP地址,并從自己自帶的資料庫中找到地址對應的地理位置資訊,然后將該位置資訊添加到日志中,
該geoip插件配置要求您指定包含IP地址來查找源欄位的名稱,在此示例中,該clientip欄位包含IP地址,
geoip {
source => "clientip"
}
由于過濾器是按順序求值的,因此請確保該geoip部分位于grok組態檔的該部分之后,并且grok和geoip部分都嵌套在該filter部分中,
完成后的管道組態檔如下:
input {
file {
path => "/usr/local/logstash/access_log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}"}
}
geoip {
source => "clientip"
}
}
output {
stdout { codec => rubydebug }
}
再次輸入之前的日志內容,就會看到如下輸出
{
"bytes" => "203023",
"geoip" => {
"city_name" => "Moscow",
"continent_code" => "EU",
"country_name" => "Russia",
"region_name" => "Moscow",
"timezone" => "Europe/Moscow",
"longitude" => 37.6172,
"region_code" => "MOW",
"country_code3" => "RU",
"ip" => "83.149.9.216",
"location" => {
"lat" => 55.7527,
"lon" => 37.6172
},
"latitude" => 55.7527,
"postal_code" => "144700",
"country_code2" => "RU"
},
"host" => "0.0.0.0",
"@timestamp" => 2020-12-28T14:44:23.900Z,
"verb" => "GET",
"referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
"ident" => "-",
"@version" => "1",
"auth" => "-",
"response" => "200",
"httpversion" => "1.1",
"timestamp" => "04/Jan/2015:05:13:42 +0000",
"request" => "/presentations/logstash-monitorama-2013/imageskibana-search.png",
"agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
"clientip" => "83.149.9.216"
}
詳情請參考 grok 和 geoip
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/242357.html
標籤:其他
