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

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

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

今年も 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も視野に進めて行きたいと思いました。

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

アバター画像
About 山田康裕 27 Articles
20代前半からLinux系OSSや認証基盤を中心とした提案/設計/構築を担当。特に仕事を選ばない、何でも屋さん。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる