最近閑暇之余,或者java學累了,就會看看別的視頻,最近學的Prometheus中,發現他講的和我看的書內容基本一模一樣《Prometheus監控實戰》,視頻也是個人出的,講的實戰一般般,有興趣的人可以看看這本書,還有一本源碼我也買了,還沒有開始看。
監控節點
Prometheus使用exporter工具來暴露主機和應用程序上的指標,目前有很多可用於各種目的的exporter。現在我們將專注於一個特定的exporter:NodeExporter。它是用Go語言編寫的,提供了一個可用於收集各種主機指標數據(包括CPU、內存和磁盤)的庫。它還有一個textfile收集器,允許你導出靜態指標,我們很快就會看到這對發送有關節點的信息很有幫助,此外它還可以從批處理作業導出指標。注意 我們有時會使用術語“節點”來指代主機。首先選擇其中一台Linux主機,然后下載並安裝Node Exporter。我們將選擇一個Docker守護進程主機。提示 如果你不想使用exporter,那么還有很多支持Prometheus的主機監控客戶端。例如,collectd也可以收集Prometheus指標。
安裝Node Exporter
你可以通過tar包來安裝Node Exporter,在部分操作系統上也可以通過軟件包進行安裝。可以從Prometheus官網下載Node Exporter的tar包。下載並解壓縮Node Exporter,然后將二進制文件移動到環境變量path包含的路徑中。
wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
tar -zvxf node_exporter-0.18.1.linux-amd64.tar.gz
mv node_exporter-0.18.1.linux-amd64 node_exporter
cd node_exporter
cp node_exporter /usr/local/bin/
node_exporter --version
配置textfile收集器
我們還想配置一個特定的收集器,即textfile收集器,本章后面將使用它。textfile收集器非常有用,因為它允許我們暴露自定義指標。這些自定義指標可能是批處理或cron作業等無法抓取的,可能是沒有exporter的源,甚至可能是為主機提供上下文的靜態指標。收集器通過掃描指定目錄中的文件,提取所有格式為Prometheus指標的字符串,然后暴露它們以便抓取。現在讓我們設置收集器,首先創建一個目錄來保存指標定義文件。
可以看到它包含一個指標名稱(metadata)和兩個標簽。一個標簽role定義節點的角色。在示例中,標簽的值為docker_server。另一個標簽datacenter定義主機的地理位置。最后,指標的值為1,因為它不是計數型、測量型或計時型的指標,而是提供上下文。讓我們將這個指標添加到textfile_collector目錄下的metadata.prom文件中
mkdir -p /var/lib/node_exporter/textfile_collector
echo 'metadata{role="docker_server",datacenter="NJ"} 1' | sudo tee /var/lib/node_exporter/textfile_collector/metadata.prom
在這里,我們將指標傳遞到名為metadata.prom的文件中。提示 在真實環境中,建議使用配置管理工具來編輯該文件。例如,在配置新主機時,可以從模板創建元數據指標,這可以讓你自動對主機和服務進行分類。要啟用textfile收集器,我們不需要配置參數,它默認就會被加載。但我們需要指定textfile_exporter目錄,以便Node Exporter知道在哪里可以找到自定義指標。為此,我們需要指定--collector.textfile.directory參數。
運行節點導出器
注:我這里只收集常見的3個服務。它們是Docker守護進程、SSH守護進程和RSyslog守護進程。使用--collector.systemd.unit-whitelist參數進行配置,它會匹配systemd的正則表達式。
nohup node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd --collector.systemd.unit-whitelist="(docker|sshd|rsyslog).service" &>/dev/null &
過濾收集器
Node Exporter可以返回很多指標,也許你並不想把它們全部收集上來。除了通過本地配置來控制Node Exporter在本地運行哪些收集器之外,Prometheus還提供了一種方式來限制收集器從服務器端實際抓取的數據,尤其是在你無法控制正抓取的主機的配置時,這種方式非常有幫助。Prometheus通過添加特定收集器列表來實現作業配置。
這里,我們將被抓取的指標限制在上面的收集器列表中,使用params塊中的collect[]列表指定,然后將它們作為URL參數傳遞給抓取請求。你可以使用NodeExporter實例上的curl命令來對此進行測試。
在 prometheus 服務器配置 scrap
監控Docker容器
Prometheus提供了幾種方法來監控Docker,包括一些自定義exporter。然而,這些exporter一般都不會用到,推薦的方法是使用Google的cAdvisor工具。在Docker守護進程上,cAdvisor作為Docker容器運行,單個cAdvisor容器返回針對Docker守護進程和所有正在運行的容器的指標。Prometheus支持通過它導出指標,並將數據傳輸到其他各種存儲系統,如InfluxDB、Elasticsearch和Kafka。注意 我們假設你已經安裝並運行了Docker守護進程,並且了解Docker的基礎知識。
運行cAdvisor
由於cAdvisor只是Docker主機上的另一個容器,因此我們可以使用docker run命令啟動它。讓我們在Docker1主機上運行一個cAdvisor容器。
提示 ro表示只讀。第二種類型是可讀寫的,是Docker套接字的掛載,通常位於/var/run目錄中。我們還將容器內部的8080端口映射到主機上的8080端口,你可以用任何適合的端口來覆蓋它。我們使用參數--detach以守護進程方式運行容器,並將容器命名為cadvisor。最后,我們使用帶有latest標簽的google/cadvisor圖像。如果運行docker ps命令,剛可以看到正在運行的cAdvisor容器。
抓取cAdvisor
我們需要告訴Prometheus cAdvisor是在Docker守護進程上運行的。為此,我們將在配置中添加第三個作業。讓我們在Prometheus服務器上編輯prometheus.yml。我們將再次使用static_configs添加單個目標,而不是使用任何類型的服務發現。
可以看到我們添加了名為docker的新作業,它包含一個static_configs塊,並且通過IP地址加端口8080的方式添加了三個Docker主機的列表。我們依然使用默認路徑/metrics。如果再次使用SIGHUP或重新啟動Prometheus服務器,那么我們的配置將被重新加載,它將開始抓取,然后新的時間序列數據將會出現。但比較重要的是,在我們繼續之前,需要首先了解抓取的工作原理以及標簽的生命周期。我們將使用cAdvisor指標來探索這個生命周期。