<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 Grafana 構(gòu)建你的第一個儀表盤

          共 6556字,需瀏覽 14分鐘

           ·

          2021-10-26 19:41

          在大廠工作久了,時常對一些工具的存在覺得理所當然。比如說,需要計算資源的時候,一個配置文件就可以要來兩百臺虛擬化好的機子。需要試下緩存?點下鼠標就可以要到幾十個配置好的 Redis 結(jié)點。最省心的是,這些工具都已經(jīng)根據(jù)工作流配置好了:鑒權(quán)、優(yōu)化、網(wǎng)絡(luò)連接等等通通不用你操心。

          但一切要自己擼起袖子干的時候,開始發(fā)現(xiàn)各種踩坑。拿 Grafana 和服務(wù)監(jiān)控來說:

          1. 服務(wù)監(jiān)控到底咋配置?怎樣保證數(shù)據(jù)安全?
          2. 保證健康的服務(wù)到底應(yīng)該監(jiān)控些什么?
          3. 配置好后的儀表盤為啥消失了?
          4. 查詢 Query 又該咋寫?

          等等問題迎面而來。

          中文世界里關(guān)于 Grafana 的教程少得令人發(fā)指,于是在卡拉搜索搭建服務(wù)監(jiān)控的期間,特意記錄了一下搭建的過程,寫下了這篇詳細的教程。

          這篇文章(包括之后的一系列文章)里,我通過還熱乎的經(jīng)驗介紹下我們是怎樣一步步給卡拉搜索配好 Grafana,來監(jiān)控我們的搜索服務(wù)的。我們詳細介紹怎樣配置權(quán)限,具體運維監(jiān)控的準則保證服務(wù)健康,以及用配套的代碼讓你搭起來第一個儀表盤。同時我們也會介紹一些在卡拉搜索的系統(tǒng)監(jiān)控應(yīng)用實踐。

          我保證這篇教程不會像 99% 的 CSDN 文章一樣只是復(fù)制粘貼一些簡單步驟,而是更多從原理出發(fā),配合實踐,一步步讓你開始用服務(wù)監(jiān)控,并從中受益。

          如果你喜歡我的文章的話,請鏈接回來,分享給朋友或關(guān)注我們的公眾號(HiXieke)。

          在卡拉搜索,我們用 Grafana 監(jiān)控所有的服務(wù)狀態(tài),從引擎到索引。完善的監(jiān)控幫助我們實時了解卡拉的搜索延遲,慢搜索,Docker 狀態(tài)等等。如果你對搜索引擎、數(shù)據(jù)庫搜索、App 內(nèi)搜索感興趣,也歡迎通過博客 或 Demo 進一步了解或試用卡拉搜索

          本文的例子中,我們用的是 Prometheus(普羅米修斯時序數(shù)據(jù)庫)作為時序數(shù)據(jù)庫。但實際上你可以用任何 Grafana 支持的數(shù)據(jù)源,只需要稍微替換一下配置即可(文中會講)

          本文的代碼放在 GitHub 上,請參考:Grafana 教程代碼

          Grafana 是什么

          開始前首先要問一個問題,Grafana 到底是什么。

          Grafana 是一個監(jiān)控儀表系統(tǒng),它是由 Grafana Labs 公司開源的的一個系統(tǒng)監(jiān)測 (System Monitoring) 工具。它可以大大幫助你簡化監(jiān)控的復(fù)雜度,你只需要提供你需要監(jiān)控的數(shù)據(jù),它就可以幫你生成各種可視化儀表。同時它還有報警功能,可以在系統(tǒng)出現(xiàn)問題時通知你。

          Grafana 不對數(shù)據(jù)源作假設(shè),它支持以下各種數(shù)據(jù),也就是說如果你的數(shù)據(jù)源是以下任意一種,它都可以幫助生成儀表。同時在市面上,如果 Grafana 稱第二,那么應(yīng)該沒有敢稱第一的儀表可視化工具了。因此,如果你搞定了 Grafana,它幾乎是一個會陪伴你到各個公司的一件稱心應(yīng)手的兵器。

          Grafana 支持的數(shù)據(jù)源

          • Prometheus 本文中的例子,你沒聽過也沒關(guān)系不影響閱讀,把它想象成帶時間戳的 MySQL 就好
          • Graphite
          • OpenTSDB
          • InfluxDB
          • MySQL/PostgreSQL
          • Microsoft SQL Server
          • 等等

          什么情況下會用到 Grafana

          通常來說,對于一個運行時的復(fù)雜系統(tǒng),你是不太可能在運行時一邊檢查代碼一邊調(diào)試的。因此,你需要在各種關(guān)鍵點加上監(jiān)控。

          用開車作為例子:車子本身是一個極其復(fù)雜的系統(tǒng),而當你的車在高速上以 120 公里的速度狂奔時出現(xiàn)了噪音,你是不可能這時候邊開車邊打開發(fā)動機蓋子來查原因的。通常來說,好一點的車會有內(nèi)置電腦,在車子出問題時,告訴你左邊輪胎胎壓有問題,或是發(fā)動機缺水了之類。而這些檢測,就是系統(tǒng)監(jiān)控的一個例子。

          對于駕駛員來說,他們開車時只關(guān)心幾個指標:

          1. 我的位置是哪里,在路中間么(當然這個無法通過監(jiān)控系統(tǒng)實現(xiàn),得看路)
          2. 我的速度是多少 - 速度儀表盤
          3. 我的油、發(fā)動機水溫等等關(guān)鍵指標是多少 - 其它儀表盤

          通過儀表盤,你不一定能清楚地了解車子出問題的具體原因,但至少可以給你一個大概的方向。比如說,如果水溫很高時出現(xiàn)了問題,你大概率可以嘗試加點水降溫來嘗試是否解決問題。

          把上面的車換成計算機系統(tǒng)或者一個軟件系統(tǒng)也是一樣:儀表盤就是你的速度表和水溫表,通過這些表盤你可以實時了解你的系統(tǒng)運行情況。

          儀表盤應(yīng)用極廣,我能想到的一些例子:

          1. 阿里在雙十一控制室用了監(jiān)控儀表盤,因此所有雙十一的新聞基本上都可以看到這個儀表盤
          2. 各酷炫公司大廳里常常放一個儀表盤來展示實力(用戶數(shù)啦、營收啦之類)
          3. 你的 PC 上的資源管理器、Mac 上的 Activity Monitor 都是某種意義上的儀表盤

          用一個卡拉搜索的實踐作例子:

          我們希望卡拉搜索能提供游戲級的搜索性能,比 Elastic Search 還快十倍。那么這就要求我們 99% 的搜索結(jié)果在 5-10 毫秒內(nèi)要完成。因此,我們就需要添加這么一個儀表盤,能實時知道用戶搜索的延遲,并且當搜索延遲超過 10 毫秒時通知到我們。

          綜上,在任何需要監(jiān)控系統(tǒng)運行狀況的地方就大概率會用到儀表盤,而用到儀表盤的時候就可以用 Grafana (不管你用什么語言)

          安裝和配置 Grafana

          為了簡化各種系統(tǒng)不一致的亂七八糟問題,我們用 Docker 來安裝 Grafana。(如果還沒有安裝 Docker 可以參考我們的教程[如何安裝 Docker](/tutorials/how-to-install-and-use-docker-on-ubuntu)。

          Docker 的配置文件如下,就算你從來沒用過 docker 也不用操心,我會在下文里一行一行講明白。請不要復(fù)制粘貼代碼,直接到本文的 GitHub 頁 clone 代碼即可,我會保證 GitHub 上的代碼處理最新狀態(tài):https://github.com/Kalasearch/grafana-tutorial

          version: '3.4'
          services:
          prometheus:
          image: prom/prometheus
          container_name: prometheus
          hostname: prometheus
          ports:
          - 9090:9090
          volumes:
          - ./prometheus.yml:/etc/prometheus/prometheus.yml
          prometheus-exporter:
          image: prom/node-exporter
          container_name: prometheus-exporter
          hostname: prometheus-exporter
          ports:
          - 9100:9100
          grafana:
          image: grafana/grafana
          container_name: grafana
          hostname: grafana
          ports:
          - 3000:3000
          volumes:
          - ./grafana.ini:/etc/grafana/grafana.ini

          在這里我們啟動了三個服務(wù)

          • Prometheus 普羅米修斯時序數(shù)據(jù)庫,用來存儲和查詢你的監(jiān)控數(shù)據(jù)
          • Promethues-exporter 一個模擬數(shù)據(jù)源,用來監(jiān)控你本機的狀態(tài),比如有幾個 CPU,CPU 的負載之類
          • Grafana 本尊

          在 clone 了代碼之后,在你的本地運行 docker-compose up,應(yīng)該會看到類似:

          那么就說明服務(wù)已經(jīng)跑起來了。注意,在之后的所有步驟中,你的 docker 應(yīng)該處于運行狀態(tài)。

          在跑起來服務(wù)之后,到你的瀏覽器中,復(fù)制 http://localhost:3000 應(yīng)該就可以看到 Grafana 跑起來的初始登錄界面。初始的用戶名是 admin,密碼也是 admin。輸入之后,會要求你改密碼

          然后就可以進入 Grafana 的主界面了:

          到這里,你的 Grafana 就已經(jīng)搭起來了。注意到 Docker 的配置文件中我們創(chuàng)建了三個服務(wù),這三個服務(wù)之間分別有什么關(guān)系呢?

          或者說,Grafana 和時序數(shù)據(jù)庫,數(shù)據(jù)源之間有什么關(guān)系呢?請看下文 Grafana 工作原理

          Grfana 工作原理

          上面說到,Grafana 是一個儀表盤,而儀表盤必然是用來顯示數(shù)據(jù)的。

          Grafana 本身并不負責數(shù)據(jù)層,它只提供了通用的接口,讓底層的數(shù)據(jù)庫可以把數(shù)據(jù)給它。而我們起的另一個服務(wù),叫 Prometheus (中文名普羅米修斯數(shù)據(jù)庫)則是負責存儲和查詢數(shù)據(jù)的。

          也就是說,Grafana 每次要展現(xiàn)一個儀表盤的時候,會向 Prometheus 發(fā)送一個查詢請求。

          那么配置里的另一個服務(wù) Prometheus-exporter 又是什么呢?

          這個就是你真正監(jiān)測的數(shù)據(jù)來源了,Prometheus-exporter 這個服務(wù),會查詢你的本地電腦的信息,比如內(nèi)存還有多少、CPU 負載之類,然后將數(shù)據(jù)導(dǎo)出至普羅米修斯數(shù)據(jù)庫。

          在真實世界中,你的目的是監(jiān)控你自己的服務(wù),比如你的 Web 服務(wù)器,你的數(shù)據(jù)庫之類。

          那么你就需要在你自己的服務(wù)器中把數(shù)據(jù)發(fā)送給普羅米修斯數(shù)據(jù)庫。當然,你完全可以把數(shù)據(jù)發(fā)送給 MySQL (Grafana 也支持),但普羅米修斯幾乎是標配的時序數(shù)據(jù)庫,強烈建議你用。

          用一張圖來說明它們之間的關(guān)系:

          這里,最左邊的 Docker 服務(wù)會將服務(wù)的數(shù)據(jù)發(fā)送給中間的普羅米修斯(對應(yīng)上文的 Prometheus-exporter),而最右邊的 Grafana 會查詢中間的普羅米修斯,來展示儀表盤。

          關(guān)于普羅米修斯本身也可以寫一篇很長的教程了,這里我們先暫時略去不表。請關(guān)注我們的技術(shù)博客或公眾號 (HiXieke),之后我們會繼續(xù)展開講。

          搭建你的第一個儀表盤

          現(xiàn)在我們來搭建你的第一個儀表盤。

          第 1 步 - 設(shè)置數(shù)據(jù)源

          進入 Grafana 后,在左側(cè)你會發(fā)現(xiàn)有一個 Data Source 即數(shù)據(jù)源選項

          點擊后進入,點 Add Data Source 即添加數(shù)據(jù)源,選擇 Prometheus

          之后設(shè)置數(shù)據(jù)源 URL。請注意,Promethues 的工作原理(下一個教程中會講)是通過輪詢一個 HTTP 請求來獲取數(shù)據(jù)的,而 Grafana 在獲取數(shù)據(jù)源的時候也是通過一個 HTTP 請求,因此這個地方你需要告訴 Grafana 你的 Prometheus 的數(shù)據(jù)端點是什么。

          這里我們填入 http://prometheus:9090 就可以了。

          你可能會問,為什么不是 localhost:9090 呢?原因是,我們用了 docker-compose 起的三個服務(wù),可以把它們想象成三臺獨立的服務(wù)器,因此需要用一個域名來互相通信。我們在 docker-compose.yml 中設(shè)置的普羅米修斯服務(wù)器的名字就叫 prometheus,因此這里需要用前者。

          點確認時一定要確認出現(xiàn) Data source is working 這個檢測,這時表明你的 Grafana 已經(jīng)跟普羅米修斯說上話了

          第 2 步 - 導(dǎo)入 Dashboard

          在 Grafana 里,儀表盤的配置可以通過圖形化界面進行,但配置好的儀表盤是以 JSON 存儲的。這也就是說,如果你把你的 JSON 數(shù)據(jù)分享出去,別人導(dǎo)入就可以直接導(dǎo)入同樣的儀表盤(前提是你們的監(jiān)測數(shù)據(jù)一樣)。

          對于我們的例子來說,回憶一下,因為我們用了 prometheus-exporter 也就是本機的系統(tǒng)信息監(jiān)控,那么我們可以先找一個同樣用了這個數(shù)據(jù)源的儀表盤。在 Grafana 網(wǎng)站上,你其實可以找到很多別人已經(jīng)做好的儀表,可以用來監(jiān)測非常多標準化的服務(wù)。

          Grafana 的儀表盤市場:https://grafana.com/grafana/dashboards

          比如說針對以下一些服務(wù)的標準儀表盤就可以在這里找到

          • JVM
          • Spring Boot
          • MySQL 監(jiān)控
          • Laravel 監(jiān)控

          那么,這里我們就用一個標準的儀表盤:https://grafana.com/grafana/dashboards/1860

          在左側(cè)的加號里,點 Import 即導(dǎo)入,在出現(xiàn)的界面中填入 1860 即我們要導(dǎo)入的儀表盤編號即可。

          然后填入你需要的信息,比如儀表盤名字等

          確認之后 Grafana 就會根據(jù)你的本機信息,生成類似 CPU 負載,內(nèi)存和 I/O 之類的信息。我的磁盤狀況如圖:

          要注意的是,這里的信息真正監(jiān)控的是你的 Docker 中的系統(tǒng)信息。如果你只給你的 Docker 分配 1 個核和 2G 內(nèi)存,那么這里應(yīng)該看到的就是 1 個核和 2G 內(nèi)存

          第 3 步 - 生成和創(chuàng)建新的儀表盤

          最后,在上面導(dǎo)入信息的基礎(chǔ)上,你就可以開始創(chuàng)建和你的服務(wù)、業(yè)務(wù)相關(guān)的儀表盤了。

          但在這步之前,你需要先在你的服務(wù)中開始記錄一些數(shù)據(jù)。

          這一步涉及

          如何在各種語言中記錄你關(guān)注的數(shù)據(jù)?

          拿卡拉搜索舉例子,我們關(guān)注用卡拉搜索的 APP 的搜索響應(yīng)速度,所以自然我們需要在所有搜索請求處記錄延遲。

          對于你的服務(wù),你需要根據(jù)自己的業(yè)務(wù)確認哪些數(shù)據(jù)是重要的,關(guān)于如何記錄數(shù)據(jù),如何思考運維等,我會在之后的博客中繼續(xù)深入討論。如果你想更深入地了解這個領(lǐng)域,推薦閱讀 Google 運維手冊這本書,英文名叫《Google SRE Book》,免費的書。

          包括如何用 Prometheus 查詢數(shù)據(jù)

          普羅米修斯本身也是個非常大的話題,我們會在之后的博客中繼續(xù)討論。普羅米修斯包括所有其它時序數(shù)據(jù)庫通常都會定義一個查詢語言,比如說 PromQL,如果需要熟練地構(gòu)建儀表盤的話,需要對這個查詢語言有一定了解。

          如何手動生成一個儀表盤

          假設(shè)你已經(jīng)按上面的步驟生成了一個基本的儀表盤,那么現(xiàn)在可以開始手動添加儀表盤了。同樣是點左側(cè)的加號,點 Dashboard 就可以進入添加儀表盤的界面。

          這里我們選擇一個數(shù)據(jù)叫 scrape_duration_seconds,先不用管它的含義是什么,就當它是雙 11 的銷售額好了:

          添加好后點右上角的 ApplySave 你的儀表盤就被保存了。這時候,用一個大屏幕展示一下,慶祝一下雙十一又過了千億吧 :D

          總結(jié)

          這篇文章里我們從頭到尾介紹了如何用 Grafana 生成儀表盤,如何配置和連接數(shù)據(jù)源,以及如何導(dǎo)入和創(chuàng)建一個儀表盤。

          之后的文章中,我們會介紹在卡拉搜索,我們是怎樣監(jiān)測服務(wù)健康狀態(tài)的,同時我們會介紹 Prometheus 即普羅米修斯時序數(shù)據(jù)庫的用法,歡迎繼續(xù)關(guān)注我們的博客和公眾號(HiXieke)。

          如果你的 App 或小程序需要搜索功能,也可以到卡拉搜索首頁了解一下我們的托管搜索服務(wù)?;?5分鐘接入,我們就可以幫你為你的用戶提供比 ElasticSearch 還快 10 倍的搜索體驗,提高轉(zhuǎn)化率和用戶留存。

          本文參考了以下文章:

          • https://grafana.com/blog/2019/12/04/how-to-explore-prometheus-with-easy-hello-world-projects/
          • https://prometheus.io/docs/guides/node-exporter/
          • https://grafana.com/tutorials/
          • https://grafana.com/blog/2019/06/18/grafana-tutorial-simple-synthetic-monitoring-for-applications/
          • https://ken.io/note/grafana-quickstart-influxdb-datasource-graph

          原文鏈接:https://kalasearch.cn/blog/grafana-with-prometheus-tutorial/

          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美在线观看黄片 | 三级网站在线麻豆 | 麻豆成人在线视频 | 欧美嫩逼| 深夜操逼逼网站 |