PrometheusとGrafanaを使用したモニタリング

PrometheusとGrafanaを使用して、SUSE Manager環境を監視できます 。SUSE Managerサーバとプロキシはself-health metricsを提供できます。また、Saltクライアント上に多数のPrometheus exportersをインストールして管理することもできます。

PrometheusとGrafanaパッケージは以下のSUSE Managerクライアントツールに含まれています。

  • SUSE Linux Enterprise 12

  • SUSE Linux Enterprise 15

  • openSUSE Leap 15.x

SUSE Managerサーバとは別のマシンにPrometheusとGrafanaをインストールする必要があります。 管理対象のSalt SUSEクライアントをモニタリングサーバとして使用することをお勧めします。 他のクライアントはモニタリングサーバとしてサポートされていません。

Prometheusはプルメカニズムを使用してメトリックをフェッチするため、サーバは監視対象クライアントへのTCP接続を確立できる必要があります。 クライアントには対応するオープンポートがあり、ネットワークを介して到達できる必要があります。 または、リバースプロキシを使用して接続を確立することもできます。

監視するクライアントごとに、モニタリングアドオンサブスクリプションが必要です。 SUSE Customer Centerにアクセスして、SUSE Managerのサブスクリプションを管理してください。

1. PrometheusとGrafana

1.1. Prometheus

Prometheusはオープンソースのモニタリングツールで、リアルタイムメトリックを時系列データベースに記録するために使用されます。 メトリックはHTTP経由でプルされるため、高いパフォーマンスと拡張性が実現します。

Prometheusメトリックは時系列データ、または同じグループやディメンションに属するタイムスタンプ付きの値です。 メトリックはその名前とラベルセットで固有に識別されます。

   メトリック名               ラベル                 タイムスタンプ    値
┌────────┴───────┐  ┌───────────┴───────────┐    ┌──────┴──────┐  ┌─┴─┐
http_requests_total{status="200", method="GET"}  @1557331801.111  42236

監視対象の各アプリケーションまたはシステムは、コードインストルメンテーションまたはPrometheus exportersを使用して、上記の形式でメトリックを公開する必要があります。

1.2. Prometheus Exporters

Exportersは、サードパーティシステムからメトリックをPrometheusメトリックとしてエクスポートするのに役立つライブラリです。 Exportersは、Prometheusメトリックを直接使用して特定のアプリケーションまたはシステムをインストルメントできない場合に役立ちます。 複数のexportersを監視対象ホスト上で実行して、ローカルメトリックをエクスポートできます。

Prometheusコミュニティは公式exportersのリストを提供し、さらに多くのものをコミュニティの貢献として見つけることができます。 詳細およびexportersの詳細なリストについては、https://prometheus.io/docs/instrumenting/exporters/を参照してください。

1.3. Grafana

Grafanaは、データの視覚化、モニタリング、および分析を行うためのツールです。 一定期間の特定のメトリックを表すパネルを使用してダッシュボードを作成するために使用されます。 Grafanaは通常、Prometheusと一緒に使用されますが、Elasticsearch、MySQL、PostgreSQL、Influx DBなどの他のデータソースもサポートしています。 Grafanaの詳細については、https://grafana.com/docs/を参照してください。

2. モニタリングサーバの設定

モニタリングサーバを設定するには、PrometheusとGrafanaをインストールして設定する必要があります。

2.1. Prometheusのインストール

モニタリングサーバがSaltクライアントの場合、SUSE Manager Web UIを使用してPrometheusパッケージをインストールできます。 インストールできない場合は、モニタリングサーバに手動でパッケージをダウンロードしてインストールできます。 Prometheusソフトウェアは、SUSE Managerプロキシおよび SUSE Manager for Retailブランチサーバでも使用できます。

  • サーバコンテナ内でシェルにアクセスするには、コンテナホストでmgrctl termを実行します。

  • コンテナ内からファイルをコピーするには、mgrctl cpを使用します。

Prometheusはデータの保存にPOSIXファイルシステムを想定しています。 非POSIX準拠ファイルシステムはサポートされていません。 NFSファイルシステムはサポートされていません。

プロシージャ: Web UIを使用したPrometheusのインストール
  1. SUSE Manager Web UIで、Prometheusをインストールするシステムの詳細ページを開き、[Formula]タブに移動します。

  2. Prometheus]チェックボックスをオンにして、モニタリング式を有効にし、保存をクリックします。

  3. 上部メニューの[Prometheus]タブに移動します。

  4. SUSE Manager サーバ]セクションに、有効なSUSE Manager API資格情報を入力します。 入力した資格情報でモニタリングするシステムセットにアクセスできることを確認してください。

  5. 必要に応じて、他の設定オプションをカスタマイズします。

  6. Save Formula(Formulaの保存)をクリックします。

  7. highstateを適用し、正常に完了したことを確認します。

  8. Prometheusインタフェースが正しくロードされることを確認します。ブラウザで、ポート9090で、PrometheusがインストールされているサーバのURLに移動します(たとえば、http://example.com:9090)。

モニタリング式の詳細については、Monitoring Formulaを参照してください。

プロシージャ: Prometheusを手動でインストールおよび設定する
  1. モニタリングサーバで、golang-github-prometheus-prometheusパッケージをインストールします。

    zypper in golang-github-prometheus-prometheus
  2. Prometheusサービスを有効にします。

    systemctl enable --now prometheus
  3. Prometheusインタフェース が正しくロードされていることを確認します。 ブラウザで、ポート9090で、PrometheusがインストールされているサーバのURLに移動します(たとえば、http://example.com:9090)。

  4. /etc/prometheus/prometheus.ymlにある設定ファイルを開いて、この設定情報を追加します。 server.urlをSUSE ManagerサーバのURIで置き換え、SUSE Manager資格情報に一致するように[ユーザ名]および[パスワード ]フィールドを調整します。

    # {productname} self-health metrics
    scrape_configs:
    - job_name: 'mgr-server'
      static_configs:
        - targets:
          - 'server.url:9100'  # Node exporter
          - 'server.url:9187'  # PostgreSQL exporter
          - 'server.url:5556'  # JMX exporter (Tomcat)
          - 'server.url:5557'  # JMX exporter (Taskomatic)
          - 'server.url:9800'  # Taskomatic
        - targets:
          - 'server.url:80'    # Message queue
          labels:
            __metrics_path__: /rhn/metrics
    
    # Managed systems metrics:
    - job_name: 'mgr-clients'
      uyuni_sd_configs:
       - server: "http://server.url"
         username: "admin"
         password: "admin"
      relabel_configs:
       - source_labels: [__meta_uyuni_exporter]
         target_label: exporter
       - source_labels: [__address__]
         replacement: "No group"
         target_label: groups
       - source_labels: [__meta_uyuni_groups]
         regex: (.+)
         target_label: groups
       - source_labels: [__meta_uyuni_minion_hostname]
         target_label: hostname
       - source_labels: [__meta_uyuni_primary_fqdn]
         regex: (.+)
         target_label: hostname
       - source_labels: [hostname, __address__]
         regex: (.*);.*:(.*)
         replacement: ${1}:${2}
         target_label: __address__
       - source_labels: [__meta_uyuni_metrics_path]
         regex: (.+)
         target_label: __metrics_path__
       - source_labels: [__meta_uyuni_proxy_module]
         target_label: __param_module
       - source_labels: [__meta_uyuni_scheme]
         target_label: __scheme__
  5. 設定ファイルを保存します。

  6. Prometheusサービスを再起動します。

    systemctl restart prometheus

Prometheus設定オプションの詳細については、https://prometheus.io/docs/prometheus/latest/configuration/configuration/にある公式Prometheusドキュメントを参照してください。

2.2. Grafanaのインストール

モニタリングサーバがSUSE Managerで管理されているクライアントの場合は、SUSE ManagerのWeb UIを使用してGrafanaパッケージをインストールできます。それ以外の場合は、モニタリングサーバにパッケージを手動でダウンロードしてインストールできます。

GrafanaはSUSE Managerプロキシでは使用できません。

プロシージャ: Web UIを使用したGrafanaのインストール
  1. SUSE Manager Web UIで、Grafanaがインストールされるシステムの詳細ページを開き、[Formula]タブに移動します。

  2. Grafana]チェックボックスをオンにして、モニタリング式を有効にし、保存をクリックします。

  3. 上部メニューの[Grafana]タブに移動します。

  4. Enable and configure Grafana](Grafanaの有効化と設定)セクションに、Grafanaにログインするために使用する管理者資格情報を入力します。

  5. Datasources](データソース)セクションで、Prometheus URLフィールドがPrometheusが実行されているシステムを指していることを確認します。

  6. 必要に応じて、他の設定オプションをカスタマイズします。

  7. Save Formula(Formulaの保存)をクリックします。

  8. highstateを適用し、正常に完了したことを確認します。

  9. Grafanaインタフェースが正しくロードされていることを確認します。ブラウザで、ポート3000で、GrafanaがインストールされているサーバのURLに移動します(たとえば、http://example.com:3000)。

SUSE Managerには、サーバのセルフヘルス、基本的なクライアントモニタリングなどのためのダッシュボードがあらかじめ構築されています。 プロビジョニングするダッシュボードは、式の設定ページで選択できます。

プロシージャ: Grafanaの手動インストール
  1. grafanaパッケージをインストールします。

    zypper in grafana
  2. Grafanaサービスを有効にします。

    systemctl enable --now grafana-server
  3. ブラウザで、ポート3000で、GrafanaがインストールされているサーバのURLに移動します(たとえば、http://example.com:3000)。

  4. ログインページで、ユーザ名とパスワードにadminと入力します。

  5. ログインをクリックします。 ログインに成功すると、パスワードを変更するプロンプトが表示されます。

  6. プロンプトでOKをクリックし、パスワードを変更します。

  7. サイドメニューの歯車アイコンにカーソルを移動すると、設定オプションが表示されます。

  8. Data sources(データソース)をクリックします。

  9. Add data source(データソースの追加) をクリックすると、サポートされているすべてのデータソースのリストが表示されます。

  10. Prometheusデータソースを選択します。

  11. Prometheusサーバの正しいURLを指定してください。

  12. Save & test(保存とテスト)をクリックします。

  13. ダッシュボードをインポートするには、サイドメニューの+アイコンをクリックし、取り込みをクリックします。

  14. SUSE Managerサーバの概要については、ダッシュボードID: 17569をロードします。

  15. SUSE Managerクライアントの概要については、ダッシュボードID: 17570をロードします。

    monitoring grafana example
  • モニタリング式の詳細については、Monitoring Formulaを参照してください。

  • Grafanaを手動でインストールおよび設定する方法の詳細については、https://grafana.com/docsを参照してください。

3. SUSE Managerのモニタリングの設定

SUSE Manager 4以降では、サーバがPrometheus self-health metricsを公開できるようにして、クライアントシステムにexportersをインストールして設定することもできます。

3.1. サーバ自己監視

Server self-health metricsは、ハードウェア、オペレーティングシステム、およびSUSE Managerの内部を対象としています。 これらのメトリックは、Prometheus exportersと組み合わされた、Javaアプリケーションのインストルメンテーションによって利用可能になります。

以下のexporterパッケージはSUSE Managerサーバに同梱されています。

以下のexporterパッケージはSUSE Managerプロキシに同梱されています。

exporterパッケージはSUSE Managerサーバおよびプロキシに事前インストールされていますが、各systemdデーモンはデフォルトで無効になっています。

プロシージャ: 自己監視の有効化
  1. SUSE Manager Web UIで、管理  マネージャ設定  モニタリングに移動します。

  2. Enable services(サービスの有効化)をクリックします。

  3. TomcatとTaskomaticを再起動します。

  4. ポート9090で、PrometheusサーバのURLに移動します(たとえば、http://example.com:9090)。

  5. Prometheus UIで、ステータス  Targets(ターゲット)に移動して、mgr-serverグループのすべてのエンドポイントが起動していることを確認します。

  6. Web UIを使用してGrafanaもインストールしている場合、サーバインサイトがSUSE Managerサーバダッシュボードの管理[Manager Configuration > Monitoring (マネージャの設定 > モニタリング)]に表示されます。

Web UIを使用して有効にできるのは、サーバのセルフヘルスモニタリングだけです。 プロキシのメトリックは、Prometheusによって自動的に収集されません。 プロキシでセルフヘルスモニタリングを有効にするには、exportersを手動でインストールして有効にする必要があります。

以下の関連メトリックがSUSE Managerサーバに収集されます。

Table 1. サーバ統計(ポート80)
メトリック タイプ 説明

uyuni_all_systems

ゲージ

全システムの数

uyuni_virtual_systems

ゲージ

仮想システムの数

uyuni_inactive_systems

ゲージ

休止中のシステムの数

uyuni_outdated_systems

ゲージ

旧式パッケージを持つシステムの数

Table 2. PostgreSQL exporter (ポート9187)
メトリック タイプ 説明

pg_stat_database_tup_fetched

カウンタ

クエリによってフェッチされた行数

pg_stat_database_tup_inserted

カウンタ

クエリによって挿入された行数

pg_stat_database_tup_updated

カウンタ

クエリによって更新された行数

pg_stat_database_tup_deleted

カウンタ

クエリによって削除された行数

mgr_serveractions_completed

ゲージ

完了したアクションの数

mgr_serveractions_failed

ゲージ

失敗したアクションの数

mgr_serveractions_picked_up

ゲージ

ピックアップされたアクションの数

mgr_serveractions_queued

ゲージ

キューに入れられたアクションの数

Table 3. JMX exporter (Tomcatポート5556、Taskomaticポート5557)
メトリック タイプ 説明

java_lang_Threading_ThreadCount

ゲージ

アクティブなスレッドの数

java_lang_Memory_HeapMemoryUsage_used

ゲージ

現在のヒープメモリ使用量

Table 4. サーバメッセージキュー(ポート80)
メトリック タイプ 説明

message_queue_thread_pool_threads

カウンタ

これまでに作成されたメッセージキュースレッドの数

message_queue_thread_pool_threads_active

ゲージ

現在アクティブなメッセージキュースレッドの数

message_queue_thread_pool_task_count

カウンタ

これまでに送信されたタスクの数

message_queue_thread_pool_completed_task_count

カウンタ

これまでに完了したタスクの数

Table 5. Salt Queue (ポート80)
メトリック タイプ 説明

salt_queue_thread_pool_size

ゲージ

Saltキューごとに作成されたスレッドの数

salt_queue_thread_pool_active_threads

ゲージ

キューごとに現在アクティブなSaltスレッドの数

salt_queue_thread_pool_task_total

カウンタ

キューごとに送信されたタスクの数

salt_queue_thread_pool_completed_task_total

カウンタ

キューごとに完了したタスクの数

すべてのsalt_queue値には、キュー番号を値として持つ「queue」という名前のラベルがあります。

Table 6. Taskomaticスケジューラ(ポート9800)
メトリック タイプ 説明

taskomatic_scheduler_threads

カウンタ

これまでに作成されたスケジューラスレッドの数

taskomatic_scheduler_threads_active

ゲージ

現在アクティブなスケジューラスレッドの数

taskomatic_scheduler_completed_task_count

カウンタ

これまでに完了したタスクの数

3.2. 管理対象システムの監視

Prometheus metrics exportersは、式を使用してSaltクライアントにインストールおよび設定できます。 パッケージはSUSE Managerクライアントツールチャンネルから入手でき、SUSE Manager Web UIで直接有効化および設定できます。

これらのexportersは管理対象システムにインストールできます。

SLE Microでは、Node exporterとBlackbox exporterのみが利用できます。

exporterをインストールして設定したら、Prometheusを使用して監視対象システムからメトリックを収集できます。Web UIを使用してモニタリングサーバを設定している場合、メトリック収集は自動的に行われます。

プロシージャ: クライアントでのPrometheus Exportersの設定
  1. SUSE Manager Web UIで、監視対象のクライアントの詳細ページを開き、Formulaタブに移動します。

  2. Prometheus Exporters] formulaで、[有効]チェックボックスをオンにします。

  3. 保存をクリックします。

  4. Formula  Prometheus Exportersタブに移動します。

  5. 有効にするexportersを選択し、必要に応じて引数をカスタマイズします。 [アドレス]フィールドは、コロンで始まるポート番号(:9100)か、完全に解決可能なアドレス(example:9100)のいずれかを受け入れます。

  6. Save Formula(Formulaの保存)をクリックします。

  7. highstateを適用します。

モニタリング式は、対応するグループ内の個々のシステムに使用されているのと同じ設定を適用することによって、システムグループにも設定できます。

モニタリング式の詳細については、Monitoring Formulaを参照してください。

3.3. Grafanaパスワードの変更

Grafanaパスワードを変更するには、Grafanaのドキュメントに記載されているステップに従います。

Grafana管理者パスワードを紛失した場合は、次のコマンドでrootとしてリセットできます。

grafana-cli --configOverrides cfg:default.paths.data=/var/lib/grafana --homepath /usr/share/grafana admin reset-admin-password <new_password>

4. ネットワーク境界

Prometheusはプルメカニズムを使用してメトリックをフェッチするため、サーバは監視対象クライアントとのTCP接続を確立できる必要があります。 デフォルトでは、Prometheusは次のポートを使用します。

  • Node exporter: 9100

  • PostgreSQL exporter: 9187

  • Apache exporter: 9117

さらに、Prometheusを実行するホストとは異なるホストでAlertmanagerを実行している場合は、ポート9093も開く必要があります。AlertmanagerはPrometheusソリューションの一部であり、Prometheusサーバインスタンスなどのクライアントアプリケーションによって送信されるアラートを処理します。Alertmanagerの詳細については、https://prometheus.io/docs/alerting/latest/alertmanager/を参照してください。

クラウドインスタンスにインストールされているクライアントの場合、モニタリングサーバにアクセスできるセキュリティグループに必要なポートを追加できます。

または、Prometheusインスタンスをexportersのローカルネットワークにデプロイし、フェデレーションを設定することもできます。 これにより、メインのモニタリングサーバはローカルのPrometheusインスタンスから時系列をスクレイピングできます。 この方法を使用する場合は、Prometheus APIポート(9090)を開くだけで済みます。

Prometheusフェデレーションの詳細については、https://prometheus.io/docs/prometheus/latest/federation/を参照してください。

ネットワーク境界から要求をプロキシすることもできます。 PushProxのようなツールは、プロキシとクライアントをネットワークバリアの両側に配備し、PrometheusがNATなどのネットワークトポロジ全体で動作できるようにします。

PushProxの詳細については、https://github.com/RobustPerception/PushProxを参照してください。

4.1. リバースプロキシのセットアップ

Prometheusはプルメカニズムを使用してメトリックをフェッチするため、サーバは監視対象クライアント上の各exporter へのTCP接続を確立できる必要があります。 ファイアウォール設定を簡素化するため、exportersにリバースプロキシを使用して、単一のポートですべてのメトリックを公開できます。

プロシージャ: リバースプロキシを使用したPrometheus Exportersのインストール
  1. SUSE Manager Web UIで、監視対象のシステムの詳細ページを開き、[Formula]タブに移動します。

  2. Prometheus Exporters]チェックボックスをオンにして、exporters formulaを有効にし、保存をクリックします。

  3. 上部メニューの[Prometheus Exporters]タブに移動します。

  4. Enable reverse proxy](リバースプロキシを有効にする)オプションをオンにして、有効なリバースプロキシポート番号を入力します。 たとえば、9999

  5. 必要に応じて他のexportersをカスタマイズします。

  6. Save Formula(Formulaの保存)をクリックします。

  7. highstateを適用し、正常に完了したことを確認します。

モニタリング式の詳細については、Monitoring Formulaを参照してください。

5. セキュリティ

PrometheusサーバとPrometheus node exporterは、TLS暗号化と認証でエンドポイントを保護するための組み込みメカニズムを提供します。 SUSE Manager Web UIは、関連するすべてのコンポーネントの設定を簡素化します。 TLS証明書は、ユーザが提供して配備する必要があります。 SUSE Managerでは、次のセキュリティモデルを有効にします。

  • Node exporter: TLS暗号化とクライアント証明書ベースの認証

  • Prometheus: TLS暗号化と基本認証

利用可能なすべてのオプションの設定の詳細については、Monitoring Formulaを参照してください。

5.1. TLS証明書の生成

デフォルトでは、SUSE Managerはモニタリング設定を保護するための証明書を提供しません。 セキュリティを提供するために、自己署名された、またはサードパーティの認証局(CA)によって署名されたカスタム証明書を生成またはインポートできます。

このセクションでは、SUSE Manager CAで自己署名したPrometheusおよびNode exporter minionsのクライアント/サーバ証明書を生成する方法について説明します。

プロシージャ: サーバ/クライアントTLS証明書の作成
  1. SUSE Managerサーバのコマンドプロンプトで、次のコマンドを実行します。

    rhn-ssl-tool --gen-server --dir="/root/ssl-build" --set-country="COUNTRY" \
    --set-state="STATE" --set-city="CITY" --set-org="ORGANIZATION" \
    --set-org-unit="ORGANIZATION UNIT" --set-email="name@example.com" \
    --set-hostname="minion.example.com" --set-cname="minion.example.com" --no-rpm

    set-cnameパラメータが、Saltクライアントの完全修飾ドメイン名(FQDN)であることを確認します。 複数のエイリアスが必要な場合は、set-cnameパラメータを複数回使用できます。

  2. server.crtおよびserver.keyファイルをSalt minionにコピーし、prometheusユーザに読み取りアクセスを提供します。