การใช้ Crontab บน CentOS 7

Crontab คือ Automate system task บน CentOS ซึ่งทำงานอัตโนมัติตามเวลาที่เรากำหนด สามารถใช้ประโยชน์กับงานที่ต้องทำซำ้ๆ ยกตัวอย่างเช่น ต้องการลบ log file บน server ทุกวันเวลาเที่ยงคืน เป็นต้น

การติดตั้ง Crontab

1.Connect ผ่าน SSH และทำการ Update Software เป็นเวอร์ชั่นล่าสุด

sudo yum update

2.ทำการตรวจสอบ และ ติดตั้ง cronie package โดยปกติ cron utility จะถูกติดตั้งมาแล้ว เราสามารถ verify และ confirm ด้วยคำสั่ง

sudo rpm -q cronie

หากยังไม่ได้ ติดตั้ง ให้ใช้คำสั่งดังนี้

sudo yum install cronie

3.ทำการ check ว่า service ทำงานหรือไม่

sudo systemctl status crond.service

กรณีที่ Crontab ทำงานเป็นปกติ จะแสดงผลลัพธ์ Active: active (running)

การใช้งาน Crontab

1.สามารถแก้ไขเปลี่ยนแปลง Crontab ได้ใน /etc/crontab ใช้คำสั่งแสดงสิ่งที่อยู่ในไฟล์

sudo cat /etc/crontab

ภายในจะมีคำอธิบายและการใช้ crontab ดังนี้

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 5 * * * root run-parts /etc/cron.daily
22 5 * * 0 root run-parts /etc/cron.weekly
42 5 1 * * root run-parts /etc/cron.monthly

2.Option ของ crontab สามารถดูได้ใน Help ซึ่งจะมี Option ที่มีประโยชน์ ต่างๆดังนี้

Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u   define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n   set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x   enable debugging

ตัวอย่างการใช้งาน Crontab

ตัวอย่าง ให้ทำการลบ log file ที่เก่ากว่า 5 วัน เวลาเที่ยงคืน

1. ใช้คำสั่ง crontab -l เพื่อตรวจสอบ list Crantab ของ User นั้นๆ

crontab -l

2. หากไม่มีให้เพิ่ม crontab job ด้วยคำสั่ง crontab -e

crontab -e

3. เพิ่ม job เช่น

0 * * * * find /yourfile/logs/ -mtime +5 -exec rm {} \;

คำสั่งนี้จะทำการลบ log file ที่เก่ากว่า 5 วัน ในเวลาเที่ยงคืนของทุกๆวัน

4. ทำการ save file
5. Restart crontab ด้วยคำสั่ง

sudo systemctl restart crond.service

หรือใช้คำสั่งเพิ่ม job แบบบรรทัดเดียว โดยไม่ต้องสร้าง script file ซึ่งตัวอย่างนี้จะมีประโยชน์สำหรับ สร้าง job ผ่าน Build&Deployment Framework

(crontab -l ; echo "0 * * * * find /yourfile/logs/ -mtime +5 -exec rm {} \;") | crontab -

จากนั้นทำการ Restart crontab

Challenge : ให้ลองสร้าง script แสดง Text และใช้ crontab ในการ run script ทุกๆ 1 ชั่วโมง

References

  • https://www.ibm.com/support/knowledgecenter/th/ssw_aix_71/com.ibm.aix.cmds1/crontab.htm
  • https://www.rosehosting.com/blog/automate-system-tasks-using-cron-on-centos-7/

ELK Stack: 01. ELK คืออะไร

ในการพัฒนาและให้บริการเกมส์ เราสามารถจัดการข้อมูลได้หลายวิธี โดยเฉพาะอย่างยิ่งเกมส์ที่มีผู้ใช้บริการจำนวนมาก การจัดการกับข้อมูลจึงต้องมีประสิทธิภาพและรวดเร็ว,  ELK System คืออีกระบบหนึ่งที่หลายเกมส์เลือกใช้

ELK Stack ประกอบด้วย Elasticsearch, Logstash และ Kibana ซึ่งเป็น Open Source ที่พัฒนาโดย Elastic และทั้งสาม product นี้ทำงานร่วมกันอย่างมีประสิทธิภาพ

Elasticsearch เป็นระบบการจัดการข้อมูล ที่สามารถค้นหา , วิเคราะห์, และเก็บข้อมูลต่างๆ ที่เกิดขึ้นเป็น Log search tools ที่้สามารถเข้าถึงข้อมูลแบบ real-time

Logstash คือเครื่องมือในการรวบรวม และแปลงข้อมูล โดยจะประกอบไปด้วย Inputs คือการรับข้อมูลในรูปแบบต่าง และทำการ Filters วิเคราะห์ เปลี่ยนแปลงข้อมูล และสร้าง Outputs เพื่อส่งต่อข้อมูลไปยัง Elasticsearch

Kibana คือ user interface ของ ELK ที่ช่วยให้ผู้ใช้สามารถจัดการกับข้อมูลได้ง่ายยิ่งขึ้น

Screen Shot 2560-10-19 at 5.21.45 PM.png

Figure 1 : ELK System Concept

ในที่นี้เราจะกล่าวถึงการติดตั้ง Log Server ด้วย ELK ซึ่งมี concept ในการทำงานดังรูป Figure 1 โดย Beats จะทำการ Ship ข้อมูลไปยัง Logstash จากนั้นจึงวิเคราะห์และเปลี่ยนแปลงข้อมูลเพื่อส่งต่อไปยัง Elasticsearch และแสดงผลของ Log Data ที่ Kibana

To be continue…

ELK Stack : 02. ตัวอย่างการติดตั้ง Log Server ด้วย ELK บน Centos7

ELK Stack : 02. ตัวอย่างการติดตั้ง Log Server ด้วย ELK บน Centos7

การติดตั้ง Elastic Stack

สามารถทำตามขั้นตอนการติดตั้ง ทั้งหมดจากทางเว็บไซด์ของ Elastic ในที่นี้เราจะทำการติดตั้ง  Elasticsearch ,x-pack ,kibana และ logstash ตามลำดับ โดยสามารถแยก server หรือลองลงทั้งหมดในเครื่องตัวเองก่อนก็ได้ค่ะ

เราจะทำการติดตั้ง Elasticsearch ด้วย rmp

1. ติดตั้ง Java ด้วย version 8 ขึ้นไป

yum -y remove java*
yum install java-1.8.0-openjdk -y
java -version

2. อัพเดตและอัพเกรด Linux

yum -y update
yum -y upgrade

3. ติดตั้ง Elasticseach

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

สร้างไฟล์ elasticsearch.repo ใน /etc/yum.repos.d/

vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
sudo yum install elasticsearch

4. Running elasticsearch

sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

การ check status และการ stop service

sudo systemctl status elasticsearch.service
sudo systemctl stop elasticsearch.service

การตรวจสอบการทำงานของ elasticsearch

curl http://localhost:9200

ผลลัพธ์ที่ได้จะมีลักษณะดังนี้

{
  "name" : "Cp8oag6",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
  "version" : {
    "number" : "5.6.3",
    "build_hash" : "f27399d",
    "build_date" : "2016-03-30T09:51:41.449Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

5. การ set configuration ของ elasticsearch
elasticsearch จะ load configuration จาก /etc/elasticsearch/elasticsearch.yml
ตัวอย่างการ Configuring Elasticsearch

vim /etc/elasticsearch/elasticsearch.yml
cluster.name:   "yourClusterName" 
network.host:   0.0.0.0

path.data: /var/lib/elasticsearch 
path.logs: /var/log/elasticsearch

discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: [host1,host2]
bootstrap. memory_lock: true

การติดตั้ง Kibana

1. อัพเดตและอัพเกรด Linux

yum -y update
yum -y upgrade

2. ติดตั้ง Kibana

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

สร้างไฟล์ kibana.repo ใน /etc/yum.repos.d/

vim /etc/yum.repos.d/kibana.repo
[kibana-5.x]
name=Kibana repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
sudo yum install kibana

4. Running Kibana

sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana.service

การ check status และการ stop service

sudo systemctl status kibana.service
sudo systemctl stop kibana.service

5. การ set configuration ของ kibana
Kibana จะ load configuration จาก /etc/kibana/kibana.yml
ตัวอย่างการ Configuring Kibana

vim /etc/kibana/kibana.yml
server.name: yourServerName
server.port: 5601      # port
server.host: "localhost"
elasticsearch.url: http://localhost:9200 
elasticsearch.username: username
elasticsearch.password: password

เนื่องจาก Kibana คือ  web application ในขั้นตอนนี้เราจะสามารถเปิด kibana ผ่าน port ที่เราได้ตั้งไว้ใน configuration file ตัวอย่างเช่น localhost:5601 หรือ http://YOURDOMAIN.com:5601

ในการใช้งานครั้งแรกจะต้องมีการกำหนด index pattern ซึ่งเราสามารถใช้ Sample Data

ตัวอย่างการ check index

curl 'localhost:9200/_cat/indices?v'

หลังจากกำหนด index pattern และหากมี log เกิดขึ้น Kibana จะแสดงผลดังนี้

tutorial-discover.png

การติดตั้ง Logstash

1. อัพเดตและอัพเกรด Linux

yum -y update
yum -y upgrade

2. ติดตั้ง Logstash

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

สร้างไฟล์ logstash.repo ใน /etc/yum.repos.d/

vim /etc/yum.repos.d/logstash.repo
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
sudo yum install logstash

3. Running Logstash

sudo systemctl start logstash.service

4. ตัวอย่างการทดลองสร้าง Event

cd logstash-5.6.3
bin/logstash -e 'input { stdin { } } output { stdout {} }'

5. การ Set configuration ของ Logstash

การ Set YML ของ logstash สามารถเข้าไป set ใน /etc/logstash/

vim /etc/logstash/logstash.yml

การ Set configuration ของ Logstash set ใน  /etc/logstash/conf.d

vim /etc/logstash/conf.d/logstash.conf

More Information

  • https://www.elastic.co/
  • https://qbox.io/blog/welcome-to-the-elk-stack-elasticsearch-logstash-kibana