一、Pushgateway
1.Pushgateway簡介
Pushgateway 是 Prometheus 生態中一個重要工具,使用它的原因主要是:
● Prometheus 採用 pull 模式,可能由於不在一個子網或者防火牆原因,導致 Prometheus 無法直接拉取各個 target 資料。
● 在監控業務資料的時候,需要將不同資料彙總, 由 Prometheus 統一收集。
● 當exporter不能滿足需要時,也可以透過自定義(python、shell、java)監控我們想要的資料。
由於以上原因,不得不使用 pushgateway,但在使用之前,有必要了解一下它的一些弊端:
● 將多個節點資料彙總到 pushgateway, 如果 pushgateway 掛了,受影響比多個 target 大。
● Prometheus 拉取狀態 up 只針對 pushgateway, 無法做到對每個節點有效。
● Pushgateway 可以持久化推送給它的所有監控資料。
因此,即使你的監控已經下線,prometheus 還會拉取到舊的監控資料,需要手動清理 pushgateway 不要的資料。
2. 二進位制安裝
官網下載地址https://prometheus.io/download/
wget https://github.com/prometheus/pushgateway/releases/download/v1.5.1/pushgateway-1.5.1.linux-amd64.tar.gz tar xf pushgateway-1.5.1.linux-amd64.tar.gz ls -l mv pushgateway-1.5.1.linux-amd64 /opt/pushgateway ls -l /opt/pushgateway # 更改pushgateway資料夾許可權: chown prometheus:prometheus -R /opt/pushgateway # 建立 systemd 服務 cat >/etc/systemd/system/pushgateway.service << "EOF" [Unit] Description=Prometheus Push Gateway After=network.target [Service] Type=simple User=prometheus Group=prometheus ExecStart=/opt/pushgateway/pushgateway [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl start pushgateway.service systemctl enable pushgateway.service
3. docker 安裝
docker run -d -p 9091:9091 --restart=always --name pushgateway prom/pushgateway cat >docker-compose.yaml <<EOF version: '3.3' services: pushgateway: image: prom/pushgateway container_name: pushgateway restart: always expose: - 9091 ports: - "9091:9091"
docker-compose up -d
4.Prometheus配置
去pull拉取pushgateway收集到的資料。
#進入到prometheus安裝目錄
cd /data/docker-prometheus
透過cat在prometheus.yml檔案末尾新增
cat >> prometheus/prometheus.yml <<"EOF" - job_name: pushgateway honor_labels: true #加上此配置,exporter節點上傳資料中的一些標籤將不會被pushgateway節點的相同標籤覆蓋 static_configs: - targets: ['192.168.10.100:9091'] labels: instance: pushgateway EOF
重新載入配置:
curl -X POST http://localhost:9090/-/reload
5.向pushgateway推送監控資料
使用curl 正常情況我們會使用 Client SDK 推送資料到 pushgateway, 但是我們還可以curl呼叫 API 來管理, 例如: ● 向 {job="some_job"} 新增單條資料: echo "some_metric 3.14" | curl --data-binary @- http://192.168.10.100:9091/metrics/job/some_job 新增更多更復雜資料,通常資料會帶上 instance(some_instance為instance名), 表示來源位置: cat <<EOF | curl --data-binary @- http://192.168.10.100:9091/metrics/job/some_job/instance/some_instance # TYPE some_metric counter some_metric{label="val1"} 42 # TYPE another_metric gauge # HELP another_metric Just an example. another_metric 2398.283 EOF 刪除某個組下的某例項的所有資料: curl -X DELETE http://192.168.10.100:9091/metrics/job/some_job/instance/some_instance 刪除某個組下的所有資料: curl -X DELETE http://192.168.10.100:9091/metrics/job/some_job 檢查 http://192.168.10.14:9090/graph http://192.168.10.100:9091/metrics
5.1 使用python
文件
安裝prometheus_client模組
安裝pip
apt install python3-pip
pip install prometheus_client
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway registry = CollectorRegistry() g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry) g.set_to_current_time() push_to_gateway('localhost:9091', job='batchA', registry=registry)
6.監控data資料目錄下的檔案數量(需求)
cat >>/opt/file_num.sh<<"EOF" #!/bin/sh FILENUM=`ls -l /data |sed 1d| wc -l` echo "data_file_num ${FILENUM}" | curl --data-binary @- http://192.168.11.61:9091/metrics/job/test_job/instance/test EOF # 定時任務 */1 * * * * /bin/sh /opt/file_num.sh >/dev/null 2>&1 # python指令碼 cat >>/opt/file_num.py<<"EOF" from prometheus_client import CollectorRegistry, Gauge, push_to_gateway import os path = '/data' # 輸入資料夾地址 files = os.listdir(path) # 讀入資料夾 num_png = len(files) # 統計資料夾中的檔案個數 registry = CollectorRegistry() g = Gauge('python_data_file_num', 'data file num', ['instance'], registry=registry) g.labels('test').set(num_png) push_to_gateway('192.168.11.61:9091', job='test_job', registry=registry) EOF # 定時任務 */1 * * * * /usr/bin/python3 /opt/file_num.py >/dev/null 2>&1
7.配置告警規則
例如:當data目錄下的檔案數量超過5,報警出來
cat >> prometheus/rules/pushgateway.yml <<"EOF" groups: - name: pushgateway rules: - alert: DataFileNum expr: data_file_num > 5 for: 0m labels: severity: warning annotations: summary: 'data資料目錄檔案數過多' description: "data資料目錄檔案數>5,當前數量:{{ $value }}" EOF # 過載配置 curl -X POST http://localhost:9090/-/reload
8.grafana新增圖形