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") } >