監控實戰Prometheus+Grafana

【這是一猿小講的第 56 篇原創分享】javascript


這期的分享是監控實戰,其實不想寫這篇的,由於網上相關的文章也挺多的,可是出於光說不練都是假把式,並且也想告訴你:當帥氣的普羅米修斯(Prometheus)遇到高顏值的格拉法納(Grafana)究竟會擦出什麼樣的火花?因此忍不住仍是想分享啊。css



爲了實戰,咱們再次請出架構圖,請注意圖中紅色圈 1 的部分,主要分兩條線去實戰。java


第一條戰線:Prometheus 如何監控機器?node

採用標準的PGOne技術組件Prometheus Server + Grafana + node_exporter完成對機器的性能監控。linux


第二條戰線:Prometheus 如何監控 flink?nginx

採用技術組件client lib(flink-metrics-prometheus_x.jar) + PushGateway + Prometheus Server + Grafana完成對 flink 的監控。sql


1. Prometheus 如何監控機器?docker


工欲善其事必先利其器,先下載相關組件包。prometheus 提供了兩種下載方式,第一種是二進制壓縮包的方式,第二種是 docker 鏡像的方式。apache

#方式1:二進制壓縮包下載連接https://prometheus.io/download/
#方式2:docker鏡像連接https://hub.docker.com/u/prom

本次實戰均採用 docker 鏡像下載。微信

docker pull prom/node-exporterdocker pull prom/prometheusdocker pull grafana/grafana

下載完成成, 輸入命令 docker images 列出本地主機上的鏡像(因爲pushgateway鏡像以前在本機已經下載過,你若是第一次跟着作,應該看不到這個,後面操做會進行下載)。


作好準備工做。

#建立 grafana 數據存儲目錄mkdir /opt/grafana-storage#由於 grafana 會在這個目錄寫入文件,賦權限。chmod 777 -R /opt/grafana-storage#建立 prometheus 配置文件存放目錄mkdir /opt/prometheus/#在 prometheus 配置文件目錄下,建立prometheus.yml文件vi /opt/prometheus/prometheus.yml# prometheus.yml中配置靜態監控對象 targets,輸入以下配置內容(請注意修改 IP 爲你的真實 IP):global: scrape_interval: 60s evaluation_interval: 60s
scrape_configs: - job_name: prometheus static_configs: - targets: ['localhost:9090'] labels: instance: 'prometheus'
- job_name: linux static_configs: - targets: ['IP:9100'] labels: instance: 'linux'

準備就緒,逐個啓動組件。

# 啓動 node-exporterdocker run -d -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" --net="host" prom/node-exporter# 啓動 prometheusdocker run -d -p 9090:9090  -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  prom/prometheus# 啓動 grafanadocker run -d -p 3000:3000 --name=grafana -v /opt/grafana-storage:/var/lib/grafana grafana/grafana

確認一下是否都啓動了,輸入 docker ps -a 一探究竟。

再次確認一下服務是否都 OK 了, 逐個訪問一下。

  • node_exporter 訪問輸入 http://YOUR_CONF_IP:9100/metrics,效果以下

  • Prometheus 訪問輸入 http://YOUR_CONF_IP:9090/targets,效果以下

  • Grafana 訪問輸入 http://YOUR_CONF_IP:3000,效果以下

  • 默認用戶名密碼 : admin/admin

    點擊 Add data source,選擇 Prometheus。

    配置url 輸入Prometheus的 ip + 端口,而後點擊 Save&Test 按鈕,會提示Data source is working。

    回到首頁,點擊 New dashboard --> Add Query。

    Panel Title 下拉菜單選擇 edit,輸入指標會自動提示呦。

    效果所見即所得。


    到這兒,採用 Prometheus Server + Grafana + node_exporter 對機器性能指標監控的實戰,就算演示操做完畢,點到爲止,接下來看看 flink 監控如何集成。


    2. Prometheus 如何監控 flink?



    第一步:下載 pushgateway 鏡像,並完成啓動。

    # 下載 pushgateway 鏡像docker pull prom/pushgateway
    # 啓動 pushgatewaydocker run -d -p 9091:9091 prom/pushgateway

    第二步:在 prometheus.yml 中添加 pushgateway 的配置,用於告訴 Prometheus 監控 pushgateway,並從新啓動 prometheus。

    global: scrape_interval: 60s evaluation_interval: 60s
    scrape_configs: - job_name: prometheus static_configs: - targets: ['localhost:9090'] labels: instance: 'prometheus'
    - job_name: linux static_configs: - targets: ['IP:9100'] labels: instance: 'linux' - job_name: 'pushgateway' static_configs: - targets: ['IP:9091'] labels: instance: 'pushgateway'

    第三步:針對 flink 添加監控集成包,直接把 flink-1.8.1/opt 目錄下的 flink-metrics-prometheus-1.8.1.jar 包複製一份到 flink-1.8.1/lib 目錄下便可。


    第四步:而後在 flink 配置文件 flink-conf.yml 中添加以下內容(注意修改IP),啓動 flink 便可。

    ##metricsmetrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReportermetrics.reporter.promgateway.host: YOUR_CONF_IPmetrics.reporter.promgateway.port: 9091metrics.reporter.promgateway.jobName: myJobmetrics.reporter.promgateway.randomJobNameSuffix: truemetrics.reporter.promgateway.deleteOnShutdown: false


    第五步:回到 Grafana 首頁,點擊 New dashboard,建立一個新的 dashboard,選擇 flink(注意若是沒有出現 flink,那說明 flink 沒有啓動)。


    選擇並添加相關指標看一看。


    好了,到這 Prometheus 監控 flink 也就完畢了,後續就是監控指標如何展現的更好的問題,再也不贅述。


    3. 有鐘意的 dashboard,Grafana 如何讓她變成本身的?


    網站 https://grafana.com/grafana/dashboards 提供了一系列的模板,可供使用,那該如何導入到本身的 Grafana 下呢?


    第一步:選擇鐘意的 dashboard,獲取對應的 dashboard 編號。


    第二步:回到本身的 Grafana 首頁,選擇"+" --> Import


    而後輸入 Copy 的 dashboard 編號,點擊 load。


    效果所見即所得,高端大氣上檔次。


    好了,帥氣的 Prometheus 與高顏值的 Grafana 擦出的煙火就放到這兒吧。不過在結束以前,仍是歸攏一下本次演示遇到的問題吧,以供你參考。


    4. 問題集錦


    問題一:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    linux解決方案 systemctl daemon-reload systemctl restart docker.service mac下直接啓動 docker 服務就好了。

    問題二:Get http://localhost:9100/metrics: dial tcp [::1]:9100: connect: connection refused

    解決方案:修改 prometheus.yml 文件中 targets: ['localhost:PORT'] 中的 localhost:PORT 修改成真實 IP:PORT 就好了。


    問題三:啓動 grafana 時始終失敗。

    mkdir: cannot create directory '/var/lib/grafana/plugins': Permission deniedGF_PATHS_DATA='/var/lib/grafana' is not writable.You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1-or-later

    解決方案:chmod 777 /opt/grafana-storage


    問題四:Prometheus 監控 flink 時,始終找不到 PrometheusPushGatewayReporter。

    java.lang.ClassNotFoundExceptionorg.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter

    解決方案:直接把 flink-1.8.1/opt 目錄下的 flink-metrics-prometheus-1.8.1.jar 包複製一份到 flink-1.8.1/lib 目錄下便可。


    5. 命令集錦


    docker pull prom/node-exporter //拉取鏡像docker images //查看本機全部鏡像docker run ... //建立一個新的容器docker stop $(docker ps -a -q) //中止全部容器docker rm $(docker ps -a -q) //刪除全部容器docker logs -f --tail=10 CONTAINER_ID //查看容器的最後10行的日誌


    好了,天天進步一點點, 一年後你的進步將遠遠超乎你的想象。若是感受文章有點意思,請多多分享轉發吧。

本文分享自微信公衆號 - 一猿小講(yiyuanxiaojiangV5)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索