Red Hat Convergence Tokyo 2019 レポート トラック:PCP入門 編

どうも、サイオステクノロジー 山田です。

今年も Red Hat 最新テクニカル情報交歓会 (Red Hat Convergence Tokyo 2019) に参加してきました。去年から参加させて頂き、これで二回目の参加となります。

https://www.redhat.com/ja/events/customer-convergence-2019-tokyo-060519

レッドハット本社での開催となり、以前にセミナーで往訪させて頂いたことがあるのですが、フロアが異なったため、少し戸惑ってしまいました(笑)
会場について一番初めに感じたことは、「人が多い!!」 ということですね。応募が殺到したとのことで、RHEL8 や OCP4 のリリース、IBMと合併の話題などで注目された影響なのでしょうか。

さて、今回自分は以下のトラックに参加させて頂きました。

①PCP入門:PCPでパフォーマンスの謎を解きましょう
②OpenShift 4と新しいKubernetesエコシステム
③RHOSPをスムーズに利用するためのTips
④System Purpose in RHEL 8

全トラックにおいて、とても役立つ情報満載で、有意義な時間を過ごすことができました。

PCP について

本記事では、「PCP入門」 を取り上げさせて頂きます。

本トラックで登壇されたましたのは、レッドハット社でTAM(テクニカル・アカウント・マネージャー)を務めている ホルン クリスチャン 氏です。ドイツ出身とのことですが、日本語が非常に聞き取りやすく、解りやすかったです。

PCP (Performance Co-Pilot) とはLinux系サーバのモニタリングツールで、サーバリソースやサービスなどを監視することができます。同様のモニタリングツールといえば sar を思い出しますが、PCP も歴史は 20年以上 にも及ぶとのことです。自分もこのトラックに参加するまでは PCP の存在を知らなく、非常に驚きました。

PCP は非常に多くのサービスリソースに対応するために、PMDA (Performance Metrics Domain Agent) と呼ばれる拡張機能があり、的確に選択することでパフォーマンスを発揮します。

PCP を試す

トラックを受講して温度感が高い内に早速、PCPを試してみたいと思います。

PCP インストール

折角なので、RHEL8 に PCP をインストールしたいと思います。
まず、2019/06/06 現在のパッケージを確認しました。

# dnf list pcp*
Updating Subscription Management repositories.
利用可能なパッケージ
pcp.x86_64                                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-conf.x86_64                                                      4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-devel.i686                                                       4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-devel.x86_64                                                     4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-doc.noarch                                                       4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-export-pcp2graphite.x86_64                                       4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-export-pcp2influxdb.x86_64                                       4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-export-pcp2json.x86_64                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-export-pcp2xml.x86_64                                            4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-export-pcp2zabbix.x86_64                                         4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-export-zabbix-agent.x86_64                                       4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-gui.x86_64                                                       4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-import-collectl2pcp.x86_64                                       4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-import-ganglia2pcp.x86_64                                        4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-import-iostat2pcp.x86_64                                         4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-import-mrtg2pcp.x86_64                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-import-sar2pcp.x86_64                                            4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-libs.i686                                                        4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-libs.x86_64                                                      4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-libs-devel.i686                                                  4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-libs-devel.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-manager.x86_64                                                   4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-activemq.x86_64                                             4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-apache.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-bash.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-bcc.x86_64                                                  4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-bind2.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-bonding.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-cifs.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-cisco.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-dbping.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-dm.x86_64                                                   4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-docker.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-ds389.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-ds389log.x86_64                                             4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-elasticsearch.x86_64                                        4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-gfs2.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-gluster.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-gpfs.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-gpsd.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-haproxy.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-infiniband.x86_64                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-json.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-libvirt.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-lio.x86_64                                                  4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-lmsensors.x86_64                                            4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-logger.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-lustre.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-lustrecomm.x86_64                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-mailq.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-memcache.x86_64                                             4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-mic.x86_64                                                  4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-mounts.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-mysql.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-named.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-netfilter.x86_64                                            4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-news.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-nfsclient.x86_64                                            4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-nginx.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-nvidia-gpu.x86_64                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-oracle.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-papi.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-pdns.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-perfevent.x86_64                                            4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-podman.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-postfix.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-postgresql.x86_64                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-prometheus.x86_64                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-redis.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-roomtemp.x86_64                                             4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-rpm.x86_64                                                  4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-rsyslog.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-samba.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-sendmail.x86_64                                             4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-shping.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-slurm.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-smart.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-snmp.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-summary.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-systemd.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-trace.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-unbound.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-vmware.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-weblog.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-zimbra.x86_64                                               4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-pmda-zswap.x86_64                                                4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-selinux.x86_64                                                   4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-system-tools.x86_64                                              4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-testsuite.x86_64                                                 4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-webapi.x86_64                                                    4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-webapp-blinkenlights.noarch                                      4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-webapp-grafana.noarch                                            4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-webapp-graphite.noarch                                           4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-webapp-vector.noarch                                             4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-webjs.noarch                                                     4.3.0-3.el8                                      rhel-8-for-x86_64-appstream-rpms
pcp-zeroconf.x86_64

沢山ありますね。Appstreamに含まれていることがわかります。
では、まず最小限のパッケージをインストールします。

# dnf install pcp-zeroconf pcp-system-tools
依存関係が解決しました。
======================================================================================================================================================
 パッケージ                    アーキテクチャー  バージョン                                         リポジトリ                                  サイズ
======================================================================================================================================================
Installing:
 pcp-system-tools              x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms            182 k
 pcp-zeroconf                  x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms             39 k
依存関係をインストール中:
 pcp-doc                       noarch            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms            3.8 M
 nspr                          x86_64            4.20.0-2.el8                                       rhel-8-for-x86_64-appstream-rpms            143 k
 python3-pip                   noarch            9.0.3-13.el8                                       rhel-8-for-x86_64-appstream-rpms             18 k
 libuv                         x86_64            1:1.23.1-1.el8                                     rhel-8-for-x86_64-appstream-rpms            134 k
 pcp-conf                      x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms             46 k
 nss-softokn-freebl            x86_64            3.41.0-5.el8                                       rhel-8-for-x86_64-appstream-rpms            272 k
 pcp-pmda-dm                   x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms             59 k
 nss-sysinit                   x86_64            3.41.0-5.el8                                       rhel-8-for-x86_64-appstream-rpms             68 k
 pcp-selinux                   x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms             45 k
 nss                           x86_64            3.41.0-5.el8                                       rhel-8-for-x86_64-appstream-rpms            715 k
 pcp-pmda-nfsclient            x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms             41 k
 nss-util                      x86_64            3.41.0-5.el8                                       rhel-8-for-x86_64-appstream-rpms            133 k
 pcp                           x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms            1.1 M
 nss-softokn                   x86_64            3.41.0-5.el8                                       rhel-8-for-x86_64-appstream-rpms            453 k
 pcp-libs                      x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms            492 k
 python3-pcp                   x86_64            4.3.0-3.el8                                        rhel-8-for-x86_64-appstream-rpms            158 k
 python36                      x86_64            3.6.8-2.module+el8.0.0+2975+e0f02136               rhel-8-for-x86_64-appstream-rpms             19 k
 python3-setuptools            noarch            39.2.0-4.el8                                       rhel-8-for-x86_64-baseos-rpms               162 k
 avahi-libs                    x86_64            0.7-19.el8                                         rhel-8-for-x86_64-baseos-rpms                63 k
Enabling module streams:
 python36                                        3.6

~ 中略 ~

インストール済み:
  pcp-system-tools-4.3.0-3.el8.x86_64                          pcp-zeroconf-4.3.0-3.el8.x86_64                pcp-doc-4.3.0-3.el8.noarch
  nspr-4.20.0-2.el8.x86_64                                     python3-pip-9.0.3-13.el8.noarch                libuv-1:1.23.1-1.el8.x86_64
  pcp-conf-4.3.0-3.el8.x86_64                                  nss-softokn-freebl-3.41.0-5.el8.x86_64         pcp-pmda-dm-4.3.0-3.el8.x86_64
  nss-sysinit-3.41.0-5.el8.x86_64                              pcp-selinux-4.3.0-3.el8.x86_64                 nss-3.41.0-5.el8.x86_64
  pcp-pmda-nfsclient-4.3.0-3.el8.x86_64                        nss-util-3.41.0-5.el8.x86_64                   pcp-4.3.0-3.el8.x86_64
  nss-softokn-3.41.0-5.el8.x86_64                              pcp-libs-4.3.0-3.el8.x86_64                    python3-pcp-4.3.0-3.el8.x86_64
  python36-3.6.8-2.module+el8.0.0+2975+e0f02136.x86_64         python3-setuptools-39.2.0-4.el8.noarch         avahi-libs-0.7-19.el8.x86_64

完了しました!

プロセス確認

PCP のプロセスが動作していることがわかります。
主なプロセスは以下とのことです。

pmcd:PCP における中心プロセス
pmda*:それぞれ対応する各パフォーマンスデータを集め、 pmcd に集約するプロセス
pmlogger:パフォーマンスデータをディスクに保存するプロセス

# ps -ef | grep pcp | grep -v grep
root       835 31997  0 16:03 ?        00:00:00 python3 /var/lib/pcp/pmdas/nfsclient/pmdanfsclient.python
pcp       2026     1  0 16:03 ?        00:00:00 /usr/libexec/pcp/bin/pmlogger -P -r -T24h10m -c config.default -v 100mb -m pmlogger_check 20190606.16.03
pcp       2314     1  0 16:03 ?        00:00:00 /usr/bin/pmie -b -P -l /var/log/pcp/pmie/yyamada-rhel8.labs.sios.com/pmie.log -c config.default
pcp      31989     1  0 16:03 ?        00:00:01 /usr/libexec/pcp/bin/pmcd
root     31997 31989  0 16:03 ?        00:00:00 /var/lib/pcp/pmdas/root/pmdaroot
root     32001 31997  0 16:03 ?        00:00:01 /var/lib/pcp/pmdas/proc/pmdaproc -d 3
root     32005 31997  0 16:03 ?        00:00:00 /var/lib/pcp/pmdas/xfs/pmdaxfs -d 11
root     32007 31997  0 16:03 ?        00:00:00 /var/lib/pcp/pmdas/linux/pmdalinux
root     32009 31997  0 16:03 ?        00:00:00 /var/lib/pcp/pmdas/kvm/pmdakvm -d 95
root     32011 31997  0 16:03 ?        00:00:00 /var/lib/pcp/pmdas/dm/pmdadm -d 129

基本的な操作

基本的な操作な操作として、いくつかご紹介頂きました。

■リソース項目一覧

# pminfo | less

■リソース値一覧

# pminfo -Tf | less

■リアルタイムリソース値一覧 vmstat コマンドのようなもの。複数項目可能。

# pmrep -p <リソース項目> <リソース項目> <リソース項目>

■アーカイブファイルからリソース値取得

# pmrep -p <リソース項目> <リソース項目> <リソース項目> -a /var/log/pcp/pmlogger/`uname -n`/YYYYmmdd.HH.MM.X

■アーカイブファイル内で値を比較する

# pmdiff -S <比較元開始時間 HH:MM> -T <比較元終了時間 HH:MM> -B <比較先開始時間 HH:MM> -E <比較先終了時間 HH:MM> /var/log/pcp/pmlogger/`uname -n`/YYYYmmdd.HH.MM.X

PMDA を試す

次に拡張機能である PMDA を利用して値を取得してみます。

PMDA インストール

今回は “pcp-pmda-apache” をインストールして、Apache 情報が取得できるか確認します。

# dnf install pcp-pmda-apache
# cd /var/lib/pcp/pmdas/apache
# ./Install
# pminfo | grep apache
apache.total_accesses
apache.total_kbytes
apache.uptime
apache.requests_per_sec
apache.bytes_per_sec
apache.bytes_per_requests
apache.busy_servers
apache.idle_servers
apache.sb_waiting
apache.sb_starting
apache.sb_reading
apache.sb_writing_reply
apache.sb_keepalive
apache.sb_dns_lookup
apache.sb_logging
apache.sb_finishing
apache.sb_open_slot
apache.sb_closing
apache.sb_idle_cleanup
apache.uptime_s

リソース値確認

# pmrep apache.total_accesses apache.total_kbytes -p
          a.total_accesses  a.total_kbytes
                   count/s         Kbyte/s
17:35:04               N/A             N/A
17:35:05             0.998           1.995
17:35:06             1.000           1.000
17:35:07             1.000           2.000
17:35:08             1.000           1.000
17:35:09             1.000           1.000
17:35:10             1.000           2.000

まとめ

PCP を利用してみての感想ですが、sar とかに比べ柔軟なコマンドが多いため、使いこなすと高速な解析ができると感じました。また、PMDA を利用して同様形式でサービス情報が引き出せるので、こちらも解析者としては嬉しいと思います。今後、リソース監視を設計する際は、PCPも視野に進めて行きたいと思いました。

※ すいません・・・写真取り忘れました。。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です