Rsyslog ile Merkezi Log Sunucusu Kurulumu
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYzsNnKQ' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Bir ağda bulunan sunucuların loglarını bir merkezde toplamak oldukça mantıklı bir durumdur. Bu şekilde, tüm sunucularınıza ait logları belli bir düzen içerisinde tutabilir ve ilerisi için derli toplu bir şekilde arşivleyebilirsiniz. Aynı zamanda sunucu loglarını herhangi bir araç ile tek yerden monitor etme şansına da sahip olursunuz. |
İşte bu tip avantajlarından dolayı, bu yazımda, rsyslog kullanarak merkezi bir log sunucusunun kurulması ve yapılandırılması, çeşitli sunucu ve network ekipmanlarından rsyslog sunucusuna logların gönderilmesini içeren bir döküman yayınlamak istiyorum.
İçerik İndexi
Giriş
Bu yazıda değinilecek konuların bir özeti şu şekilde: Önce Syslog ve Rsyslog hakkındaki temel bilgilere değineceğim, daha sonra rsyslog sunucusunun kurulması, mysql desteği sağlanması ve yapılandırılması konularına ait temel bilgileri ve kurulum notlarını paylaşacağım.
Ardından freebsd, centos, Windows sistemlerden ve bir adet Cisco ASA'dan rsyslog sunucusuna log göndermenin nasıl yapılabileceğinden bahsedeceğim. Logların hem text tabanlı log dosyalarına hem de MySQL database'ine yazılması işlemine değineceğim.
Yazının herhangi bir yerinde aklınıza takılan herhangi bir konu olursa, bana bir e-mail gönderebilir ya da sayfa sonundaki yorum kısmından yararlanarak sorunuzu iletebilirsiniz.
Son olarak, makale işinize yararsa, sol üst köşedeki RSS ikonuna tıklayarak beslemeye üye olabilir, benzer konularda yayınlanacak yeni yazılara hızlıca erişebilirsiniz.
Syslog Nedir ?
Syslog, bildiğiniz gibi *nix sistemlerdeki çeşitli kaynaklar ya da uygulamalarca üretilen log'ları (ileti) işlemekle görevli bir uygulamadır. Syslogd isimli bir daemon olarak çalışan syslog, üretilen iletilerin ne şekilde değerlendirileceğini belirler. Örneğin, üzerinde de bir smtp sunucusu çalışan *nix sisteminizde, klasik olarak smtp daemon'ı, mail aktivitesi ile ilgili logları syslog'a gönderir, syslog bu logları alıp, bir dosyaya yazar ya da belirli bir e-mail adresine postalar ve ya direk olarak konsola basar. Sonuç olarak siz, herhangi bir kaynaktan gelen logların ne şekilde değerlendirilmesini istediğinizi syslog'a söylersiniz ve syslog bu istekleri yerine getirir.
Syslog'un ön tanımlı ayarlarına göre hemen hertür *nix sistemde, ilgili kaynaklar (fasilite) tarafından üretilen ve syslog tarafından düzenlenen loglar /var/log dizini içerisinde ayrı dosyalar halinde bulunur. Bu şekilde sunucunuzda herhangi bir sorun olduğu zaman ilk başvurduğumuz kaynaklar olan logların düzenli bir şekilde tutulması sağlanmaktadır.
Syslog üzerinde çalıştığı sistemin loglarını işlediği gibi uzaktaki bir sistemden gönderilen logları da alıp işleme yetisine sahiptir. Bu iş için syslog sunucunuzun network özelliğini devreye almak ve bir iki küçük ayarlama yapmak yeterli olacaktır . Böylece, syslog tcp ya da udp 514. portu dinleyerek bu porta ulaşan log çıktılarını alabilir ve istediğiniz doğrultuda işleyebilir. Zaten, bu yazının konusu da bu.
Ancak yazının başlığından da anlaşılacağı gibi ben log işlemek için syslog yerine rsyslog kullanmaktayım. Şimdi rsyslog'un ne olduğu ve neden rsyslog kullandığım konusuna değinmek istiyorum.
Rsyslog Nedir ?
Rsyslog, syslogd'nin geliştirilmiş halidir. Çoğunu syslogd ile de yapabileceğiniz gibi rsyslog kullanarak, logları MySQL, postgreSQL, Oracle vs gibi database'lere yazdırabilirsiniz. Alınan logların formatları ile istediğiniz gibi oynayabilirsiniz. Logları encrypt edebilirsiniz. Text dosyalarını syslog formatına sokabilirsiniz vs. Örnekleri çoğaltmak da mümkündür. Rsyslog'un yetenekleri ile ilgili tam bir listeye için şu adresten ulaşabilirsiniz: http://www.rsyslog.com/module-Static_Docs-view-f-features.html.phtml
Sunduğu özelliklerin yanı sıra rsyslog'a sempatimin bir diğer nedeni de rsyslog ve phplogcon* ile uğraşırken, hem rsyslog baş geliştiricisi Rainer Gerhards'ın hem de phplogcon geliştiricisi Andre Lorbach'ın sorduğum sorular karşısında gösterdikleri yardımseverliktir. Sonuç olarak rsyslog ile ilgili herhangi bir sorunla karşılaşınca direk olarak geliştiricisine ulaşabilmek ve kendisinin epey yardım sever birisi olması gayet güzel bir durum.
(*) Phplogcon, rsyslog ile birlikte kullanılabilen web arayüzüdür. Sunucu loglarının web tabanlı olarak online monitor edilebilmesi için oldukça kullanışlı bir yazılımdır. Bir sonraki yazımda konu PhpLogcon kurulumuna değineceğim.
Syslog ve Rsyslog ile ilgili temel bilgilere değindikten sonra, rsyslog kurulum notlarına geçebiliriz.
Rsyslog Kurulumu
Eğer Fedora ya da Debian Lenny kullanıyorsanız, rsyslog kullanmak için herhangi bir kurulum yapmanıza gerek kalmıyor. Çünkü, rsyslog bu iki dağıtımda ön tanımlı syslog daemon'ı olarak geliyor. Ancak, rsyslog'un iletileri bir database'de tutmasını istemeniz durumunda db desteği sunan rsyslog paketlerini ayrıca kurmanız gerekmektedir. Örnel olarak, rsyslog'a MySQL desteği kazandırmak için rsyslog-mysql kurulmalıdır. Şimdi bu işlemi yapalım.
Debian Sistemlerde MySQL Desteği
Dediğim gibi Debian default olarak rsyslog ile birlikte geldiği için ayrıca rsyslog kurmaya gerek bulunmuyor. Ancak, rsyslog'a mysql desteği sağlamak için rsyslog-mysql paketinin ayrıca kurulması gerekiyor. Bu işi herzamanki gibi apt-get ile yapıyoruz.*
#apt-get install rsyslog-mysql
(*) Yukarıdaki komut ile birlikte sisteme mysql sunucusu da yüklenecektir. Install sırasında, rsyslog'un local sistem loglarını mysql'e yazması için otomatik mysql konfigurasyonu yapmayı öneren bir ekran çıkacaktır. Ancak ben rsyslog sunucusunda, sadece uzaktaki sistemlerden gönderilen logları yazmak için mysql kullanıyorum. Dolayısı ile ilgili ekran geldiği zaman NO diyip geçiyorum; siz de bu şekilde yapabilirsiniz.
Kurulum sonrasında, rsyslog mysql modülünün devreye alınması için /etc/rsyslog.d/mysql.conf dosyasına gerekli satır ekleniyor. Aynı zamanda, lokal iletilerin mysql'e yazılması için gerekli bir satır daha ekleniyor, ancak biz kurulum sırasında otomatik konfigurasyon işlemine NO dediğimiz için bu eklenen satırda gerekli DB bilgileri bulunmuyor. Eğer rsyslog'u bu ayarlar ile başlatırsanız mysql'e yazılamama problemi ile ilgili hata verecektir. Bu hatayı /var/log/syslog dosyasında aşağıdaki şekilde görebilirsiniz.
Sep 7 14:41:11 debvm rsyslogd: [origin software="rsyslogd" swVersion="3.18.6" x-pid="4286" x-info="http://www.rsyslog.com"] restart Sep 7 14:41:11 debvm rsyslogd: Trouble with MySQL connection properties. -MySQL logging disabled Sep 7 14:41:11 debvm rsyslogd: the last error occured in /etc/rsyslog.d/mysql.conf, line 5 Sep 7 14:41:11 debvm rsyslogd: warning: selector line without actions will be discarded
Bu durum rsyslog'un çalışmasını engellemez ancak biz gene de hatayı ortadan kaldıralım. Şimdi, /etc/rsyslog.d/mysql.conf dosyasının editleyelim ve dosya içerisinde bulunan aşağıdaki satırın başına # koyup comment out ederek devre dışı bırakalım.
*.* : ommysql:localhost,,,
Aynı dosyanın içerisinde bir de, $ModLoad ommysql ibrerli satır ise rsyslog mysql modülünün aktifleştirilmesini söylemektedir. Yazının ilerleyen bölümlerinde mysql'e loglama işleminin nasıl yapılacağı da anlatılacaktır. Eğer siz de uzak sunuculardan gelen logları mysql db'de bulunan tablolara yazmak isterseniz bu satırı silmeyin.
Debian sistemler için temel kurulum şekli bu kadardı.
Diğer dağıtımlar ve BSD tabanlı sistemlerden herhangi birini kullanıyorsanız, rsyslog'u ayrıca kurmanız gerekmektedir. Aşağıda freebsd ve centos sistemler için rsyslog kurulumunu anlatan dökümanların linklerini bulabilirsiniz.
freebsd üzerine Rsyslog Kurulumu
Bkz: http://www.syslogs.org/2009/08/freebsd-uzerine-rsyslog-kurulumu-ve-yapilandirmasi/
centos üzerine Rsyslog Kurulumu
Bkz: http://www.syslogs.org/2009/08/centos-uzerine-rsyslog-kurulumu-ve-yapilandirmasi/
NOT: Ben rsyslog ile merkezi log sunucusu oluşturmak için Debain kullanıyorum ve bu yazıda anlatılanlar Debian sistemlere göredir. Ancak siz FreeBSD ya da CentOS kullanıyorsanız, yukarıdaki linklerden takip ederek rsyslog kurulumlarınızı yapabilirsiniz. Rsyslog yapılandırması hemen hemen tüm platformlarda aynı olduğundan dolayı, buradaki yapılandırma işlemlerini baz alarak ayarlama işlemlerini yapabilirsiniz. |
Yazının bundan sonraki kısmı, sisteminizde rsyslog'un ön tanımlı ayarlarla düzgün olarak çalıştığını varsaymaktadır. Takıldığınız herhangi bir konu olursa, bana e-mail atabilir ya da sayfanın sonundaki yorum bölümünden sorunuzu iletebilirsiniz.
Rsyslog Yapılandırma İşlemleri
Öncelikle, sistemdeki rsyslog'u merkezi log sunucusu olarak kullanabilmek için network desteğinin devrede olması gerekmektedir. Bu destek, /etc/rsyslog.conf dosyasında aktifleştirilmelidir.
Şimdi, rsyslog.conf dosyasını editleyelim.
# vi /etc/rsyslog.conf
Dosya içerisinde network desteği ile ilgili satırlar aşağıda görüldüğü gibi ön tanımlı olarak mevcuttur. Ancak # ile comment out edilmiş ve devre dışı bırakılmışlardır. Networking desteğini aktif etmek için açıklama satırları hariç diğer satırların başındaki # işaretini kaldırmalı ve uncomment etmelisiniz.
Yani şu şekilde görünmelidir.
# provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514
Artık dosyayı kaydedip çıkabilirsiniz. Şimdi değişikliklerin aktif olması için rsyslog'u yeniden başlatıyoruz:
# /etc/init.d/rsyslog restart
Rsyslog restart edildikten sonra, hem tcp hem de udp 514. portlar rsyslog tarafından dinlenmeye başlanmış olmalıdır. Kontrol etmek için netstat komutundan yararlanalım.
# netstat -an |grep 514
Çıktı şu şekilde olmalıdır:
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN tcp6 0 0 :::514 :::* LISTEN udp 0 0 0.0.0.0:514 0.0.0.0:* udp6 0 0 :::514 :::*
Görüldüğü üzere ilgili portlar bind edilmiş durumdalar.
Şu anda, rsyslog temel olarak ayarlanmış durumda. Şimdi merkezi log sunucu oluşturma ile ilgili bölümlere geçebiliriz.
Merkezi Log Sunucu Yapılandırması
Bu kısımda, sırası ile bir FreeBSD, bir CentOS linux, bir Windows 2003 ve bir adet Cisco Asa 5505'in loglarının rsyslog sunucusuna gönderilmesini ve rsyslog sunucusunun gelen logları belirli log dosyalarına dağıtması ve ayrı olarak mySQL database'ine de yazması ile ilgili yapılması gerekenlerden bahsedeceğim.
Yapılacakların kısa bir özeti şu şekilde; önce Rsyslog sunucusunda, uzaktaki sistemden gönderilecek logları almak ve bir dosyaya yazmak üzere rsyslog. conf isimli dosyada gerekli tanımlamaları yapıyorsunuz. Bu noktada, uzak sistemlerden gelen logları sadece tek bir dosyaya yazabileceğiniz gibi fasilitelerine göre ayrıştırıp farklı dosyalara da yazılmasını sağlamak mümkün. Örneğin, uzak sistemden gelen ve mail ile alakalı olan dosyaları atıyorum /var/log/sunucuismi/mail.log dosyasına, ftp ile alakalı logları aynı dizinde ftp.log dosyasına ya da login bilgileri ile ilgili gelen logları aynı dizinde oluşturukacal auth.log dosyasına yazdırmanız mümkün.
Not: Eğer loglarınızı ayrı klasörlerde tutmak istiyorsanız, oluşturduğunuz klasörlerin yazma izinlerini vermeyi unutmamalısınız. Ben, bu yazıda ayrı klasörlere yazma işlemi yapmayacağım için klasör oluşturma ve yazma izni verme gibi işlemler yapmayacağım.
Sonuç olarak loglarınızı tek bir dosyada toplayabildiğiniz gibi fasilitelerine göre ayrı log dosyalarına da yazdırabilirsiniz. İlgili bölümlerde her iki yönteme de değineceğim.
Ayrıca, logların bir MySQL database'ine yazılması için gereken yapılandırma adımlarına da değineceğim.
Uzak sunucularla ilgili işlemlere geçmeden önce, rsyslog.conf'un yapısı ile ilgili bilinmesi gereken kısa bir iki bilgi paylaşmak istiyorum.
Ön tanımlı olarak rsyslog.conf dosyasının log işleme ile ilgili kısımlarının içeriği aşağıdaki gibidir:
(Çıktı da comment out edilmiş satırlar gösterilmemektedir.)
auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err news.crit /var/log/news/news.crit news.err /var/log/news/news.err news.notice -/var/log/news/news.notice *.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages *.emerg * daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn |/dev/xconsole
Görüldüğü gibi hangi fasiliteler tarafından üretilen iletilerin, hangi log dosyalarına yazılacağı burada belirlenmektedir. Örneğin, en üstteki satırı ele alacak olursak, auth ile ilgili logların /var/log/auth.log dosyasına yazılacağı belirtilmiştir. Burada dikkat edilmesi gereken konu; bu yapılandırmada auth ile ilgili gelen tüm iletilerin hangi sistemden geldiğine bakılmaksızın auth.log dosyasına yazılacağının belirtilmiş olmasıdır. Yani bu durumda, hem rsyslog sunucusunun kendi auth iletileri hem de uzaktaki sistemlerinizden gelecek auth logları aynı auth.log dosyasına yazılacaktır.
rsyslog bu şekilde set edilirse ve ekstadan 10 adet uzak sunucudan log gönderirseniz tüm bu loglar rsyslog'un kendi log dosyalarına yazılacaktır. Bu durumda, rsyslog sunucusunun kendisine ait olması gereken log dosyasında, başka sunuculara ait olan iletiler de bulunacak ve ilgili log dosyası karman çorman olacaktır. Bu da rsyslog sunucunuzun kendisine ait logları izlemenizde zorluklar çıkmasına neden olacaktır.
İşte bu sorunu aşmak için rsyslog'a, sadece lokal sistemden kaynaklanan iletileri bu dosyalara yazmasını söylemek için, conf dosyasının içerisinde yukarıda görülen çıktıların en tepesine “+sunucu-ismi” şeklinde bir giriş yapıyoruz.
Benim rsyslog sunucumun adı, logserver'dir. Bu nedenle yukarıdaki çıktının en tepesine +logserver yazıyorum:
Önce rsyslog.conf dosyanızı editleyelim.
# vi /etc/rsyslog.conf
Sonra da aşağıda görüldüğü şekilde, ilgili yere +sunucuismi ibaresini ekleyelim.
+logserver
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
mail.info -/var/log/mail.info
mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice -/var/log/news/news.notice
*.=debug;\
auth,authpriv.none;\
news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
*.emerg *
daemon.*;mail.*;\
news.err;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole
Yukarıda bold ve kırmızı olarak belirtilmiş sunucu adını içeren ibare eklendiği zaman, logserver isimli rsyslog sunucusu, sadece kendisinden kaynaklanan iletileri hostname'in aşağısındaki satırlarda belirtildiği şekilde ilgili dosyalara yazacaktır. Böylece uzaktan gelecek olan iletiler lokal sistem loglarında karışıklığa neden olmayacaktır.
rsyslog.conf dosyası bu hali ile, local sistem ile ilgili logları text tabanlı log dosyalarına yazacaktır fakat logların bir MySQL database'ine yazılmasını da sağlayabilirsiniz. Ben log sunucusunda sadece uzak sistemlerden gelen logları MySQL'e yazdırdığım için lokal iletiler için bu işin nasıl yapıldığına değinmeyeceğim. Bunun yerine ilgili başlıklarda anlatılacak uzak sistemlerden gönderilecek logların ayrı arı hem text tabanlı log dosyalarına hem de bir MySQL tablosuna yazdırılmasından bahsedeceğim.
Şimdi uzak bir sistemden rsyslog sunucusuna log göndermek ve rsyslog'un gelen logları işlemesi ile ilgili konulara geçebiliriz. Demin de dediğim gibi örnek olarak ele alacağım sistemler bir FreeBSD, bir CentOS, bir Windows 2003 ve bir Cisco ASA 5505.
Önce FreeBSD ile başlıyoruz.
FreeBSD'den Log Forwarding
Bu işlemi iki şekilde yapabilirsiniz, birincisi logların text tabanlı log dosyalarına yazdırılmasını sağlamak. İkincisi ise logları bir MySQL db'sinde bulunan tabloya yazdırmak. Sırası ile her iki şekle de değineceğim.
Log Sunucusundaki İşlemler
Bu işlemin, rsyslog sunucusu üzerindeki tanımlar, ve freebsd sistemdeki forward ayarları şeklinde iki adımı bulunuyor. Önce log almak üzere rsyslog sunucusunu set edelim.
Logları Text Dosyalarında Tutmak
Yazının ilgili bölümünde de bahsettiğim gibi uzak sunuculardan gelen logları isterseniz tek bir log dosyasında, isterseniz de gelen iletilerin fasilitelerinden hareketle ayrı log dosyalarına yazabilirsiniz. İlk olarak tüm logları tek bir log dosyasında toplamak üzere rsyslog sunucusunu yapılandıralım.
Örneğin elimde hostname'i freetest olaran bir FreeBSD sistem var, bu sistemde üretilen logları rsyslog sunucusuna göndereceğim. Bu nedenle rsyslog.conf dosyasına “hostname'i freetest olan sistemden gelen syslog iletilerini, /var/log/freetest.log dosyasına yaz.” anlamına gelen bir giriş yapacağız.
Gene rsyslog.conf dosyamızı editliyoruz.
# vi /etc/rsyslog.conf
ve dosyanın en sonuna şu satırları ekliyoruz.
+freetest *.* /var/log/free-test.log
Böylece, rsyslog, hostname'i freetest olan sistemden gelen “tüm” iletileri /var/log/freetest.log isimli dosyaya yazacaktır.
Evet, rsyslog sunucusunda, logları tek bir dosyada toplamak için yapmanız gereken ayarlar bu kadar.
Şimdi de iletileri fasilitelere göre ayrıştırarak yazdırma işine bakalım.
Gelen logları lokal sistemin log hiyerarşisine benzer şekilde ayrı dosyalara yazdırmak isterseniz. Rsyslog.conf dosyanızda fasilitelerden hareketle eklemeler yapmanız gerekir.
Aşağıdaki örnekte, free-test sunucusundan gelen cron loglarını /var/log/freetest-cron.log, login vs gibi bilgileri /var/log/freetest-auth.log ve notice, kernel debug, lpr ve mail sunucusu ile ilgili kritik logların /var/log/freetest-messages dosyasına yazılması için girilmesi gereken satırlar görülüyor.
+freetest cron.* /var/log/freetest-cron.log auth,authpriv.* /var/log/freetest-auth.log *.notice;kern.debug;lpr.info;mail.crit /var/log/freetest-messages
Böylece ilgili sunucudan gelen istekleri ilgili dosyalara yönlendirmiş oluyorsunuz. Aynı düzenle, istediğiniz her fasiliteye ait logları belli dosyalara yönlendirmeniz mümkün. rsyslog.conf dosyanızın lokal loglar için oluşturulmuş bölümüne bakarak örnekleri çoğaltabilirsiniz.
Son olarak, logları hangi şekilde işlerseniz işleyin dikkat edilmesi gereken bir konu bulunmaktadır: rsyslog.conf dosyanıza +sunucu isminin, rsyslog sunucusu tarafından çözümlenebilir olması gerekmektedir. Çözümleme işlemi için DNS sunucunuzda uzak sistemlerinizin reverse dns kayıtları bulunmalıdır. Ortamda DNS yoksa ya da DNS kayıtları ile uğraşmak istemiyorsanız da ilgili ip ve hostname bilgilerini rsyslog sunucusunun /etc/hosts dosyasına eklemeniz gerekmektedir.
Bu nedenle, şimdi biz işimizi sağlama alalım ve free-test isimli FreeBSD sistem için rsyslog sunucusunun hosts dosyasına bir ekleme yapalım.
/etc/hosts dosyasını açıyoruz:
# vi /etc/hosts
ve içerisine, aşağıdak gibi bir satır ekliyoruz: (free-test isimli sunucunun ip'si 192.168.12.233'dür)
192.168.12.233 freetest
Bu şekilde olası bir isim tutmazlığının önüne geçmiş oluyoruz. İşinizi sağlama almak için rsyslog sunucusuna ileti göndereceğiniz tüm sistemlerinizin hostname'lerini hosts dosyanıza girmenizi öneririm.
Şimdi, rsyslog servisini yeniden başlatıyoruz ve yaptığımız eklemeler devreye alınıyor.
/etc/init.d/rsyslog restart
Rsyslog sunucusu tarafında yapılması gerekenler bunlardı. Şu an rsyslog sunucumuz normal olarak, free-test hostname'li FreeBSD sistemden gelecek logları işleyebilecek.
Şimdi de aynı işlemi bir MySQL db'sine yazdırma işlemine bakalım.
Logların MySQL`e Yazdırılması
Logları db'lere yazdırmak için öncesinde bir MySQL DB'sineihtiyaç bulunuyor. Şimdi freetest isimli sistemden gönderilecek logların tutulacağı FreetestLogs isimli bir DB oluşturup gerekli olan tabloları ekleyelim.
Mysql sunucusuna bağlanıyoruz.
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny2-log (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Şimdi FreetestLog isimli bir DB oluşturalım.
mysql> CREATE DATABASE FreetestLogs;
Şimdi de gerekli iki tabloyu oluşturuyoruz.
Önce SystemEvents,
mysql> USE FreetestLogs; mysql>CREATE TABLE SystemEvents ( ID int unsigned not null auto_increment primary key, CustomerID bigint, ReceivedAt datetime NULL, DeviceReportedTime datetime NULL, Facility smallint NULL, Priority smallint NULL, FromHost varchar(60) NULL, Message text, NTSeverity int NULL, Importance int NULL, EventSource varchar(60), EventUser varchar(60) NULL, EventCategory int NULL, EventID int NULL, EventBinaryData text NULL, MaxAvailable int NULL, CurrUsage int NULL, MinUsage int NULL, MaxUsage int NULL, InfoUnitID int NULL , SysLogTag varchar(60), EventLogType varchar(60), GenericFileName VarChar(60), SystemID int NULL );
Sonra da SystemEventsProperties isimli tablo
mysql> USE FreetestLogs; mysql> CREATE TABLE SystemEventsProperties ( ID int unsigned not null auto_increment primary key, SystemEventID int NULL , ParamName varchar(255) NULL , ParamValue text NULL );
Son olarak, FreetestLogs isimli DB'ye erişmesi için log_user isimli bir kullanıcı ekliyoruz ve gerekli izinleri veriyoruz. (Siz kırmızı ile belirlenmiş yerleri kendi isteğinize göre değiştirin.)
mysql> USE mysql; mysql> CREATE USER 'log_user'@'localhost' IDENTIFIED BY 'sifre'; mysql> GRANT ALL PRIVILEGES ON FreetestLogs.* TO 'log_user'@'localhost'; mysql> FLUSH PRIVILEGES;
Database ile ilgili işlemler bitti.
Şimdi, rsyslog.conf dosyasında ilgili yere, freetest isimli sistemden gönderilecek logların, FreetestLogs isimli DB'deye yazılmasını söyleyen bir ekleme yapacağız.
/etc/rsyslog.conf dosyasını editliyoruz ve örneğimize uygun olan aşağıdaki satırı ekliyoruz.
+freetest *.* :ommysql:127.0.0.1,FreetestLogs,log_user,sifre
Bu işlemi yaptıktan sonra rsyslog servisini yeniden başlatıyoruz. Böylece freetest isimli hosttan gönderilecek “tüm” iletiler, FreetestLogs DB'sindeki SystemEvents isimli tabloya yazılacaktır.
Not: rsyslog.conf dosyasına eklenen freetest hostname'i için /etc/hosts dosyasına bir kayıt eklemeyi unutmayın. (Bkz: bir üstteki bölüm.)
Şimdi de logları forward etmesi için FreeBSD tarafındaki yapılandırma işlemlerine geçebiliriz.
FreeBSD`nin Yapılandırılması
FreeBSD sistemlerde, ön tanımlı olarak syslog kullanılmaktadır. Syslog'un conf dosyası ise /etc/syslog.conf'tur.
Bir FreeBSD'den uzaktaki bir log sunucusuna ileti göndermek için tercih edebileceğiniz iki yol bulunmaktadır. Bunlardan birisi, syslog'un ürettiği tüm iletileri uzaktaki log sunucusuna göndermektir. Diğeri ise, sadece belirli fasilitelerce üretilen logların sunucuya iletilmesidir. Bu durumda tüm loglar yerine örneğin sadece auth. loglarını gönderebilirsiniz.
Ben her iki yönteme de değineceğim, siz sisteminizi ihtiyacınız olan şekilde yapılandırabilirsiniz.
Üretilen tüm iletilerin log sunucusuna gönderilmesi için aşağıdaki adımları uygulamanız yeterlidir.
/etc/syslog.conf dosyanızı editleyin.
vi /etc/syslog.conf
Dosyanın en üstüne aşağıdakine benzer bir satır ekleyin. (Satırın en üste eklenmesi önemlidir.) Benim rsyslog sunucumun ip adresi 192.168.12.242 dolayısı ile satır şu şekilde:
*.* @192.168.12.242
Bu satırda, tüm logların (*.*) 192.168.12.242 ip adresli sisteme yollanmasını söylüyoruz. Ip adresinin başındaki @ işareti logların UDP protokolü ile gönderilmesini söylemektedir. @@ şeklinde iki at işareti koyarsanız iletiler TCP üzerinden gönderilirler. Çok fazla log trafiği olan sistemler için tcp yerine udp kullanmak mantıklıdır.)
Artık FreeBSD'de üretilen tüm loglar, rsyslog sunucusuna gönderilecektir.
Diğer alternatif ise sadece belirli fasilitelerce üretilen iletilerin, log sunucusuna gönderilmesidir. Tüm loglar yerine örneğin sadece auth ya da mail loglarını log sunucusuna göndermek isteyebilirsiniz. Bu durumda, syslog.conf dosyasında yukarıda olduğu gibi *.* kullanmak yerine sadece istediğiniz fasiliteyi belirtebilirsiniz.
Örnek olarak sadece auth ile ilgili logların gönderilmesi için syslog.conf dosyasının en tepesine şu şekilde bir satır eklemek yeterli olacaktır.
auth.info;authpriv.info @192.168.12.242
Böylece, sadece login vs. işlemleri ile ilgili loglar iletilecektir.
Son olarak değişikliklerin geçerli olması için syslog servisini yeniden başlatın.
Şimdi değişikliklerin aktif olması için syslog'u restart ediyoruz.
/etc/rc.d/syslogd restart
Evet, normal şartlarda herşey düzgün çalışıyor olmalıdır. Şimdi test edelim.
Log Sunucusunun Test Edilmesi
Test işlemi için logger komutundan yararlanılabilir. Ben, FreeBSD üzerinde tüm logların rsyslog sunucusuna gönderilemesi için ayarlama yaptım. Dolayısı ile şimdi FreeBSD'de logger komutu ile bir notice mesaji göndereceğim.
# logger "Bu mesaji rsyslog sunucusunun ilgili log dosyasinda ya da db tablosunda gormeniz gerekir."
Üretilen bu log, FreeBSD'nin kendi üzerinde messages dosyasına yazılacaktır. Rsyslog sunucusunda da eğer log dosyasına yazdırma yöntemini seçtiyseniz, /var/log/free-test.log dosyasına, Mysql db'sine yazdırıyorsanız da sunucudaki FreetestLogs DB'sinin SystemEvent tablosuna yazılmalıdır. Tabii bu örnek tüm logların log sunucusuna gönderilmesi durumunda geçerlidir.
Eğer siz, sadece belirli fasilitelere ait logları gönderiyorsanız, bu durumda ilgili fasiliteler için bir ileti oluşturup kontrol etmelisiniz.
Testlerinizi yaptınız ve iletilerin, log sunucusundaki ilgili dosyalara yazılmadığını gördünüz. Bu problemin nedenini anlamanın en güzel yolu, rsyslog'u debug mod'da çalıştırmaktır.
Debug özelliğini devreye almak için şu işlemleri yapabilirsiniz.
Önce, rsyslog servisini durdurun:
# /etc/init.d/rsyslog stop
Sonrasında da şu komutu verin:
/usr/sbin/rsyslogd -c3 -d
rsyslog debug modda çalışınca, uzaktaki sistemden tekrar log göndermeyi deneyebilir, debug çıktılarından problemi tespit edebilirsiniz.
FreeBSD sistemlerden log forwarding ile ilgili genel geçer yapılandırma işlemleri bu şekildeydi.
Şimdi aynı işlemin bir CentOS sunucudan nasıl yapılabileceğine değinmek istiyorum.
CentOS`tan Log Forwarding
Bu işlem, FreeBSD'ler için yaptığımız işlem adımlarının aynısını içeriyor. O nedenle sadece kısa açıklamalarla komutları verip geçeceğim. Zaten, CentOS sistemlerde de ön tanımlı olarak syslog kullanılmaktadır ve conf dosyası /etc/syslog.conf'tur.
CentOS'daki işlemlerden önce rsyslog'un yapılandırmasını halledelim.
Log Sunucusundaki İşlemler
Bu kısımda ayrı ayrı hem logları text tabanlı dosyalara yazdırmaktan, hem de MySQL DB'sine yazma işleminden bahsedeceğim.
Logları Text Dosyalarında Tutmak
Gene tüm logları, tek bir dosyaya ya da fasilitelerine göre birden fazla log dosyasına yazdırmanız münkün.
Test için kullandığım CentOS'un hostname'i centtest, bu sistemden gelen “tüm” logları /var/log/centtest.log dosyasına yazdırmak için rsyslog.conf dosyasına şu satırları ekliyorum:
+centtest *.* /var/log/centtest.log
Logları tek dosyaya yazdırmak için bu giriş yeterli.
Eğer fasilitelere göre ayrıştırmak isterseniz, örneğin, cron ile ilgili logları, /var/log/centtest-cron.log dosyasına yazdırmak için rsyslog.conf dosyasına şu satırı ekleyebilirsiniz.
+centtest cron.* /var/log/centtest-cron.log
Örnekleri kendi isteklerinize göre çoğaltabilirsiniz.
Şimdi 192.168.12.234 ip adresli centtest makinası için rsyslog sunucusunun /etc/hosts dosyasına aşağıdaki satırı girelim.
192.168.12.234 centtest
Sonra da rsyslog'u restart edelim.
/etc/init.d/rsyslog restart
İletileri, text tabanlı dosyalara yazdırmak için gerekli Rsyslog yapılandırması bundan ibaret.
Şimdi de, logların bir MySQL db'sine nasıl yazılabileceğine bakalım.
Logların MySQL`e Yazdırılması
Bu adımda da gene bir DB ve gerekli tabloları oluşturacağız. Sonrasında da, FreeBSD konusunda oluşturulan log_user kullanıcısına bu DB'ye yazma çizme izni vereceğiz.
Mysql sunucusuna bağlanıyoruz.
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny2-log (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Şimdi CenttestLog isimli bir DB oluşturalım.
mysql> CREATE DATABASE CenttestLogs;
Şimdi de gerekli iki tabloyu oluşturuyoruz.
Önce SystemEvents,
mysql> USE CenttestLogs; mysql> CREATE TABLE SystemEvents ( ID int unsigned not null auto_increment primary key, CustomerID bigint, ReceivedAt datetime NULL, DeviceReportedTime datetime NULL, Facility smallint NULL, Priority smallint NULL, FromHost varchar(60) NULL, Message text, NTSeverity int NULL, Importance int NULL, EventSource varchar(60), EventUser varchar(60) NULL, EventCategory int NULL, EventID int NULL, EventBinaryData text NULL, MaxAvailable int NULL, CurrUsage int NULL, MinUsage int NULL, MaxUsage int NULL, InfoUnitID int NULL , SysLogTag varchar(60), EventLogType varchar(60), GenericFileName VarChar(60), SystemID int NULL );
Sonra da SystemEventsProperties isimli tablo
mysql> USE CenttestLogs; mysql> CREATE TABLE SystemEventsProperties ( ID int unsigned not null auto_increment primary key, SystemEventID int NULL , ParamName varchar(255) NULL , ParamValue text NULL );
Son olarak, CenttestLogs isimli DB'ye erişmesi için log_user isimli bir kullanıcıya yaza çizme izni veriyoruz. (log_user isimli kullanıcı, yazının FreeBSD ile ilgili bölümünde oluşturulmuştu..)
mysql> USE mysql; mysql> GRANT ALL PRIVILEGES ON CenttestLogs.* TO 'log_user'@'localhost'; mysql> FLUSH PRIVILEGES;
Database ile ilgili işlemler bu kadar.
Şimdi, rsyslog.conf dosyasının ilgili yerine, centtes isimli sistemden gönderilecek logların, CenttestLogs isimli DB'deye yazılmasını söyleyen bir ekleme yapacağız.
/etc/rsyslog.conf dosyasını editliyoruz ve örneğimize uygun olan aşağıdaki satırı ekliyoruz.
+centtest *.* :ommysql:127.0.0.1,CenttestLogs,log_user,sifre
Bu işlemi yaptıktan sonra rsyslog servisini yeniden başlatıyoruz. Böylece centtest isimli hosttan gönderilecek “tüm” iletiler, CenttestLogs DB'sindeki SystemEvents isimli tabloya yazılacaktır.
Not: rsyslog.conf dosyasına eklenen centtest hostname'i için /etc/hosts dosyasına bir kayıt eklemeyi unutmayın. (Bkz: bir üstteki bölüm.)
CentOS`un Yapılandırılması
Burada da aynı şekilde rsyslog sunucusuna tüm logları gönderebileceğiniz gibi sadece seçtiğiniz fasilitelere ait logların gönderilmesini sağlayabilirsiniz.
Tüm Logların İletilmesi
Bunun için /etc/syslog.conf dosyasının içine şu satırı eklemek yeterli.
*.* @192.168.12.242
Böylece tüm loglar 192.168.12.242 ip'li rsyslog sunucusuna udp üzerinden forward edilecektir.
Belirli fasilitelere ait logların iletilmesi
Örneğin sadece cron ile ilgili logları forward etmek için şu /etc/syslog.conf dosyasına şu şekilde bir satır girebilirsiniz.
cron.* @192.168.12.242
Böylece sadece cron ile ilgili loglar, rsyslog'a iletilecektir.
Gerekli eklemeleri yaptıktan sonra syslog'u restart ediyoruz.
# service syslog restart
Herşey yolunda gittiyse, loglar forward edilecektir. Test etmek için gene logger komutundan yararlanabilirsiniz. (bkz: Yukarıdaki FreeBSD bölümü – Log Sunucusunun Test Edilmesi)
Evet CentOS ile ilgili yapılması gerekenler de bu kadardı.
Şimdi bir windows üzerinden log forward işlemine bakalım.
Windows'tan Log Forwarding
Bildiğiniz gibi Windowsların, ön tanımlı syslog desteği bulunmamaktadır. Dolayısı ile Windows üzerinden rsyslog sunucusuna eventlog çıktılarını göndermek için 3. parti yazılımlar kullanmak icap ediyor. Google'da kısa bir araştırma yaparsanız, bu iş için kullanılabilecek bir çok yazılım bulabilirsiniz. Ben burada birisi ücretli birisi ücretsiz iki adet 3. parti yazılımdan bahsedeceğim. Ancak öncesinde, rsyslog sunucusunu örnek windows bilgisayardan log alabilmek üzere yapılandıralım.
Log Sunucusundaki İşlemler
Ayarlar gene aynı diğer örneklerde olduğu gibi yapılıyor. Bu nedenle hızlıca geçeceğim.
Logları Text Dosyalarında Tutmak
Ben test için ismi wintest olan bir Windows Server 2003 kullanıyorum. Windows'dan gelen tüm mesajların /var/log/wintest.log dosyasına yazılması için gerekli rsyslog.conf satırları şöyle:
+wintest *.* /var/log/wintest.log
Şimdi de bu windows makina için /etc/hosts dosyasına bir kayıt girelim. Windows'un ip adresi 192.168.12.235'dir; bu durumda hosts dosyasına şu şekilde bir satır ekliyorum:
192.168.12.235 wintest
Son olarak da rsyslog servisini yeniden başlatıyoruz.
# /etc/init.d/rsyslog restart
Logları text tabanlı olarak dosyalarda tutmak için bu ayarlar yeterli, şimdi de logların bir MySQL database'inde tutulması işlemine bakalım.
Logların MySQL`e Yazdırılması
Bunun için herzamanki gibi bir db ve ilgili tabloları oluşturmamız gerekiyor.
Benim kullandığım Windows'un hostname'i wintest olduğundan dolayı, WintestLogs isimli bir db oluşturuyorum.
Mysql sunucusuna bağlanıyoruz.
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny2-log (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Şimdi WintestLogs isimli bir DB oluşturalım.
mysql> CREATE DATABASE WintestLogs;
Şimdi de gerekli iki tabloyu oluşturuyoruz.
Önce SystemEvents,
mysql> USE WintestLogs; mysql>CREATE TABLE SystemEvents ( ID int unsigned not null auto_increment primary key, CustomerID bigint, ReceivedAt datetime NULL, DeviceReportedTime datetime NULL, Facility smallint NULL, Priority smallint NULL, FromHost varchar(60) NULL, Message text, NTSeverity int NULL, Importance int NULL, EventSource varchar(60), EventUser varchar(60) NULL, EventCategory int NULL, EventID int NULL, EventBinaryData text NULL, MaxAvailable int NULL, CurrUsage int NULL, MinUsage int NULL, MaxUsage int NULL, InfoUnitID int NULL , SysLogTag varchar(60), EventLogType varchar(60), GenericFileName VarChar(60), SystemID int NULL );
Sonra da SystemEventsProperties isimli tablo
mysql> USE WintestLogs; mysql> CREATE TABLE SystemEventsProperties ( ID int unsigned not null auto_increment primary key, SystemEventID int NULL , ParamName varchar(255) NULL , ParamValue text NULL );
Son olarak, WintestLogs isimli DB'ye erişmesi için log_user isimli bir kullanıcı ekliyoruz ve gerekli izinleri veriyoruz. (Siz kırmızı ile belirlenmiş yerleri kendi isteğinize göre değiştirin.)
mysql> USE mysql; mysql> GRANT ALL PRIVILEGES ON WintestLogs.* TO 'log_user'@'localhost'; mysql> FLUSH PRIVILEGES;
Database ile ilgili işlemler bitti.
Şimdi de rsyslog.conf dosyasının ilgili yerine, wintest isimli hosttan gelecek logların WintestLogs isimli DB'deki SystemEvents isimli tabloya yazılması için gerekli satırı ekliyoruz.
+wintest *.* :ommysql:127.0.0.1,WintestLogs,log_user,sifre
Rsyslog servisini yeniden başlattığınız zaman ayarlar devreye girecek ve DB'ye loglama işlemi başlayacaktır.
Not: rsyslog.conf dosyasına eklenen wintest hostname'i için /etc/hosts dosyasına bir kayıt eklemeyi unutmayın. (Bkz: bir üstteki bölüm.)
Rsyslog sunucusu tarafındaki işlemler bu kadar. Şimdi Windows tarafındakilere bakalım.
Windows'un Yapılandırılması
Bu bölümün başında da söylediğim gibi Windows'a 3. parti bir yazılım kurmamız gerekiyor. Ben iki alternatif üzerinde duruyorum; Birincisi Snare (Syslog for Windows) isimli ücretsiz bir yazılım. İkincisi ise EventReporter isimli Rsyslog'un geliştiricileri tarafından yazılmış ücrteli bir yazılım. EventReporter yazılımını almanız durumunda rsyslog'un geliştirilmesine katkı vermiş oluyorsunuz; ben de işte bu yüzden EventReporter'a yer vermek istiyorum.
Öncelikle EventReporter kurulumu ve yapılandırmasından, sonrasında ise Snare ile aynı işlemleri yapmaktan bahsedeceğim.
EventReporter Kurulumu
EventReporter, Windows'lar için bir log işleyicisi ve syslog forwarder'ıdır ve rsyslog'u geliştiren ekip tarafından yazılmakta olduğundan dolayı Rsyslog ve bir sonraki yazının konusu olan PhpLogcon ile tam uyumludur. Ancak kötü yanı, yazılımın ücretli ve windows başına 59 dolar gibi bir fiyatı olmasıdır. Özellikle PhpLogcon kullanarak windows sunucularınız ile alakalı online log monitoring yapmak isterseniz, phplogcon'a tam uyumu nedeni ile bu yazılımı kullanmaktan başka seçenek yok gibi. Çünkü diğer muadil yazılımlar ile phplogcon pek uyumlu çalışmıyorlar. En azından ben denedim ve başarılı sonuç alamadım.
Herneyse, Eventreporter kullanmak istiyorsanız, bu iş için biraz bütçe ayırmanız gerekiyor. Özellikle ücretsiz bir yazılım arıyorsanız o durumda bir sonraki başlıkta işlenen Snare'e bakabilirsiniz.
Eventreporter'ın kurulumu oldukça basit. Download adresinden gerekli exe dosyasını indirip next next next şeklinde kurulumu yapıyorsunuz.
Kurulum ve yapılandırma işlemleri epey basit olduğundan dolayı bu kısımda, detaylı kuruluma yer vermeyeceğim. Eventlog'ları rsyslog sunucusuna aktarmak için yapmanız gerekenleri resimli olarak anlatan bir dökümana şu adresten erişebilirsiniz:
http://www.eventreporter.com/common/en/stepbystep/forwarding-nt-eventlogs-to-syslog-mwa12.php
Yönergeleri takip edip yapılandırma işlemini hallettiğiniz zaman event iletileri rsyslog sunucusuna sorunsuz olarak iletilecektir. Eğer logların rsyslog sunucusunda ilgili dosyaya yazılmıyorsa, sebebini anlamak için rsyslog'u bir kez daha debug parametresi ile başlatıp durumu inceleyebilirsiniz.
EventReporter ile ilgili daha fazla bilgi için aşağıdaki linkten yararlanabilirsiniz.
http://www.eventreporter.com/en/
Şimdi de Snare ile ilgili bilgilere geçelim.
Snare Kurulumu
Bu kurulumun da bir esprisi yok, Download adresinden exe dosyasını indirip next next next demek sureti ile sisteme kuruyorsunuz. Yapılandırması da gene çok kolay. Snare sisteminize bir servis olarak kuruluyor ve 6161 nolu tcp portu dinlemeye başlıyor. Yönetim ve yapılandırma işlerinin yapılabileceği güzel bir web arayüzü var, ilgili arayüze erişmek için aşağıdaki adresi browser'ınıza yazabilirsiniz.
http://127.0.0.1:6161
Snare'in EventLog'ları rsyslog sunucusuna iletmesi için gereken yapılandırma işlemleri, aşağıda bir örneği görülen “Networkd Configuration” segmesinden yapılıyor.
Bu ekranda 4 önemli nokta var.
Birincisi, bir hostname belirleyeceğiniz “Override detected DNS name with:” isimli kısım. Benim örneğimde sunucunun adı wintest, bu alana wintest yazabileceğim gibi boş bırakmam da bir şey değiştirmez. Çünkü rsyslog'un hosts dosyasına wintest isimli makina için bir giriş yaptım. Ancak siz yine de sağlama alıp, rsyslog.conf dosyasında +sunucuismi olarak belirttiğiniz hostname'i buraya yazın.
İkinci alan ise, Destination Snare Server address isimli bölümdür. Buraya rsyslog sunucunuzun ip adresini yazın.
Üçüncü alan, rsyslog sunucusunun portunu belirlediğiniz bölümdür. rsyslog default 514. porttan çalıştığı için buraya 514 yazıp UDP'yi seçiyoruz.
Son olarak, Enable SYSLOG Header bölümündeki kutucuğu işaretleyin. Böylce, snare logları rsyslog'un anlayabileceği syslog formatı ile gönderecektir. Facility ve Priority bölümlerini istediğiniz gibi set edebilirsiniz. Ben tüm logları tek bir log dosyasına yazdıracağım için burada herhangi bir değişiklik yapmıyorum.
Ayarlarınızı tamamladıktan sonra, Change Configuration butonuna basıp ayarları kaydedin. En son olarak da sol menudeki “Apply the Latest Audit Configuration” linkine tıklayıp değişikliklerin devreye alınmasını sağlayın.
Bu noktada Snare'e özel olarak, rsyslog sunucusunda küçük bir tanımlama yapmak gerekiyor. Snare, rsyslog'a eventlog çıktılarını aşağıdakine benzer bir formatla yolluyor.
wintest#011MSWinEventLog#0111#011Security#0114169#011Fri
Görüldüğü gibi format pek anlaşılır değil. Bu sorunu aşmak için rsyslog'un gelen veriyi şekillendirmesini sağlayabilirsiniz. Bunun için /etc/rsyslog.conf dosyanızın GLOBAL DIRECTIVES kısmında bir yere, aşağıdaki iki satırı ekleyebilirsiniz:
$EscapeControlCharactersOnReceive off
Böylece Snare'den gelen loglar aşağıdaki gibi okunaklı olacaktır.
wintest MSWinEventLog 1 Security 4169 Fri
Ancak, bu yöntemi Snare kullanmak istemeniz durumunda uygulayın. Diğer muadil yazılımlar için böyle bir rsyslog.conf girdisine ihtiyaç bulunmamaktadır.
Snare ile ilgili genel yapılandırma işlemleri bu kadar, normal şartlarda Windows'un EventLog'ları Snare üzerinden rsyslog sunucusuna iletiliyor olmalıdır. Test etmek için herhangi bir windows servisini restart edebilirsiniz. Loglar ilgili dosyaya yazılmamaktaysa, yazının daha önceki bölümlerinde anlatıldığı gibi rsyslog'u debug parametresi ile çalıştırabilirsiniz.
Snare ile ilgili daha fazla özelleştirme yapmak isterseniz, aşağıdaki linkten yararlanabilirsiniz.
http://www.intersectalliance.com/projects/SnareWindows/index.html
Cisco Asa'dan Log Forwarding
Yazının bu son bölümünde de bir Cisco ASA 5505'den rsyslog sunucusuna nasıl log gönderilebileceğine değinmek istiyorum.
Önce rsyslog sunucusundaki rutin yapılandırma işlemine bakalım.
Log Sunucusundaki İşlemler
Bu kısımda da logları text dosyalarında ya da bir MysSQL DB'sinde tutabiliyorsunuz. Keyfinize göre iki yolu da seçebilirsiniz.
Logları Text Dosyalarında Tutmak
Test için kullandığım Asa'nın hostname'i ciscoasa bu nedenle rsyslog.conf dosyasının içerisine aşağıdaki gibi bir satır ekliyorum.
+ciscoasa *.* /var/log/ciscoasa.log
Sonra da /etc/hosts dosyasına, 192.168.12.236 ip adresli ciscoasa için şu eklemeyi yapıyorum.
192.168.12.236 ciscoasa
Dosyayı kaydedip, rsyslog'u yeniden başlatıyorum.
# /etc/init.d/rsyslog restart
Bu şekilde rsyslog, ciscoasa'dan gelecek tüm logları /var/log/ciscoasa.log dosyasına yazacak şekilde set edilmiş oluyor.
Logların MySQL`e Yazdırılması
Bunun için herzamanki gibi bir db ve ilgili tabloları oluşturmamız gerekiyor.
Benim kullandığım CiscoASA'nın hostname'i ciscoasa olduğundan dolayı, CiscoAsaLogs isimli bir db oluşturuyorum.
Mysql sunucusuna bağlanıyoruz.
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 31
Server version: 5.0.51a-24+lenny2-log (Debian)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Şimdi CiscoAsaLogs isimli bir DB oluşturalım.
mysql> CREATE DATABASE CiscoAsaLogs;
Şimdi de gerekli iki tabloyu oluşturuyoruz.
Önce SystemEvents,
mysql> USE CiscoAsaLogs; mysql>CREATE TABLE SystemEvents ( ID int unsigned not null auto_increment primary key, CustomerID bigint, ReceivedAt datetime NULL, DeviceReportedTime datetime NULL, Facility smallint NULL, Priority smallint NULL, FromHost varchar(60) NULL, Message text, NTSeverity int NULL, Importance int NULL, EventSource varchar(60), EventUser varchar(60) NULL, EventCategory int NULL, EventID int NULL, EventBinaryData text NULL, MaxAvailable int NULL, CurrUsage int NULL, MinUsage int NULL, MaxUsage int NULL, InfoUnitID int NULL , SysLogTag varchar(60), EventLogType varchar(60), GenericFileName VarChar(60), SystemID int NULL );
Sonra da SystemEventsProperties isimli tablo
mysql> USE CiscoAsaLogs; mysql> CREATE TABLE SystemEventsProperties ( ID int unsigned not null auto_increment primary key, SystemEventID int NULL , ParamName varchar(255) NULL , ParamValue text NULL );
Son olarak, CiscoAsaLogs isimli DB'ye erişmesi için log_user isimli bir kullanıcı ekliyoruz ve gerekli izinleri veriyoruz. (Siz kırmızı ile belirlenmiş yerleri kendi isteğinize göre değiştirin.)
mysql> USE mysql; mysql> GRANT ALL PRIVILEGES ON CiscoAsaLogs.* TO 'log_user'@'localhost'; mysql> FLUSH PRIVILEGES;
Database ile ilgili işlemler bitti.
Şimdi de rsyslog.conf dosyasının ilgili yerine, ciscoasa isimli hosttan gelecek logların CiscoAsaLogs isimli DB'deki SystemEvents isimli tabloya yazılması için gerekli satırı ekliyoruz.
+ciscoasa *.* :ommysql:127.0.0.1,CiscoAsaLogs,log_user,sifre
Rsyslog servisini yeniden başlattığınız zaman ayarlar devreye girecek ve DB'ye loglama işlemi başlayacaktır.
Not: rsyslog.conf dosyasına eklenen ciscoasa hostname'i için /etc/hosts dosyasına bir kayıt eklemeyi unutmayın. (Bkz: bir üstteki bölüm.)
Rsyslog sunucusu tarafındaki işlemler bu kadar. Şimdi Cisco tarafındakilere bakalım.
Cisco ASA'nın Yapılandırılması
Normalde bu işi, Cisco'nun yönetim arabirimi olan ASDM üzerinden grafiksel olarak yapabilirsiniz, ancak ben daha pratik oluğundan dolayı komut satırını tercih ediyorum.
Gerekli komutlar sırası ile şu şekilde:
ciscoasa> en Password: ************** ciscoasa# conf t ciscoasa(config)# logging enable ciscoasa(config)# logging trap informational ciscoasa(config)# logging host inside 192.168.12.242
Burada satırlar ile ilgili kısa açıklama yapmak gerekirse:
logging enable: logging'i devreye almaktadır.
logging trap informational: rsyslog sunucusuna Info loglarının gönderilmesini sağlamaktadır.
logging host inside 192.168.12.242: logların (inside) interface'e bakan 192.168.12.242 ip'li syslog sunucusuna gönderilmesini sağlar.
Herşey yolunda gittiyse, ciscoasa hostname'li asa'nın info logları /var/log/ciscoasa.log dosyasına yazılmaktadır.
Cisco üzerinde, log facility'lerini de belirlemek ya da info logları yerine debug, critic, warning, notice vs. gibi level bazlı loglama yapmak da mümkün. Bu gibi ayarları kendi ihtiyaçlarınız doğrultusunda yapabilirsiniz.
Örnek olarak info mesajları yerine debug mesajlarını göndermek isterseniz ilgili trap komutu şu şekilde olmalıdır.
ciscoasa(config)# logging trap debugging
Tüm level'lar aşağıdaki gibidir, ihtiyacınıza göre birini seçebilirsiniz.
alerts
critical
debugging
emergencies
errors
informational
notifications
warnings
Evet rsyslog kullanarak merkezi log sunucusu oluşturmak ile ilgili temel işlemler bundan ibaretti. Eğer bir rsyslog sunucusu set ettiyseniz, son olarak bir noktaya dikkat çekmek istiyorum. Diskinizde yer kalmaması gibi problemler yaşamamak için eğer, logları text tabanlı dosyalarda tutuyorsanuz, üretilen log dosyalarını logrotate'e eklemeyi ya da MySQL'de tutuyorsanız backuplarını alıp belirli periyodlarda truncate etmeyi unutmayın :)
Bu yazılar da ilginizi çekebilir:
- FreeBSD üzerine Rsyslog Kurulumu ve Yapılandırması
- CentOS üzerine Rsyslog Kurulumu ve Yapılandırması
- phpLogCon ile Online Log Monitoring
- Mysql Destekli Pure-FTPD Kurulumu
- CentOS üzerinde Fail2Ban ile Brute Force Önlemi
Yorumlar
Trackbacks
Yorumda bulunun.
syslog-ng ile arasındaki fark nedir?
[Cevapla]
merhaba,
Asagidaki adreste bir karsilastirma tablosu mevcut.
http://www.rsyslog.com/doc-rsyslog_ng_comparison.html
Öyle çok büyük farklar yok aralarında ama ben Phplogcon ile olan uyumu nedeni ile kullanıyorum mesela.
[Cevapla]
Merhaba ben rsyslog’da dil desteği problemi yaşıyorum Türkçe Windows Yüklü bilgisayarlardan gelen logları okuyamıyorum,bu problem için çözüm bulabilirsek sevinirim
[Cevapla]
Merhaba,
Ben boyle spesifik sorunlar icin rsyslog’un gelistiricisi Rainer’a basvuruyorum. Siz de bu sekilde yapabilirsiniz.
[email protected]
kendisine bir e-mail gonderin, bir yolu varsa muhakkak yardimci olacaktir.
[Cevapla]
Merhaba,
Güzel paylaşımlarda bulunuyorsunuz, teşekkür ederim.
[Cevapla]
merhaba,
Merkezi rsyslog sunucum uzerinde (centos – 2.0 ve digeri freeBSD – 5.4)farkli makinalardan gelen loglari, farkli dosyalara kaydedebiliyorum. Fakat ayni uzak makinadan gelen log mesajlarini, farkli dosyalara yonlendirmeyi nasil yapacagim acaba? Uzak makinanin loglarini kosan servislere gore ayirmak istiyorum.
Yardimlariniz icin simdiden tesekkur ederim.
[Cevapla]
Merhaba,
Yazida ilgili basliklarda bunun nasil yapilabildigi anlatiliyor.
Örnek olarak test1 isimli sistemden gelen loglari ayristirmak icin rsyslog sunucunuzda su sekilde bi tanimlama yapabilirsiniz.
Bu sekilde cron islemleri ile ilgili loglar test1-cron.log dosyasina, auth ile ilgili loglar test1-auth.log dosyasina vs. yonlendirilecektir.
[Cevapla]
cok tesekkurler.
[Cevapla]
Merhaba, doküman için teşekkürler
çok faydalı açıklayıcı olmuş.
Apache’de her bir virtualhostun logunu ayrı dosyalara yazmak istiyoruz.
vhost tanımında ErrorLog syslog:local1 gibi tanımlıyoruz, daha sonra syslog.conf da local1 fasilitesinin uzak log sunucusuna gitmesini sağlıyoruz ancak, tüm vhost tanımlarında local1 yazdığı için haliyle hepsi aynı dosyada toplanıyor. bunları ayırmak için pratik bir yol var mıdır?
[Cevapla]
Log sunucuya hostname ile değilde,ip adresleri nasıl logları alabiliriz?
Örnek: ” +hosname” değil “+ 192.168.9.0 ” gibi yazabilirmiyiz.
[Cevapla]
Yazabilirsiniz…
Ancak o durumda, ilgili hosttan gelen loglari, ayrı bir log dosyasina yazdirmak mumkun olmuyor. Cunku rsyslog hangi loglarin hangi dosyalara yazilacagina, logun geldigi “hostname”‘e bakarak karar veriyor.
Log x isimli sunucundan gelirse x.log dosyasina yaz, y isimli sunucundan gelirse y.log dosyasina yaz gibi…
Bu nedenle, conf dosyasinda +hostname belirtiyoruz.
Ayrica bu hostname’İn rsyslog sunucusunda cozumlenebilir olmasi gerekiyor. Dolayisi ile de loglarin geldigi sunucularin hostnamelerinin (özellikle dns servisi olmayan networklerde) rsyslog sunucusunun hosts dosyasina giriyoruz.
[Cevapla]
teşekkürler yardımınız için.keşke ip adresleri ile de ayrı loglama yapabilseydik :)
[Cevapla]
Merhaba,
Öncelikle sitede bir kaç makalenizi okudum. Türkçe kaynak olarak harika. Ellerineze sağlık demekten başka bir şey kalmıyor. Bu makalede bir sorunla karşılaştım. Bunuda buraya yazmak istedim.
MySql’e bağlanmak istediğimde bu hatayı alıyorum.
# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)
Netten başka yollarla bağlanmayı denedim. Orada da şu hatayı aldım.
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11 Server version: 5.0.77 Source distribution
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
mysql> Use mysql;
ERROR 1044 (42000): Access denied for user ”@’localhost’ to database ‘mysql’ mysql>
Paketleride kaldırdım yeniden kurdum ancak hatayı aşamadım. sizce nedendir acaba?
[Cevapla]
Selamlar
Mysql’i yeni kurduysanız root şifresi bostur. Bu nedenle -p kullanmadan bağlanmayı deneyin; o sekilde sorun cikmsyacaktir.
[Cevapla]
Merhaba,
sistemde kurulumu yaptım ancak /etc/rsyslog.d/mysql.conf dosyası görünmüyor. Diğer adımları sırasıyla uyguladığım halde DB’ye yazdıramıyorum. sorun aşağıdaki metni yapamadığım için zannedersem. Bunu nası çözerim. Yardımlarınız içi teşekkürler…
——————————–
Kurulum sonrasında, rsyslog mysql modülünün devreye alınması için /etc/rsyslog.d/mysql.conf dosyasına gerekli satır ekleniyor. Aynı zamanda, lokal iletilerin mysql’e yazılması için gerekli bir satır daha ekleniyor, ancak biz kurulum sırasında otomatik konfigurasyon işlemine NO dediğimiz için bu eklenen satırda gerekli DB bilgileri bulunmuyor. Eğer rsyslog’u bu ayarlar ile başlatırsanız mysql’e yazılamama problemi ile ilgili hata verecektir. Bu hatayı /var/log/syslog dosyasında aşağıdaki şekilde görebilirsiniz.
Çıktı
Sep 7 14:41:11 debvm rsyslogd: [origin software=”rsyslogd” swVersion=”3.18.6″ x-pid=”4286″ x-info=”http://www.rsyslog.com”] restart
Sep 7 14:41:11 debvm rsyslogd: Trouble with MySQL connection properties. -MySQL logging disabled
Sep 7 14:41:11 debvm rsyslogd: the last error occured in /etc/rsyslog.d/mysql.conf, line 5
Sep 7 14:41:11 debvm rsyslogd: warning: selector line without actions will be discarded
Bu durum rsyslog’un çalışmasını engellemez ancak biz gene de hatayı ortadan kaldıralım. Şimdi, /etc/rsyslog.d/mysql.conf dosyasının editleyelim ve dosya içerisinde bulunan aşağıdaki satırın başına # koyup comment out ederek devre dışı bırakalım.
Çıktı
*.* : ommysql:localhost,,,
Aynı dosyanın içerisinde bir de, $ModLoad ommysql ibrerli satır ise rsyslog mysql modülünün aktifleştirilmesini söylemektedir. Yazının ilerleyen bölümlerinde mysql’e loglama işleminin nasıl yapılacağı da anlatılacaktır. Eğer siz de uzak sunuculardan gelen logları mysql db’de bulunan tablolara yazmak isterseniz bu satırı silmeyin.
————————————-
[Cevapla]
Selam,
Böyle bir kaynağı Türkçe bulmak çok güzel. Elinize sağlık.
Benim sorunum uzaktaki serverdan log yazdıramıyorum. Makalede geçen syslog.conf dosyasını düzenledim. Ancak logları yollayamadım. Lokalde db’ye yazmada sorun çıkmıyor. isterseniz conf dosyalarını yollayıp birlikte bakabiliriz yada beni yönlendirebileceğiniz bir kaynak mevcut mu ?
[Cevapla]
Selamlar,
netstat -an |grep 518
komutunun ciktisini gonderebilirseniz yardimci olurum. Zannedersem rsyslog ilgili portu dinlemiyor.
[Cevapla]
Pardon port 514 olacak
netstat -an |grep 514
Eger herhangi bir sonuc donmuyorsa,
/etc/sysconfig/rsyslog dosyasini editleyin ve icerisindeki
SYSLOGD_OPTIONS=”-m 0″
ibaresine su sekilde olacak gibi ekleme yapin:
SYSLOGD_OPTIONS=”-m 0 -r514″
ve rsyslog’u restart edin. Bu sekilde sorun duzelecektir.
[Cevapla]
/etc/sysconfig/rsyslog dosyasına dediğiniz parametreyi ekledim. Sorun halen devam etmekte. Server ve Client tarafının çıktıları aşağıdadır.
Serverda netstat -an |grep 514 ;
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN
tcp 0 0 :::514 :::* LISTEN
udp 0 0 0.0.0.0:514 0.0.0.0:*
udp 0 0 :::514 :::*
Client netstat -an |grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN
tcp 0 :::514 :::* LISTEN
udp 0 0 0.0.0.0:514 0.0.0:*
udp 0 0 0.0.0.0:514 0.0.0.0:* udp 0 0 :::514 :::*
[Cevapla]
Su durumda logların iletilmesi ile ilgli yapılandırmada sorun olabilir.
Server uzerindeki rsyslog’u asagidaki gibi debug modda calistirip, uzan sunucudan log gelip gelmedigini kontrol edebilirsiniz.
Zira log geliyor ama ilgili dosyaya yazilamiyor vs. gibi durumlari yakalayabilirsiniz.
# /etc/init.d/rsyslog stop
# /usr/sbin/rsyslogd -c3 -d
Debug modda calisirken, 514’u dinleyip dinlemedigini yeniden test edin.
[Cevapla]
Merhaba,
Debug modda Rsyslog server Client’tan gönderilen logları almıyor. Ancak 514 portunu dinlemeye devam ediyor. Yapılandırmada herhalde sorunum var. Makaledekinin aynılarını tekrar uyguladım ancak olmadı. Sorun nerede olabilir acaba ?
[Cevapla]
Su durumda, client tarafındaki rsyslog’u debug modda calistirip ne işlem yaptigina bakabilirsiniz.
Bana oyle geliyor ki, client merkezi rsyslog sunucunuzu bulamiyor olabilir; client’ta merkezi sunucunun hostname’i cozumlenemiyor olabilir vs. Anladigim kadari ile gozunuzden kactigi icin atladiginiz kucuk bir sey var.
Bence bir debug mode’da calistirin.
[Cevapla]
Dediklerinizin hepsini kontrol ettim. Sorun halen devam ediyor gibiydi. Ancak makalenizi yeniden okuyup rsyslog sayfasından da örnek conf dosyalarını incelediğimde hatamı buldum.
Server’da rsyslog.conf dosyasına server dışında, client bilgilerini tanımlamadığımı gördüm. Aşağıdaki parametreleri ekleyince düzeldi.
+Client_hostname
*.* :ommysql:hostname,dbname,dbuser,userpass
Yardımlarınız için teşekkürler. Makaleyi iyi okumamanın verdiği cezayı çektim :))
[Cevapla]
Rica ederim.
Bazen dalgınlıkla kaçabiliyor bazı şeyler; normaldir.
[Cevapla]
Merhaba,
Rsyslog routerlardan log almaya çalışıyorum ancak başarılı olamıyorum. Aynı işi Rsyslog’u dudrdurup Syslog’u çalışırınca log alabiliyorum. Rsyslog’u debug modda çalıştırdım. Gelen çıktı aşağıdaki gibidir;
0337.420884883:main queue:Reg/w0: hostname filter ‘+Router1’ does not match ‘RsyslogServer’
0337.420903549:main queue:Reg/w0: hostname filter ‘+Router1’ does not match ‘RsyslogServer’
0337.421243403:main queue:Reg/w0: main queue: entering rate limiter
0337.421273713:main queue:Reg/w0: main queue:Reg/w0: worker IDLE, waiting for work.
Sorun nerede olabilir acaba ?
[Cevapla]
Selamlar,
hostname’lerle ilgili bir sorun var goruuyor. Yazida hostname’lerin cozulebilmesi ile alakali bir kac yerde uyari var. Goz atarsaniz problemi yakalayabilirsiniz.
[Cevapla]
Çağrı Bey merhaba,
ben bir sorun göremedim. Belki kaçırdığım bir nokta var, sizde bakabilirmisiniz..?
Teşekkürler
———————– rsyslog.conf ———————–+rsyslog
$ModLoad ommysql
$ModLoad imuxsock
$ModLoad imklog
$Modload imudp
$UDPServerRun 514
$Modload imtcp
$InputTCPServerRun 514
## Optional
$UDPServerAddress 0.0.0.0
## Optional
$RepeatedMsgReduction ()
$template dbFormat,”insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (‘%msg%’, %syslogfacility%, ‘%HOSTNAME%’,%syslogpriority%, ‘%timereported:::date-mysql%’, ‘%timegenerated:::date-mysql%’, %iut%, ‘%syslogtag%’)”,sql
*.* :ommysql:localhost,syslogdb,root,root
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#Router Hostname SE800
+SE800
*.* :ommysql:localhost,syslogdb,root,root
*.* /var/messages
————————————————————————————
Hosts File
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost localhost
::1 localhost localhost
192.168.1.67 rsyslog
192.168.1.250 SE800
————————————————————
Rsyslog Debug Output
1145.489916890:main queue:Reg/w0: (/var/log/secure)
1145.490052627:main queue:Reg/w0: hostname filter ‘+SE800’ does not match ‘rsyslog’
1145.490076677:main queue:Reg/w0: hostname filter ‘+SE800’ does not match ‘rsyslog’
1145.490270520:main queue:Reg/w0: main queue: entering rate limiter
1145.490300654:main queue:Reg/w0: main queue:Reg/w0: worker IDLE, waiting for work.
————————————————————
[Cevapla]
Selamlar,
SE800 isimli hostname, rsyslog sunucusu uzerinden cozumlenebiliyor mu ? Ayni sekilde log gonderen sistem de isimden rsyslog sunucusunu cozumleyebiliyor mu ?
Zira bu sorun tipik bir yanlis isim cozumleme sorununa benziyor. Bu konuda ben de sorun yasamistim baskalari da yasiyorlar :)
[Cevapla]
Merhaba,
“ping SE800” komutuna cevap dönüyor bu da çözümlendiği anlamında kabul ediyorum. Router’dan da Rsyslog sunucusuna ulaşılabiliyor.
Aynı makinada üzerindekini Syslog’ta denediğimde sorunsuz log alabiliyorum. Sorun Rsyslog’ta sanıyorum. Siz karşılaştığınız sorunları nasıl aşabildiniz ?
[Cevapla]
Benim bu konuda yasadigim hostname sorunu, su an sizin paylastiginiz debug loglarda goruldugu gibi log gonderen sistemin hostname’i ile, rsyslog conf dosyasi icerisinde o sistem icin acilan section’da +HOSTNAME seklinde yazilan hostname ile uyusmamasi ile alakaliydi.
rsyslog’a uzak sistemden bir log geliyor, ama conf dosyasinda + ile belirtilen hostname’lerden biri ile uyusmadigi icin logu herhangi bir yere yazmiyor. Sizin sorununuz da buymus gibi gorunuyor; zira debug loglari bu yonde.
[Cevapla]
Merhaba,
Sorunu aşabildiniz mi? Eğre aştıysanız neler yaptınız ?
En son ihtimal bunu Rsyslog’u geliştirenlere sormak belki onlar bana bir cozum bulabilirler?
Teşekkürler…
[Cevapla]
Evet ben sorunumu cozmustum, simdi gozume bir sey carpti; rsyslog.conf dosyanizda rsyslog sunucunuz icin bir sectipn yok.
http://www.syslogs.org/rsyslog-ile-merkezi-log-sunucusu-kurulumu/#Merkezi_Log_Sunucu_Yaplandrmas bolumunde anlatildigi gibi rsyslog’un kendi loglari ile alakali bolumlerinin en tepesine +rsyslog ibaresini ekler misiniz ?
Yani su sekilde olmali:
———————– rsyslog.conf ———————–+rsyslog
$ModLoad ommysql
$ModLoad imuxsock
$ModLoad imklog
$Modload imudp
$UDPServerRun 514
$Modload imtcp
$InputTCPServerRun 514
## Optional
$UDPServerAddress 0.0.0.0
## Optional
$RepeatedMsgReduction ()
$template dbFormat,”insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (‘%msg%’, %syslogfacility%, ‘%HOSTNAME%’,%syslogpriority%, ‘%timereported:::date-mysql%’, ‘%timegenerated:::date-mysql%’, %iut%, ‘%syslogtag%’)”,sql
+rsyslog
*.* :ommysql:localhost,syslogdb,root,root
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#Router Hostname SE800
+SE800
*.* :ommysql:localhost,syslogdb,root,root
*.* /var/messages
————————————————————————————
Bu sekilde rsyslog ve se800 gibi iki ayri section olusturmus oluyorsunuz. debug logda soylenen match edilememe durujmu bundan kaynaklanabilir.
Duzenlemeyi yapip tekrar dener misiniz ? Gelismelerden haberdar ederseniz sevinirim.
[Cevapla]
Merhaba,
Dediğiniz section var ama bir üst satırda kalmış kopyalarken, orjinali şöyle;
———————– rsyslog.conf ———————–
+rsyslog
$ModLoad ommysql
$ModLoad imuxsock
$ModLoad imklog
$Modload imudp
$UDPServerRun 514
$Modload imtcp
$InputTCPServerRun 514
## Optional
$UDPServerAddress 0.0.0.0
## Optional
$RepeatedMsgReduction ()
$template dbFormat,”insert into SystemEvents (Message, Facility,FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (‘%msg%’, %syslogfacility%, ‘%HOSTNAME%’,%syslogpriority%, ‘%timereported:::date-mysql%’, ‘%timegenerated:::date-mysql%’, %iut%, ‘%syslogtag%’)”,sql
+rsyslog
*.* :ommysql:localhost,syslogdb,root,root
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* /var/log/maillog
cron.* /var/log/cron
*.emerg *
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#Router Hostname SE800
+SE800
*.* :ommysql:localhost,syslogdb,root,root
*.* /var/messages
———————————————————-
[Cevapla]
En ustteki +rsyslog section’ini sildikten sonra deneyin bence.
Bir de /var/messages isimli bir dosya var mi ? rsyslog yazmaya yetkili mi ? kontrol edin.
+rsyslog’u kaldırınca sorun çözüldü. Gerçekten ilginç oldu. Teşekürler yardımlarınız için, izin verirseniz bende karşılaştığım sorunları blog’ta sitenizi kaynak göstererek paylaşacağım.
Geçmiş olsun, rica ederim.
İstediğiniz gibi paylaşabilirsiniz.
Merhaba,
Rsyslog üzerinden gelen alarmları mail olarak atmak istiyorum. Bu konu hakkında bilginiz var mı veya örnekler varsa paylaşabilirmisiniz ?
Teşekkürler…
[Cevapla]
swatch’ı öneririm. Log dosyasında geçen ifadeye göre sadece e-posta değil her türlü aksiyonu aldırabilirsiniz.
[Cevapla]
Merhaba,
Merkezi rsyslog sunucumuza windowstan IIS ve ftp loglarini gondermek istiyoruz. Bunun icin ucretsiz bir yazilim onerebilir misiniz ?
LogPArser 2.2 yi denedik fakat scriptleri elle olusturup belli zamanlarda calismalari icin uyarlamak gerektiginden baska bir yazilim kullanmak istiyoruz.
Datagram SyslogAgent’i denedik, fakat ic ice klasor gosteremedigimiz icin kullanamiyoruz.
Yardimlariniz icin simdiden tesekkurler.
[Cevapla]
Snare’e baktiniz mi ? İşinize yarayacaktır sanıyorum.
http://www.intersectalliance.com/projects/BackLogNT/
[Cevapla]
Yaniliyorsam duzeltin fakat Snare IIS/ftp logu gonderemiyor gibi. Sadece Event loglarini yorumlayabiliyor Snare sanirim.
[Cevapla]
Haklisiniz, kusura bakmayin tam anlayamamisim olayi. Bildiğim kadarı ile windows syslog desteklemiyor; o yuzden direk olarak uygulama bazinda uzak sunucuya log gondermek nasil mumkun olabilir bilemiyorum.
Belki IIS loglarini event viewer’a gondermeyi, event viewer’dan da snare ile syslog sunucunuza göndermeyi deneyebilirsiniz. Bildiğim kadari ile IIS aspx ile ilgili error loglarını vs. event viewer’a yazabiliyor.
[Cevapla]
IIS aspx ile ilgili bazi loglari event viewera yaziyor evet fakat bana tum loglar lazim. Sanirim bu yontem de yeterli olmayacak bana.
Ilginize tesekkur ederim.
[Cevapla]
merhaba,
rsyslog servisini makalenize göre kurdum. çalıştı. elinize sağlık. şunu sormak istiyorum, windows event loglarını system/security/application olarak 3 ayrı dosyaya yazdırmak istesem *.* yerine ne yazmam gerekir acaba?
[Cevapla]
Merhaba,
Makale için öncelikle teşekkür ederim.Konuyla ilgili bir sorum olacak ; debian kurup bu yapılandırmaları dediğiniz şekilde yapmak istiyorum.Sonrasında sadece windows sunuculardan gelen eventleri mysql e aktarmayı planladım.Fakat bu logları anlık olarak görüp filtreleyip izleyebileceğim ortam tam olarak nasıldır anlayamadım.Sunucular üzerine snare kurup arayüzünden o sunucuya ait eventleri görebiliyoruz fakat diyelim 10 DC var ve eventleri tek ekranda görmek istiyorum.Ne yapmalıyım ?
Teşekkürler
[Cevapla]
Selamlar,
Logları analiz etme ve online monitor etme gibi işlemler için phplogcon kullanabilirsiniz. rsyslog’u geliştiren ekibin yazdığı bir parser yazılım bu ve web based olarak log monitoring yapabilmenizi sağlıyor.
[Cevapla]
# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
bu değişikliklerden sonra nasıl kaydediyoruz acaba ?
[Cevapla]
dosyayı nasıl editlediniz bilemiyorum ama ben vi kullanıyorum ve kaydedip dosyadan çıkmak için önce [ESC]ile command moda geçip wq! (write quit) diyorum.
[Cevapla]
teşekkürler hallettim. bir sorum daha olacak. yukarıdaki değişikliği TCP veUDP için yaptım fakat netstat -an |grep 514 dediğimde sadece UDP görünüyor. sizin ekran çıktınızda görünen TCP ile ilgili bir satır görünmüyor. bu bir soruna neden olur mu acaba ?
bir de UDP için LISTEN yazmıyor..
[Cevapla]
Değişiklikleri yaptıktan sonra rsyslog’u yeniden başlatınız mı?
[Cevapla]
evet başlattım belirttiğiniz komutu kullanarak.
[Cevapla]
Bu sekilde hem syslog’un udp hem de tcp 514’e bind edilmesi gerekir ancak anlaşılan o ki sizde tcp portunun dinlenmesi ile alakalı bir sorun var.
Bu durumun nedenini bulabilmek için rsyslog’u debug modda çalıştırıp bu konuya ilgili herhangi bir hata çıktısı verilip verilmediğine bakabilirsiniz.
Bu işlem için rsyslog’u once durdurup sonrasında aşağıdaki şekilde yeniden (debug mode on) çalıştırabilirsiniz:
[Cevapla]
Ubuntu 11.04’de aynı sorunu yaşadım. Sanırım bir bug’dan ötürü TCP 514’de dinleme olmuyor. Portu 55124 olarak (farklı port) değiştirince sorun çözüldü.
[Cevapla]
Genelde uzak sunuculardan gelen logların ayrı dosyaya yazma sorunları iletildiğini gözlemledim. Yaşadığım benzer problemi şöyle çözdüm: Öncelikle hiçbir ayrım yapmadan logları localdeki logların da yazıldığı dosyaya yazın. (syslog, message, vs.) Ayarlarımızın doğruluğunu teyit ettikten sonra log dosyasında host olarak görünen isme göre ayarlarınızı yapabilirsiniz. Ben hosts dosyasında host adı girmeme rağmen gelen logların host adının IP adresi olduğunu böyle fark edip gerekli ayarları buna göre düzenleyerek sorunu çözdüm.
[Cevapla]
Merhaba,
Site ve forum kismi cok basarili bunu belirterek baslamak istedim. Emegi gecenlerin ellerine saglik.
Benim sorum su: Bir adet linux makineden yine bir merkezi log sunucusuna(linux) log basmak istiyoruz. Merkezi log sunucumuzda syslog-ng diger sunucuda rsyslog calisiyor. Yalniz soru su, process accounting ile ilgili loglari basmak istiyoruz. Bu loglar biraz degisik. Makine kendi uzerine log basiyor(/var/log/account/pacct). Ancak bu dosyalar binary dosyalar ve hatta .gz uzantili dosyalar da oyle. Basitce zless komutuyla acip okuyamiyorum. pacct komutuyla birlikte gelen, sa komutu ilgili binary dosyalari okuyup ekrana basiyor.
Bu loglari merkezi sunucuya tasiyip orada okuyabilmek icin ne yapmaliyim?
Simdididen tesekkurler.
Eyup.
[Cevapla]
Merhaba ,
Rsyslog da guard time kullandınızmı acaba ?Log dosyalarını guard time ile imzalatmak istiyoruz.Görüşlerinizi bekliyoruz.
iyi çalışmalar…
[Cevapla]
Merhabalar,
GuardTime kullanmadım ancak log dosyalarının imzalanması işini doğrudan OpenSSL ile de yapabilirsiniz, ücretli bir uygulama kullanmak durumunda kalmazsınız bu şekilde.
Blogda OpenSSL TSA ile log imzalama konulu bir yazı var; takip ederseniz nasıl yapabileceğiniz anlatılmakta.
[Cevapla]
Merhaba,
Ubuntu 64 bit 14.10 işletimine sahip log server da rsyslog.d klasörü altında 50-default.conf ayarlarında aşağıda belitmiş olduğum şekilde yapmama rağmen tüm gelen loglar belirlemiş olduğum 3 tane dosyaya ayrı ayrı yazıyor.
Bu logların karışmasını nasıl önlerim acaba. Yani merkezi sunucunun syslog una uzak sunucudan gelen logların yazılmasını istemiyorum ama yazıyor.
+logserver
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
# firewall LOGLAR
+guvenliksunucu
*.* /var/log/frw.log
#DHCPD LOGLARI
+dhcpsunucu
*.* /var/log/dhcp.log
[Cevapla]
Merhaba kurulumu ubuntu 12.04 üzerinde yapamadım centos ile uğraştım yine olmadı destek olabilicek arkadaşlar var mı acaba?
[Cevapla]