天天看點

Prometheus 初探和配置(安裝測試)

本文大綱:

• 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 ⽅式添加)

Prometheus 初探和配置(安裝測試)

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
      

 

Prometheus 初探和配置(安裝測試)

直接就可以看到曲線了

這個就是最簡單的來檢視⼀下伺服器的空閑記憶體狀态的⽅式