致敬,哈布羅維特人! 預計該課程將開始新的註冊
本文是對洛基的簡單介紹。 洛基計劃
洛基的主要靈感是
- 使用標籤來存儲數據
- 資源消耗低
我們將回到 Prometheus 的原理,並給出一些在 Kubernetes 環境中使用它的示例。
關於普羅米修斯的幾句話
為了充分理解 Loki 的工作原理,退後一步並重新審視一下 Prometheus 非常重要。
Prometheus 的顯著特徵之一是從收集點(通過導出器)提取指標並將其存儲在 TSDB(Time Series Data Base,時間序列數據庫)中,並以標籤形式添加元數據。
你為什麼需要它
最近,Prometheus 已經成為容器和 Kubernetes 領域事實上的標準:它的安裝非常簡單,Kubernetes 集群最初就有 Prometheus 的端點。 Prometheus 還可以從容器中部署的應用程序中提取指標,同時維護特定標籤。 因此,應用程序監控非常容易實現。
不幸的是,日誌管理仍然沒有交鑰匙解決方案,您必須自己找到解決方案:
- 用於集中日誌的託管雲服務(AWS、Azure 或 Google)
- 監控服務“監控即服務”(例如,Datadog)
- 創建您自己的日誌收集服務。
對於第三個選項,我傳統上使用 Elasticsearch,儘管事實上我並不總是對它感到滿意(尤其是它的笨重和設置的複雜性)。
Loki 的設計遵循以下原則,易於實現:
- 容易上手
- 消耗很少的資源
- 獨立工作,無需任何特殊維護
- 作為 Prometheus 的附加組件來幫助錯誤調查
然而,這種簡單性是以一些妥協為代價的。 其中之一是不對內容建立索引。 因此,文本搜索不是很高效或豐富,並且不允許您對文本內容進行統計。 但由於 Loki 希望成為 grep 的等價物並補充 Prometheus,因此這並不是一個缺點。
事件調查
為了更好地理解為什麼 Loki 不需要索引,讓我們回到 Loki 開發人員使用的事件調查方法:
1 警報 → 2 儀表板 → 3 即席查詢 → 4 日誌聚合 → 5 分佈式跟踪 → 6 修復!
(1 警告 → 2 儀表板 → 3 即席查詢 → 4 日誌聚合 → 5 分佈式跟踪 → 6 修復!)
我們的想法是,我們收到某種警報(Slack 通知、短信等),然後:
- 查看 Grafana 儀表板
- 查看服務指標(例如,在 Prometheus 中)
- 查看日誌條目(例如,在 Elasticsearch 中)
- 也許看看分佈式跟踪(Jaeger、Zipkin 等)
- 並最終解決原來的問題。
在這裡,對於 Grafana + Prometheus + Elasticsearch + Zipkin 堆棧的情況,您將必須使用四種不同的工具。 為了節省時間,最好能夠使用一種工具完成所有這些步驟:Grafana。 值得注意的是,這種研究方法從 Grafana 第 6 版開始就已在 Grafana 中實現。因此,可以直接從 Grafana 訪問 Prometheus 數據。
資源管理器屏幕分為普羅米修斯和洛基
在此屏幕中,您可以使用分屏概念查看 Loki 中與 Prometheus 指標相關的日誌。 從版本 6.5 開始,Grafana 允許您解析 Loki 日誌條目中的跟踪 ID,以跟踪您最喜歡的分佈式跟踪工具 (Jaeger) 的鏈接。
Loki本地測試
在本地測試 Loki 最簡單的方法是使用 docker-compose。 docker-compose 文件位於 Loki 存儲庫中。 您可以使用以下命令獲取存儲庫 git
:
$ git clone https://github.com/grafana/loki.git
然後需要切換到生產目錄:
$ cd production
之後,您可以獲得最新的Docker鏡像:
$ docker-compose pull
最後,使用以下命令啟動 Loki 堆棧:
$ docker-compose up
洛基架構
這是 Loki 架構的小圖:
Loki 架構原則
Web 客戶端在服務器上運行應用程序,Promtail 收集日誌並將其發送給 Loki,Web 客戶端還將元數據發送給 Loki。 Loki 聚合所有內容並將其傳遞給 Grafana。
洛基正在奔跑。 要查看可用組件,請運行以下命令:
$ docker ps
如果是新安裝的 Docker,該命令應返回以下結果:
IMAGE PORTS NAMES
grafana/promtail: production_promtail_1
grafana/grafana: m 0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late 80/tcp,0.0.0.0:3100... production_loki_1
我們看到以下組件:
- Promtail:負責集中日誌的代理
- Grafana:著名的儀表板工具
- Loki:數據集中守護進程
作為經典基礎架構(例如基於虛擬機)的一部分,Promtail 代理必須部署在每台機器上。 Grafana 和 Loki 可以安裝在同一台機器上。
部署到 Kubernetes
在 Kubernetes 中安裝 Loki 組件如下:
- daemon設置為在服務器集群中的每台機器上部署Promtail代理
- 洛基部署
- 最後一個是Grafana的部署。
幸運的是,Loki 可作為 Helm 包提供,使其易於部署。
通過 Heml 安裝
您應該已經安裝了 Heml。 可以從項目的 GitHub 存儲庫下載它。 它是通過提取適合您的架構的存檔並將 helm 添加到來安裝的 $PATH
.
注: Helm 3.0.0 版本最近發布。 由於改動較多,建議讀者稍等片刻後再開始使用。.
添加 Helm 源
第一步是使用以下命令添加“loki”存儲庫:
$ helm add loki https://grafana.github.io/loki/charts
之後,您可以搜索名為“loki”的包:
$ helm search loki
其結果是:
loki/loki 0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2 v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail 0.13.1 v0.4.0 Responsible for gathering logs and...
這些軟件包具有以下功能:
- 包 洛基 只匹配Loki服務器
- 包 洛基/流利位 允許您使用 Fluent-bin 來部署 DaemonSet 來收集日誌而不是 Promtail
- 包 洛基/promtail 包含日誌收集代理
- 包 洛基/洛基堆棧,讓您可以立即將 Loki 與 Promtail 一起部署。
安裝洛基
要將 Loki 部署到 Kubernetes,請在“monitoring”命名空間中運行以下命令:
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
要保存到磁盤,請添加選項 --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
注: 如果要同時部署Grafana,則添加參數
--set grafana.enabled = true
運行此命令時,您應該得到以下輸出:
LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
…
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.
查看“monitoring”命名空間中 Pod 的狀態,我們可以看到一切都已部署:
$ kubectl -n monitoring get pods -l release=loki
其結果是:
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 147m
loki-promtail-9zjvc 1/1 Running 0 3h25m
loki-promtail-f6brf 1/1 Running 0 11h
loki-promtail-hdcj7 1/1 Running 0 3h23m
loki-promtail-jbqhc 1/1 Running 0 11h
loki-promtail-mj642 1/1 Running 0 62m
loki-promtail-nm64g 1/1 Running 0 24m
所有 Pod 都在運行。 現在是時候做一些測試了!
連接到 Grafana
為了連接到 Kubernetes 下的 Grafana,您需要打開一條通往其 pod 的隧道。 以下是為 Grafana Pod 打開端口 3000 的命令:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
另外重要的一點是需要恢復Grafana管理員密碼。 密碼保密 loki-grafana
在現場 .data.admin-user
以base64 格式。
要恢復它,您需要運行以下命令:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
將此密碼與默認管理員帳戶 (admin) 結合使用。
Grafana 中的 Loki 數據源定義
首先,確保Loki數據源(配置/數據源)已創建。
這裡是一個例子:
為 Loki 設置數據源的示例
通過單擊“測試”,您可以測試與 Loki 的連接。
向洛基提出請求
現在轉到 Grafana 並轉到“探索”部分。 當從容器接收日誌時,Loki 會添加來自 Kubernetes 的元數據。 這樣就可以查看特定容器的日誌。
例如,要選擇 promtail 容器日誌,您可以使用以下查詢: {container_name = "promtail"}
.
不要忘記在這裡選擇 Loki 數據源。
此查詢將返回容器活動,如下所示:
Grafana 中的查詢結果
添加到儀表板
從 Grafana 6.4 開始,可以將日誌信息直接放在儀表板上。 之後,用戶將能夠在其站點上的請求數與應用程序跟踪之間快速切換。
下面是實現此交互的示例儀表板:
包含 Prometheus 指標和 Loki 日誌的示例儀表板
洛基的未來
我早在五月/六月就開始使用 Loki 0.1 版本。 今天已經發布了版本 1,甚至還有 1.1 和 1.2。
必須承認0.1版本還不夠穩定。 但 0.3 已經顯示出真正成熟的跡象,而接下來的版本(0.4,然後是 1.0)只是強化了這種印象。
1.0.0之後,沒有人可以有藉口不使用這個奇妙的工具。
進一步的改進不應該是關於 Loki,而是它與優秀的 Grafana 的集成。 事實上,Grafana 6.4 已經與儀表板有了很好的集成。
最近發布的 Grafana 6.5 通過自動識別 JSON 格式的日誌內容,進一步改進了這種集成。
下面的視頻顯示了此機制的一個小示例:
使用在 Grafana 中渲染的 Loki 字符串
可以使用 JSON 字段之一,例如:
- 鏈接到外部工具
- 日誌內容過濾
例如,您可以單擊traceId 轉到Zipkin 或Jaeger。
像往常一樣,我們期待您的評論並邀請您
來源: www.habr.com