一、ipv6
Grok語法可以用於解析IPv6地址,語法如下:
grok {
match => { "message" => "%{IPV6:ip}" }
}
其中,IPV6是預定義的模式,用於匹配IPv6地址。
例如,對於日誌中的一條含有IPv6地址的日誌:
2018-10-01 13:59:23.456 [INFO] 2001:0db8:85a3:0000:0000:8a2e:0370:7334 successfully accessed the system.
使用上述Grok語法可以將IPv6地址解析出來:
{
"ip": [
[
"2001:0db8:85a3:0000:0000:8a2e:0370:7334"
]
]
}
二、groovy語法
Grok語法中可以嵌入Groovy語法,可以自定義複雜的解析規則。
例如,對於一條含有時間戳的日誌,想要將時間戳轉換成日期格式進行處理,可以使用如下Grok語法:
grok {
match => { "message" => "%{GREEDYDATA:message} %{NUMBER:timestamp:gsub('\.','')} %{GREEDYDATA}" }
}
date {
match => [ "timestamp", "UNIX_MS" ]
target => "timestamp"
}
其中,gsub函數將時間戳中的小數點去掉,然後使用date插件將時間戳解析成日期格式。
三、groovy語法jdbc
Grok語法中還可以用Groovy語法來訪問JDBC資料庫,可以將數據從資料庫中讀取並進行處理。
例如,對於一條含有用戶名和密碼的日誌,想要將用戶名和密碼從資料庫中讀取進行驗證,可以使用如下Grok語法:
grok {
match => { "message" => "login: %{USERNAME:username} password: %{PASSWORD:password}" }
}
jdbc_static {
loaders => [
{
id => "user_loader"
query => "SELECT * FROM users WHERE username = :username AND password = :password"
parameters => {
"username" => "username"
"password" => "password"
}
local_table => "users"
}
]
local_db_objects => [
{
name => "users"
index_columns => ["username", "password"]
columns => [
["username", "VARCHAR(256)"],
["password", "VARCHAR(256)"]
]
}
]
local_cache_size => 10000
local_flush_size => 1000
local_cache_ttl => 600
local_cache_retain => 3600
jdbc_user => "root"
jdbc_password => "password"
jdbc_driver_library => "/usr/share/java/mysql-connector-java.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://localhost:3306/users"
statement_timeout => 300
}
其中,使用Groovy語法從日誌中解析出用戶名和密碼,然後使用jdbc_static插件從資料庫中讀取對應用戶的信息,並進行驗證。local_db_objects用於定義本地資料庫中存儲的表的結構,local_table用於定義載入數據的表名。
四、gograb語法
在Grok語法中,可以使用Gograb語法進行元素之間的匹配。
Gograb語法包括:
- grab:抓取匹配到的任意字元。
- grabvalue:抓取匹配到的值。
- grabfield:抓取匹配到的欄位。
例如,對於一條包含訪問者IP和訪問路徑的日誌,想要將訪問者IP和訪問路徑進行匹配並抓取匹配到的結果,可以使用如下Grok語法:
grok {
match => { "message" => "%{IP:ip} %{GREEDYDATA:http_request}" }
}
grok {
match => { "http_request" => "%{URIPROTO:uri_protocol}://%{IP:remote_ip}/%{GREEDYDATA:http_path}" }
}
gograb {
grabfield => {
"remote_ip" => "client_ip"
"http_path" => "path"
}
}
其中,使用Grok語法在日誌中匹配訪問者IP和訪問路徑,使用Gograb語法在http_request欄位中抓取需要的欄位remote_ip和http_path。
原創文章,作者:BYSR,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/132258.html
微信掃一掃
支付寶掃一掃