Fluentd ile Apache Loglarının MongoDB’de Saklanması

Merhaba

Fluentd, Linux sunuculardan log toplama ve parse etme konusunda oldukça başarılı bir açık kaynak kodlu yazılım. Bir çalışmada ihtiyacım olması neticesiyle tanıştığım fluentd, kendi yapısına parse modulleri ile bir çok log türü için hizmet verebilmekte. Ayrıca custom parse regex tanımlamalarıda yapılabiliyor.  En güçlü özelliği için servis olarak çalışıp parse edilen logları Postgresql, MongoDB, Hadoop gibi veri tabanı sistemlerinde saklayabilmekte.

Fluent Kurulum Öncesi

Linux’te bazı ayarlamaların yapılması gerekmektedir.

/etc/security/limits.conf dosyasının sonuna aşağıdaki satırları yazınız.

root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536

ve Kernel parametrelerinin düzenlenmesi için aşağıdaki komutları yazınız.

sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.ip_local_port_range="1024 65535"

Son olarak log zamanlarının doğru olması için ntp servisini kurunuz ve açılışta çalışması için konfigüre ediniz.

Fluent Kurulum

CentOS üzerine kurulum için basit bir shell betiği bulunmaktadır.

curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh

Bu script ile kurulum otomatik olarak tamamlanacaktır. Kurulum tamamlandığında ise aşağıdaki komut ile servisi çalıştırabilirsiniz.

chkconfig td-agent on
/etc/init.d/td-agent start

Şu anda fluent kurulumu tamamlanmış bulunmaktadır. Şimdi ise fluentd ayarlarının yapılıp logların mongoDB sunucusuna aktarılması gerçekleştirilmelidir.

MongoDB Centos Kurulumu

MongoDB’nin CentOS üzerine kurulumu için aşağıdaki satırları,  /etc/yum.repos.d/mongodb.repo dosyası oluşturultan sonra içine yazılmalıdır.

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/i686/
gpgcheck=0
enabled=1

Ardından aşağıdaki komut ile kurulum tamamlanmalıdır.

yum install mongo-10gen mongo-10gen-server
chkconfig mongod  on

Fluent Konfigürasyonu

CentOS’ta default apache log dosyası /var/log/httpd/access_log olarak tanımlıdır. Bu dosyadaki her değişikliğin parse edilerek JSON objesi olarak mongoDB veri tabanı sistemine aktarılması için aşağıdaki konfigürasyonu /etc/td-agent/td-agent.conf dosyasına kayıt ediniz.

<source>
  type tail
  format httpd
  path /var/log/httpd/access_log
  pos_file /var/log/td-agent/httpd.access_log.pos
  tag mongo.httpd.access
</source>
<match mongo.*.*>
  # plugin type
  type mongo

  # mongodb db + collection
  database apache
  collection access

  # mongodb host + port
  host 127.0.0.1
  port 27017

  # interval
  flush_interval 10s
</match>

Okumak istenilen log dosyasına aşağıda yetkiler verilmelidir.

chmod o+rx /var/log/httpd
chmod g+rx /var/log/httpd

Ardından servis yeniden başlatıldığında fluentd, parse ettiği apache loglarını 10 saniyede bir mongodb’ye aktaracaktır.

> db.log.find().limit(1).pretty()
{
	"_id" : ObjectId("533404ed60f43c2c3a000001"),
	"domain" : "127.0.1.1",
	"host" : "127.0.0.1",
	"user" : "-",
	"method" : "GET",
	"path" : "/",
	"code" : "200",
	"size" : "1078",
	"referer" : "-",
	"agent" : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36",
	"time" : ISODate("2014-03-27T11:00:59Z")
}
>