本文大綱:
• Prometheus 官⽹下載
• Prometheus 開始安裝
• Prometheus 啟動運⾏
• Prometheus 基本配置⽂件講解
• 安裝第⼀個exporter =》 node_exporter
• Prometheus 連接exporter獲取數據
• Prometheus 命令⾏⼊門第⼀個查詢公式
安裝Prometheus之前 我們必須先安裝ntp時間同步
(prometheus對系統時間的准確性要求很⾼,必須保證本機時間實時同步)
以Centos7 為例
~]# timedatectl set-timezone Asia/Shanghai ~]# contab -e * * * * * ntpdate -u cn.pool.ntp.org
1) Prometheus下載
⾸先 我們去到http://prometheus.io 官⽹
下載最新版本 prometheus-2.2.1.linux-amd64.tar.gz
wget https://github.com/prometheus/prometheus/releases/download/v2.2.1/prometheus-2.2.1.linux-amd64.tar.gz
2) Prometheus的安裝 ⾮常簡單
[root@server01 download]# tar -xvzf prometheus-2.0.0.linux-amd64.tar.gz prometheus-2.0.0.linux-amd64/ prometheus-2.0.0.linux-amd64/consoles/ prometheus-2.0.0.linux-amd64/consoles/index.html.example prometheus-2.0.0.linux-amd64/consoles/node-cpu.html prometheus-2.0.0.linux-amd64/consoles/node-disk.html prometheus-2.0.0.linux-amd64/consoles/node-overview.html prometheus-2.0.0.linux-amd64/consoles/node.html prometheus-2.0.0.linux-amd64/consoles/prometheus-overview.html prometheus-2.0.0.linux-amd64/consoles/prometheus.html prometheus-2.0.0.linux-amd64/console_libraries/ prometheus-2.0.0.linux-amd64/console_libraries/menu.lib prometheus-2.0.0.linux-amd64/console_libraries/prom.lib prometheus-2.0.0.linux-amd64/prometheus.yml prometheus-2.0.0.linux-amd64/LICENSE prometheus-2.0.0.linux-amd64/NOTICE prometheus-2.0.0.linux-amd64/prometheus prometheus-2.0.0.linux-amd64/promtool cp -rf prometheus-2.0.0.linux-amd64 /usr/local/prometheus
3) Prometheus 啟動 和 后台運⾏
啟動也很簡單
~]# ./prometheus level=info ts=2018-05-10T07:34:01.397792062Z caller=main.go:220 msg="Starting Prometheus" version="(version=2.2.1, branch=HEAD , revision=bc6058c81272a8d938c05e75607371284236aadc)"level=info ts=2018-05-10T07:34:01.397842176Z caller=main.go:221 build_context="(go=go1.10, user=root@149e5b3f0829, date=201803 14-14:15:45)"level=info ts=2018-05-10T07:34:01.397855314Z caller=main.go:222 host_details="(Linux 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 2 2:10:57 UTC 2015 x86_64 node1 (none))"level=info ts=2018-05-10T07:34:01.397868136Z caller=main.go:223 fd_limits="(soft=1024, hard=4096)" level=info ts=2018-05-10T07:34:01.40145866Z caller=main.go:504 msg="Starting TSDB ..." level=info ts=2018-05-10T07:34:01.416327032Z caller=web.go:382 component=web msg="Start listening for connections" address=0.0 .0.0:9090level=info ts=2018-05-10T07:34:01.795931346Z caller=main.go:514 msg="TSDB started" level=info ts=2018-05-10T07:34:01.79597709Z caller=main.go:588 msg="Loading configuration file" filename=prometheus.yml level=info ts=2018-05-10T07:34:01.847028303Z caller=main.go:491 msg="Server is ready to receive web requests."
之后默認運⾏在 9090
瀏覽器可以直接打開訪問⽆賬號密碼驗證 (如果希望加上驗證 ,可以使⽤類似apache httppass ⽅式添加)
4)接下來 我們來簡單看⼀下 Prometheus的主配置⽂件
其實prometheus解壓安裝之后,就默認⾃帶了⼀個基本的配置⽂件如下
prometheus.yml
我們來⼤致講解⼀下配置⽂件的內容
# my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). 前兩個全局變量 scrape_interval. 抓取采樣數據的 時間間隔, 默認 每15秒去被監控機上 采樣⼀次 => 5s 這個就是我們所說的 prometheus的⾃定義 數據采集頻率了 evaluation_interval. 監控數據規則的評估頻率 grafana 這個參數是prometheus多長時間 會進⾏⼀次 監控規則的評估 舉個例: 假如 我們設置 當 內存使⽤量 > 70%時 發出報警 這么⼀條rule(規則) 那么prometheus 會默認 每15秒來執⾏⼀次這個規則 檢查內存的情況 # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 Alertmanager 是prometheus的⼀個⽤於管理和發出報警的 插件 我們這⾥對 Alertmanger 暫時先不做介紹 暫時也不需要 (我們采⽤ 4.0最新版的 Grafana , 本 ⾝就已經⽀持報警發出功能了 往后我們會學習到) 再往后 從這⾥開始 進⼊prometheus重要的 配置采集節點的設置 # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: 'prometheus' # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ['localhost:9090'] 先定義⼀個 job的名稱
- job_name: 'prometheus' 然后定義監控節點 targets
static_configs:
- targets: ['localhost:9090'] - targets的設定 以這種形式設定 默認帶了⼀個 prometheus本機的 static_configs: - targets: ['localhost:9090'] 這⾥可以繼續 擴展加⼊ 其他需要被監控的節點 如下是⼀個 ⽣產配置例⼦ - job_name: 'aliyun' static_configs: - targets: [‘server04:9100’,'IP:9100’,’nginx06:9100','web7:9100’,'redis1:9100','log: 9100','redis2:9100'] prometheuserver _ /etc/hosts, local_dns server 可以看到 targets可以並列寫⼊ 多個節點 ⽤逗號隔開, 機器名+端⼜號 端⼜號:通常⽤的就是 exporters 的端⼜ 在這⾥ 9100 其實是 node_exporter 的默認端⼜ 如此 prometheus就可以通過配置⽂件 識別監控的節點,持續開始采集數據 prometheus到此就算初步的搭建好了
5) 光搭建好prometheus_server 是不夠的,我們需要給監控節點搭建第⼀個exporter ⽤來采樣數據
我們就選⽤企業中最常⽤的 node_exporter 這個插件
node_exporter 是⼀個以http_server⽅式運⾏在后台,並且持續不斷采集 Linux系統中各種操作系統本⾝相關的監控參數的程序
其采集量是很⼤很全的,往往默認的采集項⽬就遠超過你的實際需求
接下來我們來看下 node_exporter是怎么回事
⼀樣先下載node_exporter 從官⽹
wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0-rc.3/node_exporter-0.16.0-rc.3.linux-amd64.tar.gz
下載之后解壓縮然后直接運⾏即可
node_exporter的運⾏更加簡單如下所示
~]# ./node_exporter INFO[0000] Starting node_exporter (version=0.16.0-rc.3, branch=HEAD, revision=575d8950d367987ab8792e90fb2cf00c3fee1c10) source="node_exporter.go:82" INFO[0000] Build context (go=go1.9.5, user=root@d986ef46b6d6, date=20180427-15:51:15) source="node_exporter.go:83" INFO[0000] Enabled collectors: source="node_exporter.go:90" INFO[0000] - arp source="node_exporter.go:97" INFO[0000] - bcache source="node_exporter.go:97" INFO[0000] - bonding source="node_exporter.go:97" INFO[0000] - conntrack source="node_exporter.go:97" INFO[0000] - cpu source="node_exporter.go:97" INFO[0000] - diskstats source="node_exporter.go:97" INFO[0000] - edac source="node_exporter.go:97" INFO[0000] - entropy source="node_exporter.go:97" INFO[0000] - filefd source="node_exporter.go:97" INFO[0000] - filesystem source="node_exporter.go:97" INFO[0000] - hwmon source="node_exporter.go:97" INFO[0000] - infiniband source="node_exporter.go:97" INFO[0000] - ipvs source="node_exporter.go:97" INFO[0000] - loadavg source="node_exporter.go:97" INFO[0000] - mdadm source="node_exporter.go:97" INFO[0000] - meminfo source="node_exporter.go:97" INFO[0000] - netdev source="node_exporter.go:97" INFO[0000] - netstat source="node_exporter.go:97" INFO[0000] - nfs source="node_exporter.go:97" INFO[0000] - nfsd source="node_exporter.go:97" INFO[0000] - sockstat source="node_exporter.go:97" INFO[0000] - stat source="node_exporter.go:97" INFO[0000] - textfile source="node_exporter.go:97" INFO[0000] - time source="node_exporter.go:97" INFO[0000] - timex source="node_exporter.go:97" INFO[0000] - uname source="node_exporter.go:97" INFO[0000] - vmstat source="node_exporter.go:97" INFO[0000] - wifi source="node_exporter.go:97" INFO[0000] - xfs source="node_exporter.go:97" INFO[0000] - zfs source="node_exporter.go:97" INFO[0000] Listening on :9100 source="node_exporter.go:111"
運⾏起來以后 我們使⽤netstats -tnlp 可以來看下 node_exporter進程的狀態
~]# netstat -tnlp | grep node tcp6 0 0 :::9100 :::* LISTEN 21886/./node_export
這⾥就可以看出 node_exporter默認⼯作在9100端⼜
可以響應 prometheus_server發過來的 HTTP_GET請求
也可以響應其他⽅式的 HTTP_GET請求
我們⾃⼰就可以發送 測試
執⾏curl之后,我們看到 node_exporter 給我們返回了 ⼤量的這種 metrics類型 K/V數據
~]# curl localhost:9100/metrics
關於 metrics 和 k/v 這里就不介紹了
⽽這些 返回的 K/V數據 ,其中的Key的名稱就可以直接復制黏貼在prometheus的查詢命令⾏來查看結果了
我們來試⼀試
就⽤這⼀項看看 node_memory_MemFree
# curl localhost:9100/metrics | grep node_memory_MemFree % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 52834 100 52834 0 0 4765k 0 --:--:-- --:--:-- --:--:-- 5159k # HELP node_memory_MemFree_bytes Memory information field MemFree_bytes. # TYPE node_memory_MemFree_bytes gauge node_memory_MemFree_bytes 7.376896e+07
直接就可以看到曲線了
這個就是最簡單的來查看⼀下服務器的空閑內存狀態的⽅式