摘要:比如定義了基礎的數據類型以及對應的方法收集事件次數等單調遞增的數據收集當前的狀態,比如數據庫連接數收集隨機正態分布數據,比如響應延遲收集隨機正態分布數據,和是類似的庫的詳細解析可以參考本文為容器監控實踐系列文章,完整內容見
概述
Prometheus從2016年加入CNCF,到2018年8月畢業,現在已經成為Kubernetes的官方監控方案,接下來的幾篇文章將詳細解讀Promethues(2.x)
Prometheus可以從Kubernetes集群的各個組件中采集數據,比如kubelet中自帶的cadvisor,api-server等,而node-export就是其中一種來源
Exporter是Prometheus的一類數據采集組件的總稱。它負責從目標處搜集數據,并將其轉化為Prometheus支持的格式。與傳統的數據采集組件不同的是,它并不向中央服務器發送數據,而是等待中央服務器主動前來抓取,默認的抓取地址為http://CURRENT_IP:9100/metrics
node-exporter用于采集服務器層面的運行指標,包括機器的loadavg、filesystem、meminfo等基礎監控,類似于傳統主機監控維度的zabbix-agent
node-export由prometheus官方提供、維護,不會捆綁安裝,但基本上是必備的exporter
功能node-exporter用于提供*NIX內核的硬件以及系統指標。
如果是windows系統,可以使用WMI exporter
如果是采集NVIDIA的GPU指標,可以使用prometheus-dcgm
根據不同的*NIX操作系統,node-exporter采集指標的支持也是不一樣的,如:
diskstats 支持 Darwin, Linux
cpu 支持Darwin, Dragonfly, FreeBSD, Linux, Solaris等,
詳細信息參考:node_exporter
我們可以使用 --collectors.enabled參數指定node_exporter收集的功能模塊,或者用--no-collector指定不需要的模塊,如果不指定,將使用默認配置。
部署下載地址:從https://github.com/prometheus...
解壓文件:tar -xvzf **.tar.gz
開始運行:./node_exporter
./node_exporter -h 查看幫助
usage: node_exporter [] Flags: -h, --help --collector.diskstats.ignored-devices --collector.filesystem.ignored-mount-points --collector.filesystem.ignored-fs-types --collector.netdev.ignored-devices --collector.netstat.fields --collector.ntp.server="127.0.0.1" .....
./node_exporter運行后,可以訪問http://${IP}:9100/metrics,就會展示對應的指標列表
docker run -d --net="host" --pid="host" -v "/:/host:ro,rslave" quay.io/prometheus/node-exporter --path.rootfs /host
node-exporter.yaml文件:
apiVersion: v1 kind: Service metadata: annotations: prometheus.io/scrape: "true" labels: app: node-exporter name: node-exporter name: node-exporter spec: clusterIP: None ports: - name: scrape port: 9100 protocol: TCP selector: app: node-exporter type: ClusterIP ---- apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: node-exporter spec: template: metadata: labels: app: node-exporter name: node-exporter spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/tryk8s/node-exporter:latest name: node-exporter ports: - containerPort: 9100 hostPort: 9100 name: scrape hostNetwork: true hostPID: true
kubectl create -f node-exporter.yaml
得到一個daemonset和一個service對象,部署后,為了能夠讓Prometheus能夠從當前node exporter獲取到監控數據,這里需要修改Prometheus配置文件。編輯prometheus.yml并在scrape_configs節點下添加以下內容:
scrape_configs: # 采集node exporter監控數據 - job_name: "node" static_configs: - targets: ["localhost:9100"]
也可以使用prometheus.io/scrape: "true"標識來自動獲取service的metric接口
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
配置完成后,重啟prometheus就能看到對應的指標
直接查看:
如果是二進制或者docker部署,部署成功后可以訪問:http://${IP}:9100/metrics
會輸出下面格式的內容,包含了node-exporter暴露的所有指標:
# HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 6.1872e-05 go_gc_duration_seconds{quantile="0.25"} 0.000119463 go_gc_duration_seconds{quantile="0.5"} 0.000151156 go_gc_duration_seconds{quantile="0.75"} 0.000198764 go_gc_duration_seconds{quantile="1"} 0.009889647 go_gc_duration_seconds_sum 0.257232201 go_gc_duration_seconds_count 1187
# HELP node_cpu Seconds the cpus spent in each mode. # TYPE node_cpu counter node_cpu{cpu="cpu0",mode="guest"} 0 node_cpu{cpu="cpu0",mode="guest_nice"} 0 node_cpu{cpu="cpu0",mode="idle"} 68859.19 node_cpu{cpu="cpu0",mode="iowait"} 167.22 node_cpu{cpu="cpu0",mode="irq"} 0 node_cpu{cpu="cpu0",mode="nice"} 19.92 node_cpu{cpu="cpu0",mode="softirq"} 17.05 node_cpu{cpu="cpu0",mode="steal"} 28.1
Prometheus查看:
類似go_gc_duration_seconds和node_cpu就是metric的名稱,如果使用了Prometheus,則可以在http://${IP}:9090/頁面的指標中搜索到以上的指標:
常用指標類型有:
node_cpu:系統CPU使用量 node_disk*:磁盤IO node_filesystem*:文件系統用量 node_load1:系統負載 node_memeory*:內存使用量 node_network*:網絡帶寬 node_time:當前系統時間 go_*:node exporter中go相關指標 process_*:node exporter自身進程相關運行指標
Grafana查看:
Prometheus雖然自帶了web頁面,但一般會和更專業的Grafana配套做指標的可視化,Grafana有很多模板,用于更友好地展示出指標的情況,如Node Exporter for Prometheus
在grafana中配置好變量、導入模板就會有上圖的效果。
深入解讀node-exporter是Prometheus官方推薦的exporter,類似的還有
HAProxy exporter
Collectd exporter
SNMP exporter
MySQL server exporter
....
官方推薦的都會在https://github.com/prometheus下,在exporter推薦頁,也會有很多第三方的exporter,由個人或者組織開發上傳,如果有自定義的采集需求,可以自己編寫exporter,具體的案例可以參考后續的[自定義Exporter]文章
因為node_exporter是比較老的組件,有一些最佳實踐并沒有merge進去,比如符合Prometheus命名規范(https://prometheus.io/docs/pr...,目前(2019.1)最新版本為0.17
一些指標名字的變化(詳細比對)
* node_cpu -> node_cpu_seconds_total * node_memory_MemTotal -> node_memory_MemTotal_bytes * node_memory_MemFree -> node_memory_MemFree_bytes * node_filesystem_avail -> node_filesystem_avail_bytes * node_filesystem_size -> node_filesystem_size_bytes * node_disk_io_time_ms -> node_disk_io_time_seconds_total * node_disk_reads_completed -> node_disk_reads_completed_total * node_disk_sectors_written -> node_disk_written_bytes_total * node_time -> node_time_seconds * node_boot_time -> node_boot_time_seconds * node_intr -> node_intr_total
解決版本問題的方法有兩種:
一是在機器上啟動兩個版本的node-exporter,都讓prometheus去采集。
二是使用指標轉換器,他會將舊指標名稱轉換為新指標
對于grafana的展示,可以找同時支持兩套指標的dashboard模板
node-exporter的主函數:
// Package collector includes all individual collectors to gather and export system metrics. package collector import ( "fmt" "sync" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/log" "gopkg.in/alecthomas/kingpin.v2" ) // Namespace defines the common namespace to be used by all metrics. const namespace = "node"
可以看到exporter的實現需要引入github.com/prometheus/client_golang/prometheus庫,client_golang是prometheus的官方go庫,既可以用于集成現有應用,也可以作為連接Prometheus HTTP API的基礎庫。
比如定義了基礎的數據類型以及對應的方法:
Counter:收集事件次數等單調遞增的數據 Gauge:收集當前的狀態,比如數據庫連接數 Histogram:收集隨機正態分布數據,比如響應延遲 Summary:收集隨機正態分布數據,和 Histogram 是類似的
switch metricType { case dto.MetricType_COUNTER: valType = prometheus.CounterValue val = metric.Counter.GetValue() case dto.MetricType_GAUGE: valType = prometheus.GaugeValue val = metric.Gauge.GetValue() case dto.MetricType_UNTYPED: valType = prometheus.UntypedValue val = metric.Untyped.GetValue()
client_golang庫的詳細解析可以參考:theory-source-code
本文為容器監控實踐系列文章,完整內容見:container-monitor-book
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32867.html
摘要:比如定義了基礎的數據類型以及對應的方法收集事件次數等單調遞增的數據收集當前的狀態,比如數據庫連接數收集隨機正態分布數據,比如響應延遲收集隨機正態分布數據,和是類似的庫的詳細解析可以參考本文為容器監控實踐系列文章,完整內容見 概述 Prometheus從2016年加入CNCF,到2018年8月畢業,現在已經成為Kubernetes的官方監控方案,接下來的幾篇文章將詳細解讀Promethu...
摘要:自定義指標由提供,由此可支持任意采集到的指標。文件清單的,收集級別的監控數據監控服務端,從拉數據并存儲為時序數據。本文為容器監控實踐系列文章,完整內容見 概述 上文metric-server提到,kubernetes的監控指標分為兩種: Core metrics(核心指標):從 Kubelet、cAdvisor 等獲取度量數據,再由metrics-server提供給 Dashboar...
摘要:自定義指標由提供,由此可支持任意采集到的指標。文件清單的,收集級別的監控數據監控服務端,從拉數據并存儲為時序數據。本文為容器監控實踐系列文章,完整內容見 概述 上文metric-server提到,kubernetes的監控指標分為兩種: Core metrics(核心指標):從 Kubelet、cAdvisor 等獲取度量數據,再由metrics-server提供給 Dashboar...
摘要:方案匯總一開源方案采集展示報警二商業方案三云廠商騰訊云阿里云百度云華為云四主機監控五日志監控六服務監控七存儲后端腦圖本文為容器監控實踐系列文章,完整內容見 概述 隨著越來越多的線上服務docker化,對容器的監控、報警變得越來越重要,容器監控有多種形態,有些是開源的(如promethues),而另一些則是商業性質的(如Weave),有些是集成在云廠商一鍵部署的(Rancher、谷歌云)...
閱讀 1512·2021-11-24 09:38
閱讀 3366·2021-11-18 10:02
閱讀 3253·2021-09-22 15:29
閱讀 2937·2021-09-22 15:15
閱讀 1037·2021-09-13 10:25
閱讀 1834·2021-08-17 10:13
閱讀 1971·2021-08-04 11:13
閱讀 1973·2019-08-30 15:54