掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:k8s技術(shù)圈 2023-08-29 07:34:43
云計(jì)算
云原生 Mimir 可以輕松擴(kuò)展到 10 億個(gè)指標(biāo)甚至更多,其查詢性能比 Cortex 快 40 倍,TSDB Mimir 就是為了取代 Cortex 而構(gòu)建的。Cortex 自 2018 年以來一直是 CNCF 項(xiàng)目,廣泛用于存儲(chǔ) Prometheus 指標(biāo)。在創(chuàng)建 Mimir 時(shí),Grafana Labs 通過 AGPLv3 許可、訪問控制以及改進(jìn)的性能、可擴(kuò)展性和可用性為企業(yè)級(jí)可觀測(cè)性奠定了基礎(chǔ)。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),沈陽企業(yè)網(wǎng)站建設(shè),沈陽品牌網(wǎng)站建設(shè),網(wǎng)站定制,沈陽網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,沈陽網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
Grafana Mimir 是 Grafana Labs 開發(fā)的一個(gè) AGPLv3 許可的開源軟件項(xiàng)目,與對(duì)象存儲(chǔ)結(jié)合使用時(shí),可為 Prometheus 指標(biāo)提供可擴(kuò)展的長(zhǎng)期存儲(chǔ)。Mimir 使用基于微服務(wù)的可水平擴(kuò)展的架構(gòu)構(gòu)建。每個(gè)微服務(wù)被稱為一個(gè)組件,Mimir 作為由這些組件組成的單個(gè)二進(jìn)制文件運(yùn)行。大多數(shù)組件都是無狀態(tài)的,不需要在重新啟動(dòng)之間保留任何數(shù)據(jù)。這里我們結(jié)合 MinIO 來使用 Grafana Mimir。
當(dāng)您將 Mimir 和 MinIO 結(jié)合起來時(shí),您將生成一個(gè)特別適合滿足企業(yè)云原生可觀察性需求的基礎(chǔ)架構(gòu),其中包括:
Grafana Mimir 的一些核心優(yōu)勢(shì)包括:
Mimir 可以輕松擴(kuò)展到 10 億個(gè)指標(biāo)甚至更多,其查詢性能比 Cortex 快 40 倍,TSDB Mimir 就是為了取代 Cortex 而構(gòu)建的。Cortex 自 2018 年以來一直是 CNCF 項(xiàng)目,廣泛用于存儲(chǔ) Prometheus 指標(biāo)。在創(chuàng)建 Mimir 時(shí),Grafana Labs 通過 AGPLv3 許可、訪問控制以及改進(jìn)的性能、可擴(kuò)展性和可用性為企業(yè)級(jí)可觀測(cè)性奠定了基礎(chǔ)。
Grafana Labs 對(duì) Mimir 的目標(biāo)是:成為最佳可擴(kuò)展時(shí)間序列數(shù)據(jù)庫,無論指標(biāo)格式如何。企業(yè)應(yīng)該能夠在不修改現(xiàn)有代碼的情況下使用 Prometheus 指標(biāo)(以及其他供應(yīng)商協(xié)作的其他指標(biāo))。它給自己的定位是成為可觀測(cè)性中 metrics 后端存儲(chǔ)的終極方案,能夠兼容各種 metrics 協(xié)議,如圖:
整體上 Grafana Mimir 有兩種部署模式:
部署模式由 -target 參數(shù)確定,可以通過 CLI 標(biāo)志或 YAML 配置來設(shè)置該參數(shù)。
整體模式在單個(gè)進(jìn)程中運(yùn)行所有必需的組件,并且是默認(rèn)的操作模式,你可以通過指定 -target=all 來設(shè)置。單體模式是部署 Grafana Mimir 的最簡(jiǎn)單方法,如果您想快速入門或想在開發(fā)環(huán)境中使用 Grafana Mimir,該模式非常有用。要查看 -target 設(shè)置為 all 時(shí)運(yùn)行的組件列表,請(qǐng)使用 ./mimir -modules 查看:
通過使用 -target=all 部署多個(gè) Grafana Mimir 二進(jìn)制文件,可以水平擴(kuò)展整體模式。這種方法提供了高可用性和更大的規(guī)模,而沒有完整的微服務(wù)部署的配置復(fù)雜性。
在微服務(wù)模式下,組件部署在不同的進(jìn)程中。擴(kuò)展是按組件進(jìn)行的,這使得擴(kuò)展具有更大的靈活性和更細(xì)粒度的故障域。微服務(wù)模式是生產(chǎn)部署的首選方法,但也是最復(fù)雜的。
在微服務(wù)模式下,每個(gè) Grafana Mimir 進(jìn)程都會(huì)被調(diào)用,其 -target 參數(shù)設(shè)置為特定的 Grafana Mimir 組件(例如,-target=ingester 或 -target=distributor)。要獲得有效的 Grafana Mimir 實(shí)例,您必須部署每個(gè)必需的組件。
如果您有興趣以微服務(wù)模式部署 Grafana Mimir,我們建議您使用 Kubernetes 和 mimir 分布式 Helm Chart。
讀寫分離部署模式目前還處于實(shí)驗(yàn)階段。
讀寫分離模式提供了單體和微服務(wù)模式的替代方案。在讀寫分離模式下,組件被分為三個(gè)服務(wù),以減輕操作開銷,同時(shí)仍然允許在讀取和寫入路徑上單獨(dú)調(diào)整規(guī)模。這些服務(wù)將組件分組如下:
store-gateway
compactor
ruler
alertmanager
query-scheduler
overrides-exporter
write
distributor
ingester
與其他模式類似,每個(gè) Grafana Mimir 進(jìn)程都是通過將其 -target 參數(shù)設(shè)置為特定服務(wù)來調(diào)用的:-target=read、-target=write 或 -target=backend。
上面的不同架構(gòu)中都提到了 Mimir 的組件,這里我們來看一下 Mimir 的組件。
為了和大家說明 Mimir 的使用,這里我們將通過 Docker 來使用 Mimir。
首先使用下面命令獲取 Mimir 代碼:
git clone https://github.com/grafana/mimir.git導(dǎo)航到教程目錄:
cd mimir
cd docs/sources/mimir/get-started/play-with-grafana-mimir/該目錄下面包含一個(gè) docker-compose.yml 文件,我們可以直接使用 docker-compose 來啟動(dòng) MinIO、Mimir、Prometheus、Grafana 和 NGINX:
docker-compose up該命令會(huì)啟動(dòng)如下幾個(gè)容器:
啟動(dòng)后可以使用以下端口訪問:
上面啟動(dòng)的服務(wù)整體架構(gòu)如下所示:
我們這里啟動(dòng)的 Grafana Mimir 配置文件如下所示:
# Do not use this configuration in production.
# It is for demonstration purposes only.
# Run Mimir in single process mode, with all components running in 1 process.
target: all,alertmanager,overrides-exporter
# Configure Mimir to use Minio as object storage backend.
common:
storage:
backend: s3
s3:
endpoint: minio:9000
access_key_id: mimir
secret_access_key: supersecret
insecure: true
bucket_name: mimir
# Blocks storage requires a prefix when using a common object storage bucket.
blocks_storage:
storage_prefix: blocks
tsdb:
dir: /data/ingester
# Use memberlist, a gossip-based protocol, to enable the 3 Mimir replicas to communicate
memberlist:
join_members: [mimir-1, mimir-2, mimir-3]
ruler:
rule_path: /data/ruler
alertmanager_url: http://127.0.0.1:8080/alertmanager
ring:
# Quickly detect unhealthy rulers to speed up the tutorial.
heartbeat_period: 2s
heartbeat_timeout: 10s
alertmanager:
data_dir: /data/alertmanager
fallback_config_file: /etc/alertmanager-fallback-config.yaml
external_url: http://localhost:9009/alertmanager
server:
log_level: warn我們可以通過訪問 http://localhost:9009 來查看 Mimir 各個(gè)組件的狀態(tài):
要訪問 Grafana,請(qǐng)啟動(dòng)瀏覽器并打開 http://localhost:9000。您將使用 Grafana 查看顯示 Mimir 集群狀態(tài)的儀表板。儀表板向 Mimir 查詢它們顯示的指標(biāo)。從左上角的菜單中,單擊儀表板,然后單擊瀏覽以查看已為本教程預(yù)加載的儀表板。這些儀表板來自 Grafana Mimir mixin,它將 Grafana Labs 的最佳實(shí)踐儀表板、記錄規(guī)則和用于監(jiān)控 Mimir 的警報(bào)打包在一起。
啟動(dòng)容器后,指標(biāo)通常需要 3-5 分鐘才能顯示在 Grafana 儀表板中。我們還在沒有入口網(wǎng)關(guān)、查詢調(diào)度程序或內(nèi)存緩存的情況下運(yùn)行 Mimir,因此相關(guān)儀表板將為空。
我們可以先瀏覽儀表板以進(jìn)行寫入、讀取、查詢和對(duì)象存儲(chǔ)。例如,對(duì)象存儲(chǔ)儀表板顯示了自從我們啟動(dòng) Mimir 以來發(fā)生的操作。
記錄規(guī)則是一種預(yù)先計(jì)算經(jīng)常需要的或計(jì)算成本較高的表達(dá)式并將結(jié)果保存為一組新的時(shí)間序列的機(jī)制。按照以下說明我們可以使用 Grafana 在 Mimir 中配置記錄規(guī)則。
比如 sum:up 記錄規(guī)則將顯示已啟動(dòng)且可進(jìn)行抓取的 Mimir 實(shí)例的數(shù)量。創(chuàng)建規(guī)則后,即可將其查詢并包含在儀表板中。
從左側(cè)工具欄打開報(bào)警菜單頁,然后點(diǎn)擊 Create alert rule 按鈕新建報(bào)警規(guī)則:
按照以下步驟配置記錄規(guī)則:
要驗(yàn)證新的記錄規(guī)則是否正確運(yùn)行,請(qǐng)從左側(cè)菜單中打開 Explore 頁面:
在 Metric 下拉列表中,選擇 sum:up ,然后單擊右上角的 Run query,然后單擊 Inspector 按鈕。在下面,單擊 Data 可查看時(shí)間列表和查詢結(jié)果。結(jié)果應(yīng)該是3,表明 Mimir 的三個(gè)本地實(shí)例正在運(yùn)行。
基于 Mimir 構(gòu)建的報(bào)警規(guī)則遵循與基于 Prometheus 和 Loki 構(gòu)建的報(bào)警規(guī)則相同的 PromQL 格式。Grafana 評(píng)估表達(dá)式,并在必要時(shí)使用 Alertmanager 發(fā)出警報(bào)。
這里我們將創(chuàng)建一個(gè)報(bào)警,當(dāng) Mimir 實(shí)例的數(shù)量降至三個(gè)以下時(shí)觸發(fā)。同樣在左側(cè)菜單中,點(diǎn)擊 Alerting,然后切換到 Alert rules 頁面,然后單擊 Create alert rule。
現(xiàn)在我們需要選擇 Mimir or Loki alert,然后按照以下步驟配置報(bào)警規(guī)則:
創(chuàng)建完成后我們將看到我們的 Mimir 記錄規(guī)則和警報(bào)規(guī)則。請(qǐng)注意,警報(bào)旁邊顯示了一個(gè)漂亮、大、舒適的綠色正常狀態(tài),因?yàn)槲覀兯械?Mimir 容器仍在運(yùn)行。
現(xiàn)在我們通過終止三個(gè) Mimir 實(shí)例中的一個(gè)來模擬錯(cuò)誤情況(確保您位于 docs/sources/mimir/get-started/play-with-grafana-mimir/ 目錄中):
$ docker-compose kill mimir-3
[+] Running 1/1
? Container play-with-grafana-mimir-mimir-3-1 Killed 0.2s
play-with-grafana-mimir git:(main)由于我們突然終止 Mimir 實(shí)例,Grafana 在查詢規(guī)則時(shí)會(huì)短暫顯示錯(cuò)誤。一旦 Mimir 的內(nèi)部運(yùn)行狀況檢查檢測(cè)到已終止的實(shí)例運(yùn)行狀況不佳,此問題就會(huì)自動(dòng)解決。
大約一分鐘后,報(bào)警將很快顯示黃色 Pending 待處理狀態(tài):
再過一分鐘,警報(bào)將變?yōu)榧t色 Firing 觸發(fā)狀態(tài):
如果我們?yōu)?Alertmanager 配置了通知通道,報(bào)警就會(huì)向適當(dāng)?shù)臋C(jī)制和聯(lián)系人發(fā)出。
在我們恢復(fù)終止的 Mimir 實(shí)例之前,請(qǐng)返回 Grafana 中的 Explorer 頁面并查詢我們的 sum:up 記錄規(guī)則。我們可以看到,即使 Mimir 實(shí)例已關(guān)閉,Mimir 仍繼續(xù)正確記錄指標(biāo)。
最后,我們恢復(fù) Mimir 實(shí)例:
$ docker-compose start mimir-3
[+] Running 1/1
? Container play-with-grafana-mimir-mimir-3-1 Started 0.2s
play-with-grafana-mimir git:(main)返回報(bào)警頁面,您會(huì)發(fā)現(xiàn)我們的報(bào)警狀態(tài)很快會(huì)恢復(fù)正常。
這里我們使用 Mimir 本身的 Prometheus 指標(biāo),然后在 Grafana 中查詢和可視化它們。我們還配置了記錄規(guī)則和警報(bào),并驗(yàn)證了滿足條件時(shí)警報(bào)是否按預(yù)期觸發(fā)。您還可以配置 Mimir 和 Grafana 從 MinIO 中抓取 Prometheus 指標(biāo),并通過 AlertManager 發(fā)出警報(bào)。Mimir 將數(shù)據(jù)存儲(chǔ)在對(duì)象存儲(chǔ)中以實(shí)現(xiàn)持久性,從而使其能夠利用無處不在、經(jīng)濟(jì)高效且高耐用性的 MinIO。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流