Отправка сообщений syslog в базу postgresql в debian 8

Отправка сообщений syslog в базу postgresql

Настройка зависимостей

apt-get install checkinstall  autoconf autogen libivykis-dev automake  libnet1-dev libcurl4-gnutls-dev bison flex glib-2.0 libperl-dev libgtk2.0-dev libjson0 libjson0-dev libdbi-dev xsltproc docbook-xsl -y

Ставим из исходников

Собираем syslog-ng со следующими ключами

wget https://github.com/balabit/syslog-ng/releases/download/syslog-ng-3.9.1/syslog-ng-3.9.1.tar.gz
tar -xvf  syslog-ng-3.9.1
cd syslog-ng-*
git checkout v3.5.6
/bin/bash autogen.sh
wget https://my.balabit.com/downloads/eventlog/0.2/eventlog_0.2.12.tar.gz]
tar -xvf even
cd eventlog-0.2.12
./configure
make
sudo make install
tar -xvf eventlog_0.2.12.tar.gz

Конфигурируем syslog-ng

mkdir -p /etc/syslog-ng
 ./configure --exec-prefix=/usr/local --prefix=/  --sysconfdir=/etc/syslog-ng --sbindir=/sbin  --bindir=/bin --runstatedir=/var/run/syslog-ng  --enable-all-modules --disable-geoip --enable-systemd  --disable-riemann --disable-java --disable-python --disable-java-modules --disable-pacct --disable-sun-streams --enable-json --enable-sql && make -j4 && sudo checkinstall

sudo make install

Чтобы удалить

dpkg -r syslog-ng или sudo make uninstall

Установка из apt

sudo apt-get install syslog-ng-core syslog-ng-mod-sql libdbd-pgsql

Скачиваем скрипт

wget https://github.com/balabit/syslog-ng-3.5/blob/master/debian/syslog-ng.init  -o syslog-ng && chmod 775 /etc/init.d/syslog-ng

Конфиг файл syslog ng

syslog-ng.conf
@version: 3.5
@include "scl.conf"
@include "`scl-root`/system/tty10.conf"
options { chain_hostnames(off); flush_lines(0); use_dns(no); use_fqdn(no);
    owner("root"); group("adm"); perm(0640); stats_freq(0);
    bad_hostname("^gconfd$");
};
source src1 { file( "/var/log/access2.log"
                    follow_freq(1)
     );
};
#values("${R_DATE}", "${HOST}", "${PROGRAM}", "${MSGONLY}")
#######Фильтрация#############будет попадать только строка с gggg, как пример
#filter trash  { match('^\[bdLog\]:'); };
filter trash  { match("gggg"); };
#filter f_bdLog { match('^\[bdLog\]:'); };
destination d_postgres{
  sql(type(pgsql)
  host("127.0.0.1") username("parser") password("password")
  database("logs")
  table("access_table")
  columns("get varchar(50)", "store1 text", "store2 varchar(80)")
  #values("${R_DATE}", "${MSG}", "${PROGRAM}", "${MSG}")
  values("${PROGRAM}", "${MSG}", "${KEY3}")
  indexes("get", "url", "url2"));
};
filter f_no_debug { not level(debug); };
#log {source(src1);  parser(p_src1); destination(d_postgres); };
log {source(src1); filter(trash);  parser(p_src1); destination(d_postgres); };
#parser d_postgresl { kv-parser(value-separator(":") prefix(".mysql."));

Далее в базе создадим уникальный ключ, например по полю store1.

Далее выполним скрипт, для того чтобы не падал postgres выполнил скрипт, для того чтобы не падал syslog-ng.

CREATE
OR REPLACE RULE access_table_rule_pkey AS ON INSERT TO access_table
WHERE
  (
    EXISTS (
      SELECT
        1
      FROM
        access_table
      WHERE
        access_table.store1 = NEW .store1
    )
  ) DO
    INSTEAD NOTHING;

Общая справка по syslog-ng

НАЗВАНИЕ

syslog-ng.conf – файл конфигурации syslog-ng

ОПИСАНИЕ

Файл конфигурации syslog-ng.

Маршрут сообщений в syslog-ng состоит из трёх частей: источник, приёмник и правила фильтрации.

ИСТОЧНИКИ

Вы можете объявить источник, воспользовавшись ключевым словом “source”:

source <название_источника> { sourcedriver параметры; sourcedriver параметры; … };

Название источника – это идентификатор, который вы используете для ссылки на группу сообщений. sourcedriver – это метод получения заданных сообщений. Доступны следующие драйверы:

* file <имя_файла>

– читать сообщения из заданного файла

* unix-dgram <имя_файла>

– читать сообщения из заданного сокета AF_UNIX, SOCK_DGRAM (стиль BSDi)

* unix-stream <имя_файла>

– читать сообщения из заданного сокета AF_UNIX, SOCK_STREAM (стиль Linux)

* udp ,<порт>

– сетевой источник, используя протокол UDP. Если вы не хотите привязываться к какому-то особому интерфейсу, воспользуйтесь 0.0.0.0.

* tcp ,<порт>

– сетевой источник, используя протокол TCP.

* sun-streams <имя_файла>

– локальный источник, используемый на системах Solaris

ПРИЁМНИКИ

Приёмники могут быть созданы с помощью ключевого слова “destination”:

destination <название_приёмника> { destdriver параметры; destdriver параметры; … ; };

* file <имя_файла>

– записывать сообщения в заданный файл

* unix-dgram <имя_файла>

– записывать сообщения в заданный сокет AF_UNIX, SOCK_DGRAM (стиль BSDi)

* unix-stream <имя_файла>

– записыватьть сообщения в заданный сокет AF_UNIX, SOCK_STREAM (стиль Linux)

* udp ,<порт>

– сетевой приёмник, используя протокол UDP

* tcp ,<порт>

– сетевой приёмник, использующий протокол TCP

* usertty <имя_пользователя>

– отправлять журнал на терминал пользователя

ФИЛЬТРЫ

Вы можете создать фильтры с помощью ключевого слова “filter”:

filter <имя_фильтра> { выражение; };

Где выражение – это простое булево выражение. Вы можете использовать “and”, “or” и “not” для подключения встроенных функций. Функции могут быть следующими:

* facility

(список разделённых запятыми средств)

* level

(список разделённых запятыми названий приоритетов ИЛИ диапазон разделённый “..”)

* program

(регулярное выражение для совпадения с именем программы)

* host

(регулярное выражение для совпадения с именем узла)

* match

(регулярное выражение для совпадения с сообщениями)

ОБЪЯВЛЕНИЯ ЖУРНАЛА

Вы можете соединить источник и приёмник с помощью объявления log:

log { source S1; source S2; ... filter F1; filter F2; ... destination D1; destination D2; ... };

Где Sx ссылаются на один из объявленных источников журналов, Fx один из фильтров и Dx один из приёмников.

Фильтры объединяются с помощью логической операции И.

ОПЦИИ

Вы можете указать несколько глобальных опций syslog-ng в выражении options:

options { opt1; opt2; ... };

Где опцией может быть любая из следующих:

chain_hostnames(yes|no)

Включает или выключает сцепленный формат имени узла.

long_hostnames(yes|no)

Это устаревший псевдоним для chain_hostnames().

keep_hostname(yes|no)

Указывает доверять имени узла, которое включено в журнальное сообщение. Если keep_hostname – yes и в сообщении имеется имя узла, то оно остаётся неизменным, в другом случае оно всегда перезаписывается основываясь на информации о том, откуда было принято сообщение.

use_dns(yes|no)

Включить или выключить использование DNS. syslog-ng блокиреут DNS-запросы, поскольку включение DNS может привести к атаке с отказом в обслуживании (DoS). Для предотвращения DoS, защитите ваш целевой syslog-ng правилами пакетного фильтра, и удостоверьтесь, что все узлы, которые может запросить syslog-ng решаемы.

use_fqdn(yes|no)

Добавлять полностью квалифицированное доменное имя (FQDN) вместо короткого имени узла.

check_hostname(yes|no)

Включить или выключить требование чтобы имя узла состояло из разрешённых символов.

bad_hostname(regex)

Регулярное выражение, совпадающее с именами узлов, которые не должны быть приняты как есть.

dns_cache(yes|no)

Включить или выключить использование кэша DNS.

dns_cache_expire(n)

Количество секунд, на которое кэшируется удачный запрос.

dns_cache_expire_failed(n)

Количество секунд, на которое кэшируется неудачный запрос.

dns_cache_size(n)

Количество имён узлов в кэше DNS.

create_dirs(yes|no)

Включить или выключить создание каталогов для файлов-приёмников.

dir_owner(uid)

Идентификатор пользователя, владеющего каталогами.

dir_group(gid)

Идентификатор группы, владеющей каталогами.

dir_perm(разрешения)

Разрешения (восьмеричная маска).

owner(uid)

Идентификатор пользователя, владеющего создаваемыми файлами.

group(gid)

Идентификатор группы, владеющей создаваемыми файлами.

perm(разрешения)

Разрешения на создаваемые файлы.

gc_busy_threshold(n)

Задаёт пороговое значение для сборки мусора, когда syslog-ng занят. Сборщик мусора запускается когда количество выделенных объектов достигает этого числа. По умолчанию: 3000.

gc_idle_threshold(n)

Задаёт пороговое значение для сборки мусора, когда syslog-ng простаивает. Сборщик мусора запускается когда количество выделенных объектов достигает этого числа. По умолчанию: 100.

log_fifo_size(n)

Количество строк, помещающихся в очередь вывода. Очередь вывода существует для всех приёмников.

log_msg_size(n)

Максимальная длина сообщения в байтах (заметим, что некоторые реализации syslogd имеют фиксированное ограничение в 1024 символа).

mark(n)

Количество секунд между двумя строками MARK. ЗАМЕЧАНИЕ: Ещё не реализовано.

stats(n)

Количество секунд между двумя сообщениями STATS.

sync(n)	

Количество строк, которые могут быть сохранены в буфере перед записью в файл (может быть переопределено локально).

time_reap(n)

Время ожидания до того, как простаивающий файл-приёмник будет закрыт.

time_reopen(n)

Время ожидания перед повторной установкой разорвавшихся подключений.

use_time_recvd(yes|no)

Эта переменная используется только для расширения макросов, которые означают время конкретного макроса в зависимости от этой настройки. Однако существуют отдельные макросы для ссылки на отметку о времени приёма (R_ макросы) и отметку времени о помещении сообщения в журнал (S_), поэтому использование этого значения не рекомендуется.

ФАЙЛЫ

/etc/syslog-ng/syslog-ng.conf

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.