vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

collectd-cloudwatch を Amazon Linux 以外に導入してみる

導入対象EC2 が Amazon Linux の記事はよく見かけますが、他のディストリビューションでの情報があまりなかったため比較を行いました。



ディストリビューションと導入しやすさ

yum/apt での導入を前提としています。新しめのディストリビューションであれば特に苦労しません。

distribution Version python(Default) collectd 導入しやすさ
Amazon Linux 2017.09 2.7.12 5.7.1
CentOS 7.4.1708 2.7.5 5.7.1
CentOS 6.9 2.6.6 4.10.9 ×
Ubuntu 16.04.3 LTS 3.5.2 5.5.1
Ubuntu 14.04.5 LTS 2.7.6 5.4.0

Amazon Linux

提供元がAWSだけあって Amazon Linux は何も考えずに導入できます。

$ sudo yum install collectd collectd-python
$ curl -s -S -O "https://raw.githubusercontent.com/awslabs/collectd-cloudwatch/master/src/setup.py"
$ chmod u+x setup.py
$ sudo ./setup.py

CentOS

collectd は epel を利用しインストールします。

CentOS 7

README に記載がある collectd-python はパッケージが存在しなかったため未インストールです。

$ sudo yum install epel-release
$ sudo yum install collectd
$ curl -s -S -O "https://raw.githubusercontent.com/awslabs/collectd-cloudwatch/master/src/setup.py"
$ chmod u+x setup.py
$ sudo ./setup.py

CentOS 6

collectd 5.0.0 未満では collectd-cloudwatch は使用できません。

collectd は epel を利用してインストールしますが、4.10.9です。 また、 collectd-cloudwatch のインストールでエラーになります。

まず、python 2.6 では setup.py が動作しません。

$ python -V
Python 2.6.6
$ sudo ./setup.py
Traceback (most recent call last):
  File "./setup.py", line 28, in <module>
    from subprocess import check_output, CalledProcessError, Popen, PIPE
ImportError: cannot import name check_output

python 2.7 にしても setup.py は別のエラーとなります。

$ python -V
Python 2.7.14
$ sudo ./setup.py
Traceback (most recent call last):
  File "./setup.py", line 964, in <module>
    main()
  File "./setup.py", line 957, in main
    install_plugin()
  File "./setup.py", line 869, in install_plugin
    install_packages(SYSTEM_DEPENDENCIES)
  File "./setup.py", line 261, in install_packages
    command = DISTRIBUTION_TO_INSTALLER[detect_linux_distribution()] + " ".join(packages)
  File "./setup.py", line 270, in detect_linux_distribution
    return DISTRO_NAME_REGEX.search(search_string).group(1).strip()
AttributeError: 'NoneType' object has no attribute 'group'

ディストリビューションの判断を /etc/os-release で行っているので、無理矢理通してみるとようやく未サポートのメッセージ表示となりました。

$ sudo ./setup.py
Installing dependencies ... OK
Installing python dependencies ... OK
Downloading plugin ... OK
Extracting plugin ... OK
Moving to collectd plugins directory ... OK
The minimum supported version of collectd is 5.0.0, and your version is 4.10.9. You need to upgrade collectd before proceeding with the plugin installation.

Ubuntu

collectd の設定ファイル格納場所が Redhat系(Amazon Linux含む) とは異なります。

Ubuntu16

python 2.7 を使えるようにしておく必要があります。

$ python -V
Python 2.7.14
$ sudo apt-get install collectd
$ curl -s -S -O "https://raw.githubusercontent.com/awslabs/collectd-cloudwatch/master/src/setup.py"
$ chmod u+x setup.py
$ sudo ./setup.py

Ubuntu14

インストール自体は他と同様です。

$ sudo apt-get install collectd
$ curl -s -S -O "https://raw.githubusercontent.com/awslabs/collectd-cloudwatch/master/src/setup.py"
$ chmod u+x setup.py
$ sudo ./setup.py

ディストリビューションと異なり、collectd が5.4のため、インストール時にデフォルトで設定されているメトリクスが使用できません。
公式ブログにもありますが、disk 以外の cpu/memory/swap は、 5.5 からパーセンテージが利用できるようになっています。

バージョン 5.5 以降の collectd を使用している場合は、4 つのメトリックスがデフォルトで発行されるようなりました。

デフォルト設定での導入結果

f:id:htnosm:20171106033047p:plain

その他

CloudWatch の Endpoint(monitoring.{{region}}.amazonaws.com) へ送信しているため、Outbound制限を掛けている場合は 443 ポートの許可が必要です。