Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenShift Monitoring - 自律化したPrometheus運用 -

OpenShift Monitoring - 自律化したPrometheus運用 -

以下で利用した資料です。

OpenShift 実践ウェビナー
〜エンタープライズコンテナ運用9つのコツ〜
【第7回】Prometheusによるクラスタ/コンテナモニタリング
2020年 5月 14日 16:00 JST (UTC+ 9)

Shingo.Kitayama

May 13, 2020
Tweet

More Decks by Shingo.Kitayama

Other Decks in Technology

Transcript

  1. • ごとに つの値を返す • 時間幅に渡るデータをそれぞれ含んで いる時系列の集合 • 単純な浮動小数点数の数値 • 単純な文字列の値

    のデータは以下の 種類が規定されている。 ## Match Label {} node_load5{instance=‘XXX.XXX.XXX.XXX‘} 0.25 便利な統計関数がある • • • 期間中の平均値に対する現在値の割合を返す。 • 与えられた の中で、値の変化が何回起 こったかをカウント。 • 与えられた の絶対値を返す。 • 結果を昇順でソートする。 ## 直近1時間のデータを表示する node_load5[1h] ## 直近1時間のデータを表示する node_load5[1h]
  2. route: receiver: 'containers_notification' receivers: - name: 'containers_notification' slack_configs: - api_url:

    '[[YOUR SLACK WEBHOOK]]' channel: '#general' text: "{{ .CommonAnnotations.summary }}" send_resolved: true は、以下を含む受信アラートを管理するコンポーネントです。 •アラートの非通知 •アラートの抑制 •アラートの集約 •アラートの重複排除 グループ化 • 、 、 、 などにアラートを通知
  3. の全体像 が監視対象の データを取得 定期的に全ての からリソース情報 を収集。監視したデータは 内 の に保持される。 のメトリクスを可視化するツール

    監視対象から監視用データを 送信したい場合は に送信 からのアラートに関する 情報を受け取って通知する
  4. 展開を定義 します。 は常に と一致するデプロイメン トが実行されていることを確 認します。 を監視す る方法を宣言的に指定しま す。 は、定義に基づい

    て の 設定を自動的に生成します。 を監視する方 法を宣言的に指定します。 は、定義に基づい て の 設定を自動的に生成します。 展開を定 義します。オペレーターは常 に、 と一致するデプロイ メントが実行されていることを 確認します。 オブジェクトは宣言的に デプロイメントの望ましい状態を記述し、 は によって監視されるターゲットのセットを記述します。 必要な ルー ルファイルを定義します。これ は、 アラートお よび記録ルールを含む インスタンスに よってロードできます。 インスタンス管理 メトリクス取得対象設定 通知ルール設定 インスタンス管理
  5. インスタンス管理 の を動的に定義します。 は常に、 に一致する が実行 されていることを確認します。 apiVersion: monitoring.coreos.com/v1 kind:

    Prometheus metadata: generation: 2 labels: prometheus: k8s name: k8s namespace: openshift-monitoring spec: nodeSelector: kubernetes.io/os: linux serviceAccountName: prometheus-k8s replicas: 2 listenLocal: true serviceMonitorSelector: {} resources: requests: cpu: 200m memory: 1Gi
  6. メトリクス取得対象設定 apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: example-app labels: team:

    frontend spec: selector: matchLabels: app: example-app endpoints: - port: web を監視する方法を宣言的に指定します。 は、定義に基づいて の 設定を自動的に生成します。
  7. コンポーネント 説明 スタックの中心的なコンポーネントです。これは、デプロイされたモニタリングコンポーネントおよびリソースを 制御し、それらを最新の状態に保ちます。 および インスタンスを作成し、設定、管理します。また、 ラベルのク エリーに基づいてモニタリングターゲットの設定を自動生成します。 は、システムおよびサービスのモニタリングシステムであり、モニタリングスタックのベースとな ります。

    アダプターは、 のクラスターリソースメトリクス を公開し ます。リソースメトリクスは およびメモリーの使用率です。 サービスは、 によって送信されるアラートを処理します。 は、 オブジェクトを が使用できるメトリクスに 変換します。 は、メトリクスを収集するためにすべてのノードにデプロイされるエージェントです。 は、メトリクスの分析および可視化のためのダッシュボードを提供します。モニタリングスタックおよ びダッシュボードと共に提供される インスタンスは読み取り専用です。
  8. オブジェクトのメトリクス収集 数、 のリソース利用量、 のラベル ノードのメトリクス収集 の 、 、 ▶ ▶

    によって管理された が「 」「 」に接続を行い、 オブジェク ト、ノードのメトリクスを収集する。
  9. の設定 内の global: evaluation_interval: 30s scrape_interval: 30s external_labels: prometheus: openshift-monitoring/k8s

    prometheus_replica: prometheus-k8s-0 rule_files: - /etc/prometheus/rules/prometheus-k8s-rulefiles- 0/*.yaml scrape_configs: - job_name: openshift-apiserver-operator/openshift- apiserver-operator/0 - job_name: openshift-apiserver/openshift-apiserver/0 - job_name: openshift-authentication- operator/authentication-operator/0 - job_name: openshift-authentication/oauth- openshift/0 - job_name: openshift-cloud-credential- operator/cloud-credential-operator/0 … 初期設定の「 」にて が決まっている
  10. 作成 apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring

    data: config.yaml: | prometheusK8s: volumeClaimTemplate: metadata: name: localpvc spec: storageClassName: local-storage resources: requests: storage: 40Gi $ oc -n openshift-monitoring create configmap cluster-monitoring-config $ oc -n openshift-monitoring edit configmap cluster-monitoring-config の設定は、 を設定する。 data: config.yaml: | <component>: <configuration_for_the_component> 設定を に で記載 例 のローカル永続ストレージ を要求
  11. の設定 global: resolve_timeout: 5m route: group_wait: 30s routes: - receiver:

    watchdog repeat_interval: 5m match: alertname: Watchdog - receiver: team-frontend-page match: severity: critical receivers: - name: default - name: watchdog - name: team-frontend-page pagerduty_configs: - service_key: "your-key" ## Export Secret $ oc -n openshift-monitoring get secret alertmanager- main --template='{{ index .data "alertmanager.yaml" }}' |base64 -d > alertmanager.yaml ## Edit Secret $ vi alertmanager.yaml ## Replace Secret $ oc -n openshift-monitoring create secret generic alertmanager-main --from-file=alertmanager.yaml --dry- run -o=yaml | oc -n openshift-monitoring replace secret --filename=- 継続的に実行される アラートが同梱され ています。 は、 などの通 知プロバイダーに、 アラートの通知を送信 できます。 例 に通知を送信
  12. 対象外の操作 ・追加の オブジェクトを に作成する。 ・予期しない オブジェクト、または オブジェクトの作成。 ・ による の

    を停止する。 ・ を他のリソースで使用。 ・新規 の追加。 ・ のリソース、 インスタンスの変更。 に設定されているルールのカスタマイズは 対象外 クラスタの監視対象は、 に委ねられている
  13. apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data:

    config.yaml: | techPreviewUserWorkload: enabled: true $ oc -n openshift-monitoring edit configmap cluster-monitoring-config $ oc -n openshift-user-workload-monitoring get pod NAME READY STATUS RESTARTS AGE prometheus-operator-85bbb7b64d-7jwjd 1/1 Running 0 3m24s prometheus-user-workload-0 5/5 Running 1 3m13s prometheus-user-workload-1 5/5 Running 1 3m13s の から 個別サービスモニタリン グの有効化 とメトリクス取得用 が起動
  14. apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: prometheus-example-monitor name: prometheus-example-monitor

    namespace: ns1 spec: endpoints: - interval: 30s port: web scheme: http selector: matchLabels: app: prometheus-example-app サービスを行っている に を定義することで、アプリケーションモニタリング用のメト リクス設定が行える。
  15. # HELP http_requests_total Count of all HTTP requests # TYPE

    http_requests_total counter http_requests_total{code="200",method="get"} 2 # HELP version Version information about this binary # TYPE version gauge version{version="v0.1.0"} 1 にて参照権限を与えられたメンバーのみが、 からメトリクス情報を参照できる。 の情報
  16. によるモニタリング は、 のシステムコールの実行を検出してルー ルに基づいて警告できます。 たとえば、 は次のようなコンテナランタイムの操作を 検出できます。 ・コンテナ内でのシェルの実行 ・サーバープロセスが予期しない子プロセスの生成 ・機密ファイル

    など の読み取り ・非デバイスファイル など への書き込み ・特定バイナリによる、ネットワーク接続の確立 など - rule: Disallowed SSH Connection desc: Detect any new ssh connection to a host other than those in an allowed group of hosts condition: (inbound_outbound) and ssh_port and not allowed_ssh_hosts output: Disallowed SSH Connection (command=%proc.cmdline connection=%fd.name user=%user.name container_id=%container.id image=%container.image.repository) priority: NOTICE tags: [network, mitre_remote_service]