1. 程式人生 > 其它 >【雲原生】Prometheus Pushgetway講解與實戰操作

【雲原生】Prometheus Pushgetway講解與實戰操作

目錄

一、概述

PushgatewayPrometheus的一個元件,prometheus server預設是通過Exporter主動獲取資料(預設採取pull拉取資料),Pushgateway則是通過exporter主動方式推送資料到Pushgateway

,再由Prometheus主動去拉取 Pushgateway資料,使用者可以寫一些自定義的監控指令碼把需要監控的資料傳送給Pushgateway。從prometheus server角度看,都是由prometheus server主動去拉取各個資料來源(例:Exporter和Pushgateway)的資料。

1、Pushgateway優點:

  • Prometheus 預設採用定時pull 模式拉取targets資料,但是如果不在一個子網或者防火牆,prometheus就拉取不到targets資料,所以可以採用各個target往pushgateway上push資料,然後prometheus去pushgateway上定時pull資料。
  • 在監控業務資料的時候,需要將不同資料彙總, 彙總之後的資料可以由pushgateway統一收集,然後由 Prometheus 統一拉取,起到給Prometheus 減壓的作用。
  • 自定義採集指標簡單。

2、Pushgateway缺點:

關於Prometheus整體介紹,可以參考我這篇文章:Prometheus原理詳解

二、Pushgateway 架構

  • Pushgateway就是個資料中轉站。提供API,支援資料生產者隨時將資料推送過來。
  • Pushgateway提供exporter功能,在promethus server拉取資料時,將自己儲存的資料反饋給promethus server端。

三、Prometheus server 安裝

Prometheus基於Golang編寫,編譯後的軟體包,不依賴於任何的第三方依賴。使用者只需要下載對應平臺的二進位制包,解壓並且新增基本的配置即可正常啟Prometheus Server。

1)下載

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

wget https://github.com/prometheus/prometheus/releases/download/v2.40.6/prometheus-2.40.6.linux-amd64.tar.gz

tar -xf prometheus-2.40.6.linux-amd64.tar.gz

2)配置

解壓後當前目錄會包含預設的Prometheus配置檔案promethes.yml,下面配置檔案做下簡略的解析:

# 全域性配置
global:
  scrape_interval:     15s # 設定抓取間隔,預設為1分鐘
  evaluation_interval: 15s #估算規則的預設週期,每15秒計算一次規則。預設1分鐘
  # scrape_timeout  #預設抓取超時,預設為10s

# Alertmanager相關配置
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# 規則檔案列表,使用'evaluation_interval' 引數去抓取
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

#  抓取配置列表
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

3)啟動服務

# 檢視幫助
./prometheus -h

# 直接啟動服務,但是不提倡這種,因為退出控制檯服務也就退出了,雖然可以加nohup啟動,但是也不是特別友好,下面將配置prometheus.server啟動
# 預設埠是:9090,如需要修改預設埠,可以使用--web.listen-address=:9099,還可以指定配置檔案--config.file=prometheus.yml
./prometheus

配置prometheus.service 啟動指令碼

cat >/usr/lib/systemd/system/prometheus.service<<EOF
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/prometheus_server/prometheus-2.40.6.linux-amd64/prometheus --config.file=/opt/prometheus/prometheus_server/prometheus-2.40.6.linux-amd64/prometheus.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

啟動服務

# 執行 systemctl daemon-reload 命令重新載入systemd
systemctl daemon-reload
# 啟動
systemctl start prometheus
# 檢查
systemctl status prometheus
netstat -tnlp|grep :9090
ps -ef|grep prometheus


web訪問:http://ip:9090

四、Pushgateway 安裝

1)下載

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

wget https://github.com/prometheus/pushgateway/releases/download/v1.5.1/pushgateway-1.5.1.linux-amd64.tar.gz

2)啟動服務

# 檢視幫助
./pushgateway  -h

# 啟動服務,這裡也不使用直接啟動的方式,配置pushgateway.service啟動
./pushgateway

預設監聽的是9091埠。可以通過以下配置進行更改:

usage: pushgateway [<flags>]
Flags:
      --web.listen-address=":9091"  		監聽Web介面,API和遙測的地址。
      --web.telemetry-path="/metrics"  		公開metrics的路徑。
      --web.external-url=        			可從外部訪問Pushgateway的URL.
      --web.route-prefix=""      			Web端點內部路由的字首。 預設為--web.external-url的路徑.
      --persistence.file=""      			歸檔以保留metrics。 如果為空,則metrics僅保留在記憶體中.
      --persistence.interval=5m  			寫入永續性檔案的最小間隔。
      --log.level="info"         			僅記錄具有給定嚴重性或更高嚴重性的訊息。 有效級別:[debug, info, warn, error, fatal]
      --log.format="logger:stderr"  		設定日誌目標和格式。 示例:“ logger:syslog?appname = bob&local = 7”或“ logger:stdout?json = true”
      --version                  			顯示應用程式版本。

配置pushgateway.service 啟動指令碼

cat >/usr/lib/systemd/system/pushgateway.service<<EOF
[Unit]
Description=Pushgetway
After=network.target
[Service]
Type=simple
ExecStart=/opt/prometheus/pushgateway/pushgateway-1.5.1.linux-amd64/pushgateway
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

啟動服務

# 執行 systemctl daemon-reload 命令重新載入systemd
systemctl daemon-reload
# 啟動
systemctl start pushgateway
# 檢查
systemctl status pushgateway
netstat -tnlp|grep :9091
ps -ef|grep pushgateway


web訪問:ip:9091/metrics

3)接入Prometheus

更改prometheus配置檔案,增加如下內容:

  - job_name: 'pushgateway_name' 
    scrape_interval: 30s 
    honor_labels: true  #加上此配置,exporter節點上傳資料中的一些標籤將不會被pushgateway節點的相同標籤覆蓋 
    static_configs: 
        - targets: ["192.168.182.110:9091"] 
          labels: 
              instance: pushgateway_instance               
# pushgateway 中的資料我們通常按照 job 和 instance 分組分類,所以這兩個引數不可缺少。

重啟Prometheus服務,或進行熱載入

# curl -X POST http://192.168.182.110:9090/-/reload
systemctl restatus prometheus

再檢視prometheus web介面:http://ip:9090/targets

五、實戰操作演示

1)推送資料定義

1、推送路徑的URL部分定義為

/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}

其中job是必須引數,label_name部分是可選的,URL中的job和label組合唯一標識pushgateway中的Group。

2、在推送的資料部分,格式定義如下:

## TYPE metric_name type
metric_name{lable_name="label_value",...}  value

1)推送資料

推送一個group定義為{job=“some_job”}的資料

echo "some_metric 3.14" | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job

推送一個group定義為{job=“some_job”,instance=“some_instance”}的資料

#  --data-binary 表示傳送二進位制資料,注意:它是使用POST方式傳送的!
cat <<EOF | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance
  # TYPE some_metric counter
  some_metric2{label="val1"} 42
  # TYPE another_metric gauge
  # HELP another_metric Just an example.
  another_metric 2398.283
EOF

2)刪除資料

刪除group定義為{job=“some_job”}下的所有資料

curl -X DELETE http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance

刪除所有group下的所有metrics(啟動pushgateway時需加上命令列引數--web.enable-admin-api)

curl -X PUT http://192.168.182.110:9091/api/v1/admin/wipe

說明:

  1. 刪除資料是以Group為單位的,Group由job name和URL中的label唯一標識。
  2. 舉例中刪除{job=“some_job”}資料的語句並不會刪除{job=“some_job”,instance=“some_instance”}的資料。因為屬於不同的Group。如需要刪除{job=“some_job”,instance=“some_instance”}下的資料,需要使用。
  3. 這裡刪除資料是指刪除pushgateway中的資料,跟promethues沒有關係。

上面的演示示例是官方提供:https://github.com/prometheus/pushgateway/

3)⾃定義編寫指令碼的⽅法 傳送pushgateway 採集

模板

cat <<EOF | curl --data-binary @- http://192.168.182.110:9091/metrics/job/some_job/instance/some_instance
# A histogram, which has a pretty complex representation in the text format:
# HELP http_request_duration_seconds A histogram of the request duration.
# TYPE http_request_duration_seconds histogram
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/0"} 11
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/1"} 22
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/2"} 33
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/3"} 44
disk_usage{instance="local-168-182-110",job="disk",disk_name="/run/user/4"} 55
EOF

編寫採集指令碼推送資料到Pushgateway

cat >disk_usage_metris.sh<<EOF
#!/bin/bash

hostname=`hostname -f | cut -d '.' -f1`

metrics=""
for line in `df |awk 'NR>1{print $NF "=" int($(NF-1))}'`
do
  disk_name=`echo $line|awk -F'=' '{print $1}'`
  disk_usage=`echo $line|awk -F'=' '{print $2}'`
  metrics="$metrics\ndisk_usage{instance=\"$hostname\",job=\"disk\",disk_name=\"$disk_name\"} $disk_usage"
done

echo -e "# A histogram, which has a pretty complex representation in the text format:\n# HELP http_request_duration_seconds A histogram of the request duration.\n# TYPE http_request_duration_seconds histogram\n$metrics" | curl --data-binary @- http://192.168.182.110:9091/metrics/job/pushgateway/instance/disk_usage
EOF

檢視Pushgetway web

檢視Prometheus web

Prometheus Pushgetway講解與實戰操作就先到這裡了,有疑問的小夥伴歡迎給我留言,後續會持續更新【雲原生+大資料】相關的文章,請耐心等待~