Jump to content

collectd

From DawoumWiki, the free Mathematics self-learning

collectd
Original author(s)Florian Forster
Initial releaseJuly 8, 2005; 20 years ago (2005-07-08)
Stable release
5.8.0 / November 18, 2017; 8 years ago (2017-11-18)[1]
Written inC
Operating systemAny Unix-like
Available inEnglish
TypeCapacity planning
LicenseMIT License & GNU General Public License, version 2
Websitecollectd.org

collectd는 시스템 정보를 모우고, 전달하고, 저장하는 데몬입니다. 주로 시스템의 성능 정보와 디스크, 메모리, 그리고 네트워크 사용량 등을 모우는데 사용하고 있고, 수 많은 플럭-인을 통해서 다른 원천으로부터 정보를 모울 수 있습니다. 이 소프트웨어 목록은 collectd가 수집한 정보를 읽어, 화면에 표시해 주고 분석해주는 것들입니다.

Install Collectd Service

우분투에서 지원하는 패키지라 설치가 쉽습니다.

  • sudo apt install collectd
The following NEW packages will be installed:
  ca-certificates-java collectd collectd-core default-jre-headless
  libconfuse-common libconfuse0 libdevmapper-event1.02.1 libesmtp6 libftdi1
  libganglia1 libhiredis0.13 liblvm2app2.2 libmodbus5 liboping0 libow-3.1-1
  libowcapi-3.1-1 libprotobuf-c1 librabbitmq4 librdkafka1 libserialport0
  libsigrok2 libtokyocabinet9 libtokyotyrant3 libupsclient4 libvarnishapi1
  libzip4 openjdk-8-jre-headless owfs-common

Install Collectd-Web and Dependencies

Collectd-web이 정상적으로 동작하는데 필요한 패키지들을 먼저 설치합니다.

  • sudo apt install git
  • sudo apt install librrds-perl libjson-perl libhtml-parser-perl

Import Collectd-Web Git Repository and Modify Standalone Python Server

가장 최신의 collectd-web가 git 서버로부터 가져옵니다.

파일 /usr/local/collectd-web/runserver.py을 열어서 원하는 포트로 바꿉니다. 현재는 localhost의 IP인 127.0.0.1로 접근하게 되어 있으므로 이것도 바꿀 수 있습니다.

class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
    cgi_directories = ["/cgi-bin"]

PORT = 8888

이제 실행 준비가 끝났습니다.

  • sudo python runserver.py &

웹 브라우저를 열어서 http://localhost:8888 로 접근을 합니다. 실행하던 서비스를 잠시 꺼버립니다.

  • sudo killall python

Create a Init Script to Manage the Standalone Python Server

메번 해당 디렉토리으로 이동해서 실행하는 것은 귀찮기 때문에 시작 스크립트 /usr/local/bin/collectd-web을 만듭니다.

#!/bin/bash

PORT="8888"

case $1 in
	start)
		cd /usr/local/collectd-web/
		python runserver.py 2> /tmp/collectd.log &
		sleep 1
		stat=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"| cut -d":" -f2 | cut -d" " -f1`
		if [[ $PORT -eq $stat ]]; then
			sock=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"`
			echo -e "Server is  still running:\n$sock"
		else
			echo -e "Server has stopped"
		fi
	;;
	stop)
		pid=`ps -x | grep "python runserver.py" | grep -v "color"`
		kill -9 $pid 2>/dev/null
		stat=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"| cut -d":" -f2 | cut -d" " -f1`
		if [[ $PORT -eq $stat ]]; then
			sock=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"`
			echo -e "Server is  still running:\n$sock"
		else
			echo -e "Server has stopped"
		fi
	;;
	status)
		stat=`netstat -tlpn 2>/dev/null |grep $PORT| grep "python" | cut -d":" -f2 | cut -d" " -f1`
		if [[ $PORT -eq $stat ]]; then
			sock=`netstat -tlpn 2>/dev/null | grep $PORT | grep "python"`
			echo -e "Server is running:\n$sock"
		else
			echo -e "Server is stopped"
		fi
	;;
	*)
		echo "Use $0 start|stop|status"
	;;
esac
  • sudo chmod +x /usr/local/bin/collectd-web
  • sudo collectd-web start

Enable a Collectd Daemon Plug-in

여기서는 apache 플럭-인을 켜는 과정입니다. /etc/collectd/collectd.conf를 수정합니다.

#LoadPlugin aggregation
#LoadPlugin amqp
LoadPlugin apache
#LoadPlugin apcups
...
<Plugin apache>
	<Instance "foo">
		URL "http://localhost/server-status?auto"
#		User "www-user"
#		Password "secret"
#		VerifyPeer false
#		VerifyHost false
#		CACert "/etc/ssl/ca.crt"
#		Server "apache"
	</Instance>
#
#	<Instance "bar">
#		URL "http://some.domain.tld/status?auto"
#		Host "some.domain.tld"
#		Server "lighttpd"
#	</Instance>
</Plugin>

<Instance "foo">에서 foo는 화면에 표시되는 이름이므로 자신의 서버에 맞게 적당히 바꿉니다. 플럭-인을 켜는 과정은 먼저 위쪽에 플럭-인 이름만 모인 곳에서 주석처리를 없애고, 검색을 해서 아래쪽으로 이동한 후에 플럭-인에 대한 세부적인 설정에 주석처리를 없애고 수정할 부분은 적당히 수정함으로써 끝이 납니다.

  • sudo systemctl restart collectd
  • sudo collectd-web stop
  • sudo collectd-web start

웹 브라우저의 캐시를 삭제한 후에 재접속하시면 변화된 내용을 볼 수 있다고 알려져 있습니다.[2]

Enable Collectd Daemon and Collectd-web Server System-Wide

시스템 시작시 함께 시작되도록 설정을 합니다. /etc/rc.local에 collectd-web을 등록해서 시작되도록 합니다.

...
/usr/local/bin/collectd-web start

exit 0

rc.local에 실행 권한을 줍니다.

  • sudo chmod +x /etc/rc.local

rc.local에 대한 systemd 스크립트가 있지만, 오류가 생깁니다. /lib/systemd/system/rc-local.service를 수정합니다.

[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Collectd-web 시작 스크립트 /usr/local/bin/collectd-web를 약간 수정합니다.

#!/bin/bash

PORT="8888"

case $1 in
	start)
		cd /usr/local/collectd-web/ && python runserver.py 2> /tmp/collectd.log &
		sleep 1

서비스를 등록합니다.

  • sudo systemctl enable collectd
  • sudo systemctl enable rc.local
  • reboot

References

  1. ^ "Releases - collectd/collectd". Retrieved 12 June 2017 – via GitHub.
  2. ^ 그러나 플럭-인이 화면에 표시되지 않습니다. 좀 더 많은 정보가 필요합니다.

External Resources