1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        徹底搞懂監(jiān)控系統(tǒng),使用Prometheus +Grafana搭建完整的應用監(jiān)控系統(tǒng)

        共 6909字,需瀏覽 14分鐘

         ·

        2022-07-26 14:50

        監(jiān)控是運維系統(tǒng)的基礎,我們衡量一個公司/部門的運維水平,看他們的監(jiān)控系統(tǒng)就可以了。一個完善的監(jiān)控系統(tǒng)可以提高應用的可用性和可靠性,在提供更優(yōu)質(zhì)服務的前提下,降低運維的投入和工作量,為用戶帶來更多的商業(yè)利益和客戶體驗。下面就帶大家徹底搞懂監(jiān)控系統(tǒng),使用Prometheus +Grafana搭建完整的應用監(jiān)控系統(tǒng)。


        一、監(jiān)控系統(tǒng)簡介

        1.1 什么是監(jiān)控系統(tǒng)?

        監(jiān)控系統(tǒng)顧名思義就是監(jiān)控服務器、應用系統(tǒng)以及其他第三方組件運行狀態(tài)的系統(tǒng)。對于平臺系統(tǒng)而言,監(jiān)控系統(tǒng)就是我們第三只眼,監(jiān)控系統(tǒng)會實時跟蹤應用平臺的運行狀態(tài),如果有應用系統(tǒng)出現(xiàn)問題或是服務器內(nèi)存爆滿,我們通過監(jiān)控系統(tǒng)就可以快速定位問題所在,甚至可以設置預警,對一些將要出現(xiàn)的問題進行提前預防處理,及時避免問題的發(fā)生。


        1.2 監(jiān)控系統(tǒng)的作用

        監(jiān)控是運維系統(tǒng)的基礎,我們衡量一個公司/部門的運維水平,看他們的監(jiān)控系統(tǒng)就可以了。監(jiān)控系統(tǒng)的作用不言而喻,能幫我們快速定位問題,減少故障,容量規(guī)劃,性能優(yōu)化等。

        1)定位故障:在發(fā)生故障時,我們可以通過查看監(jiān)控系統(tǒng)的各項指標數(shù)據(jù),輔助故障分析和定位。

        2)減少故障率:對于即將可能產(chǎn)生的故障能夠及時發(fā)出預警信息,做好提前預防處理。

        3)容量規(guī)劃:為服務器、中間件以及應用集群的容量規(guī)劃提供數(shù)據(jù)支撐。

        4)性能調(diào)優(yōu):JVM垃圾回收次數(shù)、接口響應時間、慢SQL等等都可以監(jiān)控優(yōu)化。

        總而言之,一個完善的監(jiān)控系統(tǒng)可以提高應用的可用性和可靠性,在提供更優(yōu)質(zhì)服務的前提下,降低運維的投入和工作量,為用戶帶來更多的商業(yè)利益和客戶體驗。


        1.3 常見的監(jiān)控對象和指標都有哪些?

        應用系統(tǒng)的監(jiān)控主要分為指標監(jiān)控和日志監(jiān)控兩大部分:

            (1)指標監(jiān)控主要是對一定時間段內(nèi)性能指標進行測量,然后再通過時間序列的方式,進行處理、存儲和告警。

            (2)日志監(jiān)控則可以提供更詳細的上下文信息,通常通過 ELK 技術棧來進行收集、索引和圖形化展示。


        指標監(jiān)控可以說是系統(tǒng)監(jiān)控最核心的功能。主要有服務器資源、應用監(jiān)控、數(shù)據(jù)庫中間件等。

        • 服務器資源監(jiān)控:CPU使用率、內(nèi)存使用率、磁盤使用率、磁盤讀寫的吞吐量、網(wǎng)絡出入流量等等。

        • 數(shù)據(jù)庫監(jiān)控:TPS、QPS、數(shù)據(jù)庫連接數(shù)、慢SQL、InnoDB緩沖池命中率等。

        • Redis監(jiān)控:內(nèi)存使用率、緩存命中率、key值總數(shù)、Redis響應請求時間、客戶端連接數(shù)、持久性指標等。

        • MQ消息監(jiān)控:連接數(shù)、隊列數(shù)、生產(chǎn)速率、消費速率、消息堆積量等等。

        • 應用監(jiān)控:包括HTTP請求,JVM,線程池等。

        日志監(jiān)控則更能清楚的記錄系統(tǒng)運行時的詳細狀態(tài),雖然指標監(jiān)控,可以幫助迅速定位發(fā)生瓶頸的位置,不過只有指標的話往往還不夠。比如,同樣的一個接口,當請求傳入的參數(shù)不同時,就可能會導致完全不同的性能問題。所以,除了指標外,我們還需要對這些指標的上下文信息進行監(jiān)控,而日志正是這些上下文的最佳來源。

        1.4 監(jiān)控系統(tǒng)的架構

        一個完整的監(jiān)控系統(tǒng)通常由數(shù)據(jù)采集、數(shù)據(jù)傳輸、數(shù)據(jù)存儲、數(shù)據(jù)展示、監(jiān)控告警等多個模塊組成。

        • 數(shù)據(jù)采集,采集的方式有很多種,包括日志埋點進行采集,JMX標準接口輸出監(jiān)控指標,被監(jiān)控對象提供REST API進行數(shù)據(jù)采集(如Hadoop、ES),系統(tǒng)命令行,統(tǒng)一的SDK進行侵入式的埋點和上報等。

        • 數(shù)據(jù)傳輸,將采集的數(shù)據(jù)以TCP、UDP或者HTTP協(xié)議的形式上報給監(jiān)控系統(tǒng),有主動Push模式,也有被動Pull模式。

        • 數(shù)據(jù)存儲,有使用MySQL、Oracle等關系數(shù)據(jù)庫存儲的,也有使用時序數(shù)據(jù)庫RRDTool、OpentTSDB、InfluxDB存儲的,還有使用HBase存儲的。

        • 數(shù)據(jù)展示,數(shù)據(jù)指標的圖形化展示。

        • 監(jiān)控告警,靈活的告警設置,以及支持郵件、短信、IM等多種通知通道。


        二、當前流行的監(jiān)控系統(tǒng)

        目前大部分廠商都采用自研或是基于開源組件的方式搭建自己的監(jiān)控平臺。當然也有很多非常流行的開源監(jiān)控系統(tǒng),其中,最流行的莫過于Zabbix和Prometheus。下面就對這兩個監(jiān)控系統(tǒng)進行介紹,同時總結下各自的優(yōu)劣勢。

        2.1 Zabbix

        Zabbix 1998年誕生,核心組件采用C語言開發(fā),Web端采用PHP開發(fā)。它屬于老牌監(jiān)控系統(tǒng)中的優(yōu)秀代表,功能全面,使用廣泛,是最優(yōu)秀的監(jiān)控解決方案之一。

        2.1.1 Zabbix的優(yōu)勢

        • 產(chǎn)品成熟:由于誕生時間長且使用廣泛,擁有豐富的文檔資料以及各種開源的數(shù)據(jù)采集插件,能覆蓋絕大部分監(jiān)控場景。

        • 采集方式豐富:支持Agent、SNMP、JMX、SSH等多種采集方式,以及主動和被動的數(shù)據(jù)傳輸方式。

        2.1.2 Zabbix的劣勢

        Zabbix需要在被監(jiān)控主機上安裝Agent,所有的數(shù)據(jù)都存在數(shù)據(jù)庫里,產(chǎn)生的數(shù)據(jù)很大,瓶頸主要在數(shù)據(jù)庫。


        2.2 Prometheus

        隨著微服務架構和容器的興起,Zabbix對容器監(jiān)控顯得力不從心。為解決監(jiān)控容器的問題 Prometheus 應運而生。

        Prometheus 是一套開源的系統(tǒng)監(jiān)控報警框架,采用Go語言開發(fā)。得益于Google與k8s的強力支持,自帶云原生的光環(huán),天然能夠友好協(xié)作,使得Prometheus 在開源社區(qū)異?;鸨?。

        2.2.1 Prometheus優(yōu)點

        (1)提供多維度數(shù)據(jù)模型和靈活的查詢方式

        通過將監(jiān)控指標關聯(lián)多個 tag,來將監(jiān)控數(shù)據(jù)進行任意維度的組合,并且提供簡單的 PromQL 查詢方式,還提供 HTTP 查詢接口,可以很方便地結合 Grafana 等 GUI 組件展示數(shù)據(jù)。

        (2)基于時序數(shù)據(jù)庫,支持服務器節(jié)點的本地存儲

        通過 Prometheus 自帶的時序數(shù)據(jù)庫,可以完成每秒千萬級的數(shù)據(jù)存儲;不僅如此,在保存大量歷史數(shù)據(jù)的場景中,Prometheus 可以對接第三方時序數(shù)據(jù)庫和 OpenTSDB 等。

        (3)定義了開放指標數(shù)據(jù)標準

        以基于 HTTP 的 Pull 方式采集時序數(shù)據(jù),只有實現(xiàn)了Prometheus監(jiān)控數(shù)據(jù)才可以被 Prometheus 采集、匯總、并支持 Push 方式向中間網(wǎng)關推送時序列數(shù)據(jù),能更加靈活地應對多種監(jiān)控場景。

        (4)支持通過靜態(tài)文件配置和動態(tài)發(fā)現(xiàn)機制發(fā)現(xiàn)監(jiān)控對象

        自動完成數(shù)據(jù)采集。Prometheus 目前已經(jīng)支持 Kubernetes、etcd、Consul 等多種服務發(fā)現(xiàn)機制。

        (5)易于維護

        可以通過二進制文件直接啟動,并且提供了容器化部署鏡像。

        (6)集群支持

        支持數(shù)據(jù)的分區(qū)采樣和集群部署,支持大規(guī)模集群監(jiān)控。

        2.2.2 Prometheus缺點

        • Prometheus 是基于 Metric 的監(jiān)控,不適用于日志(Logs)、事件(Event)、調(diào)用鏈(Tracing)。

        • 由于Prometheus采用的是Pull模型拉取數(shù)據(jù),意味著所有被監(jiān)控的endpoint必須是可達的,需要合理規(guī)劃網(wǎng)絡的安全配置。

        • 指標眾多,需進行適當裁剪。


        2.3 綜合對比

        下表通過多維度展現(xiàn)了各自監(jiān)控系統(tǒng)的優(yōu)缺點:

        綜合來看,Zabbix 的成熟度更高,上手更快,但靈活性較差。而且,監(jiān)控數(shù)據(jù)的復雜度增加后,Zabbix 做進一步定制難度很高,即使做好了定制,也沒法利用之前收集到的數(shù)據(jù)了(關系型數(shù)據(jù)庫造成的問題)。

        Prometheus 基本上是正相反,上手難度大一些,但由于定制靈活度高,數(shù)據(jù)也有更多的聚合可能,起步后的使用難度遠小于 Zabbix。

        如果監(jiān)控的是物理機,用 Zabbix 沒毛病,Zabbix 在傳統(tǒng)監(jiān)控系統(tǒng)中,尤其是在服務器相關監(jiān)控方面,占據(jù)絕對優(yōu)勢;但如果是云環(huán)境的話,除非是 Zabbix 玩的非常溜,可以做各種定制,否則還是 Prometheus 吧,畢竟人家就是干這個的。

        Prometheus 號稱下一代監(jiān)控系統(tǒng),已經(jīng)成為主導及容器監(jiān)控方面的標配,并且在未來可見的時間內(nèi)被廣泛應用。


        三、使用Prometheus+grafana搭建監(jiān)控系統(tǒng)

        前面,我們了解了一些監(jiān)控系統(tǒng)的區(qū)別和優(yōu)缺點,下面我們以Prometheus為例,帶大家一步一步搭建監(jiān)控系統(tǒng)。

        3.1 下載

        Prometheus需要下載prometheus(Prometheus主服務)、node_exporter(服務器監(jiān)控)、mysqld_exporter(Mysql數(shù)據(jù)庫監(jiān)控-可選)、pushgateway(數(shù)據(jù)網(wǎng)關-可選)、alertmanager(告警組件-可選)

        下載地址:https://prometheus.io/download/


        Grafana為數(shù)據(jù)展示界面,下載地址:https://grafana.com/grafana/download


        3.2 架構圖

        3.3 安裝 Prometheus Server

        Prometheus 的架構設計中,Prometheus Server 主要負責數(shù)據(jù)的收集,存儲并且對外提供數(shù)據(jù)查詢支持。下面開始安裝Prometheus Server。

        step1:首先,下載prometheus,并上傳到服務器

        # 解壓到/usr/local/prometheus目錄下:tar -zxvf prometheus-2.37.0.linux-amd64.tar.gz -C /usr/local/prometheus# 修改目錄名:cd /usr/local/prometheusmv prometheus-2.37.0.linux-amd64 prometheus-2.37.0

        setp2:啟動prometheus Server 服務。prometheus啟動非常簡單,只需要一個命令即可,進入到/usr/local/prometheus/prometheus-2.37.0后執(zhí)行如下命令:

        #進入prometheus目錄cd /usr/local/prometheus/prometheus-2.37.0#執(zhí)行啟動腳本./prometheus --web.enable-admin-api --config.file=prometheus.yml

        step3:驗證prometheus是否啟動成功,prometheus默認端口為:9090,我們在瀏覽器中輸入:http://10.2.1.231:9090/graph,進入prometheus數(shù)據(jù)展示頁面,說明prometheus啟動成功。


        3.4 安裝 Node Exporter

        實際的監(jiān)控樣本數(shù)據(jù)的由 Exporter 負責收集,如node_exporter 就是負責服務器的資源信息,同時提供了對外訪問的HTTP服務地址(通常是/metrics)給prometheus拉取監(jiān)控樣本數(shù)據(jù)。下面開始安裝node_exporter。

        step1:首先,下載node_exporter,并上傳到服務器

        # 解壓到/usr/local/prometheus目錄下:tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz -C /usr/local/prometheus# 修改目錄名:cd /usr/local/prometheusmv node_exporter-1.3.1.linux-amd64 node_exporter-1.3.1

        step2:啟動node_exporler,輸入如下命令啟動:

        #node_exportercd /usr/local/prometheus/node_exporter-1.3.1#執(zhí)行啟動命令,指定數(shù)據(jù)訪問的url./node_exporter --web.listen-address 10.2.1.231:9527

        step3:驗證node_exporler是否啟動成功,我們在瀏覽器中輸入上面指定的地址:http://10.2.1.231:9527/metrics,可以看到當前 node_exporter 獲取到的當前主機的所有監(jiān)控數(shù)據(jù)。說明node_exporler啟動成功。


        step4:最后,配置prometheus,將新增加的node配置到prometheus。

        修改prometheus-2.37.0 文件夾下的prometheus.yml文件。增加新的node配置,具體配置如下:

        scrape_configs:  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.  - job_name: "prometheus"    # metrics_path defaults to '/metrics'    # scheme defaults to 'http'.    static_configs:      - targets: ["localhost:9090"]          # 采集node exporter監(jiān)控數(shù)據(jù)  - job_name: 'node'    static_configs:      - targets: ['10.2.1.231:9527']

        修改完prometheus.yml 文件后,重新啟動prometheus。再次訪問prometheus數(shù)據(jù)展示頁面,選擇status | target,可以看到新的node已經(jīng)添加進來了。

        在Graph 頁面,在查詢框中輸入: process_cpu_seconds_total


        3.5 安裝grafana

        前面已經(jīng)把prometheus和node exporter 安裝并集成成功。prometheus雖然有自帶的數(shù)據(jù)展示界面,但是不夠全面也不直觀。接下來集成grafana 完成數(shù)據(jù)展示。

        下載地址:https://grafana.com/grafana/download

        step1:首先,下載Grafana,并上傳到服務器。

        # 下載grafanawget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.0.3.linux-amd64.tar.gz# 解壓到tar -zxvf grafana-enterprise-9.0.3.linux-amd64.tar.gz -C /usr/local/prometheus# 修改目錄名:cd /usr/local/prometheusmv ngrafana-enterprise-9.0.3.linux-amd64 grafana-9.0.3

        step2:啟動Grafana,輸入如下命令:

        #grafanacd /usr/local/prometheus/grafana-9.0.3/bin#執(zhí)行啟動命令,指定數(shù)據(jù)訪問的url./grafana-server --homepath /usr/local/prometheus/grafana-9.0.3 web

        step3:驗證是否安裝成功,Grafana默認端口:3000。在瀏覽器中輸入:http://10.2.1.231:3000/  輸入默認賬號密碼:admin\admin。能正常進入Grafana,說明Grafana安裝成功。

        step4:配置prometheus數(shù)據(jù)源,點擊 設置 | Data Source ,按照操作添加prometheus數(shù)據(jù)源。

        點擊add data source,后選擇prometheus數(shù)據(jù)源。

        輸入data source 的名字以及prometheus的地址:http://10.2.1.231:9090/ 后點擊Save&Test 即可。


        step5:創(chuàng)建儀表盤 Dashboard

        Grafana 支持手動創(chuàng)建儀表盤 Dashboard 和自動導入Dashboard模板兩種方式,手動一個個添加Dashboard 比較繁瑣,Grafana 社區(qū)鼓勵用戶分享 Dashboard,通過https://grafana.com/dashboards 網(wǎng)站,可以找到大量可直接使用的Dashboard模板。

        Grafana 中所有的Dashboard 通過 JSON 進行共享,下載并且導入這些 JSON 文件,就可以直接使用這些已經(jīng)定義好的 Dashboard:


        選擇自己喜歡的模板后,點擊 Download JSON下載對應的json 文件。然后在Grafana系統(tǒng)中導入相應的json即可。


        接下來回到Grafana頁面,點擊DashBoards|Import

        選擇之前下載好的json文件,導入即可。


        點擊Import后,我們就可以看到詳細的服務器資源監(jiān)控數(shù)據(jù)。如下圖所示:


        最后

        以上,我們就把監(jiān)控系統(tǒng)介紹完了,并使用Prometheus + Grafana 構建了一個初步的監(jiān)控系統(tǒng)。

        監(jiān)控是運維系統(tǒng)的基礎,在DevOps大行其道的今天,運維監(jiān)控不再是運維工程師的工作,而是程序員和架構師的必備技能。希望大家能夠熟練掌握。


        瀏覽 75
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久婷婷一区二区 | 国产淫色 | 狠狠撸综合 | 淫男乱女在线观看 | 亚洲天堂在线播放 | 三级片视频观看 | 五月婷婷一区 | 91在线porny国产在线看 | 国产成人福利在线 | 免费观看成人毛片A片做受9在线 |