本文主要介紹如何使用SPL實作類別似於處理外掛程式採集日誌的功能。
背景資訊
SPL與原生外掛程式對比
正則解析對比
日誌範例:
127.0.0.1 - - [07/Jul/2022:10:43:30 +0800] "POST /PutData?Category=YunOsAccountOpLog" 0.024 18204 200 37 "-" "aliyun-sdk-java"正則解析 | SPL |
正則解析的Regex為:
| SPL語句為: |
輸出結果預覽
{
"ip": "127.0.0.1",
"time": "07/Jul/2022:10:43:30",
"method": "POST",
"url": "/PutData?Category=YunOsAccountOpLog",
"request_time": "0.024",
"request_length": "18204",
"status": "200",
"length": "37",
"ref_url": "-",
"browser": "aliyun-sdk-java",
"__time__": "1713184059"
}分隔字元解析對比
日誌範例:
127.0.0.1,07/Jul/2022:10:43:30 +0800,POST,PutData Category=YunOsAccountOpLog,0.024,18204,200,37,-,aliyun-sdk-java分隔字元解析 | SPL |
分隔字元解析使用半形逗號(,)分割,處理外掛程式選擇分隔字元解析,具體操作請參見採集主機文本日誌。
| SPL語句為: |
輸出結果預覽
{
"ip": "127.0.0.1",
"time": "07/Jul/2022:10:43:30 +0800",
"method": "POST",
"url": "PutData?Category=YunOsAccountOpLog",
"request_time": "0.024",
"request_length": "18204",
"status": "200",
"length": "37",
"ref_url": "-",
"browser": "aliyun-sdk-java",
"__time__": "1713231487"
}JSON解析對比
日誌範例:
{"url": "POST /PutData?Category=YunOsAccountOpLog HTTP/1.1","ip": "10.200.98.220", "user-agent": "aliyun-sdk-java","request": "{\"status\":\"200\",\"latency\":\"18204\"}","time": "07/Jul/2022:10:30:28"}JSON解析 | SPL |
具體操作請參見採集JSON格式文本日誌。
| SPL語句為: |
輸出結果預覽
{
"url": "POST /PutData?Category=YunOsAccountOpLog HTTP/1.1",
"ip": "10.200.98.220",
"user-agent": "aliyun-sdk-java",
"request": "{"status":"200","latency":"18204"}",
"time": "07/Jul/2022:10:30:28"
}正則解析+時間解析對比
日誌範例:
127.0.0.1 - - [2024-11-05T15:47:05 +0800] "POST /PutData?Category=YunOsAccountOpLog" 0.024 18204 200 37 "-" "aliyun-sdk-java"正則解析+時間解析 | SPL |
| SPL語句為: |
正則解析+過濾處理對比
日誌範例:
127.0.0.1 - - [2024-11-05T15:47:05 +0800] "POST /PutData?Category=YunOsAccountOpLog" 0.024 18204 200 37 "-" "aliyun-sdk-java"正則解析+過濾解析 | SPL |
| SPL語句為: |
輸出結果預覽
{
"ip": "127.0.0.1",
"time": "2024-11-05T15:47:05",
"method": "POST",
"url": "/PutData?Category=YunOsAccountOpLog",
"request_time": "0.024",
"request_length": "18204",
"status": "200",
"length": "37",
"ref_url": "-",
"browser": "aliyun-sdk-java",
"__time__": "1713238839"
}脫敏處理對比
日誌範例:
{"account":"1812213231432969","password":"04a23f38"}脫敏處理 | SPL |
脫敏處理將
| SPL語句為: |
輸出結果預覽
{
"content": "{"account":"1812213231432969","password":"******"}"
}SPL與擴充外掛程式對比
添加欄位對比
日誌範例:
this is a test log添加欄位 | SPL |
日誌預設存在
| SPL語句為: |
輸出結果預覽
{
"content": "this is a test log",
"service": "A"
}Json解析+丟棄欄位對比
日誌範例:
{"key1": 123456, "key2": "abcd"}Json解析+丟棄欄位 | SPL |
SPL語句為: |
輸出結果預覽
{
"key2": "abcd"
}Json解析+重新命名欄位對比
日誌範例:
{"key1": 123456, "key2": "abcd"}Json解析+重新命名欄位 | SPL |
SPL語句為: |
輸出結果預覽
{
"new_key1": "123456",
"key2": "abcd"
}Json解析+過濾欄位對比
日誌範例:
{"ip": "10.**.**.**", "method": "POST", "browser": "aliyun-sdk-java"}
{"ip": "10.**.**.**", "method": "POST", "browser": "chrome"}
{"ip": "192.168.**.**", "method": "POST", "browser": "aliyun-sls-ilogtail"}Json解析+過濾欄位 | SPL |
SPL語句為: |
輸出結果預覽
{
"ip": "10.**.**.**",
"method": "POST",
"browser": "chrome"
}Json解析+欄位值對應處理對比
日誌範例:
{"_ip_":"192.168.*.*","Index":"900000003"}
{"_ip_":"255.255.**.**","Index":"3"}Json解析+欄位值對應處理 | SPL |
SPL語句為: |
輸出結果預覽
{
"_ip_": "192.168.*.*",
"Index": "900000003",
"_processed_ip_": "default login"
}字串替換對比
日誌範例:
hello,how old are you? nice to meet you字串替換 | SPL |
字串替換用空值代替
| SPL語句為: |
輸出結果預覽
{
"content": "hello, nice to meet you"
}資料編碼對比
日誌範例:
this is a test logBASE64編碼
BASE64編碼 | SPL |
具體操作請參見BASE64編碼。
| SPL語句為: |
輸出結果預覽
{
"content": "this is a test log",
"content1": "dGhpcyBpcyBhIHRlc3QgbG9n"
}MD5編碼
MD5 | SPL |
具體操作請參見MD5編碼。
| SPL語句為: |
輸出結果預覽
{
"content": "this is a test log",
"content1": "4f3c93e010f366eca78e00dc1ed08984"
}新增能力項
數學計算
URL 計算
URL 編碼解碼
日誌範例
https://home.console.alibabacloud.com/home/dashboard/ProductAndServiceSPL語句
url_encode函數和url_decode函數請參見URL函數。
* | extend encoded = url_encode(content) | extend decoded = url_decode(encoded)輸出結果預覽
{ "content": "https://home.console.alibabacloud.com/home/dashboard/ProductAndService", "decoded": "https://home.console.alibabacloud.com/home/dashboard/ProductAndService", "encoded": "https%3A%2F%2Fhome.console.alibabacloud.com%2Fhome%2Fdashboard%2FProductAndService" }
URL 提取
日誌範例
https://sls.console.alibabacloud.com:443/lognext/project/dashboard-all/logsearch/nginx-demo?accounttraceid=d6241a173f88471c91d3405cda010ff5ghdwSPL語句
SPL語句中涉及函數請參見URL函數。
* | extend host = url_extract_host(content) | extend query = url_extract_query(content) | extend path = url_extract_path(content) | extend protocol = url_extract_protocol(content) | extend port = url_extract_port(content) | extend param = url_extract_parameter(content, 'accounttraceid')輸出結果預覽
{ "content": "https://sls.console.alibabacloud.com:443/lognext/project/dashboard-all/logsearch/nginx-demo?accounttraceid=d6241a173f88471c91d3405cda010ff5ghdw", "host": "sls.console.alibabacloud.com", "param": "d6241a173f88471c91d3405cda010ff5ghdw", "path": "/lognext/project/dashboard-all/logsearch/nginx-demo", "port": "443", "protocol": "https", "query": "accounttraceid=d6241a173f88471c91d3405cda010ff5ghdw" }
比較&邏輯運算子
日誌範例
{"num1": 199, "num2": 10, "num3": 9}SPL語句
cast函數轉換資料類型,parse-json提取欄位。
* | parse-json content | extend compare_result = cast(num1 as double) > cast(num2 as double) AND cast(num2 as double) > cast(num3 as double輸出結果預覽
{ "compare_result": "true", "content": "{"num1": 199, "num2": 10, "num3": 9}", "num1": "199", "num2": "10", "num3": "9" }













