コンテナモニタリングの実践-Grafana


概要
Grafanaはオープンソースで、大規模な指標データの可視化プロジェクトに使用でき、指標を警報することもできます.友好的なApache License 2.0オープンソースプロトコルに基づいて、現在prometheusモニタリング展示の第一選択です.メリットは次のとおりです.
1.使用:
  • 配置の便利さ:Dashboard、Panel、Rowなどの組み合わせをサポートし、折れ線図、柱状図などの多種の図例
  • をサポートする.
  • グラフはきれいです.ダーク系や純白系を選択することもできます.色を自分で定義することもできます.
  • テンプレートが多い:grafanaテンプレートは活発で、多くのユーザー貢献のパネルがあり、直接導入すれば
  • を使うことができます.
  • は多種のデータソースをサポートする:grafanaは展示パネルとして、Graphite、ES、Prometheusなどの多くのデータソースをサポートする
  • 権限管理が簡単:admin、viewerなどの多種の役割管理制御
  • がある
    2.二次開発:
    デフォルトのgrafanaがあなたのニーズを満たすことができない場合は、二次開発を行うには、公式にも多くのサポートが提供されています.
  • 協定はApache License 2.0:商業友好、勝手に変更して、変更して売ってもいいです.
  • 完全なAPI呼び出し:権限、パネル、ユーザー、アラームはapi呼び出しをサポートします.
  • 多種の認証方式:OAuth、LADP、Proxy多種の方式、あなたは自分の会社の認証システム
  • にアクセスすることができます
  • プラグイン開発:直接コードを変更したくない場合は、自分のプラグイン
  • を作ることができます.
  • go+Angular+react:よく使われるテクノロジースタックで、二次開発が便利
  • prometheus+grafanaはモニタリングの組み合わせとして便利で、強くて、鑑権を改造してからもっと香りがします.最初はgrafanaが持っているアラーム機能を使ってみましたが、残念ながら生産には使えません.アラームのissueの多くは公式にも修正したくないので、やめましょう.
    配置
    ステップ1:grafanaのインストール
    Grafanaは多くの配置方法を提供しています.もしあなたの表示アラームがK 8 Sクラスタの外にある場合、バイナリで直接配置することができます.grafana自体がクラスタ内にある場合、または管理側もk 8 sクラスタである場合、yamlで配置することができます.
    Deployment構成:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: kube-system
      name: grafana
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: grafana
      template:
        metadata:
          namespace: kube-system
          annotations:
            grafana-version: '1.0'
          name: grafana
          labels:
            app: grafana
        spec:
          containers:
          - name: grafana
            image: grafana/grafana:5.1.0
            imagePullPolicy: Always
            securityContext:
              runAsUser: 0
            env: 
            - name: GF_SECURITY_ADMIN_PASSWORD
              value: "admin"
            ports:
            - name: grafana
              containerPort: 3000
            resources:
              requests:
                memory: "100Mi"
                cpu: "100m"
              limits:
                memory: "2048Mi"
                cpu: "1024m"

    サービス構成:
    apiVersion: v1
    kind: Service
    metadata:
      namespace: kube-system
      name: grafana
      annotations:
        prometheus.io/scrape: 'true'
      labels:
        name: grafana
    spec:
      selector:
        app: grafana
      type: LoadBalancer
      ports:
      - name: grafana
        protocol: TCP
        port: 3000

    grafanaプロファイルのフィールドの意味:
    app_mode:    ,   production
     
    [path]
    data:  grafana    sqlite3、    、       
    logs:grafana  logs   
     
    [server]
    http_addr:   ip  ,,   0.0.0.0
    http_port:     ,   3000
    protocol:http  https,,   http
    domain:     root_url    ,         grafana     domian  ,   localhost
    enforce_domain:     header   domian,         domain ,   false
    root_url:    web   grafana    url,   %(protocol)s://%(domain)s:%(http_port)s/
    router_logging:    web    ,   false
    cert_file:    https     
    cert_key:    https     
     
    [database]
    grafana              dashboard  ,    sqlite3   ,           
    type:   mysql、postgres、sqlite3,   sqlite3
    path:  sqlite3  ,  sqlite3     
    host:  mysql、postgres  ,   127.0.0.1:3306
    name:grafana      ,   grafana
    user:        
    password:        
    ssl_mode:  postgres  
     
     
    [security]
    admin_user:grafana   admin  ,   admin
    admin_password:grafana admin     ,   admin
    login_remember_days:          
    secret_key:         
    disable_gravatar:
     
     
    [users]
    allow_sign_up:          ,     false,       ,   true, admin      ,   grafana
    allow_org_create:     false,          ,   true
    auto_assign_org:    true   ,            id 1    ,    false   ,              
    auto_assign_org_role:         ,   Viewer,    Admin、Editor
     
     
    [auth.anonymous]
    enabled:   true,         ,   false
    org_name:           
    org_role:            ,   Viewer
     
     
    [auth.github]
      github   ,   ,  
    enabled = false
    allow_sign_up = false
    client_id = some_id
    client_secret = some_secret
    scopes = user:email
    auth_url = https://github.com/login/oauth/authorize
    token_url = https://github.com/login/oauth/access_token
    api_url = https://api.github.com/user
    team_ids =
    allowed_domains =
    allowed_organizations =
     
     
    [auth.google]
      google app ,  
    enabled = false
    allow_sign_up = false
    client_id = some_client_id
    client_secret = some_client_secret
    scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
    auth_url = https://accounts.google.com/o/oauth2/auth
    token_url = https://accounts.google.com/o/oauth2/token
    api_url = https://www.googleapis.com/oauth2/v1/userinfo
    allowed_domains =
     
     
    [auth.basic]
    enabled:    true, http api      
     
     
    [auth.ldap]
    enabled:   true   LDAP  ,   false
    config_file:    LDAP,  LDAP     /etc/grafana/ldap.toml
     
     
    [auth.proxy]
          HTTP           
    enabled:   false
    header_name:   X-WEBAUTH-USER
    header_property:      username
    auto_sign_up:   true。      ,     grafana DB    
     
    [analytics]
    reporting_enabled:     true,           stats.grafana.org,          、  、dashboard、    。   true
    google_analytics_ua_id:  GA    ,    GA ID  
     
     
    [dashboards.json]
                json   dashboard,           
    enabled:   false
    path:           json dashboard,   /var/lib/grafana/dashboards
     
     
    [session]
    provider:   file,     memory、mysql、postgres
    provider_config:       provider      ,  provider file,  data/xxxx    ,  provider mysql,  user:password@tcp(127.0.0.1:3306)/database_name,  provider postgres,  user=a password=b host=localhost port=5432 dbname=c sslmode=disable
    cookie_name:grafana cookie  
    cookie_secure:     true, grafana  https,   false
    session_life_time:session    ,   86400 ,24  
     
     
             ,       
    [smtp]
    enabled = false
    host = localhost:25
    user =
    password =
    cert_file =
    key_file =
    skip_verify = false
    from_address = [email protected]
     
    [emails]
    welcome_email_on_sign_up = false
    templates_pattern = emails/*.html
     
     
    [log]
    mode:   console、file,   console、file,       ,     
    buffer_len:channel buffer  ,   10000
    level:   "Trace", "Debug", "Info", "Warn", "Error", "Critical",   info
     
    [log.console]
    level:    
     
    [log.file]
    level:    
    log_rotate:        
    max_lines:           ,   1000000
    max_lines_shift:           ,   28,  256MB
    daily_rotate:          ,   true
    max_days:      ,   7,7    
    

    いくつかの点に注意してください.
  • すべてのリソースに対してrequest、limit制限を行い、ホストリソースの消費を防止する
  • grafanaのいくつかの構成は、adminのパスワードGF_のような変数を介して入力することができる.SECURITY_ADMIN_PASSWORD
  • grafanaのデータを永続化する場合は、volumeまたは外部ストレージを掛けることをお勧めします.永続化されたコンテンツは一般的にパネル構成です.モニタパネルの構成は、エクスポート
  • にインポートできます.
  • securityContext:バージョンの問題でgrafanaを提示する権限が不足している場合はrunAsUser:0
  • を構成できます.
    grafanaを作成したら、サービスが露出したポートアドレスでページを表示できます.
    ログインに成功すると、初期化が必要な内容が表示されます
    ステップ2:データソースの構成
    grafanaは複数のデータソースをサポートしており、「type」のドロップダウン・ボックス・オプションで参照できます.ここではprometheusをデータソースとして選択します.HTTPのアクセス方式はproxyを選択し、URLはgrafanaがアクセスできるアドレスを記入します. grafana prometheus k8s , svc
    「save and test」をクリックして接続性をテストします.
    手順3:パネルの作成
    データソースがあれば、次にデータをよりよく示す方法です.grafanaはGraph、singlestat、Tableなど、さまざまなタイプのグラフをサポートします.いろいろな形を組み合わせることができます.ここでまずDemoを作成し、既存のテンプレートを保存するショートカットキーはCtrl+Sです.
    すべてのパネルは左上隅のドロップダウンボックスで見つけることができます.
    既存のパネル(Dashboard)をインポートし、テンプレートアドレスを貢献することもできます.https://grafana.com/dashboards
    左上の➕番号を付けてimportにインポートするには、次の2つの形式があります.
  • URL直接インポート:grafanaが外部ネットワークにアクセスできることを前提として、対応するテンプレートのurlを貼り付けます.
  • アップロードjsonファイル:一般的には移行時に使用し、既存のjsonをエクスポートし、
  • にインポートする
    grafanaのパネル、グラフには多くの構成があります.次に、一般的な構成項目について説明します.
    共通の構成
    例:K 8 Sのノード数トレンド図
    グラフを編集するときにデフォルトで入力されるのはMetricです.内容は次のとおりです.
  • Data Source:構成したデータソースの名前を入力します.ここではprometheus
  • です.
  • AとBはこの図にいくつかの線があることを意味し、ここではAの線であり、右側の小さな目はこの線
  • を隠すかどうかを表す.
  • A線で、入力ボックスにはクエリー文が記入されています.ここでは合法的なpromsqlを指し、legend formatはA線の表示名
  • を指します.
    Metric以外にもいくつかの選択肢があります.意味は次のとおりです.
  • General:一般的には他の項目を構成してから後でGeneralを設定しますが、General構成ラベルでは一般的に「Title」しか使用されません.グラフのタイトルです.ここでのNode数
  • のように.
    Title:    ;
    Description:    ;
    Span:    ,    ,            ;
    Height:    ,    ,            ;
    Transparent:      ,        ,            ,      ;
    Templating Drilldown / detail link    ,    。
  • Metric:比較的に重要で、指標の表現式と指標線の地方を配合して、上はすでに
  • 例を挙げました
  • Axes:オフセットスケーリングなどのデータ軸を配置する場所、フォーマット変換
  • Legend:図例、制限の有無及び表示の仕方
  • Display:線幅、ソート方式、Null値処理
  • などの関連構成を示す.
  • Alert:アラーム構成、grafanaは珍しい展示グラフでアラームをサポートしていますが、彼のアラームは単一のグラフにしかサポートされておらず、テンプレートをネストすることができず、少し鶏の肋骨があります.左上隅にnodeをフィルタするドロップダウンボックスがあり、グラフが変数に転送された場合、アラームを構成すると、構成に失敗します.エラー:「Template variables are not supported in alert queries」
  • TimeRange:24時間以内のデータ
  • のような単一グラフの表示時間を構成する
    Override relative time:            ,          ,     24h(      )。 
    Add time shift:          ,    2h       2h   。 
    Hide time ocerride info:             graph            ,                 
    

    詳細な構成は次のとおりです.https://grafana.com/docs/features/panels/graph/
    変数の構成:
    いくつかの複雑なシーンでは、複数のマシンがある場合、各マシンがcpuメモリなどの指標を示す必要がある変数が必要になる場合があります.マシンリストはダイナミックで、このとき変数を使用できます.例:
    まず、パネルのsettingでvariablesを選択し、パネルの設定であり、グローバル設定ではないことに注意します.
    名前、ドロップダウン・ボックス・オプションのデータ取得式、リフレッシュ・サイクル、ALLオプションがあるかどうかなどを入力し、保存します.
    次に、特定のグラフで変数を使用します.
    metricでは、変数$Nodeを式に書いてマッチングすればいいです.
    grafanaの変数は$Node.*などの高度なマッチングをサポートします.Nodeで始まる文字を表し、変数を使用してマルチレベルフィルタリングを実現し、podリソースの表示などのより複雑なニーズを満たすことができます.
    変数の詳細:what-is-a-variable
    アラーム設定
    grafanaはv 4.0バージョンからアラーム機能が導入されました.
    ノードの数を例に、ルールを構成します.
            3 ,   [email protected]

    alertはavg,sumなどの式をサポートするが,持続時間はデータ自体の採取頻度に依存する.もっとテストする必要があります.
    Notifications:アラームの受信グループと詳細を構成します.アラーム受信者の構成は、専用のAlertingページにあります.
    Alert Rules:すでに構成されているアラーム規則で、そのトリガ状態を示します.
    アラームメッセージのスタイル:
    テンプレート変数アラーム
    以上のアラーム構成は、変数のないグラフにのみ適しており、上記の選択node、変数のグラフに遭遇するとサポートできません.
    関連issue:https://github.com/grafana/gr...
    公式はこの機能について説明していますが、最新バージョンはまだサポートされていません.issueの一言を借りてハハハ
    It would be grate to add templates support in alerts. Otherwise the feature looks useless a bit.
    

    本文は容器監視実践シリーズの文章で、完全な内容はcontainer-monitor-bookを参照してください.