Prometheus自定義監控部署


 

 

參考官方文檔:https://prometheus.io/docs/

     Prometheus是一個開源的服務監控系統,它通過HTTP協議從遠程的機器收集數據並存儲在本地的時序數據庫上。 Prometheus通過安裝在遠程機器上的exporter插件來收集監控數據,這里要用到的是node_exporter,nginx-module-vts模塊,nginx-vts-exporter組件:

1.1 用Prometheus細化nginx監控實踐,需添加nginx-module-vts模塊,通過打開vhost過濾,根據不同的server_name進行流量的統計。
1.2 使用nginx-vts-exporter組件,將收集nginx性能指標的JSON格式數據,並匯總后提供監控接口給Prometheus。

1、server端部署

1.1  軟件包准備

cd /usr/local/src
wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-amd64.tar.gz #客戶端,本地都部署 wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz #web端,本地部署 tar xf prometheus-2.3.2.linux-amd64.tar.gz tar xf mysqld_exporter-0.10.0.linux-amd64.tar.gz

1.2  啟動node_exporter

# 驗證以Prometheus本身數據為例,在Web中查詢指定表達式及圖形化顯示查詢結果 。
mv prometheus /usr/local mv node_exporter-0.14.0.linux-amd64 /usr/local/ ln -s /usr/local/prometheus-2.3.2.linux-amd64/ /usr/local/prometheus ln -s /usr/local/node_exporter-0.14.0.linux-amd64/ /usr/local/node_exporter cd /usr/local/node_exporter ./node_exporter & netstat -lntp|grep 9100 http://10.10.16.112:9100/metrics

1.3  啟動Prometheus

cd /usr/local/prometheus 
vim prometheus.yml
global:
  scrape_interval:     15s
  evaluation_interval: 15s
  external_labels:
      monitor: 'codelab-monitor'
rule_files:
  - 'alert01.rules'    #需定義
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
        labels:
          alias: prometheus

  - job_name: 'linux1'
    static_configs:
      - targets: ['10.10.16.112:9100']    #需安裝node_node_exporter
        labels:
          alias: linux-node1

  - job_name: 'linux2'
    static_configs:
      - targets: ['10.10.16.113:9100']    #需安裝node_node_exporter
        labels:
          alias: linux-node2
##############################################################

  #修改alert配置

vim alert01.rules 

groups:
- name: example
  rules:

  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

  # Alert for any instance that has a median request latency >1s.
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

http://10.10.16.112:9090   #瀏覽器訪問

2、客戶端部署

2.1  部署node_exporter

 使用Prometheus Web來驗證客戶端Node Exporter的數據的采集。內存、CPU負載,磁盤等性能監控

wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-amd64.tar.gz      #客戶端部署,可針對硬件層次進行監控
tar xf node_exporter-0.14.0.linux-amd64.tar.gz
mv node_exporter-0.14.0.linux-amd64 /usr/local/
ln -s /usr/local/node_exporter-0.14.0.linux-amd64/ /usr/local/node_exporter
cd /usr/local/node_exporter
./node_exporter &
netstat -lntp|grep 9100
http://10.10.16.113:9100/metrics  #自定義Metrics
  • 攔截器/過濾器:用於統計所有應用請求的情況
  • 自定義Collector: 可以用於統計應用業務能力相關的監控情況

2.2  針對mysql進行監控

https://www.hi-linux.com/posts/27014.html   #可參考
cd /usr/local/src/ wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz #部署在mysql服務器上,node_exporter也部署(參考前面) tar xf mysqld_exporter-0.10.0.linux-amd64.tar.gz mv mysqld_exporter-0.10.0.linux-amd64 /usr/local/ ln -s /usr/local/mysqld_exporter-0.10.0.linux-amd64/ /usr/local/mysqld_exporter 

  加載mysqld_exporter 添加配置文件(需要MySQL授權用戶)
  mysqld_exporter需要連接到MySQL,需要授權
  mysql> grant replication client, process on *.* to prometheus@"localhost" identified by "123456";
  mysql> grant select on performance_schema.* to prometheus@"localhost";
  cd /usr/local/mysqld_exporter/
  vim .my.cnf
  [client]
  user=prometheus
  password=123456
  nohup ./mysqld_exporter --config.my-cnf=.my.cnf &   #啟動

2.3  針對nginx進行監控

 

cd /usr/local
git clone git://github.com/vozlt/nginx-module-vts.git   #在nginx主機上操作
./configure --prefix=/usr/local/nginx-1.12.2 --user=nginx --group=nginx --with-http_stub_status_module  --with-http_ssl_module --add-module=/usr/local/nginx-module-vts
make
nginx -s stop
\cp ./objs/nginx /usr/local/nginx/sbin/
vim nginx.conf
http {
     .....
    ###Prometheus配置##   
    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_host on; #打開vhost過濾
    ###Prometheus配置##
    .....
    server {
     location /status {
               #vhost_traffic_status off;
               vhost_traffic_status_display;
               vhost_traffic_status_display_format html;
        }
    }
    }
########################################################################################################################
wget -c https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.9.1/nginx-vts-exporter-0.9.1.linux-amd64.tar.gz
tar xf nginx-vts-exporter-0.9.1.linux-amd64.tar.gz

./nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri http://10.10.16.107/status/format/json &    #啟動nginx Vhost Traffic
http://10.10.16.107/status #訪問nginx主機各節點狀態

3、Alertmanager報警實現

  https://blog.qikqiak.com/post/alertmanager-of-prometheus-in-practice/    #參考alertmanager報警實踐

3.1  下載alertmanager安裝包

wget https://github.com/prometheus/alertmanager/releases/download/v0.12.0/alertmanager-0.12.0.linux-amd64.tar.gz
tar -axvf alertmanager-0.12.0.linux-amd64.tar.gz

3.2  配置alert默認啟動yml文件

cd alertmanager 
vim simple.yml
  global:
    smtp_smarthost: 'smtp.163.com:25'
    smtp_from: '136112500xx@163.com'
    smtp_auth_username: '136112500xx'
    smtp_auth_password: 'xxxxxxxxxx'
    smtp_require_tls: false

  templates:
    - '/usr/local/alertmanager/template/*.tmpl'

  route:
    group_by: ['alertname', 'cluster', 'service']
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 10m
    receiver: default-receiver

  receivers:
  - name: 'default-receiver'
    email_configs:
    - to: 'AA@BB.com'
      html: '{{ template "alert.html" . }}'
      headers: { Subject: "[WARN] 報警郵件test" }

3.3  配置報警發送文件樣式模板

 vim template/alert.tmpl  #template需要創建
{{ define "alert.html" }}
<table>
    <tr><td>報警名</td><td>開始時間</td></tr>
    {{ range $i, $alert := .Alerts }}
        <tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ $alert.StartsAt }}</td></tr>
    {{ end }}
</table>
{{ end }}

3.4  配置alert.html

vim alert.html 

{{ define "alert.html" }}
<table>
    <tr><td>報警名</td><td>開始時間</td></tr>
    {{ range $i, $alert := .Alerts }}
        <tr><td>{{ index $alert.Labels "alertname" }}</td><td>{{ $alert.StartsAt }}</td></tr>
    {{ end }}
</table>
{{ end }}

3.5  啟動alertmanager服務

./alertmanager --config.file=simple.yml   #啟動alertmanager

4、Grafana安裝

4.1 直接yum安裝

yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm    #穩定版
yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm    #最新版

4.2 rpm包安裝

 wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm
 yum install initscripts fontconfig
 rpm -Uvh grafana-4.4.3-1.x86_64.rpm

4.3 yum源方式安裝

vim /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packagecloud.io/grafana/stable/el/6/$basearch
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
yum install grafana #安裝
yum update grafana  #升級

4.4 安裝包信息

二進制文件: /usr/sbin/grafana-server
init.d 腳本: /etc/init.d/grafana-server
環境變量文件: /etc/sysconfig/grafana-server
配置文件: /etc/grafana/grafana.ini
啟動項: grafana-server.service
日志文件:/var/log/grafana/grafana.log
默認配置的sqlite3數據庫:/var/lib/grafana/grafana.db

  服務器端圖形渲染:
  服務器端映像(png)呈現是一個可選的特性,但在共享可視化時非常有用,例如在警報通知中。
  如果圖像缺少文本,請確保已經安裝了字體包
  yum install fontconfig
  yum install freetype*
  yum install urw-fonts

4.5 grafana升級操作

####rpm升級操作
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm
yum install initscripts fontconfig
rpm -Uvh grafana-5.0.1-1.x86_64.rpm  #升級
rpm -Uvh --oldpackage grafana-4.4.3-1.x86_64.rpm  #回退

5、Grafana 模板導入

  http://docs.grafana.org/installation/rpm/      #參考rpm安裝

參考官方文檔:
1、yum 安裝:yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm    #穩定版
            yum install https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.1.4-1.x86_64.rpm    #最新版
2、rpm安裝: wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.4.3-1.x86_64.rpm
            yum install initscripts fontconfig
            rpm -Uvh grafana-4.4.3-1.x86_64.rpm
3、yum源方式安裝:
   vim /etc/yum.repos.d/grafana.repo
   [grafana]
   name=grafana
   baseurl=https://packagecloud.io/grafana/stable/el/6/$basearch
   repo_gpgcheck=1
   enabled=1
   gpgcheck=1
   gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
   sslverify=1
   sslcacert=/etc/pki/tls/certs/ca-bundle.crt
   yum install grafana

4、安裝包信息:
   二進制文件: /usr/sbin/grafana-server
   init.d 腳本: /etc/init.d/grafana-server
   環境變量文件: /etc/sysconfig/grafana-server
   配置文件: /etc/grafana/grafana.ini
   啟動項: grafana-server.service
   日志文件:/var/log/grafana/grafana.log
   默認配置的sqlite3數據庫:/var/lib/grafana/grafana.db


5、服務器端圖形渲染:
  服務器端映像(png)呈現是一個可選的特性,但在共享可視化時非常有用,例如在警報通知中。
  如果圖像缺少文本,請確保已經安裝了字體包
  yum install fontconfig
  yum install freetype*
  yum install urw-fonts

 通過http://ip:3000訪問Grafana Web界面(缺省帳號/密碼為admin/admin)

 

 

nginx模板引入:https://grafana.com/dashboards/2949  #這里不加贅述,直接引入即可出圖。

6、Prometheus監控總結

6.1  做好ntp時間同步

prometheus對系統時間的准確性要求很高,必須保證本機時間與監控主機實時同步:
#Ansible: sync time
00 00 * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1

6.2  Prometheus各組件說明

       Prometheus生態系統由多個組件組成,它們中的一些是可選的。多數Prometheus組件是Go語言寫的,這使得這些組件很容易編譯和部署。Prometheus提供多種類型的Exporter用於采集各種不同服務的運行狀態。目前支持的有數據庫、硬件、消息中間件、存儲系統、HTTP服務器、JMX等。

Prometheus Server:主要負責數據采集和存儲,提供PromQL查詢語言的支持。另外還提供查詢和 Alert Rule 配置管理。
客戶端SDK:官方提供的客戶端類庫有go、java、scala、python、ruby,其他還有很多第三方開發的類庫,支持nodejs、php、erlang等。如client libraries,用於對接 Prometheus Server,可以查詢和上報數據.
Push Gateway:支持臨時性Job主動推送指標的中間網關。用於批量,短期的監控數據的匯總節點,主要用於業務數據匯報等。
PromDash:使用Rails開發可視化的Dashboard,用於可視化指標數據。
Explorer:它是Prometheus的一類數據采集組件的總稱。它負責從目標處搜集數據,並將其轉化為Prometheus支持的格式。與傳統的數據采集組件不同的是,它並不向中央服務器發送數據,而是等待中央服務器主動前來抓取。如
node_exporter:會持續不斷采集Linux系統中各種操作系統本身相關的監控參數的程序,采集量很大很全,往往默認的采集項就遠超過你的實際需求。
Alertmanager:警告管理器,用於告警通知管理,用來進行報警。
Prometheus_cli:命令行工具
其他輔助性工具:多種導出工具,可以支持Prometheus存儲數據轉化為HAProxy、StatsD、Graphite等工具所需要的數據存儲格式

6.3  Prometheus的原理

    Prometheus的基本原理是通過HTTP協議周期性抓取被監控組件的狀態,任意組件只要提供對應的HTTP接口就可以接入監控。不需要任何SDK或者其他的集成過程。這樣做非常適合做虛擬化環境監控系統,比如VM、Docker、Kubernetes等。
輸出被監控組件信息的HTTP接口被叫做exporter 。目前互聯網公司常用的組件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系統信息(包括磁盤、內存、CPU、網絡等等)。

6.4  Prometheus的服務過程

a. Prometheus Daemon負責定時去目標上抓取metrics(指標)數據,每個抓取目標需要暴露一個http服務的接口給它定時抓取。Prometheus支持通過配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目標。
b. Prometheus采用PULL的方式進行監控,即服務器可以直接通過目標PULL數據或者間接地通過中間網關來Push數據。 c. Prometheus在本地存儲抓取的所有數據,並通過一定規則進行清理和整理數據,並把得到的結果存儲到新的時間序列中。 d. Prometheus通過PromQL和其他API可視化地展示收集的數據。Prometheus支持很多方式的圖表可視化,例如Grafana、自帶的Promdash以及自身提供的模版引擎等等。Prometheus還提供HTTP API的查詢方式,自定義所需要的輸出。 e. PushGateway支持Client主動推送metrics到PushGateway,而Prometheus只是定時去Gateway上抓取數據。 f. Alertmanager是獨立於Prometheus的一個組件,可以支持Prometheus的查詢語句,提供十分靈活的報警方式。

6.5  Prometheus場景介紹

Prometheus在記錄純數字時間序列方面表現非常好。它既適用於面向服務器等硬件指標的監控,也適用於高動態的面向服務架構的監控。對於現在流行的微服務,Prometheus的多維度數據收集和數據篩選查詢語言也是非常的強大。
Prometheus是為服務的可靠性而設計的,當服務出現故障時,它可以使你快速定位和診斷問題。它的搭建過程對硬件和服務沒有很強的依賴關系。 Prometheus不適用的場景:Prometheus它的價值在於可靠性,甚至在很惡劣的環境下,你都可以隨時訪問它和查看系統服務各種指標的統計信息。 如果你對統計數據需要100
%的精確,它並不適用,例如:它不適用於實時計費系統。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM