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

PrometheusとGrafanaを使用して、SUSE Multi-Linux Manager環境を監視できます。 SUSE Multi-Linux Managerサーバーとプロキシは自己健康メトリックを提供できます。 SaltクライアントにPrometheusエクスポータをインストールして管理することもできます。

1. 要件

PrometheusとGrafanaのパッケージは、以下のSUSE Multi-Linux Manager Client Toolsに含まれています。

  • 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メトリックは時系列データであり、同じグループまたは次元に属するタイムスタンプ付きの値です。 メトリックは、その名前とラベルのセットによって一意に識別されます。

   metric name               labels                 timestamp     value
┌────────┴───────┐  ┌───────────┴───────────┐    ┌──────┴──────┐  ┌─┴─┐
http_requests_total{status="200", method="GET"}  @1557331801.111  42236

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

2.2. Prometheus Exporters

エクスポータは、サードパーティシステムからPrometheusメトリックとしてメトリックをエクスポートするのに役立つライブラリです。 エクスポータは、特定のアプリケーションやシステムにPrometheusメトリックを直接組み込むことが実現不可能な場合に便利です。 複数のエクスポータが監視対象ホスト上で実行され、ローカルメトリックをエクスポートできます。

Prometheusコミュニティは公式のエクスポータのリストを提供しており、コミュニティの貢献としてさらに多くのものが見つかります。 詳細情報およびエクスポータの広範なリストについては、 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 Branch Serverでも利用可能です。

  • SUSE Multi-Linux Managerサーバーコンテナ内でシェルにアクセスするには、コンテナホストで`mgrctl term`を実行します。また、1つのコマンドだけを実行する場合は`mgrctl exec <options> — <command>`を実行します。

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

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

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

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

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

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

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

  6. 保存するをクリックします。

  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 Multi-Linux ManagerサーバーのURLに置き換え、`username`および`password`フィールドをあなたのSUSE Multi-Linux 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の設定オプションに関する詳細情報は、公式のPrometheusドキュメントを https://prometheus.io/docs/prometheus/latest/configuration/configuration/.で参照してください。

3.2. Grafanaのインストール

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

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

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

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

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

  4. `Enable and configure Grafana`セクションに、Grafanaへのログインに使用する管理者資格情報を入力します。

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

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

  7. 保存するをクリックします。

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

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

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

SUSE Multi-Linux Managerは、サーバーの自己健康、基本的なクライアントモニタリングなどのための事前構築されたダッシュボードを提供します。 モニタリング式の構成ページで、どのダッシュボードをプロビジョニングするかを選択できます。

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

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

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

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

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

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

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

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

  8. データソースをクリックします。

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

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

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

  12. 保存とテストをクリックします。

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

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

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

    monitoring grafana example

4. SUSE Multi-Linux Managerの監視を設定します。

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

4.1. サーバ自己監視

サーバのself-health metricsは、ハードウェア、オペレーティングシステム、およびSUSE Multi-Linux Managerの内部をカバーします。 これらのメトリクスは、Javaアプリケーションの計測とPrometheus exportersの組み合わせによって提供されます。

これらのexportersは、SUSE Multi-Linux Managerサーバに同梱されています:

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

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

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

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

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

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

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

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

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

counter

クエリによって取得された行の数

pg_stat_database_tup_inserted

counter

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

pg_stat_database_tup_updated

counter

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

pg_stat_database_tup_deleted

counter

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

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

counter

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

message_queue_thread_pool_threads_active

ゲージ

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

message_queue_thread_pool_task_count

counter

これまでに提出されたタスクの数

message_queue_thread_pool_completed_task_count

counter

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

Table 5. Salt Queue (ポート80)
測定基準 タイプ 説明

salt_queue_thread_pool_size

ゲージ

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

salt_queue_thread_pool_active_threads

ゲージ

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

salt_queue_thread_pool_task_total

counter

キューごとにこれまでに提出されたタスクの数

salt_queue_thread_pool_completed_task_total

counter

キューごとにこれまでに完了したタスクの数

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

Table 6. Taskomaticスケジューラ(ポート9800)
測定基準 タイプ 説明

taskomatic_scheduler_threads

counter

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

taskomatic_scheduler_threads_active

ゲージ

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

taskomatic_scheduler_completed_task_count

counter

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

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

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

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

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

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

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

  2. `Enabled`フォーミュラの`Prometheus Exporters`チェックボックスをオンにしてください。

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

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

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

  6. 式を保存をクリックします。

  7. highstateを適用します。

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

  • モニター上:9090/tcp

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

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

監視式に関する詳細情報は、Monitoring Formulaを参照してください。

4.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>

5. ネットワーク境界

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

  • Node exporter:9100

  • PostgreSQL exporter:9187

  • Apache exporter:9117

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

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

代わりに、エクスポーターのローカルネットワークにPrometheusインスタンスをデプロイし、フェデレーションを構成することもできます。 これにより、メインの監視サーバーがローカルのPrometheusインスタンスから時系列データをスクレイプできるようになります。 この方法を使用する場合、Prometheus APIポート(9090)を開くだけで済みます。

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

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

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

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

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

  2. `Prometheus Exporters`チェックボックスをオンにしてエクスポーターのフォーミュラを有効にし、保存をクリックします。

  3. 上部メニューの`Prometheus Exporters`タブに移動してください。

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

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

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

  6. 式を保存をクリックします。

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

モニタリング式に関する詳細情報は、Monitoring Formulaを参照してください。

6. セキュリティ

PrometheusサーバーとPrometheusノードエクスポーターは、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ミニオン用のクライアント/サーバ証明書を生成する方法について説明します。

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

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

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

      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. `server.crt`ファイルと`server.key`ファイルをサーバーコンテナからホストにコピーします。

      mgrctl cp server:/root/ssl-build/minion/server.key server.key
      mgrctl cp server:/root/ssl-build/minion/server.crt server.crt
    3. `server.crt`ファイルと`server.key`ファイルをホストから監視クライアントにコピーします。

      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. フォーミュラminion

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