PCP
入門
Performance Co-Pilotを使い始めましょう
Christian Horn
Technical Account Manager 2019/06/05
アジェンダ
●スピーカーの自己紹介
●パフォーマンスモニタリングとは、現在のソフトの比較
●PCP
とは
●PCP
のインストール説明
●PCP
の基本的な仕組み
●
紹介: pmrep, pminfo, pcp atop
●PMDA
をインストールする事
●pmdiff
を使いましょう
自己紹介 : Christian Horn
●旧東ドイツ出身
●2001
年から、ドイツのミュンヘンに住む
●@T-Systems:
技師、エンジニア
●@
レッドハット ドイツ: TAM
●
2016
年、東京へ引っ越す
●@
レッドハット ( 株 ) : AMC TAM
●問題の調査、 PCP の改善など
●趣味:
●日本語の勉強、ベートーベンの第九を歌う事
●登山、サイクリング
1978
2019
1988
1995
2009
パフォーマンスモニタリングとは
モニタリングの種類:
1)
アベイラビリティモニタリング:
●
あるシステムやサービスが動いているかどうか
●例: Zabbix, Nagios, IBM Tivoli
2)パフォーマンスモニタリング:システム関係の値を読む事
●
システムの負荷、ネットワークのスループット
●例: collectd, PCP
現在のソフトの比較
●
sar
は昔から Red Hat Enterprise Linux (RHEL) に入っているソフト
●
使い方が簡単
●あるバージョンの sar で保存されたデータを分析するためには、
全く同じバージョンの sar をインストールする必要
●様々なオプションがある
●sar PCP
と
の比較(英語)
●collectl
は小さくて便利な Perl スクリプト。色々なケースで
役に立つ、他のツールのような柔軟性に欠ける
●
Performance Co-Pilot (PCP)
は RHEL なら、おすすめ
●
最近、 prometheus というソフトが流行っている。 Kubernetes と
PCP
とは
●
PCP
は 20 年以上前に誕生
●
データを収集:様々なシステムのソースから、例えば mariadb,
PostgreSQL, Apache
。様々なエンジンの名前は Performance Metrics
Domain Agents(PMDA)
●集めたデータを読む為に:様々なツールがある
●データの分析のため: pmdiff
●データの視覚化のため: pmchart, pmrep
●RHEL7
以降には、 PCP
のパフォーマンスデータは sosreport にも含ま
れている
インストール
●PCP
のパッケージは RHEL6/7/8 の普通のレポジトリに入っている
●PCP
は様々なパッケージに分かれていて、
「 yum search pcp 」で探す事が可能
●基本的なインストール:
「自動配置パッケージ」:
RHEL8:
普通のレポジトリに入っている
RHEL7: optional
チャネルに入っている
レポジトリを追加:
# subscription-manager repos \
--enable=rhel-7-server-optional-rpms
# yum install pcp-zeroconf pcp-system-tools
内容:
●pcp-atop
●pcp-collectcl
●pcp-free
●pcp-iostat
●[...]
PCP
の分解
[*] 現在、 grafana のパケージは RHEL に含まれていない pmcd pmda-lmsensors pmda-postgresql pmlogger pmchart pminfo pcp atop pmie pcp-web[...] grafana* pmda-[...] [...] pmda-oracle pmda-podman pmda-nginx consumers PMDAsインストール ... 完了しました!
pmcd pmlogger pmchart pminfo pmie [...] [...] pmda-oracle pmda-podman pmda-nginx consumers PMDAs [root@rhel8 ~]# ps axfPID TTY STAT TIME COMMAND 2 ? S 0:00 [kthreadd] [...] 7500 ? Ssl 0:00 /usr/libexec/pcp/bin/pmcd 7513 ? S 0:00 \_ /var/lib/pcp/pmdas/root/pmdaroot 7518 ? S 0:00 \_ /var/lib/pcp/pmdas/proc/pmdaproc -d 3 7526 ? S 0:00 \_ /var/lib/pcp/pmdas/xfs/pmdaxfs -d 11 7532 ? S 0:00 \_ /var/lib/pcp/pmdas/linux/pmdalinux 7537 ? S 0:00 \_ /var/lib/pcp/pmdas/kvm/pmdakvm -d 95 7544 ? S 0:00 \_ /var/lib/pcp/pmdas/dm/pmdadm -d 129 9810 ? S 0:00 \_ python3 [..]/pmdanfsclient.python 8041 ? S 0:00 /usr/libexec/pcp/bin/pmlogger -P -r -T24h10m [...] 8474 ? Ss 0:00 /usr/bin/pmie -b -P [...]
基本的なデーモン
pcp-zeroconf
をインストールした後で、いくつかの
コンポーネントが設定され、起動している :
●pmcd
デーモンは PCP における通信の中心
●pmlogger
はパフォーマンスデータをディスクに保存
●pmie
はスクリプトを実行、警告をメールで送るなど
●様々な PMDA がパフォーマンスデータを集め、 pmcd に
様々な PMDA が存在
[root@rhel8 ~]# yum search pcp-pmda [...]
======== Name Matched: pcp-pmda ==========================
pcp-pmda-dm.x86_64 : Performance Co-Pilot (PCP) metrics for the Device Mapper : Cache and Thin Client
pcp-pmda-bcc.x86_64 : Performance Co-Pilot (PCP) metrics from eBPF/BCC modules pcp-pmda-lio.x86_64 : Performance Co-Pilot (PCP) metrics for the LIO subsystem […]
[root@rhel8 ~]# yum search pcp-pmda | grep '^pcp-pmda' | \ sed -e 's,\..*,,' -e 's,pcp-pmda-,,' | sort | uniq | xargs
activemq apache bash bcc bind2 bonding cifs cisco dbping dm docker ds389 ds389log elasticsearch gfs2 gluster gpfs gpsd haproxy infiniband json libvirt lio lmsensors logger lustre lustrecomm mailq memcache mic mounts mysql named netfilter news nfsclient nginx nvidia-gpu oracle papi pdns perfevent podman postfix postgresql prometheus redis roomtemp rpm rsyslog samba sendmail shping slurm smart snmp summary systemd trace unbound vmware weblog zimbra zswap
pminfo
を使いましょう
●metric
とは: PMDA が提供しているパフォーマンスデータ
●pminfo
を実行すると、動いている pmcd が収集した metric を出力
●ディスクに保存されたデータも読む事が可能
●「 -fT 」というパラメータでヘルプと現在の metric 値を表示する事が出来る
[root@rhel8 ~]# pminfo -fT [..] mem.util.active metric の名前 Help:Memory that has been used more recently and metricの説明 usually not reclaimed unless absolutely necessary.
Value 217216 metricのソースで読んでいる値 [..]
network.interface.inet_addr metricの名前 Help:
string INET interface address (ifconfig style) metricの説明
inst [0 or "lo"] value "127.0.0.1" metricのソースで読んでいる値 inst [1 or "eth0"] value "192.168.4.68"
アーカイブファイルを読もう
● pcp-zeroconf によって、 pmlogger が動いている ● pcp-zeroconfの設定で、 pmloggerは /var/log/pcp/pmlogger/<hostname> 配下にデータを保存する ● そのディレクトリにおいて末尾が 「 0 」 のファイルが アーカイブファイル。 pminfoに「 -a 」を追加して、アーカイブされた metricsを見ることが出来る : # pminfo -a <archivefile> 例: pminfo -a \ /var/log/pcp/pmlogger/rhel8c/20190516.07.31.0 ● PCPの様々なコマンドは「 -a 」で、システムで動いて いる pmcd の代わりに、アーカイブファイルを使える [root@rhel8c ~]# cd /var/log/pcp/pmlogger/rhel8c/ [root@rhel8c rhel8c]# ll 合計 3616 [..] 467412 5 月 17 07:30 20190517.03.14.0.xz [..] 8992 5 月 17 07:30 20190517.03.14.index [..] 50428 5 月 17 07:29 20190517.03.14.meta.xz [..] 23812 5 月 17 07:31 20190517.07.30.0.xz [..] 312 5 月 17 07:31 20190517.07.30.index [..] 47508 5 月 17 07:30 20190517.07.30.meta.xz [..] 284252 5 月 20 03:45 20190520.01.45.0 [..] 272 5 月 20 03:45 20190520.01.45.index [..] 240235 5 月 20 03:45 20190520.01.45.meta [..] 217 5 月 20 01:45 Latest [..] 30130 5 月 20 01:45 pmlogger.log [..] 30205 5 月 17 11:16 pmlogger.log.prior [root@rhel8c rhel8c]#pmrep
を使いましょう
pmrep
は vmstat の様に、 metric を出力出来る
pmrep
は vmstat の様に、 metric を出力出来る
[root@rhel8 ~]# pmrep \
kernel.all.uptime kernel.all.cpu.user kernel.all.cpu.sys \ 希望の metrics kernel.all.cpu.idle kernel.all.cpu.intr
k.a.uptime k.a.c.user k.a.c.sys k.a.c.idle k.a.c.intr sec ms/s ms/s ms/s ms/s 4101 N/A N/A N/A N/A 4102 119.620 318.988 1455.381 19.937 4103 0.000 0.000 1990.623 10.003 4104 140.054 370.144 1450.563 20.008 4105 130.120 350.324 1391.287 30.028 metricsの値 4106 179.456 538.367 1166.461 39.879 4107 59.909 149.773 1737.370 9.985 4108 10.003 0.000 1990.597 0.000 4109 0.000 0.000 1991.661 0.000 [...]
atop
などのツール
●
metrics
を使って、必要な人気なツールを作成した。
例えば、 atop
というコマンドが PCP metrics を使って作成した。「 pcp atop 」
と実行すると、 PCP のメトリクスを使って、 atop と同等の出力が得られる。
●「 pcp iostat 」、「 pcp dstat 」なども存在。 pcp-system-tools というパケージに
入っている
●アーカイブデータも使う可能。
例えば、「システム XYZ
で 9 時頃にパフォーマンスの問題があった」との電話が
来たら、これを使える:
# pcp atop -r <archivefile> -b 9:00
出力は 9 時のデータになる
PMDA
をインストール
[root@rhel8 ~]# pminfo -f lmsensors Error: lmsensors: Unknown metric name [root@rhel8 ~]#
[root@rhel8 ~]# yum search pcp-pmda […]
[root@rhel8 ~]# yum -y install pcp-pmda-lmsensors [...]
[root@rhel8 ~]# cd /var/lib/pcp/pmdas/lmsensors/ [root@rhel8 lmsensors]# ./Install
Updating the Performance Metrics Name Space (PMNS) ...
Terminate PMDA if already installed ...
Updating the PMCD control file, and notifying PMCD ... Check lmsensors metrics have appeared ... 7 metrics and 7 values
[root@rhel8 ~]# [root@rhel8 ~]# pminfo -f lmsensors
lmsensors.pch_skylake_virtual.temp1 value 41 lmsensors.coretemp_isa.temp3 value 39 lmsensors.coretemp_isa.temp2 value 38 [...]
問題を PCP で調べましょう
●電話が鳴っています:
「システム XYZ で、 10 時 40 分頃にパフォーマンスの
問題があった」
とのこと。
●以前、そのシステムに pcp-zeroconf をインストールした。 PCP
のアーカイブファイルを使って、調べましょう。
どの metrics が大切ですか?
動いているシステムの pmcd が提供している metrics:
[chris@rhel8 ~]# pminfo | wc -l
2830
一部は pmlogger のアーカイブファイルに入っている:
[chris@rhel8 ~]# pminfo -a 20190513.09.28.0 | wc -l
1208
[chris@rhel8 ~]#
RHEL 8
では 1200 以上入っています!
どちらが面白いかな。一つ一つで、 pminfo で、調べる時間が無。
pmdiff
を使いましょう
どの metricsが調査の役に立つでしょうか。つまり、どの metrics が 10 時 40 分に異常でしたか。 [chris@rhel8 ~]# pmdiff -S 09:30 -T 10:30 -B 10:39 -E 10:42 20180815.09.28.0 20180815.09.28.0 20180815.09.28.0 Ratio Metric-Instance 09:30-10:30 10:39-10:42 0.000 0.055 |+| kernel.percpu.cpu.user ["cpu2"] 0.001 0.203 >100 kernel.percpu.cpu.sys ["cpu2"] 0.005 0.251 50.20 kernel.all.cpu.sys 0.002 0.068 34.00 kernel.all.cpu.user 0.002 0.068 34.00 kernel.all.cpu.vuser 0.001 0.034 34.00 kernel.percpu.cpu.sys ["cpu1"] 0.004 0.099 24.75 kernel.all.load ["1 minute"] 0.810 18.75 23.15 xfs.perdev.allocs.free_block ["/dev/mapper/root"] 11906 197904 16.62 xfs.perdev.xstrat.bytes ["/dev/mapper/root"] 2.919 48.32 16.55 xfs.perdev.allocs.alloc_block ["/dev/mapper/root"] 26.88 270.0 10.04 kernel.percpu.intr ["cpu2"] 0.001 0.009 9.00 kernel.percpu.cpu.user ["cpu1"] 0.002 0.014 7.00 kernel.percpu.cpu.sys ["cpu3"] [..]これによると、
当時 CPU や
ファイルシステムが
ビジーだったようです。
システムが正常に動作していた時間帯: 「 -S 」と「 -T 」の間 問題が起こっていた時間帯 : 「 -B 」と「 -E 」の間 データファイル名前今回の調査の順番
●
違いが多い metrics を探す
→ pmdiff
→ kernel.percpu.cpu.sys / kernel.all.load / xfs.perdev.allocs.free_block
●
プロセスステータスの metrics を探す
→ pminfo -T -a <file> proc | less
●
その時間のプロセスステータスを読む
→ pmrep -a <file> -S @10:41:15 -T @10:43:18 \
-p proc.runq.runnable proc.runq.blocked | less
●
その時間に動いていたプロセスを比べる:
→ pminfo -f -a <file> -O @10:40:15 proc.psinfo.sname | grep R
→ pminfo -f -a <file> -O @10:41:19 proc.psinfo.sname | grep R
PCP cheat sheet
コマンド パッケージ 意味
yum install pcp-zeroconf - 基本的なインストール、設定
yum install pcp-system-tools - ツールをインストール
yum search pcp-pmda - pmdaパケージの表
systemctl status pmcd pmlogger pcp pmcdと pmloggerd が動いているかどうか
pminfo pcp metricsの詳細が見える
pmrep pcp-system-tools vmstatのように metrics を読む
pmchart pcp-gui metricsで図を作る
pcp {atop, dstat, free, iostat, ..} pcp-system-tools metrics を読む
まとめ
●PCP
は簡単に使えるという事が分かりました。現在のデータや保存されたデー
タにもアクセスしました。
●これから、 pcp-zeroconf を全部のシステムにインストールしたら、問題が発生
した時に調査出来ます。 kickstart などに書き込んだら、自動的にインストール
出来ます。
●
おすすめの man ページ: PCPIntro(1), pminfo(1), pmrep(1), pmdiff(1)
●
記事:
自分のソフトをモニターリング(英語)
●
Kbase:
●
Introduction to storage performance analysis with PCP (英語)
●