2021-01-28

/self/proc/mountstats

CentOS 7.4でGangliaを利用しています。Pythonでスクリプトを組むとグラフ表示できるメトリックを追加できるので、NFS操作で使われるRPCに関する情報をファイル「/proc/self/mountstats」から取得してみました。


作成したPythonスクリプトをGangliaの所定のディレクトリに配置して動かしてみました。ごころがログ「/var/log/messages」に次のようなエラーが記録されます。

centos74 /usr/sbin/gmond: [PYTHON] Can't call the metric handler function for [get_delta] in the python module [nfsiostat].


このエラーメッセージだけでは、何か問題があるのだろう、ということはわかりますが、何が悪いのか分かりません。そこで設定ファイル「/etc/ganglia/gmond.conf」でプロパティ「debug_level」に設定値「1」を指定して再起動したら、より詳しい情報が記録されました。それによるとファイル「/proc/self/mountstats」を読もうとして「許可がありません」というエラーになっています。特殊ファイルシステム「/proc」において、「self」というのは自プロセスの事である筈なので、許可がなくて読めないというのは解せません。


念のために確認してみました。するとプロセスの所有者が「ganglia」で、ファイルの所有者が「root」でした。なぜプロセスとファイルの所有者が異なるのかわかりませんが、「許可がありません」というエラーになることはわかります。

[root@centos74 ~]# ps auxww | grep gmond

ganglia   1237  0.3  0.5 291312 10588 ?        Ssl  15:32   0:04 /usr/sbin/gmond

[root@centos74 ~]# ls -l /proc/1237/mountstats 

-r--------. 1 root root 0 Jan 28 15:33 /proc/1237/mountstats

[root@centos74 ~]# ls -ld /proc/1237

dr-xr-xr-x. 9 ganglia ganglia 0 Jan 28 15:32 /proc/1237


デーモンプロセス「/usr/sbin/gmond」を起動するのは管理者「root」だとおもいます。しかしプロセスの所有者が「ganglia」になっているということは、起動後の何らかのタイミングで所有者を変更したのでしょう。ところがファイル「/proc/1237/mountstats」 の所有者が「root」のままになっている(「ganglia」に変更されていない)のが原因だろうと思います。何故かディレクトリ「/proc/1237」は所有者「ganglia」になっているのですが・・・

0 件のコメント:

コメントを投稿