ติดตั้ง munin บน CentOS+DA แบบง่าย

เริ่มด้วยติดตั้ง munin และ munin-node โดยใช้ yum แต่ว่า พอสั่ง yum แล้วบอกไม่รู้จัก เราก็ต้องไปหา yum-repo ที่มี munin มาใส่ก่อน

สร้างไฟล์ /etc/yum.repos.d/dag.repo โดยมีเนื้อหาดังนี้



[dag]

name=Dag RPM Repository for Red Hat Enterprise Linux

baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag

gpgcheck=1

gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

enabled=0


เสร็จแล้วก็ทำการติดตั้ง munin ผ่าน yum โดยใช้ repo dag ที่เราเพิ่มไปได้เลย



yum --enablerepo=dag -y install munin munin-node


ถึงตรงนี้ก็เป็นอันติดตั้ง munin กับ munin-node ด้วย yum เป็นที่เรียบร้อย ไฟล์ก็จะไปอยู่ใน folder ต่างๆ เช่น /etc/munin ซึ่งเราไม่ต้องไปยุ่งกันมันในตอนนี้

และมันได้เพิ่ม cron ที่เรียก munin ทุกๆ 5 นาทีให้อัตโนมัติใน /etc/cron.d/munin เรียบร้อย เราก็ไม่ต้องไปสร้าง cron อะไรเพิ่มเอง แต่มันดันส่งเมล์มาให้ root ทำให้มีเมล์ส่งหา root ทุก 5 นาที

แก้ไขไฟล์ /etc/cron.d/munin ให้เหลือแค่บรรทัดเดียวตามนี้ จะได้ไม่ต้องมีเมล์ส่งมาทุก 5 นาที



*/5 * * * * 	munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron > /dev/null 2>&1


สิ่งที่ยังขาดในตอนนี้ก็คือตัว munin-node ยังไม่ทำงาน เราก็สั่งให้ทำงานซะ



/etc/init.d/munin-node start


และเพื่อให้มันทำงานทุกครั้งที่เรา reboot เครื่อง ก็สั่ง



chkconfig munin-node on


เพียงเท่านี้ระบบ munin ก็จะทำงานเป็นที่เรียบร้อย โดยไฟล์จะอยู่ใน /var/www/munin

สิ่งที่ต้องทำต่อไปก็คือการให้เรียกเปิดไฟล์กราฟจากหน้าเว็บได้ how-to ที่เจอในเว็บส่วนมากจะใช้วิธีสร้าง link จาก /var/www/html มาที่ /var/www/munin แล้วไปสร้าง alias ใน apache อีกที ซึ่งผมมองว่ายุ่งยากและวุ่นวายเปล่าๆ

เราก็แค่ย้าย html folder ของ munin ไปไว้ใน /var/www/html/ ซึ่งเป็น default folder ของ apache ในระบบ DA ซะเลย เวลาเปิดดูก็เรียกผ่านทาง http://ip/munin ได้เลย

*** แบบ1

ย้าย folder munin ไปไว้ใน /var/www/html ด้วยคำสั่ง



mv /var/www/munin /var/www/html/


และทำการแก้ไข htmldir ในไฟล์ /etc/munin/munin.conf มาที่ /var/www/html/munin เพื่อให้ munin เขียนไฟล์ได้ถูกที่ เพียงเท่านี้ก็เป็นอันเรียบร้อย โดยไม่ต้องไปยุ่งกับ config ของ apache เลยแม้แต่น้อย



htmldir  /var/www/html/munin


แก้ permission ของ /var/www ให้ munin สามารถผ่านเข้าไปเขียนไฟล์ได้



chmod o+x /var/www


ปล. ถ้าเป็นระบบอื่นก็แค่ดูว่า document root ของ apache หรือ webserver ที่เราติดตั้งไว้ อยู่ที่ folder ใหน ก็ย้ายไปไว้ในนั้น โดยอาจจะเปลี่ยนชื่อ munin เป็นชื่ออื่นๆ เพื่อป้องกันไม่ให้คนอื่นเข้าได้ถูก เช่น munin-123 เป็นต้น

*** แบบ2

แก้ apache ให้เรียก munin ที่ /var/www/munin ตามนี้

สร้าง link เพื่อให้เรียก http://ip/munin แล้วระบบไปไล่หาจาก document root แล้วตาม link ไปที่ /var/www/munin



ln -s /var/www/munin /var/www/html/munin


กรณีที่เข้า http://ip/munin แล้วติดปัญหา 403 Forbidden ให้ แก้ไขไฟล์ /etc/httpd/conf/extra/httpd-directories-new.conf (ถ้าไม่มีไฟล์นี้ให้แก้ใน /etc/httpd/conf/httpd.conf เลย) ตามนี้

แก้ไขจาก

<Directory /var/www/html>

	Options [color="#FF0000"]SymLinksIfOwnerMatch[/color]

	AllowOverride AuthConfig FileInfo Indexes Limit Options=Includes,IncludesNOEXEC,Indexes,ExecCGI,MultiViews,[color="#FF0000"]SymLinksIfOwnerMatch[/color],None

แก้เป็น

<Directory /var/www/html>

	Options [color="#008000"]FollowSymlinks[/color]

	AllowOverride AuthConfig FileInfo Indexes Limit Options=Includes,IncludesNOEXEC,Indexes,ExecCGI,[color="#008000"]MultiViews,None[/color]

หรือแก้เป็น

<Directory “/var/www/html”>

Options [color="#008000"]FollowSymLinks[/color]

AllowOverride [color="#008000"]All[/color]

*** DA เขาก็อุตสาห์แก้ไข template เปลี่ยนจาก FollowSymlinks มาเป็น SymLinksIfOwnerMatch เพื่อเพิ่มความปลอดภัยแล้ว เราจะไปแก้มันกลับมาทำไม ก็ใช้วิธีตาม แบบที่ 1 เอา munin ไปไว้ใน /var/www/html ซะก็สิ้นเรื่อง ไม่ต้องไปวุ่นวายกับ config ของ apache แม้แต่น้อย

ถ้าเป็น DA วิธีย้าย

/var/www/munin เข้าไป /var/www/html จะไม่work

เพราะว่า owner ของ /var/www/html จะเป็น root.root จะทำให้ munin เข้าไปเขียนไฟล์ไม่ได้

เขียนได้ครับ เพราะว่า owner ของ folder munin ก็ยังเป็น munin อยู่อย่างเดิม

how-to เขียนจากการทดลองติดตั้งจริงครับ

ในทางกลับกัน การไป alias ให้ apache มาเข้า munin ที่ /var/www/munin จะติดปัญหาเรื่อง FollowSymLink หรือ SymLinkIfOwnerMatch ต้องไปแก้ไข config ของ Apache กับเพิ่ม Alias ถ้าคนทำเป็นก็ไม่ใช่เรื่องยากครับ

ผมก็ใช้วิธีย้ายมาตลอดนะครับ munin ก็เขียนไฟล์ได้ตลอด

เข้าไปใช้ Alias ของ Apache จะดีมั้ย #/etc/httpd/conf/extra/httpd-alias.conf

เพิ่ม Munin เข้าไป Alias /munin “/var/www/munin/”

และสั่งให้ #crontab -e ทำงาน */5 * * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron

ของผมทำงานได้อยู่ที่นี่ครับ http://122.155.165.130/munin

ถ้าทำแค่นี้แล้วเข้าได้ คงแนะนำไปแล้ว มันไม่ได้จบแค่นี้ครับ ยังขาดอีก

การเพิ่ม alias แบบนั้น จะเข้าได้จากทุกโดเมนในเครื่องตามด้วย /munin

และถ้าเป็น DA ที่ลงใหม่ จะติดเรื่อง permission SymLinksIfOwnerMatch ที่ทำให้เข้าไม่ได้ติด 403 Forbidden กัน

ส่วน DA รุ่นก่อนๆจะใช้ Options FollowSymlinks ทำให้เข้าได้ไม่มีปัญหา

เอ แต่ผมลงหลายเครื่องแล้วไม่ได้ครับ

เมื่อกี๊เพิ่งลองกับ VPS Centos 5 & 6 ไปทั้งสองตัว

ลง DA ใหม่ พร้อม Munin

/var/www มี owner และ permission ดังนี้

dr-xr-x---.  9 webapps apache 4096 Mar 17 00:43 www

/var/www/html มี owner และ permission ดังนี้

drwxr-xr-x.  6 root root  4096 Mar 17 01:34 html

/var/www/html/munin มี owner และ permission ดังนี้

drwxr-xr-x   5 munin   munin   4096 Mar 17 01:35 munin

พอลองสั่งให้ munin ทำงาน มี error แจ้งเรื่อง permission

[root@ns1 html]# sudo -u munin /usr/bin/munin-cron

cp: accessing `/var/www/html/munin/': Permission denied

[ERROR] Could not copy style.css from /etc/munin/templates/ to /var/www/html/munin

มัน ทะลุเข้า /var/www เข้ามาไม่ได้ เนื่องจากติด permission ที่ระบุ

owner = webapps

group = apache

และกำหนด mode = 550

เพิ่มเติม

munin ของผมถูกสั่งให้ run ด้วย user munin เลยทำให้ไม่สามารถ write เข้าไปข้างใน /var/www/html/munin ได้

เนื่องจากติด permission ของ /var/www/html ครับ

[root@ns1 html]# cat /etc/cron.d/munin 

#

# cron-jobs for munin

#



MAILTO=root



*/5 * * * * 	munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron


อีกเรื่องคือ DA ที่ติดตั้งใหม่ตั้งแต่เดือนมีนาปีนี้ขึ้นไป จะไม่สามารถแก้แบบวิธีที่ 2 ที่คุณแมนบอกได้ เนื่องจาก

SymLinksIfOwnerMatch จะถูก patch เข้าไปใน Apache และใช้แทน FollowSymlinks

กล่าวคือ ไม่ว่าจะ set config เป็น FollowSymlinks หรือ SymLinksIfOwnerMatch ก็จะถูกบังคับให้เป็น SymLinksIfOwnerMatch อยู่ดี

อ้างอิง

http://help.directadmin.com/item.php?id=421

โดยถ้าลง DA ใหม่ตอนนี้จะได้ค่า config ของ custombuild เป็น

secure_htaccess=no

harden-symlinks-patch=yes

และไฟล์ /etc/httpd/conf/extra/httpd-directories-old.conf จะถูกสร้าง link เป็น /etc/httpd/conf/extra/httpd-directories.conf

โดยไม่มีการเรียกใช้ /etc/httpd/conf/extra/httpd-directories-new.conf แต่อย่างใด

วิธีการดูว่า DA ของคุณถูก patch SymLinksIfOwnerMatch ใน Apache หรือเปล่า ให้ดูที่ไฟล์ /usr/local/directadmin/custombuild/options.conf

ถ้าเจอ harden-symlinks-patch=yes แสดงว่า Apache ของคุณถูก patch ไปแล้ว

ทำแบบนี้จะทำให้ virtualhost ทุกโดเมนในเครื่องเข้า /munin ได้

หากลูกค้าต้องการสร้าง /munin ของตัวเอง ชื่อจะซ้ำกันกับ /munin ที่เป็น global ของ server

จะทำให้ไม่สามารถแสดงข้อมูล /munin ของโดเมนนั้นๆ ได้ครับ

ถ้าเป็น DA เก่าๆ จะทำได้ครับ

แต่ถ้าเป็น DA ใหม่ ที่ลงแบบใช้ custombuild หลัง 15/2/2011 ไปแล้ว จะไมสามารถ ย้ายได้ เพราะ munin-cron จะไม่สามารถเขียนไฟล์ได้

เนื่องจาก ติด permission ของ folder /var/www

ถ้าดูในไฟล์ custombuild.sh ที่ถูกเรียกตอนลง DA จะเจอบรรทัดนี้

#added Feb 15, 2011

#secure /var/www

chown webapps:apache /var/www

chmod 550 /var/www

munin-cron จะถูก run โดย user munin ดังนั้นจึงไม่สามารถ access เข้าไปใน folder /var/www ที่มี mode = 550 ได้ครับ

ตามนั้นครับ ถ้าติดตั้งใหม่ จะติด permission ของ /var/www ซึ่งก็แปลว่า ต่อให้เอา munin ไว้ที่ /var/www/munin มันก็ไม่สามารถ update ไฟล์ได้เช่นกัน เพราะติด permission ตั้้งแต่ /var/www แล้ว

วิธีแก้ก็ง่ายๆครับ chmod 551 /var/www ซะแค่นี้ munin ก็เข้าไปเขียนไฟล์ได้แล้ว

ซึ่งถ้า DA แบบใหม่มัน compile apache แบบบังคับใช้ SymlinkIfOwnerMatch ก็แปลว่าจะทำตามแบบที่ 2 ไม่ได้ ก็คงต้องทำตามแบบที่ 1 เพียงแค่ต้องแก้ permission ของ /var/www ให้ munin ทะลุเข้าไปได้

ตรวจสอบแล้วผมเจอ harden-symlinks-patch=yes แสดงว่า Apache ของผมถูก patch ไปแล้ว แน่นอน

คือตอนนี้ปัญหาผม ไม่ได้อยู่ที่ตรง 403,404แล้วนะครับ หลังจากการแก้ไขล่าสุดที่บอกไปคือ

chown -R apache:munin /var/www/munin

apache คือ userที่ ปรากฎใน etc/httpd/conf/httpd.conf

มันทำให้ผมเข้า http://ip/munin ได้และ มันก็คงได้permission ในการเขียน var/www/munin/ ด้วย

เพราะวันที่ของไฟล์ต่างๆในนั้น มีการเปลี่ยนแปลงตลอด เพียงแต่ปัญหาของผมตอนนี้คือ มันไม่มีการplotกราฟต่อครับ

เหมือนไม่มีข้อมูลมาให้มัน plot ไม่ทราบเป็นที่อะไรได้บ้างครับ ผมอาจจะไปแก้ config อะไรจนผิดรึเปล่า?

รายงานผลครับ

ผมลอง remove munin แล้วลงใหม่หมด step by step ตามด้านบน และใช้วิธีแบบที่ 1 แล้วนะครับ

แล้วตามด้วย chmod 551 /var/www

ผลคือ เข้า http://ip/munin ได้และเขียน var/www/munin/ ได้ด้วย

แต่ว่าเครื่องผมมันไม่มีการplotกราฟให้อะครับ ไม่ทราบว่าเผลอไป set อะไรผิดรึเปล่า(แต่ip/server-status ทำงานได้ปกตินะครับ)

สรุปคือผลลัพท์เหมือนเดิมกับตอนใช้คำสั่ง chown -R apache:munin /var/www/munin ครับ

นี่คือรูปที่เกิดขึ้นเมื่อสักครู่ครับ(ประมาณตี5ครึ่ง)

ช่วยหน่อยครับ ผมเสียเวลากับมันมาหลายวันแล้ว งงจริงๆ

เปิดรูปโดยตรงได้ไหมครับ

http://ip/munin/localhost-swap-day.png

ไม่ plot graph ทั้งหมดเลยหรือเปล่า

ถ้าใช่ ให้ลองตรวจดู service munin-node ว่าทำงานอยู่หรือเปล่า

รูปโดยตรงเปิดดูได้ครับ แต่ก็เป็นกราฟเปล่าๆ

url มี localhost ด้วยครับ

http:// ip/munin/localhost/localhost-swap-day.png

ไม่ plot ทั้งหมดเลยครับ มีแต่graph เปล่าๆ

ตรวจดู service munin-node ยังไงครับ?

ผมลองใช้คำสั่ง service munin-node start แล้วมันขึ้น

แต่ graphก็ยังไม่plotอยู่ดี

สงสัยผมคงไปแก้อะไรผิดจุดเข้า… ควรทำยังไงดีครับ?

งั้นลอง /etc/init.d/munin-node stop

แล้วค่อย /etc/init.d/munin-node start ดูใหม่

ทำแล้วครับ แต่กราฟก็ยังไม่plotเลยครับ

ลอง munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron