<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HowTo Archives - WonderWall</title>
	<atom:link href="https://blog.wonderwall.me/category/howto/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.wonderwall.me/category/howto/</link>
	<description></description>
	<lastBuildDate>Mon, 13 Oct 2014 18:44:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8</generator>
	<item>
		<title>Setup network streaming player (네트워크 스트리밍 플레이어)</title>
		<link>https://blog.wonderwall.me/2014/10/14/setup-sound-server/</link>
					<comments>https://blog.wonderwall.me/2014/10/14/setup-sound-server/#respond</comments>
		
		<dc:creator><![CDATA[april1024]]></dc:creator>
		<pubDate>Mon, 13 Oct 2014 18:44:35 +0000</pubDate>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[mpd]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[network audio player]]></category>
		<category><![CDATA[network player]]></category>
		<category><![CDATA[pc-hi]]></category>
		<category><![CDATA[pulseaudio]]></category>
		<category><![CDATA[sound server]]></category>
		<category><![CDATA[soundflower]]></category>
		<category><![CDATA[subsonic]]></category>
		<category><![CDATA[네트워크 오디오 플레이어]]></category>
		<category><![CDATA[네트워크 플레이어]]></category>
		<guid isPermaLink="false">http://blog.wonderwall.me/?p=272</guid>

					<description><![CDATA[<p>배경 요즘 Audiophiler 들에게 각광받고 있는 기기는 단연 network stream player (a.k.a network player)이다. 마치 신개념을 무장한 기기로 보일 수도 있으나, 알맹이를 보면 기존 기기에 networking 기능을 더한 것이다. 네트워크 환경이 좋아지고, 편리한 부가기능들이 표준화 되면서 오디오 기기에 부가기능들이 추가되는 자연스런 행보라 하겠다. 하지만 역시나 오디오 기기에 그러한 기능들이 들어오면 가격이 무척 비싸 직딩에게는 그림의 떡일 &#8230; </p>
<p class="link-more"><a href="https://blog.wonderwall.me/2014/10/14/setup-sound-server/" class="more-link">Continue reading<span class="screen-reader-text"> "Setup network streaming player (네트워크 스트리밍 플레이어)"</span></a></p>
<p>The post <a rel="nofollow" href="https://blog.wonderwall.me/2014/10/14/setup-sound-server/">Setup network streaming player (네트워크 스트리밍 플레이어)</a> appeared first on <a rel="nofollow" href="https://blog.wonderwall.me">WonderWall</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h3>배경</h3>
<p>요즘 Audiophiler 들에게 각광받고 있는 기기는 단연 network stream player (a.k.a network player)이다. 마치 신개념을 무장한 기기로 보일 수도 있으나, 알맹이를 보면 기존 기기에 networking 기능을 더한 것이다. 네트워크 환경이 좋아지고, 편리한 부가기능들이 표준화 되면서 오디오 기기에 부가기능들이 추가되는 자연스런 행보라 하겠다. 하지만 역시나 오디오 기기에 그러한 기능들이 들어오면 가격이 무척 비싸 직딩에게는 그림의 떡일 뿐이다. <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>나는 바쁜 일상에서도 소중한 음악을 언제 어디에서나 쉽게 찾아 들고 싶었고, 네트워크 사운드 서버를 구성하여 집에있는 스피커를 최대한 활용해보고 싶었다. 지난 2년 동안 시행착오를 겪고 난 뒤 나름 만족할 만한 network streamer 를 구축하게 되었다. 그리하여 NAIM의 ND5 XS 처럼 멋있는 기기를 사용하고 싶지만,  자금이 넉넉지 않은 audiophiler 에게 기존 오디오 기기들을 100% 활용하면서 적은 비용으로 network stream player 를 구축하는데 도움이 되고자 포스팅을 시작한다.</p>
<figure id="attachment_334" aria-describedby="caption-attachment-334" style="width: 300px" class="wp-caption aligncenter"><a href="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/naim_ND5_XS.jpeg"><img decoding="async" class="wp-image-334 size-medium" src="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/naim_ND5_XS-300x115.jpeg" alt="naim_ND5_XS" width="300" height="115" srcset="https://blog.wonderwall.me/wp-content/uploads/2014/10/naim_ND5_XS-300x115.jpeg 300w, https://blog.wonderwall.me/wp-content/uploads/2014/10/naim_ND5_XS.jpeg 500w" sizes="(max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-334" class="wp-caption-text">NAIM ND5 XS</figcaption></figure>
<h3></h3>
<h3>목적</h3>
<ul>
<li>streaming music server
<ul>
<li>언제 어디에서나 음악을 들을 수 있어야 한다.</li>
</ul>
</li>
<li>jukebox
<ul>
<li>집에서는 고음질의 음악을 들을 수 있어야 한다. (a.k.a PC-FI)</li>
</ul>
</li>
<li>network sound server
<ul>
<li>쇼파위에서 맥북으로 youtube 볼 때, 스피커로 소리를 들을 수 있어야 한다.</li>
</ul>
</li>
</ul>
<h3></h3>
<h3>Overview</h3>
<p><a href="https://blog.wonderwall.me/?attachment_id=404"><img fetchpriority="high" decoding="async" class="aligncenter wp-image-404" src="http://192.168.1.101/wordpress/wp-content/uploads/2016/08/sound_server_overview-1024x820.png" width="800" height="641" srcset="https://blog.wonderwall.me/wp-content/uploads/2016/08/sound_server_overview-1024x820.png 1024w, https://blog.wonderwall.me/wp-content/uploads/2016/08/sound_server_overview-300x240.png 300w, https://blog.wonderwall.me/wp-content/uploads/2016/08/sound_server_overview-768x615.png 768w, https://blog.wonderwall.me/wp-content/uploads/2016/08/sound_server_overview-1536x1230.png 1536w, https://blog.wonderwall.me/wp-content/uploads/2016/08/sound_server_overview-1568x1256.png 1568w, https://blog.wonderwall.me/wp-content/uploads/2016/08/sound_server_overview.png 1578w" sizes="(max-width: 800px) 100vw, 800px" /></a></p>
<h3></h3>
<h3>구축 환경</h3>
<ul>
<li>Ubuntu Server 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)</li>
<li>openjdk 7</li>
<li>nginx 1.4.6 (option)</li>
</ul>
<h3></h3>
<h3>Network sound server</h3>
<p>여기서 pulseaudio 를 설치하는 가장 궁극적인 목적은 network sound server 를 구축하기 위함이다. pulseaudio 외에도 다른 방법이 존재하지만, 경험상 가장 간편하고 깔끔하였다. 엮으로 pulseaudio 가 작성된 이유이기도 하다. network sound server 기능이 필요 없다면 alsa 로 음악을 재생하는것이 음질면에서 더욱 유리하다.</p>
<h4>1. install <a href="http://en.wikipedia.org/wiki/PulseAudio">pulseaudio</a></h4>
<pre class="lang:sh decode:true">sudo apt-get install pulseaudio pulseaudio-esound-compat alsa-tools alsa-utils
</pre>
<h4>2. configuration</h4>
<p>대부분 alsa usb audio hotplug 로 DAC를 연결할 텐데,  hardware index 가 정상적으로 등록되어 있는지 확인해보자.</p>
<pre class="lang:sh decode:true">april1024@ns01:~$ sudo aplay -l
**** List of PLAYBACK Hardware Devices ****
Home directory not accessible: Permission denied
card 1: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
 Subdevices: 0/1
 Subdevice #0: subdevice #0
</pre>
<p>* /etc/asound.conf</p>
<pre class="lang:vim decode:true ">pcm.!default {
    type hw
    card 1
}
ctl.!default {
    type hw
    card 1
}</pre>
<p>* start pulseaudio</p>
<pre class="lang:sh decode:true">sudo service pulseaudio start
</pre>
<p>* speaker test</p>
<p>pulseaudio daemon 이 system mode 로 동작할 때에는 &#8220;pulse-access&#8221; group 에 속하지 않은 user 는 소리를 재생할 수 없다.</p>
<pre class="lang:sh decode:true">april1024@ns01:~$ speaker-test

speaker-test 1.0.27.2

Playback device is default
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Access denied

Playback open error: -111,Connection refused
</pre>
<p>user를 pulse-access group 에 추가한다.</p>
<pre class="lang:sh decode:true">april1024@ns01:~$ sudo usermod -a -G pulse-access april1024
</pre>
<pre class="lang:sh decode:true">april1024@ns01:~$ speaker-test

speaker-test 1.0.27.2

Playback device is default
Stream parameters are 48000Hz, S16_LE, 1 channels
Using 16 octaves of pink noise
Rate set to 48000Hz (requested 48000Hz)
Buffer size range from 192 to 2097152
Period size range from 64 to 699051
Using max buffer size 2097152
Periods = 4
was set period_size = 524288
was set buffer_size = 2097152
0 - Front Left
Time per period = 10.948270
0 - Front Left
^CTime per period = 10.953592
</pre>
<p>network를 통하여 sound를 재생하기 위해서는 pulseaudio에서 제공하는 module을 적재해야하며, ACL 추가가 필요하다.</p>
<p>* /etc/pulse/default.pa, /etc/pulse/system.pa</p>
<pre class="lang:vim decode:true "># ESD protocol 설정
.ifexists module-esound-protocol-tcp.so
load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
.endif

# PulseAudio native protocol 설정
.ifexists module-native-protocol-tcp.so
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
.endif</pre>
<h4>3. add client</h4>
<p>* <a href="https://code.google.com/p/soundflower/">soundflower</a> (Mac 10.9.5)</p>
<p>pulseaudio 는 ESD 를 지원하여 외부에서 ESD protocol 로 송신만 해주면 pulseaudio 는 그 소리를 수신하여 재생시킬 수 있다. soundflower 라는 mac 용 프로그램을 이용하여 ESD protocol 로 pulseaudio 에 전달해보자.</p>
<p>soundflower 를 설치하고나면 sound preferences 에서 soundflower device 가 추가된 것을 볼 수 있다.  output device 에서 soundflower device 를 선택한다.</p>
<p><a href="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/ss_soundflower1.png"><img decoding="async" class="aligncenter size-medium wp-image-327" src="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/ss_soundflower1-300x275.png" alt="ss_soundflower1" width="300" height="275" srcset="https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_soundflower1-300x275.png 300w, https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_soundflower1.png 502w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>이제 mac 의 모든 소리를 sound server 로 전송할 차례만 남았다. 간단한 shell script 하나 작성해두고 두고두고 사용하자.</p>
<p>* ~/bin/send_sound_to_esound_server.sh</p>
<pre class="lang:vim decode:true">#!/bin/sh

SOUND_SERVER="192.168.0.101"

esd -tcp -bind ::1 &amp;
sleep 2;
esdrec -s ::1 | esdcat -s ${SOUND_SERVER}
</pre>
<h3></h3>
<h3>Streaming music server</h3>
<h4>1. install <a href="http://en.wikipedia.org/wiki/Subsonic_(media_server)">subsonic</a></h4>
<p>subsonic 공식페이지의 <a href="http://www.subsonic.org/pages/installation.jsp#debian" target="_blank" rel="noopener">설치 가이드</a>를 참고하여 설치한다.</p>
<h4>2. configuration</h4>
<p>* /etc/default/subsonic</p>
<pre class="lang:vim decode:true"># tomcat의 context path 설정
#
# 아래 context-path 는 service URL 이 http(s)://hostname/subsonic 이라고 가정했을 때의 예이다.
# 만약 service URL 을 http(s)://hostname 으로 하고 싶다면, context-path=/ 로 설정하면 된다.
SUBSONIC_ARGS="--max-memory=128 --context-path=/subsonic"
# subsonic process 의 owner,group 설정
#
# audio files 에 접근 할 수 권한으로 process 를 실행해야 한다.
SUBSONIC_USER=share
</pre>
<p>* /etc/nginx/nginx.conf</p>
<p>nginx 에 연동하지 않고 직접 http://hostname:4040/subsonic 으로도 접근이 가능하다.</p>
<pre class="lang:vim decode:true ">...
# subsonic default running port number 는 4040 이다.
# /var/subsonic/subsonic.properties 에서 변경 가능하다.
location /subsonic {
    proxy_pass    http://localhost:4040/subsonic;
}
...</pre>
<p>* start subsonic &amp; restart nginx</p>
<pre class="lang:sh decode:true">sudo service subsonic start
sudo service nginx restart
</pre>
<p>* add audio file paths</p>
<p>http(s)://hostname/subsonic 에 접속하여 admin 권한을 가지는 계정을 생성한다.</p>
<p>그리고나서 admin 계정으로 로그인하여 &#8220;Settings &gt; Media folders&#8221; tab 에서 audio files 이 있는 directory 를 추가한다.</p>
<p><a href="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/ss_subsonic_media_folders.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-302" src="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/ss_subsonic_media_folders.png" alt="ss_subsonic_media_folders" width="718" height="272" srcset="https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_subsonic_media_folders.png 718w, https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_subsonic_media_folders-300x114.png 300w" sizes="auto, (max-width: 718px) 100vw, 718px" /></a></p>
<h4>3. add client</h4>
<p>subsonic 은 많은 device 를 지원한다. 자신의 device 에 맞는 app 을 설치하고나서 subsonic server 를 추가하면 audio files 를 재생할 수 있다.</p>
<p>* iSub (iphone app)</p>
<p>iSub 는 cache (pre downloading) 기능이 있어, off line mode 에서도 음악을 들을 수 있다.</p>
<p><a href="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/ss_isub.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-307" src="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/ss_isub.png" alt="ss_isub" width="843" height="500" srcset="https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_isub.png 843w, https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_isub-300x178.png 300w, https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_isub-768x456.png 768w" sizes="auto, (max-width: 843px) 100vw, 843px" /></a></p>
<h3></h3>
<h3>Jukebox</h3>
<h4>1. install <a href="http://en.wikipedia.org/wiki/Music_Player_Daemon">mpd</a></h4>
<pre class="lang:sh decode:true">sudo apt-get install mpd
</pre>
<h4>2. configuration</h4>
<p>* /etc/mpd.conf</p>
<pre class="lang:vim decode:true"># audio files path
music_directory "/mnt/share/media/music"
playlist_directory "/var/lib/mpd/playlists"
# audio files 에 접근 권한이 있는 group 을 지정한다.
group "audio"
# NIC 에 bind 할 address 를 지정한다.
bind_to_address "localhost"
bind_to_address "192.168.0.101"
port "6600"
follow_outside_symlinks "yes"
follow_inside_symlinks "yes"
# audio output 지정
# cf. 음질을 위해서는 alsa 에 직접 붙히는것을 추천함
audio_output {
    type "pulse"
    name "MPD"
}
</pre>
<p>* pulseaudio-access group 에 mpd 추가</p>
<pre class="lang:sh decode:true">sudo usermod -a -G pulse-access mpd
</pre>
<p>* start mpd</p>
<pre class="lang:sh decode:true ">sudo service mpd start
</pre>
<h4>3. add client</h4>
<p>mpd 도 많은 device 를 지원한다. <a title="mpd clients" href="http://mpd.wikia.com/wiki/Clients">mpd clients</a> 를 보고 자신의 구미에 맞는 것을 고르자.</p>
<p>* MPoD (iphone app)</p>
<p><a href="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/ss_mpod.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-316" src="http://192.168.1.101/wordpress/wp-content/uploads/2014/10/ss_mpod.png" alt="ss_mpod" width="843" height="500" srcset="https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_mpod.png 843w, https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_mpod-300x178.png 300w, https://blog.wonderwall.me/wp-content/uploads/2014/10/ss_mpod-768x456.png 768w" sizes="auto, (max-width: 843px) 100vw, 843px" /></a></p>
<p>&nbsp;</p>
<p>The post <a rel="nofollow" href="https://blog.wonderwall.me/2014/10/14/setup-sound-server/">Setup network streaming player (네트워크 스트리밍 플레이어)</a> appeared first on <a rel="nofollow" href="https://blog.wonderwall.me">WonderWall</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.wonderwall.me/2014/10/14/setup-sound-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>HowTo : collectd 설치하기</title>
		<link>https://blog.wonderwall.me/2010/12/27/how-to-install-collectd/</link>
					<comments>https://blog.wonderwall.me/2010/12/27/how-to-install-collectd/#respond</comments>
		
		<dc:creator><![CDATA[april1024]]></dc:creator>
		<pubDate>Sun, 26 Dec 2010 16:14:53 +0000</pubDate>
				<category><![CDATA[HowTo]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[collectd]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">http://blog.wonderwall.me/?p=121</guid>

					<description><![CDATA[<p>가볍고 사용하기 쉬운 network monitoring system &#8220;collectd&#8221; Background 평소 SNMP(Simple Network Management Protocol)와 MRTG(Multi Router Traffic Grapher)를 이용하여 System Resource Monitoring을 해왔으나, 지표 추가하는데 MRTG 설정 파일 수정이 복잡하고, 귀찮아서 좀 더 편하게 System Monitoring을 하고자 자료 좀 찾아봤다. Network monitoring tool에 대한 위키페이지를 보던 중 회사, 해외 *nix community에서 종종 접해 눈에 익숙한 collectd를 &#8230; </p>
<p class="link-more"><a href="https://blog.wonderwall.me/2010/12/27/how-to-install-collectd/" class="more-link">Continue reading<span class="screen-reader-text"> "HowTo : collectd 설치하기"</span></a></p>
<p>The post <a rel="nofollow" href="https://blog.wonderwall.me/2010/12/27/how-to-install-collectd/">HowTo : collectd 설치하기</a> appeared first on <a rel="nofollow" href="https://blog.wonderwall.me">WonderWall</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="http://192.168.1.101/wordpress/wp-content/uploads/2010/12/Logo_collectd.png" alt="collectd logo" /></p>
<h2>가볍고 사용하기 쉬운 network monitoring system &#8220;collectd&#8221;</h2>
<h3>Background</h3>
<p>평소 <a href="http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol">SNMP(Simple Network Management Protocol)</a>와 <a href="http://en.wikipedia.org/wiki/Multi_Router_Traffic_Grapher">MRTG(Multi Router Traffic Grapher)</a>를 이용하여 System Resource Monitoring을 해왔으나, 지표 추가하는데 MRTG 설정 파일 수정이 복잡하고, 귀찮아서 좀 더 편하게 System Monitoring을 하고자 자료 좀 찾아봤다. <a href="http://en.wikipedia.org/wiki/Comparison_of_network_monitoring_systems">Network monitoring tool에 대한 위키페이지</a>를 보던 중 회사, 해외 *nix community에서 종종 접해 눈에 익숙한 <a href="http://collectd.org">collectd</a>를 선택했다.</p>
<h3>What is collectd?</h3>
<p>collectd는 한 host의 system resources data를 수집하고 central host로 data를 전송하는 daemon이다. 특별한 기능이 있지는 않지만 풍부한 Plug-in이 많으며 설치/설정이 간단한 것이 특징이다. 지속적인 서버 유지보수를 위해서 간단한 설정이 요구된다고 말 하는 것은 말하는 내 입만 아프게 할 뿐이다. collectd 공식 홈페이지에서 설명하는 <a href="http://collectd.org/features.shtml">major feature</a>들을 살펴보자.</p>
<p>* Modularity / Portability<br />
POSIX 준수는 기본이다. 장점이라기 보다는 오히려 지키지 않는 것이 문제 있는 것 아닌가?</p>
<p>* Reasonable defaults<br />
대부분의 plug-in 설정을 수정하지 않고 사용할 수 있다. Ubuntu Server(10.10)의 경우 apt-get으로 collectd를 설치하면 별도 설정 수정없이 11개(cpu, df, disk, entropy, interface, irq, load, memory, processes, swap, users)지표를 볼 수 있다. 배포판 마다 enabled plug-in 수는 다르다. CentOS의 경우 4개(cpu, interface, load, memory) plug-in이 enable 되어 있다.</p>
<p>* High-resolution statistics<br />
C language로 implementation되어 server에 부담이 없기 때문에 10초 단위로 system resources data를 수집한다. 혹시라도 service에 지장을 줄 수 있으니 적용하는 서버에 맞게 interval을 조정하는 것을 추천한다.</p>
<p>* Sophisticated network code<br />
unicast, multicast, proxy는 기본이며 encrypted data transfer까지 지원한다. router의 &#8220;accept multicast&#8221; option을 enable 시키고 collectd data transfer 설정을 multicast로 해두면 Server가 증설 될 때 보다 설정이 간편해 진다.</p>
<p>* Custom extensions<br />
collectd의 기본 plug-in에 없는 metric을 수집하기 위해 충분한 Custom extension을 제공한다. C, Perl, Python, Java, Execute binaries or scripts extension으로 못 하는 것이 있을까?</p>
<p>* Build to scale<br />
가벼운 daemon, 가벼운 udp datagram, multicast 지원으로 scalability도 괜찮을 것 같다.</p>
<p>* SNMP support<br />
위에 언급한 Custom extension으로 수집할 수 있는 data를 별도의 SNMP Plug-in을 지원함으로써 보다 간단한 설정으로 SNMP query result를 수집 할 수 있다.</p>
<p>* Integration with monitoring solutions<br />
collectd 는 monitoring solution이 아니기 때문에 현재 monitoring system feature가 없다고 하면서 sophisticated monitoring solution을 발견하면 collectd와 통합할 계획이라고 한다.</p>
<h3>Environment Setup</h3>
<h4>network diagram</h4>
<p><img decoding="async" src="http://192.168.1.101/wordpress/wp-content/uploads/2010/12/122610_1614_Howtoinstal1.png" alt="" /></p>
<h4>machine information</h4>
<p>[table id=1 /]</p>
<h3>Installation</h3>
<h4>CentOS(5.5) guide</h4>
<p>* Enable EPEL (Extra Packages for Enterprise Linux) Repository<br />
CentOS-5의 Base, Extras repository에는 collectd package가 없기 때문에 EPEL repository를 enable 해야 한다.</p>
<pre class="lang:sh decode:true">rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
</pre>
<p>* install yum-priorities<br />
대부분의 system administrator들이 CentOS를 선택한 이유는 stable version package를 사용하기 위해서다. EPEL를 enable하고 나서 &#8220;yum update&#8221;를 하면 EPEL의 package 들이 기존 package들을 overwrite하기 때문에 system을 망칠 수 있다. 그래서 CentOS base repository를 보호하기 위해서 yum-protectbase package를 설치하면 해결되지만, 필자는 repository의 priority를 1부터 99까지 세세하게 설정할 수 있는(more fine-grained repository ordering) yum-priorities를 설치하였다. 왜냐하면 필자의 개발 서버에는 3rd party repositories를 enable하여 여러 repository간의 priority를 정해야 하기 때문이다.</p>
<pre class="lang:sh decode:true">yum install yum-priorities
</pre>
<p>자세한 내용은 <a href="http://wiki.centos.org/PackageManagement">공식 CentOS package management wiki page</a>를 참고하기 바란다.</p>
<p>위 설정이 귀찮아 혹시라도 shell alias의 yum command에 &#8220;&#8211;disablerepo=epel&#8221; option을 추가하여 간단히 해결하고자 한다면 필자는 적극 말리고 싶다. 운영중인 server에 다른 sysadmin이 default shell이 아닌 다른 shell로 &#8220;yum update&#8221;를 실행 할 수도 있으며, 언제 3rd party repository를 enable할지 모르기 때문이다.</p>
<p>* install collectd</p>
<pre class="lang:sh decode:true">yum install collectd-*
</pre>
<p>* Hostname 설정<br />
/etc/collectd.conf file을 열어 server hostname과 동일하게 맞춘다.</p>
<pre class="lang:vim decode:true">Hostname    "server01.svc"
</pre>
<p>* rrd DataDir path 설정<br />
default save DataDir은 &#8220;/var/lib/collectd&#8221; 로 되어 있지만, rrd도 하나의 plug-in이기 때문에 &#8220;/var/lib/collectd/rrd&#8221;로 설정을 하였다.<br />
/etc/collectd.conf file을 열어 rrdtool plug-in 설정을 아래와 같이 설정한다.</p>
<pre class="lang:vim decode:true">#   DataDir "/usr/var/lib/collectd/rrd"
    DataDir "/var/lib/collectd/rrd"
#   CacheTimeout 120
#   CacheFlush   900

</pre>
<p>CGI script의 default read DataDir도 &#8220;/var/lib/collectd&#8221;로 되어 있기 때문에 위에서 설정한 동일한 경로로 수정한다.<br />
/etc/collection.conf file을 열어 아래와 같이 수정한다.</p>
<pre class="lang:vim decode:true">DataDir "/var/lib/collectd/rrd/"
</pre>
<p>* start collectd</p>
<pre class="lang:sh decode:true">/etc/init.d/collectd start
</pre>
<p>rrd file이 정상적으로 쌓이고 있는지 확인하자.</p>
<pre class="lang:sh decode:true">ls /var/lib/collectd/rrd/server01.svc
</pre>
<p>* extract RRD data in a graphical format<br />
엄밀히 말해서 collectd의 R&amp;R은 rrdtool plug-in을 이용하여 rrd file을 생성하는 것이지만, 친절하게도(?) perl CGI script를 제공하고 있다. 따라서 외부에서 접근 못 하도록 ACL만 수정하면 된다.</p>
<p>/etc/httpd/conf.d/collectd.conf file을 열어서 private network에서만 접근 가능하도록 ACL 을 수정한다.</p>
<pre class="lang:vim decode:true">    AddHandler cgi-script .cgi
    DirectoryIndex bin/index.cgi
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from 192.168.0.0/24

</pre>
<p>자 이제 웹 브라우저 주소창에 아래 주소를 입력하면 collectd가 쌓아놓은 데이터를 그래프로 볼 수 있다.</p>
<p><a href="http://192.168.0.101/collectd/">http://192.168.0.101/collectd/</a></p>
<h4>Ubuntu(10.10) guide</h4>
<p>* install collectd</p>
<pre class="lang:sh decode:true">sudo apt-get install collectd
</pre>
<p>* Hostname 설정<br />
/etc/collectd/collectd.conf file을 열어 server hostname과 동일하게 맞춘다.</p>
<pre class="lang:vim decode:true">Hostname    "server01.box"
</pre>
<p>* disable rrdtool plug-in (option)<br />
server01.box 에서는 rrd file을 남기지 않고 network를 통해 server01.svc로 전송 할 예정이므로 rrdtool plug-in 을 disable 하여 불필요한 리소스(CPU, Disk) 사용을 줄이는 것이 좋겠다.<br />
/etc/collectd/collectd.conf file을 열어 &#8220;LoadPlugin rrdtool&#8221; 라인을 주석처리한다.</p>
<pre class="lang:vim decode:true">#LoadPlugin rrdtool
</pre>
<p>* start collectd</p>
<pre class="lang:sh decode:true">sudo /etc/init.d/collectd start
</pre>
<h3>Centralize Data</h3>
<p>collectd는 UDP를 이용하여 data를 전송한다. 간단하게 unicast 방식으로 설정할 수 있으며, switch 장비가 multicast stream을 지원한다면 multicast 방식을 사용하는 것이 more sustainable 하다고 생각한다. 왜냐하면 data를 집중화하는 server 를 옮길 때 unicast 방식은 다른 서버들의 설정 수정이 불가피하기 때문이다. 물론 내부 DNS server를 운영하여 앞서말한 문제를 해결 할 수도 있지만, multicast 가 가진 장점을 이용한다면 좀 더 유연하게 문제들을 대처할 수 있으리라 생각한다.</p>
<h4>unicast</h4>
<p>* server01.svc<br />
/etc/collectd.conf file을 열어 NIC address를 Listen에 등록한다.</p>
<pre class="lang:vim decode:true">LoadPlugin network

Listen "192.168.0.101" "25826"
</pre>
<p>* server0[1-4].box<br />
/etc/collectd/collectd.conf file을 열어 전송하고자 하는 server address를 등록한다.</p>
<pre class="lang:vim decode:true">LoadPlugin network

Server "192.168.0.101" "25826"</pre>
<h4>multicast</h4>
<p>* server01.svc<br />
/etc/collectd.conf file을 열어 Multicast Group Address를 Listen에 등록한다.</p>
<pre class="lang:vim decode:true">LoadPlugin network

Listen "239.192.74.66" "25826"</pre>
<p>* server0[1-4].box<br />
/etc/collectd/collectd.conf file을 열어 Multicast Group Address를 Server에 등록한다.</p>
<pre class="lang:vim decode:true">LoadPlugin network

Server "239.192.74.66" "25826"</pre>
<p>* enable multicast<br />
대부분의 switch, router 장비는 multicast disabled 되어 있을 것이다. 필자는 web으로 router(DIR-615)에 접속하여 enable multicast stream 을 체크하였다.</p>
<p><img decoding="async" src="http://192.168.1.101/wordpress/wp-content/uploads/2010/12/122610_1614_Howtoinstal2.png" alt="" /></p>
<p>multicast address(239.192.74.66)가 router 장비에 등록 되어있음을 확인 할 수 있다.</p>
<p><img decoding="async" src="http://192.168.1.101/wordpress/wp-content/uploads/2010/12/122610_1614_Howtoinstal3.png" alt="" /></p>
<p><img decoding="async" src="http://192.168.1.101/wordpress/wp-content/uploads/2010/12/122610_1614_Howtoinstal4.png" alt="" /></p>
<h3>Plug-in Configuration</h3>
<p><a href="http://collectd.org/documentation.shtml">collectd plug-in</a> 페이지를 참고하여 몇가지 plug-in을 등록해 보았다. 다시 한번 말하지만 간단한 설정파일 수정으로 짧은 시간 내에 여러 가지 지표를 볼 수 있는 것이 collectd의 가장 큰 매력이다.</p>
<p>* logfile<br />
default로 syslog plug-in이 enable되어 있어 /var/log/messages 에서 collectd의 log를 확인 할 수 있다. 하지만 다른 facility들과 섞여 있어 가독성이 좋지 않아서 별도 파일로 기록했다.</p>
<pre class="lang:vim decode:true">LoadPlugin logfile

LogLevel "info"
File "/var/log/collectd.log"
Timestamp true</pre>
<p>* apache<br />
apache 지표를 보려면 apache status module을 load하고 적절히 ACL을 수정해야 한다. 자세한 설정은 <a href="http://httpd.apache.org/docs/2.2/mod/mod_status.html">apache module mod_status document</a>를 참고하기 바란다.</p>
<pre class="lang:vim decode:true ">LoadPlugin apache

URL http://localhost/server-status?auto</pre>
<p>* cpu (default)</p>
<p>* df<br />
shell에 &#8220;df -T&#8221;를 입력하여 device와 filesystem을 확인하고 그대로 등록을 해주면 된다.</p>
<pre class="lang:vim decode:true">LoadPlugin df

Device "/dev/mapper/VolGroup00-LogVol00"
FSType "ext3"
IgnoreSelected false
ReportByDevice true
ReportReserved false
ReportInodes false</pre>
<p>* disk<br />
/proc/diskstats (Linux 2.6) or /proc/partitions (Linux 2.4)를 참고하여 perl regular expression으로 등록을 해주면 된다. (대부분의 경우 아래 주석처리한 첫 번째 라인으로 등록 가능함)</p>
<pre class="lang:vim decode:true">LoadPlugin disk

#Disk "/^[hs]d[a-f][0-9]?$/"
Disk "/^sd[a-f][0-9]?$/"
Disk "/^dm-[0-9]?$/"
IgnoreSelected false</pre>
<p>* interface (default)</p>
<p>* irq<br />
모든 irq number를 보기위해 아래와 같이 설정하였다.</p>
<pre class="lang:vim decode:true">LoadPlugin irq

IgnoreSelected true</pre>
<p>* load (default)</p>
<p>* memory (default)</p>
<p>* mysql<br />
localhost에서만 접근 가능한 monitor 전용 계정을 추가하였다.</p>
<pre class="lang:vim decode:true">LoadPlugin mysql

Host "localhost"
User "monitor"
Password ""
Database ""
# Specifies the path to the UNIX domain socket of the MySQL server. This option only has any effect, if Host is set to localhost (the default).
# Otherwise, use the Port option above. See the documentation for the mysql_real_connect function for details.
Socket "/var/lib/mysql/mysql.sock"
MasterStats true
#SlaveStats true
#SlaveNotifications true
</pre>
<p>* ntpd</p>
<pre class="lang:vim decode:true">LoadPlugin ntpd

Host "localhost"
Port 123
ReverseLookups false</pre>
<p>* rrdtool <strong>(enable cache)</strong><br />
default로 collectd는 10초 주기로 rrd file을 update한다. 그런데 rrd file을 update하는데 load가 적잖게 걸린다고 하니 data를 memory에 임시로 저장해놨다가 한꺼번에 rrd files에 update 하는 것이 좋겠다. 단, 그만큼 rrd file이 늦게 update되기 때문에 실시간성이 떨어진다.</p>
<pre class="lang:vim decode:true">LoadPlugin rrdtool

DataDir "/var/lib/collectd/rrd"
# The trade off is that the graphs kind of "drag behind" and that more memory is used
CacheTimeout 120 # interval for rrd files to be updated
# If some RRD-file is not updated anymore for some reason (the computer was shut down, the network is broken, etc.) some values may still be in the cache.
# If CacheFlush is set, then the entire cache is searched for entries older than CacheTimeout seconds and written to disk every Seconds seconds
CacheFlush   900</pre>
<p>* tcpconns</p>
<pre class="lang:vim decode:true">LoadPlugin tcpconns

ListeningPorts false
LocalPort "22"
LocalPort "80"
LocalPort "3306"</pre>
<p>* uptime<br />
별도 설정 필요 없음</p>
<p>* vmem</p>
<pre class="lang:vim decode:true">LoadPlugin vmem

Verbose false</pre>
<h3>Pros and Cons</h3>
<h3>Trouble Shooting</h3>
<p>* client가 network를 통해 전송한 data가 rrd file로 기록은 되는데 web page에서 보이지 않는다.<br />
우선 정상적으로 rrd file에 기록이 되는지 확인하기 위해 rrdtool dump 를 이용하여 눈으로 직접 데이터 값을 확인한다. 확인 해야 할 항목 : date, value</p>
<p>The post <a rel="nofollow" href="https://blog.wonderwall.me/2010/12/27/how-to-install-collectd/">HowTo : collectd 설치하기</a> appeared first on <a rel="nofollow" href="https://blog.wonderwall.me">WonderWall</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.wonderwall.me/2010/12/27/how-to-install-collectd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
