Translate

Показ дописів із міткою central loginning. Показати всі дописи
Показ дописів із міткою central loginning. Показати всі дописи

четвер, 29 січня 2015 р.

Centralize Loggining with Kibana/Logstash/Elasticsearch

Я раніше писав про установку та налаштування серверу централізованого збору логів в основі якого лежав Rsyslog з бекендом LogAnalyzer, та сервер із Syslog-ng. Основним недоліком LogAnalyzer є відсталість його інтерфейсу. Тому якщо цей недолік для вас є основним - раджу спробувати Kibana/Logstash зі зберіганням данних в Elasticsearch.

Kibana/Logstash не є вузькоспеціалізованим продуктом, що призначений лише для збирання логів програм. За його допомогою можна також візуалізувати власні дані за допомогою різноманітних графіків та діаграм, наприклад, статистику використання браузерів чи найбільш популярні сторінки власного сайту та ін.

Спочатку розберемось щодо складових частин серверу збору логів та їхнього призначення.


Logstash читає логи або отримує їх від клієнтів за допомогою Logstash-forwarder, розбирає їх по полям відповідними драйверами та записує їх до Elasticsearch, потім, за допомогою Kibana, можна переглядати логи і будувати різноманітні діаграми чи графіки.

Дистрибутив, що я буду використовувати - Ubuntu 14.04. Навіть для тестів краще брати машину як мінімум із 2 ГБ RAM та 2 CPU.

Почнемо з установки серверної частини. Logstash та Elasticsearch потребують Java 7 для роботи, для чого підійде як Oracle Java 7, так і OpenJDK.

# add-apt-repository -y ppa:webupd8team/java
# apt-get update
# apt-get -y install oracle-java7-installer

Для production середовища, можливо, краще скористатись джавою що надає Oracle на власному сайті та зібрати власний пакет:

# apt-get install java-package
# wget http://download.oracle.com/otn-pub/java/jdk/7u75-b13/server-jre-7u75-linux-x64.tar.gz?AuthParam=1423217016_530b51c9d6c77e8237c6a2f2288d7657 -O jre-7u75-linux-x64.tar.gz
# make-jpkg jre-7u75-linux-x64.tar.gz
# dpkg -i oracle-j2re1.7_1.7.0+update75_amd64.deb
# update-alternatives --auto java

пʼятниця, 21 лютого 2014 р.

Налаштування централізованого логування із LogAnalyzer та Rsyslog

У цій статті я опишу установку та налаштування переглядача логів LogAnalyzer, Rsyslog-клієнта, який відсилатиме всі логи на віддалений Rsyslog-сервер, котрий в свою чергу буде писати їх в базу MySQL.

LogAnalyzer - веб-переглядач логів, що збирає системний демон rsyslog/syslog-ng, тобто виступає зручним фронендом.

У якості ОС я обрав Ubuntu 12.04. Адреси серверів:

192.168.1.51 (loganalyzer-mysql.ip) - rsyslog-сервер, на цьому ж хосту також буде проінстальовано LogAnalyzer

192.168.1.50 (loganalyzer-mongo.ip) - rsyslog-клієнт, що відсилатиме логи на хост  loganalyzer-mysql.ip

Налаштовуємо серверну частину, для чого додамо репозиторій від розробника Rsyslog:

# vim /etc/apt/sources.list
...
# Adiscon stable repository
deb http://ubuntu.adiscon.com/v7-stable precise/
deb-src http://ubuntu.adiscon.com/v7-stable precise/
...

# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com AEF0CF8E
# gpg --export --armor AEF0CF8E | sudo apt-key add -

Звісно, що можна скористатись версією Rsyslog, що доступна в стандартних репозиторіях, проте в мене була наявна проблема із відкриттям 514 TCP-порту від користувача syslog.

Оновлюємо пакети та встановлюємо Rsyslog із певними додатковими пакетами, котрі надалі будуть необхідні:

# apt-get install rsyslog rsyslog-mysql mysql-server mysql-client

пʼятниця, 21 грудня 2012 р.

Syslog-ng для централізованого збирання логів


Рано чи пізно постає питання про збирання логів всієї купи серверів, що у вас, у одному місці. І причин, щоб саме так зробити, є декілька: по-перше, так зручно, по-друге, - так безпечніше, адже логи будуть зберігатись в декількох місцях (як мінімум в двох). Коротше кажучи, якщо ви вже читаєте цю статтю - то ви маєте знати навіщо це вам.

Перейдемо до суті. Налаштування проводилось на двох тестових віртуальних машинах:

centos1 - 192.168.1.23
centos2 
- 192.168.1.24

Тому на кожну із них встановлюємо syslog-ng. В CentOS це робиться наступним чином:

# yum install syslog-ng

Нехай centos1 буде головним syslog-ng сервером, що буде слухати 514-й порт, приймати всі логи і розкладати куди-треба. Centos2 буде відправником логів на перший сервер.

Конфігураційний файл syslog-ng на centos2, тобто відправника логів:

# Опис джерела всього потоку логів, що власне нас цікавить.
source s_all {
  internal();
  unix-stream("/dev/log");
  file("/proc/kmsg" program_override("kernel: "));
  file("/var/log/dmesg");
};

# Описуємо які саме файли потрібно буде відсилати. Перед відсиланням до 
# кожної рядка логу буде додано назву демона, який його відіслав 
# (за допомогою опції 'program_override').
source mysqld_log { file("/var/log/mysqld.log" program_override("mysqld")); };
source httpd_log { file("/var/log/httpd/error_log" program_override("httpd")); };

# Описуємо місце/сервер куди будуть відправлятись файли
destination remote { udp("192.168.1.23" port(514)); };

#Найголовніша частина: куди саме і які будуть відсилатись логи.
log { source(s_all); destination(remote); };
log { source(mysqld_log); destination(remote);};
log { source(httpd_log); destination(remote);};

Конфігураційний файл syslog-ng на centos1, тобто сервера, що ці логи прийматиме:

# Описуємо джерело логів - сервер мережі.Тобто логи, котрі прийшли на порт syslog-ng.
source s_udp { udp(ip(0.0.0.0)); };

# Описуємо фільтри. Параметр match означає, що обирати з усього потоку повідомлень 
# лише рядки з указаним значенням
filter mysqld { match("mysqld" value("MESSAGE")); };
filter httpd { match("httpd" value("PROGRAM")); };

# Місце куди будуть зберігатись логи.
destination df_remote { file("/var/log/remote/$HOST.other.log"); };
destination mysqld_log { file("/var/log/remote/$YEAR.$MONTH.$DAY/mysqld.log" owner("root") group("root") perm(0640) dir_perm(0750) dir_group("root"));};
destination httpd_log { file("/var/log/remote/$HOST.apache.log"); };

# Власне сам процес логування - це комбінація всіх вищезазначених параметрів.
log { source(s_udp); destination(df_remote); };
log { source(s_udp); filter(mysqld); destination(mysqld_log); };
log { source(s_udp); filter(httpd); destination(httpd_log); };

Тобто, все відбувається наступним чином:

1) Хост centos2 відправляє логи (всі системні логи+mysqld логи+apache логи) на centos1. Перед відправкою логи httpd помічаються значенням, що стоїть у параметрі program_override. Тобто кожен запис логу mysqld.log помітиться словом mysqld, відповідно httpd.log - словом httpd.

2) Логи, відіслані сервером centos2 приходять на centos1 і починають сортуватись. Всі логи загальні підуть в /var/log/remote/$HOST.other.log,а логи httpd та mysqld за допомогою директиви match будуть сортуватись в окремі папки.

Ну власне все, всі питання або зауваження пишіть в коментарі.

Посилання:
https://wiki.archlinux.org/index.php/Syslog-ng