コンテナモニタリングの実践-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構成:
サービス構成:
grafanaプロファイルのフィールドの意味:
いくつかの点に注意してください.すべてのリソースに対してrequest、limit制限を行い、ホストリソースの消費を防止する grafanaのいくつかの構成は、adminのパスワードGF_のような変数を介して入力することができる.SECURITY_ADMIN_PASSWORD grafanaのデータを永続化する場合は、volumeまたは外部ストレージを掛けることをお勧めします.永続化されたコンテンツは一般的にパネル構成です.モニタパネルの構成は、エクスポート にインポートできます. securityContext:バージョンの問題でgrafanaを提示する権限が不足している場合はrunAsUser:0 を構成できます.
grafanaを作成したら、サービスが露出したポートアドレスでページを表示できます.
ログインに成功すると、初期化が必要な内容が表示されます
ステップ2:データソースの構成
grafanaは複数のデータソースをサポートしており、「type」のドロップダウン・ボックス・オプションで参照できます.ここではprometheusをデータソースとして選択します.HTTPのアクセス方式はproxyを選択し、URLはgrafanaがアクセスできるアドレスを記入します.
「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数 のように. Metric:比較的に重要で、指標の表現式と指標線の地方を配合して、上はすでに 例を挙げました Axes:オフセットスケーリングなどのデータ軸を配置する場所、フォーマット変換 Legend:図例、制限の有無及び表示の仕方 Display:線幅、ソート方式、Null値処理 などの関連構成を示す. Alert:アラーム構成、grafanaは珍しい展示グラフでアラームをサポートしていますが、彼のアラームは単一のグラフにしかサポートされておらず、テンプレートをネストすることができず、少し鶏の肋骨があります.左上隅にnodeをフィルタするドロップダウンボックスがあり、グラフが変数に転送された場合、アラームを構成すると、構成に失敗します.エラー:「Template variables are not supported in alert queries」 TimeRange:24時間以内のデータ のような単一グラフの表示時間を構成する
詳細な構成は次のとおりです.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バージョンからアラーム機能が導入されました.
ノードの数を例に、ルールを構成します.
alertはavg,sumなどの式をサポートするが,持続時間はデータ自体の採取頻度に依存する.もっとテストする必要があります.
Notifications:アラームの受信グループと詳細を構成します.アラーム受信者の構成は、専用のAlertingページにあります.
Alert Rules:すでに構成されているアラーム規則で、そのトリガ状態を示します.
アラームメッセージのスタイル:
テンプレート変数アラーム
以上のアラーム構成は、変数のないグラフにのみ適しており、上記の選択node、変数のグラフに遭遇するとサポートできません.
関連issue:https://github.com/grafana/gr...
公式はこの機能について説明していますが、最新バージョンはまだサポートされていません.issueの一言を借りてハハハ
本文は容器監視実践シリーズの文章で、完全な内容はcontainer-monitor-bookを参照してください.
Grafanaはオープンソースで、大規模な指標データの可視化プロジェクトに使用でき、指標を警報することもできます.友好的なApache License 2.0オープンソースプロトコルに基づいて、現在prometheusモニタリング展示の第一選択です.メリットは次のとおりです.
1.使用:
2.二次開発:
デフォルトのgrafanaがあなたのニーズを満たすことができない場合は、二次開発を行うには、公式にも多くのサポートが提供されています.
配置
ステップ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
いくつかの点に注意してください.
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つの形式があります.
grafanaのパネル、グラフには多くの構成があります.次に、一般的な構成項目について説明します.
共通の構成
例:K 8 Sのノード数トレンド図
グラフを編集するときにデフォルトで入力されるのはMetricです.内容は次のとおりです.
Metric以外にもいくつかの選択肢があります.意味は次のとおりです.
Title: ;
Description: ;
Span: , , ;
Height: , , ;
Transparent: , , , ;
Templating Drilldown / detail link , 。
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を参照してください.