どうも、サイオステクノロジー 山田です。
今年も 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も視野に進めて行きたいと思いました。
※ すいません・・・写真取り忘れました。。