背景
Loki的第一個穩定版本于2019年11月19日發布,是 Grafana Labs 團隊最新的開源項目,是一個水平可擴展,高可用性,多租戶的日志聚合系統。 Grafana 對 Loki 的描述如下:
- Loki: like Prometheus, but for logs. Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system inspired by Prometheus. It is designed to be very cost effective and easy to operate. It does not index the contents of the logs, but rather a set of labels for each log stream.
簡單說,Loki 是專門用于聚集日志數據,重點是高可用性和可伸縮性。與競爭對手不同的是,它確實易于安裝且資源效率極高。
目前運維大概上百個節點,雖然系統是統一的基線版本且使用docker運行應用,平時相安無事,但變更后的問題排查仍有點心有余悸。對一個火熱的日志系統elk也有淺嘗輒止,奈何對于非核心應用,多耗散一份算力意味著成本增加和利潤的減少,elk對于小團隊來說,還是過于笨重。趁著近日的疫情無法外出,調研后將 Loki 上線了生產,可以說是完美契合了中小團隊對日志平臺的需求。
介紹
與其他日志聚合系統相比,Loki具有下面的一些特性:
不對日志進行全文索引(vs ELK技)。通過存儲壓縮非結構化日志和僅索引元數據,Loki 操作起來會更簡單,更省成本。
通過使用與 Prometheus 相同的標簽記錄流對日志進行索引和分組,這使得日志的擴展和操作效率更高。
特別適合儲存 Kubernetes Pod 日志; 諸如 Pod 標簽之類的元數據會被自動刪除和編入索引。
受 Grafana 原生支持。
Loki 由以下3個部分組成:
- loki是主服務器,負責存儲日志和處理查詢。
- promtail是代理,負責收集日志并將其發送給 loki 。
- Grafana用于 UI 展示。
安裝
Docker-compose.yml 可以參考Loki
的文檔介紹,開箱即用。
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:1.5.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:1.5.0
volumes:
- /Users/hfy/work/loki/:/var/log/
command: -config.file=/etc/promtail/docker-config.yaml
networks:
- loki
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
然后直接使用 docker-compose 啟動即可:
docker-compose up -d
使用
安裝完成后,訪問節點的 3000 端口訪問 grafana,默認情況下使用(admin:admin)訪問 -> 選擇添加數據源:
在數據源列表中選擇Loki,配置 Loki 源地址:
集容器日志
docker安裝loki驅動收
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
然后配置需要收集日志的服務docker-compose文件
logging:
driver: loki
options:
loki-url: http://loki:3100/api/prom/push"
loki-retries: "5"
loki-batch-size: "400"
效果:
目前支持以下標簽匹配運算符:
- =等于
- !=不相等
- =~正則表達式匹配
- !~不匹配正則表達式
參考:https://blog.kelu.org/tech/2020/01/31/grafana-loki-for-logging-aggregation.html