Zabbix เป็น Monitoring System อีกตัวหนึ่งที่น่าสนใจ ซึ่งมีคุณสมบัติหลากหลาย ไม่ว่าจะเป็น Performance Monitoring, Availability Report, Trigger, Event และ Graphs เป็นต้น Zabbix มี Template เสริมหลายตัว สามารถติดตั้งเพิ่มเติมได้ง่าย แถมยังสามารถตั้ง Trigger เพื่อส่งการแจ้งเตือนผ่านทาง E-Mail, IM และ SMS ได้อีกด้วย ความสามารถเยอะขนาดนี้ มาลองเล่นกันดูครับ

ติดตั้งบน Ubuntu 12.04 ทำได้ง่ายมากเพราะ Zabbix มี Repository ให้บริการไว้แล้ว แค่ติดตั้ง repo package ดังนี้

wget http://repo.zabbix.com/zabbix/2.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_2.2-1+precise_all.deb

dpkg -i zabbix-release_2.2-1+precise_all.deb

apt-get update

ติดตั้ง Zabbix Server

apt-get install zabbix-server-mysql zabbix-frontend-php

แก้ date.timezone ใน /etc/apache2/conf.d/zabbix จากนั้น restart apache ดังนี้

service apache2 restart

ติด Zabbix Agent ในเครื่องที่ต้องการ Monitor

apt-get install zabbix-agent

ตั้งค่า Zabbix Server ให้ Agent โดยใช้คำสั่ง

dpkg-reconfigure zabbix-agent

ใส่ hostname หรือ ip address ของเครื่อง Zabbix Server ให้ถูกต้อง

เปิด browser ไปที่ http://YOUR-ZABBIX-SERVER/zabbix ตั้งค่าอีกนิดหน่อย

จากนั้นจะเข้าสู่หน้าจอ Login กรอก username = Admin และ password = zabbix

ก็จะเข้าหน้าหลักของ Zabbix แล้ว วิธีการใช้งานให้ติดตั้ง Zabbix Agent ไว้ที่เครื่องที่ต้องการ Monitor จากนั้น เพิ่ม Host ที่ Configuration > Hosts เลือก Create Host ใส่ข้อมูล Host ที่ต้องการ Monitor ลงไป

คลิกที่ Template เลือก Template ที่ต้องการ ตัวอย่างเช่น OS Linux ถ้าต้องการ Monitor Service เช่น HTTP, HTTPS, SMTP, SSH ก็สามารถเพิ่มเข้าไปได้

กด Save แล้ว เข้าไปดูที่ Monitoring > Lastest Data ว่ามีข้อมูลมาจาก Agent แล้วหรือยัง

เมื่อมีข้อมูลมาแล้วคุณสามารถดูข้อมูล System Status ผ่านหน้า Dashboard ได้ หรือจะดู Trigger หรือ Event ได้เช่นกัน

เนื่องจากจำไม่ได้ว่าเคยเขียน How to เรื่อง Cacti ไปหรือยังและพยายามค้นดูแล้วหาไม่เจอ ก็เลยเอามาเขียนใหม่อีกรอบครับ Cacti เป็น Performance Monitoring System ตัวหนึ่งที่ใช้งานง่าย เน้นการจับข้อมูลจาก SNMP เป็นหลัก ทำให้การตั้งค่าการใช้งาน Cacti ง่ายตามไปด้วย อีกอย่างมี Plugin เสริมน่าที่สนใจหลายตัว มาลงมือกันเลย

apt-get update

apt-get install snmpd cacti cacti-spine

ตัวติดตั้งเริ่มให้คุณตั้งค่ารหัสผ่านให้กับ MySQL และ Config Cacti :) ง่ายป่าว จากนั้นเรามา config เจ้า SNMP เพิ่มอีกนิดหน่อย แก้ไขที่ไฟล์ /etc/snmp/snmpd.conf แก้ให้ snmpd listen connection on all interfaces

#agentAddress udp:127.0.0.1:161

agentAddress udp:161,udp6:[::1]:161

แก้ไข ACCESS CONTROL uncomment ตรง rocommunity แก้ ip address ให้เป็น ip address ของ Cacti

rocommunity secret Cacti-IP-Address

แก้ไขข้อมูล SYSTEM INFORMATION ให้สื่อความให้สักหน่อย

sysLocation Some Sererver

sysContact some@example.org

จากนั้น restart service ของ snmpd ดังนี้

service snmpd restart

จากนั้นมาตั้งค่า Cacti กัน เปิด browser ไปที่ http://your-cacti-server/cacti ล็อกอินด้วยผู้ใช้ admin รหัสผ่าน admin

จากนั้นโปรแกรมจะให้ตั้งรหัสผ่านใหม่

เมื่อตั้งรหัสผ่านเสร็จก็จะเข้าหน้า Cacti โล่งๆ แบบนี้

เปิดหน้า setting ที่ Configuration > Settings ตั้งค่า SNMP Version เป็น 2 และ SNMP Community เป็น secret

คลิกไปที่ Tab Poller เลือก Poller Type เป็น spine กำหนด Poller Inteval เป็น Every Minute กด Save

เพิ่ม Host ของเราเข้าไป ไปที่ Management > Devices กด Add ใส่ข้อมูล ระบุชื่อ hostname หรือ ip address เลือก Template เป็น Local Linux Machine กด Save

เพิ่ม Template เพิ่มเติม Unix – Ping Latency, SNMP – Get Mounted Partitions, SNMP – Get Processor Information, SNMP – Interface Statistics กด Save

กด Create Graphs for this Host เลือกกราฟทั้งหมด กด Create

นั่งรอไปสักพัก เลือก Tab Graphs ก็จะพบกราฟที่ดึงมาจาก SNMP สวยงาม :)

ถ้าต้องการทำ report โดยเลือกเฉพาะบางกราฟ ให้ไปที่ Console > Management > Graph Trees เลือกสร้างรายงานที่คุณต้องการได้ ;)

เล่น MongoDB ถ้าไม่ได้ลอง Sharding เดี๋ยวจะสนุกไม่ครบครับ แนวคิดเรื่อง Sharding คือการกระจายข้อมูลไปเก็บยัง MongoDB หลายๆ เครื่อง เพื่อเพิ่มขนาด storage ในการเก็บข้อมูล เพิ่มประสิทธิภาพในการทำงานและรองรับ Horizontal Scaling การแบ่งข้อมูลสามารถแบ่งได้หลายแบบไม่ว่าจะเป็น Rank Based และ Hash Based ตามที่คุณต้องการ การทำ Sharding ใน MongoDB ต้องมีส่วนประกอบ 3 ส่วนได้แก่

  • Query Router – เป็นตัวเชื่อมต่อกับ Client หรือ Application
  • Config Server – เก็บข้อมูล Meta Data ของ Shard Cluster
  • Shard – เก็บข้อมูล

เราจะมาลองเล่น Sharding แบบง่ายๆ เพื่อทดลองกันครับ สิ่งที่เราต้องมี คือเครื่องเซิร์ฟเวอร์ 4 เครื่อง สำหรับ Router 1 เครื่อง, Config 1 เครื่อง และ Shard 2 เครื่อง สำหรับ Production ต้องใช้เครื่องอย่างน้อย 7 เครื่อง คือ Router 2 เครื่อง, Config 3 เครื่อง และ Shard 2 เครื่อง แต่เราไม่มีเครื่องเยอะมากขนาดนั้นครับ ลองแค่พอหอมปากหอมคอ ลองแค่ 4 เครื่องก็พอ :)

มาลงมือกันเลย ติดตั้ง MongoDB ลงในเครื่องทั้ง 4 เครื่อง

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz

tar zxvf mongodb-linux-x86_64-2.6.1.tgz -C /opt/

export PATH=$PATH:/opt/mongodb-linux-x86_64-2.6.1/bin

สร้างที่เก็บข้อมูลดังนี้

mkdir -p /data/db

เริ่ม start service ของ MongoDB ในแต่ละเครื่องด้วยคำสั่งดังนี้

เครื่อง Shard (192.168.2.169, 192.168.2.171)

mongod --dbpath /data/db

เครื่อง Config (192.168.2.150)

mongod --configsvr --dbpath /data/db

เครื่อง Router (192.168.2.170)

mongos --configdb 192.168.2.150:27019

เมื่อ start service ทั้งหมดครบ Shard Cluster ยังไม่ทำงาน ต้องเพิ่ม Shard เข้าไปในระบบก่อน เชื่อมต่อไปยังเครื่อง Router

mongo --host 192.168.2.170

จากนั้นเพิ่ม Shard เครื่องแรกเข้าไปดังนี้

sh.addShard( "192.168.2.169:27017")

หลังจากเพิ่ม Shard แล้วให้ใช้คำสั่ง sh.status() เพื่อดูสถานะของ Shard Cluster

กำหนดให้ database test เป็น Shard Database

sh.enableSharding("test")

ให้ลองสร้างข้อมูลตัวอย่างโดยใช้คำสั่งดังนี้

use test

for (var i = 1; i <= 10; i++) db.testSample.insert({ x : i })

กำหนด Shard Key ดังนี้

db.testSample.ensureIndex({ _id: "hashed" })

กำหนด Shard Collection ให้ testSample โดยใช้ _id ซึ่งเป็นช่วงของค่า Hash เป็นตัวแบ่ง

sh.shardCollection("test.testSample",{ "_id": "hashed" });

ใช้คำสั่ง sh.status() จะพบว่า testSample บันทึกอยู่ใน shard0000 เพราะเรามีอยู่ Shard เดียว ให้คุณเพิ่ม Shard เข้าไปโดยใช้คำสั่งดังนี้

sh.addShard( "192.168.2.171:27017")

จากนั้นเพิ่มข้อมูลเข้าไปอีก แล้วใช้คำสั่ง sh.status() ดูอีกครั้ง เราจะพบว่า Sharding เริ่มทำงานแล้วให้ดูตรง จำนวน chunks ซึ่งจะแบ่งข้อมูลออกเป็น 2 ส่วน ตามจำนวน Shard Server ที่มี และเริ่มย้ายข้อมูลไปยัง Shard Server ที่เราเพิ่มเข้ามา

เนื่องจากกลับมาเล่น MongoDB แบบติดตั้งเองอีกรอบ ก็เลยมาลองเล่น relication ดูบ้าง เพราะ MongoDB รองรับ replication ด้วย ซึ่งการตั้งค่านั้นง่ายมากๆ หลักการของ replication คือการทำสำเนาข้อมูลให้เท่ากันทุกเครื่อง กรณีที่มีเครื่องใดเครื่องหนึ่งไม่สามารถให้บริการได้ MongoDB จะยังสามารถให้บริการได้จาก relicaset ที่เหลือได้ด้วยความสามารถในเรื่อง Automatic Failover อีกด้วย

replicaset

automatic failover

จากภาพเราจะมีเซิร์ฟเวอร์อยู่ 3 เครื่องทำหน้าที่เป็น Primary และ Secondary ซึ่งเครื่อง Primary ทำหน้าที่รับ request ที่มาจาก client ในส่วน Secondary ทำหน้าที่ replicate การทำงานต่างๆ จาก Primary มาและอาจทำหน้าที่เป็น Primary แทนในกรณีที่ Primary ไม่สามารถทำงานได้

เพื่อความเข้าใจ มาลองติดตั้ง MongoDB repication ดู มีเครื่อง 3 เครื่อง

  1. rep0 (Primary)
  2. rep1 (Secondary)
  3. rep2 (Secondary)

    ทุกเครื่องมองเห็นกันได้ในเครือข่าย ลองทดสอบ ping ชื่อเครื่องดู และติดตั้ง MongoDB ไปยังทุกเครื่องดังนี้

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz
tar zxvf mongodb-linux-x86_64-2.6.1.tgz -C /opt/
export PATH=$PATH:/opt/mongodb-linux-x86_64-2.6.1/bin

จากนั้น สร้างที่เก็บฐานข้อมูลดังนี้

mkdir -p /data/rs0-0 /data/rs0-1 /data/rs0-2

เริ่ม start service ของ MongoDB ในแต่ละเครื่องด้วยคำสั่งดังนี้

เครื่อง rep0

mongod --dbpath /data/rs0-0 --replSet rs0 --smallfiles --oplogSize 128

เครื่อง rep1

mongod --dbpath /data/rs0-1 --replSet rs0 --smallfiles --oplogSize 128

เครื่อง rep2

mongod --dbpath /data/rs0-2 --replSet rs0 --smallfiles --oplogSize 128

จากนั้นในคำสั่ง mongo เรียกใช้งานเครื่อง rep0 ดังนี้

mongo --host rep0

จากนั้นสั่งให้ตั้งค่า relicaset ดังนี้

rs.initiate()

ใช้คำสั่ง rs.conf() เพื่อดูว่ามีข้อมูลการตั้งค่าเริ่มต้น repicaset แล้วหรือยัง

rs.conf()

ให้สังเกตว่า shell ของ MongoDB จะเปลี่ยนเป็น rs0:PRIMARY> และจะมีข้อมูลเริ่มต้นของ replicaset แล้ว ให้เพิ่ม host เข้าไปดังนี้

rs.add("rep1:27017")

rs.add("rep2:27017")

ลองใช้คำสั่ง rs.conf() ดูจะพบว่า rs0 ของเรามี host เพิ่มเข้ามารวมเป็น 3 host แล้ว

ใช้คำสั่ง rs.status() เพิ่อดูสถานะของ Repication Cluster

rs.status()

จะพบว่าเรามี 3 เครื่องที่ผูกกันใน repicaset ชื่อ rs0 และ 2 เครื่องที่เพิ่มเข้ามาถูกกำหนดให้เป็น Secondary อัตโนมัติ

ให้ลอง load data เข้าไป ให้สังเกต log จะพบว่าเครื่อง Primary จะส่งข้อมูลไปเขียนที่ Secondary ตลอด แต่เวลา query จะสลับกันระหว่างเครื่องเป็นลักษณะ round robbin ให้ลอง shutdown เครื่อง Primary ดู จะพบว่าเครื่อง Secondary ทั้ง 2 ตัวจะโหวดกัน แล้วได้ Primary ใหม่มา 1 ตัว จากนั้นให้ลอง query ข้อมูลจาก Primary ตัวใหม่ ก็จะพบว่าข้อมูลยังอยู่ครบ ;)

สำหรับท่านที่สนใจทำ MongoDB Replication ให้ลองศึกษาเพิ่มเติมที่ MongoDB Document ในส่วน Replication เพิ่มเติมครับ

หลังจากที่ SIPA ได้ร่วมมือกับกรมทรัพย์สินทางปัญญา ในการจัดประกวดและเผยแพร่ชุด “13 ฟอนต์แห่งชาติ” ไปแล้ว และได้มีการนำไปใช้อย่างแพร่หลายโดยเฉพาะในส่วนของฟอนต์ TH Sarabun New

จากความแพร่หลายในการใช้งานชุดฟอนต์แห่งชาติ ทาง SIPA และกรมทรัพย์สินทางปัญญาจึงเล็งเห็นความสำคัญในการแก้ไขข้อกำหนดของสัญญาอนุญาตการใช้งานฟอนต์ให้แพร่หลายยิ่งขึ้นจึงได้ร่วมกันแก้ไขสัญญาอนุญาตให้เป็น GPL2 เพื่อให้สามารถนำไปพัฒนาต่อยอดและเผยแพร่เพิ่มเติมในช่องทางอื่นได้ โดยในช่วงแรกจะมีเพียง 10 ฟอนต์ที่ได้ปรับปรุงสัญญาอนุญาตเป็นที่เรียบร้อยแล้ว ซึ่งทาง SIPA จะดำเนินการประสานงานเพื่อแก้ไขสัญญาอนุญาตของอีก 3 ฟอนต์ที่เหลือ ต่อไป

โดยท่านสามารถดาวน์โหลดได้ที่ลิงก์ด้านล่าง

หนังสือ Getting Satrted with OpenShift จากสำนักพิมพ์ O’Reilly ออกมาแล้ว หลังจากที่บ่มมานานอยู่เหมือนกัน นานจนลืมไปเลย หนังสือเล่มนี้เน้นการใช้งาน OpenShift เป็นหลัก การทำ Hot Deploy ใช้งาน Task Scheduler ทำ Continuous Integration การ Backup เป็นต้น เรียกได้ว่าแตกต่างจากหนังสือ OpenShift เล่มอื่นๆ ที่มีอยู่ในท้องตลาดพอสมควร สำหรับท่านที่เป็นมือใหม่ ผมแนะนำให้อ่านเล่มนี้ครับ :)

เกือบลืมหนังสือเล่มนี้สามารถดาวน์โหลดได้ ที่เว็บ OpenShift ครับ