Performance Co-Pilot分析ツールキットを使用したパフォーマンスメトリックの分析
- 概要
パフォーマンス監視の目的のために、SUSE Linux Enterprise Microでは、コンテナ内でPerformance Co-Pilot (PCP)分析ツールキットを実行できるコンテナイメージを提供しています。
- 目的
システムのパフォーマンスを監視する必要があります。この記事では、ツールキットの設定および使用の方法を説明しています。
- 所要時間
この記事の理解には40分ほどを要します。
- 目標
ニーズに合った設定でPCPコンテナを起動できるようになります。
- 要件
SLE Microの実行中のインスタンス。
1 Performance Co-Pilot分析ツールキット #
このツールキットは、リアルタイムで、またはPCPアーカイブログから収集されたパフォーマンス情報を収集および処理するためのツールで構成されます。
パフォーマンスデータは「パフォーマンスメトリックドメインエージェント」によって収集され、pmcd
デーモンに渡されます。このデーモンは、PCP監視ツールからの要求に応じてパフォーマンス統計の収集とエクスポートを調整します。その後、pmlogger
を使用してメトリックを記録します。詳細については、PCP
documentationを参照してください。
1.1 PCPコンテナイメージの取得 #
PCPコンテナイメージは、systemd
を利用してPCPサービスを管理するBCI-Initコンテナに基づきます。
このコンテナは、Podmanを使用して、またはCockpit Web管理コンソールからプルできます。Podmanを使用してイメージをプルするには、次のコマンドを実行します。
#
podman pull registry.suse.com/suse/pcp:latest
Cockpitを使用してコンテナイメージを取得するには、pcpを検索します。次に、registry.suse.com
からSLE 15 SP4用のイメージを選択してダウンロードします。
2 PCPコンテナの実行 #
次のコマンドを実行すると、PCPコンテナを実行するために使用する必要がある最小限のオプションが表示されます。
#
podman run -d \
--systemd always \
-pHOST_IP:HOST_PORT:CONTAINER_PORT \
-v HOST_DIR:/var/log/pcp/pmlogger \
PCP_CONTAINER_IMAGE
各オプションには次のような意味があります。
-
-d
コンテナはttyなしでデタッチモードで実行されます。
-
--systemd always
コンテナを
systemd
モードで実行します。PCPコンテナで実行するために必要なすべてのサービスは、systemd
によってコンテナ内で自動的に開始されます。-
--privileged
コンテナは拡張特権で実行されます。このオプションは、システムでSELinuxが有効になっている場合に使用します。有効になっていない場合、収集されるメトリックは不完全なものになります。
-
-v HOST_DIR:/var/log/pcp/pmlogger
バインドマウントを作成し、
pmlogger
のアーカイブがホスト上のHOST_DIRに書き込まれるようにします。デフォルトでは、pmlogger
は収集したメトリックを/var/log/pcp/pmlogger
に保存します。- PCP_CONTAINER_IMAGE
ダウンロードしたPCPコンテナイメージです。
podman run
コマンドのその他の便利なオプションは次のとおりです。
-
-p HOST_IP:HOST_PORT:CONTAINER_PORT
コンテナのポートをホストのポートにマップすることで、コンテナのポートを公開します。HOST_IPを指定しない場合、ポートはローカルホストにマップされます。HOST_PORTの値を省略すると、ランダムなポート番号が使用されます。デフォルトでは、
pmcd
デーモンはPMAPIをリスンして公開し、ポート44321でメトリックを受信します。したがって、このポートをホスト上の同じポート番号にマップすることをお勧めします。pmproxy
デーモンは、デフォルトではREST PMWEBAPIをリスンして公開し、44322ポートでメトリックにアクセスします。したがって、このポートを同じホストポート番号にマップすることをお勧めします。-
--net host
コンテナはホストのネットワークを使用します。このオプションは、ホストのネットワークインタフェースからメトリックを収集する場合に使用します。
-
-e
このオプションにより、次の環境変数を設定できます。
- PCP_SERVICES
systemd
がコンテナ内で起動するサービスのコンマ区切りリストです。デフォルトのサービスは、
pmcd
、pmie
、pmlogger
、pmproxy
です。この変数を使用すると、デフォルトとは異なるサービスのリストでコンテナを実行できます。たとえば、
pmlogger
のみでコンテナを実行できます。#
podman run -d \ --name pmlogger \ --systemd always \ -e PCP_SERVICES=pmlogger \ -v pcp-archives:/var/log/pcp/pmlogger \ registry.suse.com/suse/pcp:latest- HOST_MOUNT
ホストのルートファイルシステムのバインドマウントを指す、コンテナ内でのパスです。デフォルト値は設定されていません。
- REDIS_SERVERS
Redisサーバへの接続を指定します。非クラスタ化セットアップでは、ホストの仕様のコンマ区切りリストを指定します。クラスタ化セットアップでは、個々のクラスタホストを指定します。クラスタ内の他のホストは自動的に検出されます。デフォルト値は
localhost:6379
です。
環境変数で指定した設定とは異なる設定を使用する必要がある場合は、3項 「PCPサービスの設定」の手順に従います。
2.1 ブート時のPCPコンテナの自動起動 #
PCPコンテナを実行した後に、ブート時にコンテナを起動するようにsystemd
を設定できます。これを行うには、次の手順に従います。
podman generate systemd
コマンドを使用して、コンテナのユニットファイルを作成します。#
podman generate systemd --nameCONTAINER_NAME > /etc/systemd/system/container-CONTAINER_NAME.serviceここで、CONTAINER_NAMEは、コンテナをコンテナイメージから実行するときに使用したPCPコンテナの名前です。
systemd
でサービスを有効化します。#
systemctl enable container-CONTAINER_NAME
3 PCPサービスの設定 #
PCPコンテナ内で実行されるすべてのサービスにはデフォルト設定がありますが、その設定がニーズに合わない場合があります。環境変数で対応できないカスタム設定が必要な場合は、PCPサービス用の設定ファイルを作成して、次のようにバインドマウントを使用してPCPに渡します。
#
podman run -d \
--nameCONTAINER_NAME \
--systemd always \
-v $HOST_CONFIG:CONTAINER_CONFIG_PATH:z \
-v HOST_LOGS_PATH:/var/log/pcp/pmlogger \
registry.suse.com/suse/pcp:latest
各要素の内容は次のとおりです。
- CONTAINER_NAME
オプションのコンテナ名です。
- HOST_CONFIG
ホストマシン上で作成した設定への絶対パスです。希望するファイル名を選択できます。
- CONTAINER_CONFIG_PATH
コンテナ内の特定の設定ファイルの絶対パスです。利用可能な各設定ファイルについては、対応するセクションで詳しく説明します。
- HOST_LOGS_PATH
コンテナログへのバインドマウントにするディレクトリです。
たとえば、pcp
というコンテナがあり、設定ファイルpmcd
がホストマシン上にあり、ログ用のpcp-archives
ディレクトリもホストマシン上にある場合、次のコマンドでコンテナを実行します。
#
podman run -d \
--name pcp \
--systemd always \
-v $(pwd)/pcp-archives:/var/log/pcp/pmlogger \
-v $(pwd)/pmcd:/etc/sysconfig/pmcd \
registry.suse.com/suse/pcp:latest
3.1 pmcd
デーモンのカスタム設定 #
pmcd
デーモンの設定は、/etc/sysconfig/pmcd
ファイルに保存されます。このファイルには、pmcd
デーモンの動作を変更する環境変数が保存されます。
次の変数を/etc/sysconfig/pmcd
ファイルに追加して、pmcd
デーモンを設定できます。
- PMCD_LOCAL
リモートホストを
pmcd
デーモンに接続できるかどうかを定義します。0に設定すると、デーモンへのリモート接続が許可されます。1に設定すると、デーモンはローカルホストのみをリスンします。デフォルトの設定は0です。- PMCD_MAXPENDING
エージェントへの保留中の接続の最大数を定義します。デフォルトの設定は5です。
- PMCD_ROOT_AGENT
pmdaroot
が有効な場合(値が1に設定されている場合)、新しいPDMAを追加しても他のPMDAの再起動はトリガされません。pmdaroot
が有効ではない場合、新しいPMDAの追加時に、pmcd
はすべてのPMDAを再起動する必要があります。デフォルトの設定は1です。- PMCD_RESTART_AGENTS
1に設定した場合、
pmcd
デーモンは終了したPMDAの再起動を試みます。pmcd
自体にはPMDAを再起動する特権がないため、このオプションは、pmdaroot
を有効にしている場合にのみ有効にします。- PMCD_WAIT_TIMEOUT
pmcd
が接続を受け入れるまでに待機可能な最大時間(秒単位)を定義します。この時間を超えると、接続は失敗として報告されます。デフォルトの設定は60です。- PCP_NSS_INIT_MODE
セキュリティ保護された接続を使用する場合に
pmcd
がNSS証明書データベースを初期化するモードを定義します。デフォルトの設定はreadonly
です。このモードをreadwrite
に設定することはできますが、初期化に失敗した場合、デフォルト値がフォールバックとして使用されます。
次に例を示します。
PMCD_LOCAL=0 PMCD_MAXPENDING=5 PMCD_ROOT_AGENT=1 PMCD_RESTART_AGENTS=1 PMCD_WAIT_TIMEOUT=70 PCP_NSS_INIT_MODE=readwrite
3.2 pmlogger
のカスタム設定 #
pmlogger
のカスタム設定は、次の設定ファイルに保存されます。
/etc/sysconfig/pmlogger
/etc/pcp/pmlogger/control.d/local
3.2.1 /etc/sysconfig/pmlogger
ファイル #
次の属性を使用して、pmlogger
を設定できます。
- PMLOGGER_LOCAL
pmlogger
がリモートホストからの接続を許可するかどうかを定義します。1に設定すると、pmlogger
はローカルホストからの接続のみを許可します。- PMLOGGER_MAXPENDING
保留中の接続の最大数を定義します。デフォルト値は5です。
- PMLOGGER_INTERVAL
pmlogger
で使用するデフォルトのサンプリング間隔を定義します。デフォルト値は60秒です。この値はpmlogger
のコマンドラインで上書きできることに注意してください。- PMLOGGER_CHECK_SKIP_LOGCONF
このオプションをyesに設定すると、
pmlogger
の設定をpmlogconf
から取得する場合に、pmlogger
の設定の再生成とチェックが無効になります。デフォルトの動作では、pmlogger
の起動時に毎回、設定ファイルを再生成して変更の有無を確認します。
次に例を示します。
PMLOGGER_LOCAL=1 PMLOGGER_MAXPENDING=5 PMLOGGER_INTERVAL=10 PMLOGGER_CHECK_SKIP_LOGCONF=yes
3.2.2 /etc/pcp/pmlogger/control.d/local
ファイル #
/etc/pcp/pmlogger/control.d/local
ファイルには、ホストの仕様、ログに記録する必要があるメトリック、ログの頻度(デフォルトは24時間)、およびpmlogger
のオプションが保存されます。次に例を示します。
# === VARIABLE ASSIGNMENTS === # # DO NOT REMOVE OR EDIT THE FOLLOWING LINE $version=1.1 # Uncomment one of the lines below to enable/disable compression behaviour # that is different to the pmlogger_daily default. # Value is days before compressing archives, 0 is immediate compression, # "never" or "forever" suppresses compression. # #$PCP_COMPRESSAFTER=0 #$PCP_COMPRESSAFTER=3 #$PCP_COMPRESSAFTER=never # === LOGGER CONTROL SPECIFICATIONS === # #Host P? S? directory args # local primary logger LOCALHOSTNAME y n PCP_ARCHIVE_DIR/LOCALHOSTNAME -r -T24h10m -c config.default -v 100Mb
pmcd
を実行するマシン(クライアント)とは異なるマシン上でpmlogger
をコンテナ内で実行する場合、次の行を、クライアントを指すように変更します。
# local primary logger CLIENT_HOSTNAME y n PCP_ARCHIVE_DIR/CLIENT_HOSTNAME -r -T24h10m -c config.default -v 100Mb
たとえば、slemicro_1
というホスト名の場合、この行は次のようになります。
# local primary logger slemicro_1 y n PCP_ARCHIVE_DIR/slemicro_1 -r -T24h10m -c config.default -v 100Mb
4 PCPのメトリックの管理 #
4.1 PCPのメトリックの一覧 #
コンテナ内から、コマンドpminfo
を使用してメトリックを一覧にできます。たとえば、利用可能なすべてのパフォーマンスメトリックを一覧にするには、次のコマンドを実行します。
#
pminfo
メトリックのプレフィクスを指定すると、関連するメトリックのグループを一覧にすることができます。
#
pminfoMETRIC_PREFIX
たとえば、カーネルに関連するメトリックをすべて一覧にするには、次のコマンドを使用します。
#
pminfo disk
disk.dev.r_await
disk.dm.await
disk.dm.r_await
disk.md.await
disk.md.r_await
...
追加の文字列を指定して、メトリックのリストを絞り込むこともできます。次に例を示します。
#
piminfo disk.dev
disk.dev.read
disk.dev.write
disk.dev.total
disk.dev.blkread
disk.dev.blkwrite
disk.dev.blktotal
...
特定のメトリックのオンラインヘルプテキストを取得するには、-t
オプションの後にそのメトリックを使用します。次に例を示します。
#
pminfo -t kernel.cpu.util.user
kernel.cpu.util.user [percentage of user time across all CPUs, including guest CPU time]
特定のメトリックの説明テキストを表示するには、-T
オプションの後にそのメトリックを使用します。次に例を示します。
#
pminfo -T kernel.cpu.util.user
Help:
percentage of user time across all CPUs, including guest CPU time
4.2 ローカルメトリックの確認 #
PCPコンテナを起動した後に、コンテナ内で次のコマンドを実行して、メトリックが適切に記録されることを確認できます。
#
pcp
Performance Co-Pilot configuration on localhost:
platform: Linux localhost 5.3.18-150300.59.68-default #1 SMP Wed May 4 11:29:09 UTC 2022 (ea30951) x86_64
hardware: 1 cpu, 1 disk, 1 node, 1726MB RAM
timezone: UTC
services: pmcd pmproxy
pmcd: Version 5.2.2-1, 9 agents, 4 clients
pmda: root pmcd proc pmproxy xfs linux mmv kvm jbd2
pmlogger: primary logger: /var/log/pcp/pmlogger/localhost/20220607.09.24
pmie: primary engine: /var/log/pcp/pmie/localhost/pmie.log
次に、ログが適切な出力先に書き込まれているかどうかを確認します。
#
lsPATH_TO_PMLOGGER_LOGS
この場合、PATH_TO_PMLOGGER_LOGSは/var/log/pcp/pmlogger/localhost/
である必要があります。
4.3 リモートシステムからのメトリックの記録 #
pmlogger
コンテナが実行されているシステムとは異なるリモートシステムからメトリックを収集するコレクタコンテナを展開できます。リモートコレクタシステムごとに、pmcd
デーモンと、pmdaのセットが必要です。集中監視システムで複数のコレクタを展開するには、次の手順に従います。
メトリックの収集元の各システム(クライアント)で、
pmcd
デーモンを使用してコンテナを実行します。#
podman run -d \ --name pcp-pmcd \ --privileged \ --net host \ --systemd always \ -e PCP_SERVICES=pmcd \ -e HOST_MOUNT=/host \ -v /:/host:ro,rslave \ registry.suse.com/suse/pcp:latest監視システム上で、クライアント
control.CLIENT
ごとにpmlogger
設定ファイルを次の内容で作成します。$version=1.1 CLIENT_HOSTNAME n n PCP_ARCHIVE_DIR/CLIENT -N -r -T24h10m -c config.default -v 100Mb
CLIENT_HOSTNAMEはDNSで解決可能である必要があることに注意してください。IPアドレス、または代わりに完全修飾ドメイン名(FQDN)を使用できます。
監視システム上で、クライアントごとに、記録されたログを保存するためのディレクトリを作成します。
#
mkdir /root/pcp-archives/CLIENTたとえば、
slemicro_1
の場合、次のようになります。#
mkdir /root/pcp-archives/slemicro_1監視システム上で、クライアントごとに
pmlogger
でコンテナを実行します。#
podman run -d \ --name pcp-pmlogger-CLIENT \ --systemd always \ -e PCP_SERVICES=pmlogger \ -v /root/pcp-archives/CLIENT:/var/log/pcp/pmlogger:z \ -v $(pwd)/control.CLIENT:/etc/pcp/pmlogger/control.d/local:z \ registry.suse.com/suse/pcp:latestたとえば、
slemicro_1
というクライアントの場合、次のようになります。#
podman run -d \ --name pcp-pmlogger-slemicro_1 \ --systemd always \ -e PCP_SERVICES=pmlogger \ -v /root/pcp-archives:/var/log/pcp/pmlogger:z \ -v $(pwd)/control.slemicro_1:/etc/pcp/pmlogger/control.d/local:z \ registry.suse.com/suse/pcp:latest注記2つ目のバインドマウントは、ステップ 2で作成した設定ファイルを指し、
pmlogger
のデフォルト設定を置き換えます。このバインドマウントを作成しない場合、pmlogger
はデフォルトの/etc/pcp/pmlogger/control.d/local
ファイルを使用します。デフォルト設定はローカルホストを指しているため、クライアントからのログ記録は失敗します。設定ファイルの詳細については3.2.2項 「/etc/pcp/pmlogger/control.d/local
ファイル」を参照してください。ログ収集が正常に機能しているかどうかを確認するには、次のコマンドを実行します。
#
ls -l pcp-archives/CLIENT/CLIENT次に例を示します。
#
ls -l pcp-archives/slemicro_1/slemicro_1 total 1076 -rw-r--r--. 1 systemd-network systemd-network 876372 Jun 8 11:24 20220608.10.58.0 -rw-r--r--. 1 systemd-network systemd-network 312 Jun 8 11:22 20220608.10.58.index -rw-r--r--. 1 systemd-network systemd-network 184486 Jun 8 10:58 20220608.10.58.meta -rw-r--r--. 1 systemd-network systemd-network 246 Jun 8 10:58 Latest -rw-r--r--. 1 systemd-network systemd-network 24595 Jun 8 10:58 pmlogger.log
5 法的事項 #
Copyright © 2006–2025 SUSE LLC and contributors. All rights reserved.
この文書は、GNUフリー文書ライセンスのバージョン1.2または(オプションとして)バージョン1.3の条項に従って、複製、頒布、および/または改変が許可されています。ただし、この著作権表示およびライセンスは変更せずに記載すること。ライセンスバージョン1.2のコピーは、「GNUフリー文書ライセンス」セクションに含まれています。
SUSEの商標については、https://www.suse.com/company/legal/を参照してください。その他の第三者のすべての商標は、各社の所有に帰属します。商標記号(®、™など)は、SUSEおよび関連会社の商標を示します。アスタリスク(*)は、第三者の商標を示します。
本書のすべての情報は、細心の注意を払って編集されています。しかし、このことは正確性を完全に保証するものではありません。SUSE LLC、その関係者、著者、翻訳者のいずれも誤りまたはその結果に対して一切責任を負いかねます。