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でも利用可能です。
|
|
Prometheusはデータを保存するためにPOSIXファイルシステムを期待しています。 非POSIX準拠のファイルシステムはサポートされていません。 NFSファイルシステムはサポートされていません。 |
SUSE Multi-Linux Manager Web UIで、Prometheusをインストールするシステムの詳細ページを開き、`Formulas`タブに移動します。
`Prometheus`チェックボックスをオンにしてモニタリング式を有効にし、保存をクリックします。
上部メニューの`Prometheus`タブに移動します。
`SUSE Multi-Linux Manager Server`セクションに、有効なSUSE Multi-Linux ManagerAPI資格情報を入力します。 入力した資格情報でモニタリングするシステムセットにアクセスできることを確認してください。
必要に応じて、他の設定オプションをカスタマイズします。
保存するをクリックします。
highstateを適用し、正常に完了したことを確認します。
Prometheusインタフェース が正しくロードされていることを確認します。ブラウザで、ポート9090でPrometheusがインストールされているサーバのURLに移動します(たとえば、
http://example.com:9090)。
モニタリング式に関する詳細情報は、Monitoring Formulaを参照してください。
モニタリングサーバーに、`golang-github-prometheus-prometheus`パッケージをインストールします。
zypper in golang-github-prometheus-prometheusPrometheusサービスを有効にします。
systemctl enable --now prometheusPrometheusインタフェース が正しくロードされていることを確認します。 ブラウザで、ポート9090でPrometheusがインストールされているサーバのURLに移動します(たとえば、
http://example.com:9090)。`/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__設定ファイルを保存します。
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プロキシでは使用できません。 |
SUSE Multi-Linux Manager Web UIで、Grafanaがインストールされるシステムの詳細ページを開き、`Formulas`タブに移動します。
`Grafana`チェックボックスをオンにしてモニタリング式を有効にし、保存をクリックします。
上部メニューの`Grafana`タブに移動します。
`Enable and configure Grafana`セクションに、Grafanaへのログインに使用する管理者資格情報を入力します。
`Datasources`セクションで、Prometheus URLフィールドがPrometheusが実行されているシステムを指していることを確認します。
必要に応じて、他の設定オプションをカスタマイズします。
保存するをクリックします。
highstateを適用し、正常に完了したことを確認します。
Grafanaインタフェースが正しくロードされていることを確認します。ブラウザで、ポート3000でGrafanaがインストールされているサーバーのURLに移動します(たとえば、
http://example.com:3000)。
Grafanaに正常にアクセスするには、ファイアウォールでポート3000が開いていることを確認します
|
SUSE Multi-Linux Managerは、サーバーの自己健康、基本的なクライアントモニタリングなどのための事前構築されたダッシュボードを提供します。 モニタリング式の構成ページで、どのダッシュボードをプロビジョニングするかを選択できます。 |
`grafana`パッケージをインストールします。
zypper in grafanaGrafanaサービスを有効にします。
systemctl enable --now grafana-serverブラウザで、ポート3000でGrafanaがインストールされているサーバーのURLに移動します(たとえば、
http://example.com:3000)。
Grafanaに正常にアクセスするには、ファイアウォールでポート3000が開いていることを確認します。
ログインページで、ユーザ名とパスワードに`admin`と入力します。
ログインをクリックします。 ログインに成功すると、パスワードを変更するプロンプトが表示されます。
プロンプトでOKをクリックし、その後パスワードを変更します。
サイドメニューの歯車アイコンにカーソルを移動すると、設定オプションが表示されます。
データソースをクリックします。
データソースの追加をクリックすると、サポートされているすべてのデータソースのリストが表示されます。
Prometheusデータソースを選択します。
Prometheusサーバの正しいURLを指定してください。
保存とテストをクリックします。
ダッシュボードをインポートするには、サイドメニューの+アイコンをクリックし、その後インポートをクリックします。
SUSE Multi-Linux Managerサーバーの概要については、ダッシュボードID: `17569`をロードします。
SUSE Multi-Linux Managerクライアントの概要については、ダッシュボードID: `17570`をロードします。
![]()
|
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サーバに同梱されています:
-
Node exporter:
golang-github-prometheus-node_exporter。 -
PostgreSQL exporter:
prometheus-postgres_exporter。 -
JMX exporter:
prometheus-jmx_exporter。
以下のexporterパッケージはSUSE Multi-Linux Managerプロキシに同梱されています。
-
Node exporter:
golang-github-prometheus-node_exporter。 -
Squid exporter:
golang-github-boynux-squid_exporter。
exporterパッケージはSUSE Multi-Linux Managerサーバおよびプロキシに事前インストールされていますが、各systemdデーモンはデフォルトで無効になっています。
SUSE Multi-Linux Manager Web UIで、に移動します。
サービスの有効化をクリックします。
TomcatとTaskomaticを再起動します。
ポート9090で、PrometheusサーバのURLに移動します(たとえば、
http://example.com:9090)。Prometheus UIで、に移動して、`mgr-server`グループのすべてのエンドポイントが起動していることを確認します。
Web UIを使用してGrafanaもインストールしている場合、サーバインサイトがSUSE Multi-Linux Managerサーバダッシュボードのに表示されます。
|
Web UIを使用して、サーバの自己監視のみを有効にできます。 プロキシのメトリックはPrometheusによって自動的に収集されません。 プロキシで自己監視を有効にするには、exportersを手動でインストールし、有効にする必要があります。 |
以下の関連メトリックがSUSE Multi-Linux Managerサーバに収集されます。
| 測定基準 | タイプ | 説明 |
|---|---|---|
uyuni_all_systems |
ゲージ |
すべてのシステムの数 |
uyuni_virtual_systems |
ゲージ |
仮想システムの数 |
uyuni_inactive_systems |
ゲージ |
非アクティブシステムの数 |
uyuni_outdated_systems |
ゲージ |
パッケージが古くなっているシステムの数 |
| 測定基準 | タイプ | 説明 |
|---|---|---|
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 |
ゲージ |
キューに入れられたアクションの数 |
| 測定基準 | タイプ | 説明 |
|---|---|---|
java_lang_Threading_ThreadCount |
ゲージ |
アクティブなスレッドの数 |
java_lang_Memory_HeapMemoryUsage_used |
ゲージ |
現在のヒープメモリ使用量 |
| 測定基準 | タイプ | 説明 |
|---|---|---|
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 |
これまでに完了したタスクの数 |
| 測定基準 | タイプ | 説明 |
|---|---|---|
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`という名前のラベルがあります。
| 測定基準 | タイプ | 説明 |
|---|---|---|
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は管理対象システムにインストールできます。
-
Node exporter:
golang-github-prometheus-node_exporter。 -
PostgreSQL exporter:
prometheus-postgres_exporter。 -
Apache exporter:
golang-github-lusitaniae-apache_exporter。
|
SL Microでは、Node exporterとBlackbox exporterのみが利用できます。 |
エクスポーターがインストールされ、設定されると、Prometheusを使用して監視対象のシステムからメトリクスを収集できます。 Web UIで監視サーバーを設定している場合、メトリクスの収集は自動的に行われます。
SUSE Multi-Linux Manager Web UIで、監視対象のクライアントの詳細ページを開き、Formulasタブに移動します。
`Enabled`フォーミュラの`Prometheus Exporters`チェックボックスをオンにしてください。
保存をクリックします。
タブに移動します。
有効にするexportersを選択し、必要に応じて引数をカスタマイズします。
Address`フィールドには、コロン(:9100`)付きのポート番号、または解決可能なアドレス(example:9100)のいずれかを入力できます。式を保存をクリックします。
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を実行するホストとは異なるホストでアラートマネージャを実行している場合は、ポート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などのネットワークトポロジ全体で動作できるようにします。
PushProxに関する詳細は、 https://github.com/RobustPerception/PushProx.を参照してください。
5.1. リバースプロキシのセットアップ
Prometheusはプルメカニズムを使用してメトリックをフェッチするため、サーバーは監視対象の各エクスポーターとのTCP接続を確立できる必要があります. ファイアウォールの設定を簡素化するために、エクスポーターのためにリバースプロキシを使用して、すべてのメトリックを1つのポートで公開できます。
SUSE Multi-Linux Manager Web UIで、監視対象システムの詳細ページを開き、`Formulas`タブに移動します。
`Prometheus Exporters`チェックボックスをオンにしてエクスポーターのフォーミュラを有効にし、保存をクリックします。
上部メニューの`Prometheus Exporters`タブに移動してください。
`Enable reverse proxy`オプションをオンにして、有効なリバースプロキシポート番号を入力します。 たとえば、`9999`と指定します。
ファイアウォールでポート9999/tcpが開いていることを確認します。
必要に応じて他のexportersをカスタマイズします。
式を保存をクリックします。
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ミニオン用のクライアント/サーバ証明書を生成する方法について説明します。
SUSE Multi-Linux Managerコンテナホストのコマンドプロンプトで、ルートとして次のコマンドを実行します:
証明書ファイルを生成するには、次のコマンドを実行します。
`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`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`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'Saltのフォームを設定するには、前のステップで指定されたディレクトリ名を入力してください。
フォーミュラminion
Server Certificate /etc/ssl/mlm-server-certs/server.crt Server Key /etc/ssl/mlm-server-certs/server.keyフォーミュラminion