Loki v2.3.0 中添加了出色的新功能,進行了 bug 修複。除此之外,性能也得到了提升。
二、自定義保留規則Loki 中的保留對于集群來說一直是全局的,并推遲到底層對象存儲。
Loki 現在可以通過 Compactor 組件處理保留。 你可以配置每個租戶和每個流的保留時間。 這些不同的保留配置允許你以更精細的方式控制存儲成本并滿足安全性和合規性要求。使用 Loki 現有的配置覆蓋機制完成配置:
自定義保留規則
閱讀 Loki 存儲保留文檔了解更多信息。
三、日志删除Loki 現在支持在指定的時間範圍删除選定日志流條目。
與自定義保留功能一樣,通過 Compactor 組件支持删除。 Compactor 公開用于删除任務的 API 端點。 存在用于請求删除、列出現有删除請求及其狀态以及取消挂起的删除請求的端點。
此功能的初始實現支持删除截至當前時間 - 24 小時的數據(你不能删除過去 24 小時内的數據)。 此實現的主要要求是确保 Loki 可以始終遵守删除個人信息的請求。 可以删除截至當前時間的數據,但更複雜。 我們将來可能會疊代此功能以添加此類功能。
此功能是實驗性的,僅支持 BoltDB 托管索引存儲。你可以在日志條目删除文檔中了解有關此功能的更多信息。
四、錄制規則Loki 現在支持 Prometheus 風格的錄制規則。錄制規則使你能夠定期對日志進行指标查詢,将結果指标發送到 Prometheus 和 Prometheus 兼容的系統例如 Cortex 和 Thanos。
錄制規則的一個引人注目的用例是用于:無法通過檢測來發送 Prometheus metrics 指标的軟件。僅使用日志,你就可以創建 metrics 指标!
我們一直在嘗試從 Loki 的 metrics.go 日志行創建每個租戶 (org_id) 指标,該行輸出大量單獨的查詢統計信息。
租戶 (org_id) 指标創建
這也可以通過 Prometheus 和直方圖來完成,但這種方法的一個優點是我們不需要生成具有租戶标簽維度的直方圖,因此它減少了 Prometheus 中存儲的系列數量。每個租戶隻生成一個系列,而不是每個租戶生成一個系列乘以直方圖中的桶數。Prometheus 中的記錄規則也可以實現相同的減少到每個租戶一個系列的效果,但在某些情況下,這種方法可能更适合你。
此功能是實驗性的。有關更多詳細信息,請參閱錄制規則文檔。
五、模式解析器使用新的模式解析器,編寫 LogQL 查詢以提取非結構化日志的标簽變得更快、更容易。使用模式解析器,你可以避免編寫繁瑣的正則表達式,尤其是對于由文字和空格分隔的标記形成的常見日志格式。
考慮這個 NGINX 日志行:
0.191.12.2 - - [10/Jun/2021:09:14:29 0000] "GET /api/plugins/versioncheck HTTP/1.1" 200 2 "-" "Go-http-client/2.0" "13.76.247.102, 34.120.177.193" "TLSv1.2" "US" ""
可以使用模式解析器表達式解析此日志行:
<ip> - - <_> "<method> <uri> <_>" <status> <size> <_> "<agent>" <_>
它提取這些字段:
"ip" => "0.191.12.2"
"method" => "GET"
"uri" => "/api/plugins/versioncheck"
"status" => "200"
"size" => "2"
"agent" => "Go-http-client/2.0"
NGINX Loki 日志面闆
要了解有關語法的更多信息,請參閱 LogQL 文檔。
六、分片攝取器Loki 中的分片是查詢前端用于拆分查詢以進行并行計算的技術。在 v2.3.0 之前,未對最近的數據應用分片。使用分片攝取,所有時間範圍都是并行化的。
分片提高了性能:我們的環境從 ~1GB/s 的搜索速度躍升至 ~15GB/s。它應該提高對大量流或具有大量數據的流的近期數據查詢的搜索性能。
舉個例子,看看從我們的 nginx 入口控制器查詢最後一小時的數據時的差異,它每小時記錄大約 90GB:在攝取分片之前:
❯ logcli query '{container="ingress-nginx"} |= "trytofindme!!!"' --since=1h --stats 2>&1 | grep Summary
Summary.BytesProcessedPerSecond 784 MB
Summary.LinesProcessedPerSecond 1263304
Summary.TotalBytesProcessed 88 GB
Summary.TotalLinesProcessed 141420028
Summary.ExecTime 1m51.944531908s
攝取分片後:
❯ logcli query '{container="ingress-nginx"} |= "trytofindme!!!"' --since=1h --stats 2>&1 | grep Summary
Summary.BytesProcessedPerSecond 15 GB
Summary.LinesProcessedPerSecond 24171034
Summary.TotalBytesProcessed 88 GB
Summary.TotalLinesProcessed 142086646
Summary.ExecTime 5.878385063s
Ingester 分片默認處于啟用狀态,但僅當你運行一個查詢前端組件負責創建發送到 ingesters 的拆分和分片時才會生效。
七、LogQL IP 地址匹配對于想要對包含 IP 地址的日志進行更複雜過濾的任何人,LogQL 已經學習了許多新技巧來幫助你。
語法如下:ip("<pattern>"). <pattern> 可以是:
這允許你執行以下操作:
返回匹配特定 IP 的日志行
{container="nginx"} |= ip("192.168.4.5")
返回不包括 IP 範圍的日志行
{container="nginx"} != ip("192.168.4.1-192.168.4.10")
返回匹配特定子網的日志行
{container="nginx"} |= ip("192.168.4.0/24")
在LogQL 文檔中了解有關語法的更多信息。
八、擴展閱讀Spring boot 微服務組件 mica 中的 mica-logging 組件支持 json 日志收集到 loki,也支持日志直接批量發送到 loki,歡迎試用。
mica: Spring Cloud 微服務開發核心工具集。基礎工具類、驗證碼、http、redis、ip2region、xss 等組件開箱即用。 記得右上角點個star 關注更新!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!