prometheus基本概念用法記録


Prometheus
  • の基本概念promethuesは、オープンソースのシステム監視アラームフレームワークです.Prometheusが収集したすべてのモニタリングデータは、内蔵された時系列データベースに指標(metric)として保存されます(TSDB):同じ指標名、同じラベルセットに属するタイムスタンプマークのあるデータストリームです.Prometheusは、格納された時間系列に加えて、クエリ要求に基づいて、戻り結果として一時的で派生した時間系列を生成することもできる.特徴:
  • の強力な多くはデータモデル
  • である.
  • 柔軟なクエリー言語
  • 管理が容易
  • 高効率
  • pullモードを用いて時系列データ
  • を収集する.
  • 複数種類の可視化グラフィックインターフェース
  • 伸縮性
  • prometheusの構成とアーキテクチャ:
  • prometheus server:主にデータ収集と記憶を担当し、promQLクエリー言語のサポートを提供する.prometheusは、収集したモニタリングデータをローカルディスクに時間系列で格納するシーケンスデータベースです.
  • Push Gateway:一時的なjobアクティブプッシュ指標をサポートする中間ゲートウェイ.
  • PromDash:railsが開発したdashboardを使用して、指標データを可視化します.
  • Exporters:マシンの動作状態を監視し、監視されるコンポーネント情報を提供するHTTPインタフェースをexporterと呼ぶ.
  • 直接採集:exporterはprometheusサポートを内蔵し、prometheusにデータのエンドポイントを直接暴露します.
  • 間接採集:prometheusはサポートされていません.prometheusが提供するclien libraryによって作成されたターゲットモニタリング採集プログラム.

  • Altermanager:Prometheus server側からalertsを受信すると、重複データを除去し、パケット化し、受信した受信方式にルーティングし、アラームを発行します.一般的な受信方法は、電子メール、pagerduty、OpsGenie、webhookなどです.
  • WebUI:9090はグラフィックインターフェース機能を提供します.

  • 基本動作原理
  • Prometheus serverは、定期的に構成されたjobsまたはexportersからmetricsを引いたり、Pushgatewayから送られてきたmetricsを受け取ったり、他のPrometheus serverからmetricsを引いたりします.
  • Prometheus serverは収集したmetricsをローカルに格納し、定義したalertを実行する.rulesは、新しい時系列を記録したり、Alertmanagerにアラートを送信したりします.
  • Alertmanagerは、プロファイルに従って受信したアラームを処理し、アラームを発行する.
  • グラフィックインタフェースでは、収集データを可視化する.

  • 基本概念:データモデル:prometheusに格納されているデータは時間系列であり、Metricの名前と一連のラベル(キー値ペア)によって一意に識別され、異なるラベルは異なる時間系列を表す.サンプル:float 64の値とミリ秒レベルのタイムスタンプを含む実際のタイムシーケンス.(指標+タイムスタンプ+サンプル値)metric名前:意味があり、表示機能:たとえばhttp_requestststotalは、httpリクエストの合計数を表します.ここで、metric名はASCII文字、数字、下線、およびコロンで構成され、正規表現[a-zA-Z:][a-zA-Z 0-9_:]*を満たす必要があります.≪ラベル|Label|emdw≫:時間系列に異なる未読の識別を付けます.例えばhttp_requestststotal{method="Get"}は、すべてのhttpリクエストのGetリクエストを表します.method=「post」の場合、新しいmetricになります.ラベル内のキーは、ASCII文字、数値、および下線で構成され、正規表現[a-zA-Z:][a-zA-Z 0-9_:]*を満たす必要があります.フォーマット:{=,...}、たとえばhttp_requests_total{method="POST",endpoint="/api/tracks"}. Metricタイプcounter:累積metirc.Gauge:増減可能metric Histogram:ツリー図summary:要約
  • PromQLクエリー
  • データ型
        (instant vector):      ,            。
        (range vector):      ,                    。
      (scalar):         。
       (string):          。
  • 時系列フィルタ
           :
    eg: http_requests_total ,  {}             。
           :
      = :                 。
      != :                。
      =~ :               (     )      。
      !~ :               (     )      。
           :
    eg:http_requests_total{job="prometheus"}[5m],  []        。
        :
    s -  
      m -   
      h -   
      d -  
      w -  
      y -  
          :
                      ,          .
    eg:http_requests_total offset 5m "offset            ({})  "
  • オペレータ
            
    eg:    
         :
    eg:= ,!= ,< , > ,<= ,>= 
         :
    and,or,unless
        
    
  • 重合動作
    ([parameter,] ) [without|by (
  • タスクとインスタンスは異なるモニタリング指標を収集し、対応するモニタリング収集プログラムを実行し、prometheus serverにこれらのexportインスタンスのアクセスアドレスを知らせる必要があります.各モニタリングサンプルのhttpサービスは、インスタンスと呼ばれる.Node exporterはインスタンスと呼ぶことができます.同じ収集目的で使用されるインスタンスのセット、または1つの収集プロセスの複数のコピーは、1つのタスクで管理されます.
    * job: node
      * instance 2: 1.2.3.4:9100
      * instance 4: 5.6.7.8:9100
  • HTTP APIにおける応答フォーマット
          :
    url    :
    eg:'http://localhost:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z'
          query=:PromQL   。
          time=:        PromQL    。    ,             。
          timeout=:    。    ,       -query,timeout     
          :
    url    :
    eg:'http://localhost:9090/api/v1/query_range?query=up&start=2015-07-01T20:10:30.781Z&end=2015-07-01T20:11:00.781Z&step=15s'
    query=: PromQL   。
      start=:     。
      end=:     。
      step=:     。
      timeout=:     。    ,       -query,timeout     。
    
  • Prometheusアラート
  • アラーム規則定義(Alertrule difinition)アラーム名:カスタム名.アラームルール:PromQL式に基づいてアラームトリガ条件を定義する.プロファイルに定義する
     groups:
     - name: example
       rules:
       - alert: HighErrorRate
         expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
         for: 10m
         labels:
           severity: page
         annotations:
           summary: High request latency
           description: description info
      #group:        
      #alert:      
      #expr:  PromQL     
      #for       
      #label      
      #annotation:         Alertmanger  
  • Altermanager特性
      :                 
       :        ,                     
       :         
  • インストール起動Altermanger
    wget https://github.com/prometheus/alertmanager/releases/download/v0.15.3/alertmanager-0.15.3.linux-amd64.tar.gz
     cd alertmanager-0.15.3.linux-amd64/
     ./alertmanager
  • altermanager.ymlプロファイル紹介
     global:
       resolve_timeout: 5m
    
     route:
       group_by: ['alertname']
       group_wait: 10s
       group_interval: 10s
       repeat_interval: 1h
       receiver: 'web.hook'
     receivers:
     - name: 'web.hook'
       webhook_configs:
       - url: 'http://127.0.0.1:5001/'
     inhibit_rules:
       - source_match:
           severity: 'critical'
         target_match:
           severity: 'warning'
         equal: ['alertname', 'dev', 'instance']
       (route)     (receivers)。                  (route)     ,                    。
         (global):             ,    SMTP  ,Slack     ;
       (templates):            , HTML  ,     ;
         (route):      ,            ;
        (receivers):           ,              ,Slack  Webhook ,             ;
         (inhibit_rules):                   
  • prometheus
    killall -9 prometheus
    nohup prometheus &
  • を再起動
  • prometheusインストール
  • prometheus server
    wget https://github.com/prometheus/prometheus/releases/download/v2.6.0/prometheus-2.6.0.linux-amd64.tar.gz
    tar -zxvf prometheus-2.6.0.linux-amd64.tar.gz
    cd prometheus-2.6.0.linux-amd64
    ./prometheus &
    ln -s /root/prometheus/prometheus-2.6.0.linux-amd64/prometheus /usr/local/bin/prometheus
          
        cat >> /usr/lib/systemd/system/multi-user.target.wants/prometheus.service <
  • をインストール
  • Node Exporterをインストールホスト実行データ(cpu、メモリ、ディスクなどのホスト実行指標などの情報を収集)
    wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
    tar -zxvf node_exporter-0.17.0.linux-amd64.tar.gz 
    cd node_exporter-0.17.0.linux-amd64/
    mv node_exporter  /usr/local/bin/
    nohup  node_exporter &
    
    curl -l -H "Content-type: application/json" -X POST -d '{"msgtype": "markdown","markdown": {"title":"Prometheus    ","text": "####     
    >

    > ######
    "},"at": {"isAtAll": false}}' https://oapi.dingtalk.com/robot/send?access_token=51345145d106753486bd71614bf881283f91e2124535276b257f99327e41dc87 {"errcode":0,"errmsg":"ok"}
  • .
  • Prometheusに収集した監視データを追加し、prometheusを修正する.ymlファイル、scrape_configsは内容を追加します.
    scrape_configs:
    - job_name: 'prometheus'
      static_configs:
        - targets: ['localhost:9090']
    #   node exporter    
    - job_name: 'node'
      static_configs:
        - targets: ['localhost:9100']
  • Grafanaを使用して可視化Dashboard
    docker run -d -p 3000:3000 grafana/grafana
    #  http://localhost:3000      admin   admin
  • を作成

    先に記録し,後で補充する.
    参考記事は以下の通りです.
    prometheus非公式マニュアル
    prometheus-book