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

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

1. 要件

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

  • SUSE Linux Enterprise 15

  • SUSE Linux Enterprise 16

  • openSUSE Leap 15.x

  • openSUSE Leap 16.x

上記のクライアントのみがモニタリングサーバとしてサポートされます。

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

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

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

2. PrometheusとGrafana

2.1. Prometheus

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

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

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

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

2.2. Prometheus Exporters

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

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

2.3. Grafana

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

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

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

SUSEクライアントのみがモニタリングサーバとしてサポートされます。 完全なリストについては、要件を参照してください。

3.1. Prometheusのインストール

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

  • To access a shell inside the SUSE Multi-Linux Manager Server container run mgrctl term on the container host, or to execute one command run mgrctl exec <options> — <command>.

  • To copy files from inside the container to the container host use mgrctl cp.

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

プロシージャ: Web UIを使用したPrometheusのインストール
  1. In the SUSE Multi-Linux Manager Web UI, open the details page of the system where Prometheus is to be installed, and navigate to the Formulas tab.

  2. Check the Prometheus checkbox to enable monitoring formulas, and click Save.

  3. Navigate to the Prometheus tab in the top menu.

  4. In the SUSE Multi-Linux Manager Server section, enter valid SUSE Multi-Linux Manager API credentials. 入力した資格情報でモニタリングするシステムセットにアクセスできることを確認してください。

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

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

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

  8. Check that the Prometheus interface loads correctly. In your browser, navigate to the URL of the server where Prometheus is installed, on port 9090 (for example, http://example.com:9090).

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

プロシージャ: Prometheusを手動でインストールおよび設定する
  1. On the monitoring server, install the golang-github-prometheus-prometheus package:

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

    systemctl enable --now prometheus
  3. Check that the Prometheus interface loads correctly. In your browser, navigate to the URL of the server where Prometheus is installed, on port 9090 (for example, http://example.com:9090).

  4. Open the configuration file at /etc/prometheus/prometheus.yml and add this configuration information. Replace server.url with your SUSE Multi-Linux Manager server URL and adjust username and password fields to match your SUSE Multi-Linux Manager credentials.

    # {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ドキュメントを参照してください。

3.2. Grafanaのインストール

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

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

プロシージャ: Web UIを使用したGrafanaのインストール
  1. In the SUSE Multi-Linux Manager Web UI, open the details page of the system where Grafana is to be installed, and navigate to the Formulas tab.

  2. Check the Grafana checkbox to enable monitoring formulas, and click Save.

  3. Navigate to the Grafana tab in the top menu.

  4. In the Enable and configure Grafana section, enter the admin credentials you want to use to log in Grafana.

  5. On the Datasources section, make sure that the Prometheus URL field points to the system where Prometheus is running.

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

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

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

  9. Check that the Grafana interface is loading correctly. In your browser, navigate to the URL of the server where Grafana is installed, on port 3000 (for example, http://example.com:3000).

    • Grafanaに正常にアクセスするには、ファイアウォールでポート3000が開いていることを確認します

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

プロシージャ: Grafanaの手動インストール
  1. Install the grafana package:

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

    systemctl enable --now grafana-server
  3. In your browser, navigate to the URL of the server where Grafana is installed, on port 3000 (for example, http://example.com:3000).

    • Grafanaに正常にアクセスするには、ファイアウォールでポート3000が開いていることを確認します。

  4. On the login page, enter admin for username and password.

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

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

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

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

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

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

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

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

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

  14. For SUSE Multi-Linux Manager server overview load the dashboard ID: 17569.

  15. For SUSE Multi-Linux Manager clients overview load the dashboard ID: 17570.

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

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

4. SUSE Multi-Linux Managerのモニタリングの設定

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

4.1. サーバ自己監視

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

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

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

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

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

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

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

  4. Navigate to the URL of your Prometheus server, on port 9090 (for example, http://example.com:9090)

  5. In the Prometheus UI, navigate to Status  Targets and confirm that all the endpoints on the mgr-server group are up.

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

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

以下の関連メトリックがSUSE Multi-Linux 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

カウンタ

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

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

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

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

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

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

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

  2. Check the Enabled checkbox on the Prometheus Exporters formula.

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

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

  5. 有効にするexportersを選択し、必要に応じて引数をカスタマイズします。 The Address field accepts either a port number preceded by a colon (:9100), or a fully resolvable address (example:9100).

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

  7. highstateを適用します。

以下のポートが有効になっており、ファイアウォールでブロックされないようにする必要があります。

  • 監視側: 9090/tcp

  • 監視対象システム側: 9100/tcp、9117/tcp、9187/tcp

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

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

4.3. Grafanaパスワードの変更

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

In case you have lost the Grafana administrator password you can reset it as root with the following command:

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

5. ネットワーク境界

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を参照してください。

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

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

プロシージャ: リバースプロキシを使用したPrometheus Exportersのインストール
  1. In the SUSE Multi-Linux Manager Web UI, open the details page of the system to be monitored, and navigate to the Formulas tab.

  2. Check the Prometheus Exporters checkbox to enable the exporters formula, and click Save.

  3. Navigate to the Prometheus Exporters tab in the top menu.

  4. Check the Enable reverse proxy option, and enter a valid reverse proxy port number. For example, 9999.

    • ファイアウォールでポート9999/tcpが開いていることを確認します。

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

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

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

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

6. セキュリティ

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

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

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

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

6.1. TLS証明書の生成

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

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

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

    1. 証明書ファイルを生成するには、次のコマンドを実行します。

      Ensure that the set-cname parameter is the fully qualified domain name (FQDN) of your Salt client. You can use the set-cname parameter multiple times if you require multiple aliases:

      mgrctl exec -ti -- mgr-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

      結果:

      Generating the web server's SSL private key: /root/ssl-build/minion/server.key
      Generating web server's SSL certificate request: /root/ssl-build/minion/server.csr
      Generating/signing web server's SSL certificate: server.crt
    2. Copy server.crt and server.key files from the server container to the host:

      mgrctl cp server:/root/ssl-build/minion/server.key server.key
      mgrctl cp server:/root/ssl-build/minion/server.crt server.crt
    3. Copy server.crt and server.key files from the host to the monitoring client:

      ssh minion.example.com 'mkdir /etc/ssl/mlm-server-certs'
      scp /root/server.* minion.example.com:/etc/ssl/mlm-server-certs
      ssh minion.example.com 'chmod go+r /etc/ssl/mlm-server-certs/server.*; ls -la /etc/ssl/mlm-server-certs'
  2. Saltフォーミュラを設定するには、前のステップで指定されたディレクトリ名を入力します。

    1. formular server

      Server Certificate /etc/ssl/mlm-server-certs/server.crt
      Server Key /etc/ssl/mlm-server-certs/server.key
    2. フォーミュラminion