Prometheus提供兩種存儲方式,分別為本地存儲和遠端存儲。
本地存儲通過Prometheus自帶的時序數據庫將數據保存在本地,從而實現高性能讀寫。但是時序數據庫畢竟是非集群的數據庫,這樣就限制了他的存儲容量,無法保存大量的歷史監控數據,為此,Prometheus引入了遠端存儲。
安裝Exporter
安裝了Node Exporter程序,該程序對外暴露了一個用於獲取當前監控樣本的HTTP訪問地址。這樣的一個程序稱為Exporter,Exporter的實例稱為哥Target,Prometheus通過輪詢的方式定時從這些Target中獲取監控數據樣本,並且存儲在數據庫當中。
下載地址:https://prometheus.io/download/#node_exporter
解壓node_exporter二進制文件,並將執行程序放到/usr/local/bin目錄下
# tar -xf node_exporter-0.18.1.linux-amd64.tar.gz -C /opt/ # cd /opt/node_exporter-0.18.1.linux-amd64/ # cp node_exporter /usr/local/bin/
查看node_exporter是否正常
# node_exporter --version node_exporter, version 0.18.1 (branch: HEAD, revision: 3db77732e925c08f675d7404a8c46466b2ece83e) build user: root@b50852a1acba build date: 20190604-16:41:18 go version: go1.12.5
可以通過參數來對node_exporter進行配置,使用--help查看完整的參數列表。
# node_exporter --help
配置textfile收集器
textfile收集器非常有用,它允許我們暴露自定義指標。這些自定義指標可能是批處理或cron作業無法抓取的,可能是沒有exporter的源,甚至可能是為主機提供上下文的靜態指標。
例如,我們創建一個目錄來保存指標定義文件。在這個目錄中創建一個新的指標。指標以.prom結尾的文件內定義,並且使用Prometheus特定文本格式。
具體可以參考鏈接:https://prometheus.io/docs/instrumenting/exposition_formats/#text-format-details
# mkdir -p /var/lib/node_exporter/textfile_collector # echo 'metadata{role="docker_server",datacenter="NJ"} 1' | tee /var/lib/node_exporter/textfile_collector/metadata.prom
啟用systemd收集器
systemd收集器,它記錄systemd中的服務和系統狀態。這個收集器收集了很多指標,但我們並不想收集systemd管理的所有內容,而只想收集某些關鍵服務。為了保持簡潔,可以將特定服務列入白名單,只收集如下服務的指標:
# node_exporter --collector.textfile.directory="/var/lib/node_exporter/textfile_collector/" --collector.systemd --collector.systemd.unit-whitelist=“(ssh|grafana-server).service”
過濾收集器
Node Exporter可以返回很多指標,也許你並不想把他們全部收集上來。除了通過本地配置來控制Node Exporter在本地運行哪些收集器之外,Prometheus還提供了一種方式來限制收集器從服務器實際抓取數據,尤其是在你無法控制正抓取的主機的配置時,這種方式非常有幫助。
1.通過本地控制來控制數據指標上報,因為某些參數默認都是啟動的,你可以通過使用no-前綴來修改狀態。例如,暴露/proc/net/arp統計信息的arp收集器默認是啟用的,由參數--collector.arp控制。因此,要禁用此收集器,需要運行如下命令:
# node_exporter --no-collector.arp
2.Prometheus通過添加特定收集器列表來實現作業配置。
scrape_configs: ... -job_name: 'node' static_configs: - targets: ['1.1.1.1','2.2.2.2'] params: collect[]: - cpu - meminfo - diskstats - netdev - filefd - filesystem - xfs - systemd
標簽-重新標記
通過重新標記,你可以控制、管理並標准化環境中的指標。一些最常用的用例是:
- 刪除不必要的指標
- 從指標中刪除敏感或不需要的標簽
- 添加、編輯或修改指標的標簽值或標簽格式
可以通過兩個階段進行重新標記。第一個階段是對來自服務發現的目標進行重新標記,這對於將來自服務發現的元數據標簽中的信息應用於指標上的標簽來說非常有用,主要在relabel_configs塊中完成。第二個階段是在抓取之后且指標被保存於存儲系統之前。這樣,可以確認哪些指標需要保存、哪些需要丟棄以及這些指標的格式。主要在metric_relabel_configs中完成。
刪除標簽
例如:cAvisor中收集了大量數據,並非所有數據都是有用的,因為,如何在存儲數據前刪除其中一些指標,避免不必要的空間浪費。
- job_name: 'docker' static_configs: - targets: ['1.1.1.','2.2.2.2','3.3.3.3'] metric_relabel_configs: - source_labels: [_name_] separator: ',' regex: '(container_tasks_state|container_memory_failures_total)' action: drop
多個標簽通過分隔符連接在一起,默認分隔符為“;”,也可以使用separator參數覆蓋分隔符配置。
這里_name_標簽將使用“,”進行分隔。action中drop操作,這將在數據存儲之前刪除指標。其他操作(如keep)則會保留與正則表達式匹配的指標。並刪除所有其他指標。
替換標簽值
例如:許多cAdvison指標都有一個id標簽,其中包含正在運行的進程的名稱。如果將進程id重新定義一個標簽,放入container_id中,可以這樣做:
metric_relabel_configs: - source_labels: [id] regex: '/docker/([a-z0-9]+);' replacement: '$1' target_label: container_id