PrometheusとGrafanaを使用したモニタリング
PrometheusとGrafanaを使用して、SUSE Manager環境を監視できます 。SUSE Managerサーバとプロキシはself-health metricsを提供できます。また、Saltクライアント上に多数のPrometheus exportersをインストールして管理することもできます。
1. 要件
PrometheusとGrafanaパッケージは以下のSUSE Managerクライアントツールに含まれています。
- 
SUSE Linux Enterprise 12 
- 
SUSE Linux Enterprise 15 
- 
openSUSE Leap 15.x 
| Only the above listed clients are supported as a monitoring server. | 
You need to install Prometheus and Grafana on a machine separate from the SUSE Manager Server. We recommend to use a managed Salt SUSE client as your monitoring server.
Prometheusはプルメカニズムを使用してメトリックをフェッチするため、サーバは監視対象クライアントへのTCP接続を確立できる必要があります。 クライアントには対応するオープンポートがあり、ネットワークを介して到達できる必要があります。 または、リバースプロキシを使用して接続を確立することもできます。
| 監視するクライアントごとに、モニタリングアドオンサブスクリプションが必要です。 SUSE Customer Centerにアクセスして、SUSE 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をインストールして設定する必要があります。
| Only SUSE clients are supported as a monitoring server. For a complete list, see 要件. | 
3.1. Prometheusのインストール
モニタリングサーバがSaltクライアントの場合、SUSE Manager Web UIを使用してPrometheusパッケージをインストールできます。 インストールできない場合は、モニタリングサーバに手動でパッケージをダウンロードしてインストールできます。 Prometheusソフトウェアは、SUSE Managerプロキシおよび SUSE Manager for Retailブランチサーバでも使用できます。
| 
 | 
| Prometheusはデータの保存にPOSIXファイルシステムを想定しています。 非POSIX準拠ファイルシステムはサポートされていません。 NFSファイルシステムはサポートされていません。 | 
- 
SUSE Manager Web UIで、Prometheusをインストールするシステムの詳細ページを開き、[ Formula]タブに移動します。
- 
[ Prometheus]チェックボックスをオンにして、モニタリング式を有効にし、保存をクリックします。
- 
上部メニューの[ Prometheus]タブに移動します。
- 
[ SUSE Manager サーバ]セクションに、有効なSUSE Manager API資格情報を入力します。 入力した資格情報でモニタリングするシステムセットにアクセスできることを確認してください。
- 
必要に応じて、他の設定オプションをカスタマイズします。 
- 
Save Formula(Formulaの保存)をクリックします。 
- 
highstateを適用し、正常に完了したことを確認します。 
- 
Prometheusインタフェースが正しくロードされることを確認します。ブラウザで、ポート9090で、PrometheusがインストールされているサーバのURLに移動します(たとえば、 http://example.com:9090)。
モニタリング式の詳細については、Monitoring Formulaを参照してください。
- 
モニタリングサーバで、 golang-github-prometheus-prometheusパッケージをインストールします。zypper in golang-github-prometheus-prometheus 
- 
Prometheusサービスを有効にします。 systemctl enable --now prometheus 
- 
Prometheusインタフェース が正しくロードされていることを確認します。 ブラウザで、ポート9090で、PrometheusがインストールされているサーバのURLに移動します(たとえば、 http://example.com:9090)。
- 
/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__
- 
設定ファイルを保存します。 
- 
Prometheusサービスを再起動します。 systemctl restart prometheus 
Prometheus設定オプションの詳細については、https://prometheus.io/docs/prometheus/latest/configuration/configuration/にある公式Prometheusドキュメントを参照してください。
3.2. Grafanaのインストール
モニタリングサーバがSUSE Managerで管理されているクライアントの場合は、SUSE ManagerのWeb UIを使用してGrafanaパッケージをインストールできます。それ以外の場合は、モニタリングサーバにパッケージを手動でダウンロードしてインストールできます。
| GrafanaはSUSE Managerプロキシでは使用できません。 | 
- 
SUSE Manager Web UIで、Grafanaがインストールされるシステムの詳細ページを開き、[ Formula]タブに移動します。
- 
[ Grafana]チェックボックスをオンにして、モニタリング式を有効にし、保存をクリックします。
- 
上部メニューの[ Grafana]タブに移動します。
- 
[ Enable and configure Grafana](Grafanaの有効化と設定)セクションに、Grafanaにログインするために使用する管理者資格情報を入力します。
- 
[ Datasources](データソース)セクションで、Prometheus URLフィールドがPrometheusが実行されているシステムを指していることを確認します。
- 
必要に応じて、他の設定オプションをカスタマイズします。 
- 
Save Formula(Formulaの保存)をクリックします。 
- 
highstateを適用し、正常に完了したことを確認します。 
- 
Grafanaインタフェースが正しくロードされていることを確認します。ブラウザで、ポート3000で、GrafanaがインストールされているサーバのURLに移動します(たとえば、 http://example.com:3000)。
| SUSE Managerには、サーバのセルフヘルス、基本的なクライアントモニタリングなどのためのダッシュボードがあらかじめ構築されています。 プロビジョニングするダッシュボードは、式の設定ページで選択できます。 | 
- 
grafanaパッケージをインストールします。zypper in grafana 
- 
Grafanaサービスを有効にします。 systemctl enable --now grafana-server 
- 
ブラウザで、ポート3000で、GrafanaがインストールされているサーバのURLに移動します(たとえば、 http://example.com:3000)。
- 
ログインページで、ユーザ名とパスワードに adminと入力します。
- 
ログインをクリックします。 ログインに成功すると、パスワードを変更するプロンプトが表示されます。 
- 
プロンプトでOKをクリックし、パスワードを変更します。 
- 
サイドメニューの歯車アイコンにカーソルを移動すると、設定オプションが表示されます。 
- 
Data sources(データソース)をクリックします。 
- 
Add data source(データソースの追加) をクリックすると、サポートされているすべてのデータソースのリストが表示されます。 
- 
Prometheusデータソースを選択します。 
- 
Prometheusサーバの正しいURLを指定してください。 
- 
Save & test(保存とテスト)をクリックします。 
- 
ダッシュボードをインポートするには、サイドメニューの+アイコンをクリックし、取り込みをクリックします。 
- 
SUSE Managerサーバの概要については、ダッシュボードID: 17569をロードします。
- 
SUSE Managerクライアントの概要については、ダッシュボードID: 17570をロードします。  
| 
 | 
4. SUSE Managerのモニタリングの設定
SUSE Manager 4以降では、サーバがPrometheus self-health metricsを公開できるようにして、クライアントシステムにexportersをインストールして設定することもできます。
4.1. サーバ自己監視
Server self-health metricsは、ハードウェア、オペレーティングシステム、およびSUSE Managerの内部を対象としています。 これらのメトリックは、Prometheus exportersと組み合わされた、Javaアプリケーションのインストルメンテーションによって利用可能になります。
以下のexporterパッケージはSUSE Managerサーバに同梱されています。
- 
Node exporter: golang-github-prometheus-node_exporter。
- 
PostgreSQL exporter: prometheus-postgres_exporter。
- 
JMX exporter: prometheus-jmx_exporter。
以下のexporterパッケージはSUSE Managerプロキシに同梱されています。
- 
Node exporter: golang-github-prometheus-node_exporter。
- 
Squid exporter: golang-github-boynux-squid_exporter。- 
https://github.com/boynux/squid-exporterを参照してください。 
 
- 
exporterパッケージはSUSE Managerサーバおよびプロキシに事前インストールされていますが、各systemdデーモンはデフォルトで無効になっています。
- 
SUSE Manager Web UIで、に移動します。 
- 
Enable services(サービスの有効化)をクリックします。 
- 
TomcatとTaskomaticを再起動します。 
- 
ポート9090で、PrometheusサーバのURLに移動します(たとえば、 http://example.com:9090)。
- 
Prometheus UIで、に移動して、 mgr-serverグループのすべてのエンドポイントが起動していることを確認します。
- 
Web UIを使用してGrafanaもインストールしている場合、サーバインサイトがSUSE Managerサーバダッシュボードの管理[Manager Configuration > Monitoring (マネージャの設定 > モニタリング)]に表示されます。 
| Web UIを使用して有効にできるのは、サーバのセルフヘルスモニタリングだけです。 プロキシのメトリックは、Prometheusによって自動的に収集されません。 プロキシでセルフヘルスモニタリングを有効にするには、exportersを手動でインストールして有効にする必要があります。 | 
以下の関連メトリックがSUSE Managerサーバに収集されます。
| メトリック | タイプ | 説明 | 
|---|---|---|
| uyuni_all_systems | ゲージ | 全システムの数 | 
| uyuni_virtual_systems | ゲージ | 仮想システムの数 | 
| uyuni_inactive_systems | ゲージ | 休止中のシステムの数 | 
| uyuni_outdated_systems | ゲージ | 旧式パッケージを持つシステムの数 | 
| メトリック | タイプ | 説明 | 
|---|---|---|
| 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 | ゲージ | キューに入れられたアクションの数 | 
| メトリック | タイプ | 説明 | 
|---|---|---|
| java_lang_Threading_ThreadCount | ゲージ | アクティブなスレッドの数 | 
| java_lang_Memory_HeapMemoryUsage_used | ゲージ | 現在のヒープメモリ使用量 | 
| メトリック | タイプ | 説明 | 
|---|---|---|
| message_queue_thread_pool_threads | カウンタ | これまでに作成されたメッセージキュースレッドの数 | 
| message_queue_thread_pool_threads_active | ゲージ | 現在アクティブなメッセージキュースレッドの数 | 
| message_queue_thread_pool_task_count | カウンタ | これまでに送信されたタスクの数 | 
| message_queue_thread_pool_completed_task_count | カウンタ | これまでに完了したタスクの数 | 
| メトリック | タイプ | 説明 | 
|---|---|---|
| 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」という名前のラベルがあります。
| メトリック | タイプ | 説明 | 
|---|---|---|
| taskomatic_scheduler_threads | カウンタ | これまでに作成されたスケジューラスレッドの数 | 
| taskomatic_scheduler_threads_active | ゲージ | 現在アクティブなスケジューラスレッドの数 | 
| taskomatic_scheduler_completed_task_count | カウンタ | これまでに完了したタスクの数 | 
4.2. 管理対象システムの監視
Prometheus metrics exportersは、式を使用してSaltクライアントにインストールおよび設定できます。 パッケージはSUSE Managerクライアントツールチャンネルから入手でき、SUSE Manager Web UIで直接有効化および設定できます。
これらのexportersは管理対象システムにインストールできます。
- 
Node exporter: golang-github-prometheus-node_exporter。
- 
PostgreSQL exporter: prometheus-postgres_exporter。
- 
Apache exporter: golang-github-lusitaniae-apache_exporter。
| SLE Microでは、Node exporterとBlackbox exporterのみが利用できます。 | 
exporterをインストールして設定したら、Prometheusを使用して監視対象システムからメトリックを収集できます。Web UIを使用してモニタリングサーバを設定している場合、メトリック収集は自動的に行われます。
- 
SUSE Manager Web UIで、監視対象のクライアントの詳細ページを開き、Formulaタブに移動します。 
- 
[ Prometheus Exporters] formulaで、[有効]チェックボックスをオンにします。
- 
保存をクリックします。 
- 
タブに移動します。 
- 
有効にするexportersを選択し、必要に応じて引数をカスタマイズします。 [ アドレス]フィールドは、コロンで始まるポート番号(:9100)か、完全に解決可能なアドレス(example:9100)のいずれかを受け入れます。
- 
Save Formula(Formulaの保存)をクリックします。 
- 
highstateを適用します。 
| モニタリング式は、対応するグループ内の個々のシステムに使用されているのと同じ設定を適用することによって、システムグループにも設定できます。 | 
モニタリング式の詳細については、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を実行するホストとは異なるホストで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にリバースプロキシを使用して、単一のポートですべてのメトリックを公開できます。
- 
SUSE Manager Web UIで、監視対象のシステムの詳細ページを開き、[ Formula]タブに移動します。
- 
[ Prometheus Exporters]チェックボックスをオンにして、exporters formulaを有効にし、保存をクリックします。
- 
上部メニューの[ Prometheus Exporters]タブに移動します。
- 
[ Enable reverse proxy](リバースプロキシを有効にする)オプションをオンにして、有効なリバースプロキシポート番号を入力します。 たとえば、9999。
- 
必要に応じて他のexportersをカスタマイズします。 
- 
Save Formula(Formulaの保存)をクリックします。 
- 
highstateを適用し、正常に完了したことを確認します。 
モニタリング式の詳細については、Monitoring Formulaを参照してください。
6. セキュリティ
PrometheusサーバとPrometheus node exporterは、TLS暗号化と認証でエンドポイントを保護するための組み込みメカニズムを提供します。 SUSE Manager Web UIは、関連するすべてのコンポーネントの設定を簡素化します。 TLS証明書は、ユーザが提供して配備する必要があります。 SUSE Managerでは、次のセキュリティモデルを有効にします。
- 
Node exporter: TLS暗号化とクライアント証明書ベースの認証 
- 
Prometheus: TLS暗号化と基本認証 
利用可能なすべてのオプションの設定の詳細については、Monitoring Formulaを参照してください。
6.1. TLS証明書の生成
デフォルトでは、SUSE Managerはモニタリング設定を保護するための証明書を提供しません。 セキュリティを提供するために、自己署名された、またはサードパーティの認証局(CA)によって署名されたカスタム証明書を生成またはインポートできます。
このセクションでは、SUSE Manager CAで自己署名したPrometheusおよびNode exporter minionsのクライアント/サーバ証明書を生成する方法について説明します。
- 
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パラメータを複数回使用できます。
- 
server.crtおよびserver.keyファイルをSalt minionにコピーし、prometheusユーザに読み取りアクセスを提供します。