Установка elasticsearch на windows

Как читать логи сервера

Что такое логи?

Краткая справка из Википедии:

Файл регистрации, протокол, журнал или лог (англ.

Установка ElasticSearch (один сервер) кластер в Unix/Linux

log) — файл с записями о событиях в хронологическом порядке. Различают регистрацию внешних событий и протоколирование работы самой программы — источника записей (хотя часто всё записывается в единый файл). Например, в лог-файлы веб-сервера записывается информация, откуда пришёл тот либо иной посетитель, когда и сколько времени он провел на сайте, что там смотрел и скачивал, какой у него браузер и какой IP-адрес у его компьютера.

Для чего нужны логи?

Обычно при нормально работающем сайте лог-файлами мало кто интересуется, но когда начинает расти нагрузка на сервер, начинается рассылка спама, и вообще сайт начинает вести себя довольно странно или изобиловать ошибками, без логов не обойтись.

Как включить запись логов?

Обычно, по умолчанию, для экономии дискового пространства ведение логов на хостинге выключено.

Приведу включение записи на примере панели управления хостингом Таймвеб.

В панели управления переходим во вкладку «Логи», выбираем из выпадающего сайта нужный (если их несколько) и активируем ползунок «Лог доступа (access_log)»

Примерно через час, когда накопится достаточное количество записей, переходим в директорию сайта и скачиваем файл.

Открываем в любом текстовом редакторе (на примере второй столбец, с адресом сайта закрашен).

Разберем для примера строку № 49

site.ru 85.93.93.102 — — [28/Sep/2017:06:33:04 +0300] "GET /page/2/ HTTP/1.0" 200 80195 "-" "Linguee Bot (http://www.linguee.com/bot; bot@linguee.com)"

site.ru – адрес нашего сайта

85.93.93.102 – IP-адрес посетителя, с датой и вренем посещения, а также его часовой пояс

GET – тип запроса, возможен вариант POST, чем отличается GET и POST можно почитать в сети, если говорить упрощено, GET – получение данных, POST – отправка, например авторизация

page/2 – к какой странице было обращение, в нашем случае это site.ru/ page/2

HTTP/1.0 – протокол, по которому пришел посетитель

200 – код ответа сервера, более подробную информацию о кодах состояния можно прочитать в Википедии — https://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP

80195 – количество байт полученных посетителем

Linguee Bot (http://www.linguee.com/bot; bot@linguee.com) – данные о посетителе, тут также может быть информация о браузере, операционной системе, устройстве и так далее

Итог

Даже при беглом взгляде видно, что с адреса 85.93.93.102 идет множество запросов, обращение было как раз по чрезмерной нагрузке на сайт, как только адрес бота Linguee Bot был запрещен, нагрузка практически сразу вернулась в норму.

И все за несколько минут, благодаря логам; без них на выяснение причины понадобилось бы гораздо больше времени. Также были замечены обращения по адресам, содержавшим вставки типа — xd0\xbe\xd1\x82\xd0\xb7\ …

Кто занимается «лечением» сайтов, знает, что подобные запросы могут создавать запредельные нагрузки на сервер.

Иногда самые простые методы – самые действенные, а защита на уровне сервера самая надежная.

Засим прощаюсь 

Мой профиль в Marketplace — https://timeweb.com/ru/community/marketplace/bashkov-vladislav

Установка logstash для сбора логов Windows и syslog

Я также попытался настроить ElasticSearch на моем дата-центре Windows 2016 R2 (64-разрядный). Позвольте мне поделиться некоторыми из моих впечатлений о том, как решить эту проблему.

Настройка JAVA_HOME

Убедитесь, что у вас установлен JDK / JRE. Вы можете скачать его здесь .

Задайте переменную среды JAVA_HOME. Для этого откройте меню «Пуск» и введите « путь ».

Затем нажмите Переменные среды . Если у вас еще нет переменной JAVA_HOME , нажмите Создать .

Переменная JAVA_HOME должна приводить только к каталогу JDK / JRE, не включая / bin.

Progra ~ 1 соответствует Program Files . Если вы используете Program Files (x86) , измените Progra ~ 1 на Progra ~ 2

Перезагрузите компьютер. После перезагрузки компьютера откройте CMD и введите echo% JAVA_HOME% . Выход должен быть

Если вы получите следующий результат, ваш JAVA_HOME настроен правильно.

Запуск ElasticSearch

В первый раз, когда я попытался запустить ElasticSearch, я получаю следующий вывод.

Нечетный каталог, который я указал здесь, дал мне подсказку о том, что командный файл может считываться из неправильного каталога. Так что я сделал, немного потрудился с пакетным файлом. Откройте elasticsearch.bat , используя любой текстовый редактор.

Прокрутите весь путь до конца, где-то над последними строками вы увидите что-то похожее на следующее.

Удалите выделенную строку, сохраните файл и снова попробуйте запустить пакетный файл с помощью командной строки.

Это работает в моем случае.

После этого откройте свой браузер и перейдите к localhost: 9200 .

Я думаю, что так оно и есть?

Самое сложное, в этом движке — это его настройка на получение релевантных результатов. Так же хотелось бы отметить, что документация написана довольно плохо. Конечно, это сугубо моё мнение и я не могу сказать, что мы ничего полезного в ней не нашли, но поиски нам давались с большим трудом. Мы провели довольно глубокое исследование, чтобы понять как работает ElasticSearch. И, наконец, мы поняли его основы и готовы сами задокументировать его возможности.

Но давайте вернемся немного назад. Как я уже говорил, основная проблема — получение релевантных результатов (релевантных не для поискового движка, а для пользователя). Иногда мы получали довольно странные результаты, например, поиск по запросу “funny pony” выдавал следующее:

С базовой настройкой (без указания специфических параметров) первый результат — самый релевантный и позднее мы увидим почему. Но с точки зрения пользователя, третий результат выглядит наиболее подходящим и он должен быть на первом месте. Понять работу ElasticSearch означает понять, как он индексирует документы и как извлекает из них информацию .

Базовые фильтры

Первое что вы должны задать в настройках — это фильтры. Они больше отвечают за нормализацию поискового запроса, чем за увеличение релевантности результата. Именно поэтому они так важны.

Например, если вы не применяете фильтры для запроса на французском языке “Mon prénom est Grégory” (меня зовут Грегори), то он будет индексирован как есть. При поисковом запросе “gregory” вы врят ли получите нужный результат, так как эта строка регистрозависимая. Подходящий фильтр для этой цели — , он преобразует все символы верхнего регистра в нижний. И фильтр , который заменяет все Unicode символы, не входящие в латинский алфавит на их ascii эквивалент. Проще говоря, он преобразует все страно выглядящие символы, такие как é, à, ç, ð, æ, å и т.д.

Фильтр worddelimiter

Фильтр worddelimiter разбивает слова на несколько частей. Небольшой пример: представьте, что вы допустили опечатку в предложении “To be or not to be.That is the question”. Если вы обратите внимание, то заметите отсутствие пробела после точки. Без этого фильтра Elasticsearch проиндексирует “be.That” как одно слово — “bethat”. При помощи этого фильтра мы указываем ему индексировать эти слова по отдельности — “be” и “that”.

Фильтр stopwords

Фильтр stopwords состоит из списка слов запрещенных к индексированию. Например он исключает такие слова, как “and”, “a”, “the”, “to” и т.д. Конечно этот список уникален для каждого языка, но существует довольно много заготовок, которые вы можете использовать.

Фильтр snowball

Фильтр snowball используется для группировки слов по их основе. Фильтр применяет набор правил для правильного определения основы слова. Это означает, что разные настройки могут выдавать разные результаты. Например слова “indexing”, “indexable”, “indexes”, “indexation” и т.д. получать основу “index”. Хотелось бы отметить, что вы получите результат “Make my string indexable”, запросив “Indexing string”.

Фильтр elison

Фильтр elison имеет большее значения для некоторых языков (например французский) и не так важен для других (например английский). Он исключает маловажные слова перед индексированием, например “j’attends que tu m’appelles” (Я жду вашего звонка) проиндексируется как “attends que tu appelles” (наконце слова “que” и “tu” будут исключены фильтром stopwords). Как вы видите слова “j’” и “m’” (Я) были удалены из-за настройки фильтра elison.

Собственные фильтры

Вы можете создавать собственные фильтры. В конце статьи вы найдете пример настройки такого фильтра. Также фильтр “stopwords” — наш собственный фильтр построенный на базе стоп слов для французского языка. Если вам нужен фильтр для английского языка, вы можете добавить другой фильтр с название, например, “stopwords_en”.

Лексер nGram

Сначала мы нашли пару примеров такого лексера в интернете и просто использовали их в наших настройках, в чем и заключалась наша ошибка — мы не пытались их понять. Роль лексера очень высока. Например, наш поиск “funny pony” был разбит на несколько частей.

Вот два примера:

1-ый пример с настройкой:

Результат:

2-ой пример с лучшей настройкой:

Результат:

То есть лексер разбивает каждое слово на комбинации между и символов. С настройками 3 и 20 слово “elasticsearch” будет преобразовано в “ela, elas, elast, …, elasticsearc, elasticsearch”.

Введение в ELK: собираем, фильтруем и анализируем большие данные

Такой же процесс повторяется со второй буквы — “las, last, lasti, lastic, …, lasticsearch”, далее с третьей и т.д. В нашем случае не доходит до конца, так как в запросе только 13 символов, так что, задав значение больше 13, не изменит результата.

Основной плюс этого лексера в том, что из запроса “funny” мы можем получить результаты, содержащие “fun”. Но в первом примере мы получаем слишком много коротких слов, которые совпадают с большим количеством значений.

Например “on” очевидно совпадет также с “of”, “ony” совпадет с “any”, “pon” — “non” и т.д.

Теперь мы понимаем почему первый результат был наиболее релевантен. Наш поиск нашел несколько слов похожих на “pony” в заголовке (как и ожидалось), но также он встретил “bun”(fun) и “of”(on) в описании (не ожидалось). Параметры и решают эту проблему. Теперь рассмотрим анализаторы.

Создание собственных анализаторов

Очень приветствуется создавать и использовать собственные анализаторы. Анализатор используется для очистки документа и поискового запроса перед индексацией и поиском соответственно. В целом, фильтры никогда не применяются напрямую, их используют анализаторы. В следующем примере мы создали 2 анализатора: один для запроса текста (), а второй для индексации документа лексером (custom_analyzer).

Лексер не используется в поисковом запросе (используется только для индексирования). Если пользователь ищет слово “keyboard”, мы должны найти слова “key”, “board”, “oar” и т.д. Такое поведение может привести к неожиданным результатам — “boar, “boardwalk”, “keynote” и т.д. А мы считали, что наша настройка отлично работает. Всегда надо дорабатывать свои настройки и подвергать их тестированию.

Пример

Следующие настройки мы чаще всего используем в своих проектах. Они отлично индексируют документ и выдают релевантные результаты. Но работа над ними закончена только наполовину. Оставшаяся часть — задание отображения результатов и написание корректных запросов.

Тем временем, протестируйте следующую настройку (FosElasticaBundle):

PHPElasticSearchSymfony

Установка ELK на Misrosoft Windows Server 2008

2018-02-27 10:34:00 454 0

Настройка сервера Syslog-ng для сбора логов

Syslog-ng — это одно из самых популярных приложений для сбора логов на Unix-системах, которое является альтернативой для привычной для многих Syslog.

Установку будем производить на сервере с операционной системой Ubuntu-16.04

Устанавливаем сервер syslog-ng из репозиториев

sudo apt-get update

sudo apt-get install syslog-ng

При этом будет удален сервер логирования rsyslog, который установлен в системе по-умолчанию. И будет произведена начальная настройка syslog-ng.

Основной конфигурационный файл /etc/syslog-ng/syslog-ng.conf

После установки в нем уже будут настроены основные глодальные опции и ведение логов аналогично тому как их ведет сервер rsyslog по-умолчанию.

Новые записи желательно создавать в файлах в директорий /etc/syslog-ng/conf.d/, окончание файлов на *.conf

Разберемся с синтаксисом и параметрами, в syslog-ng они называеются глобльными объектами.

Sources(Источники) — Откуда syslog-ng получает лог-сообщения.

source «Индификатор» { «параметры»;};

  • «Индификатор» — произвольное имя, которое вы присвоите этому объекту;
  • «Параметры» — непосредственно указывается откуда будут получаться лог-сообщения(возможно указать несколько параметров).

Пример:

source s_tcp { tcp(ip(10.25.128.1) port(514)); };

Получение лог-сообщения, приходящие на ip адрес 10.25.128.1, на порт 514, по протоколу tcp.

Возможные значения параметров источников:

  • internal() — Сообщения, которые генерирует сам syslog-ng;
  • unix-stream() — Открыть указанный unix-сокет в SOCK_STREAM режиме и слушать входящие сообщения (unix-stream(«/dev/log»); };);
  • unix-dgram() — Открыть указанный unix-сокет в SOCK_DGRAM режиме и слушать входящие сообщения;
  • file() — Открыть указанный файл и прочитать сообщения из него;
  • pipe() — Открыть указанный pipe и прочитать сообщения из него;
  • tcp() — Слушать указанный TCP порт и указанном ip;
  • udp() — Слушать указанный UDP порт и указанном ip;
  • tcp6() — Слушать указанный TCP порт и указанном IPv6;
  • udp6() — Слушать указанный UDP порт и указанном IPv6;

Указанный источник может быть использован в нескольких различных log path. Дляф этого к нему можно обращаться по индификатору. Указание нескольких источников с одинаковым индификаторм, может вызвать проблемы с работой сервера.

Destination(Насзначение) — куда будут отправляться лог-сообщения после обработки их сервером syslog-ng.

Так же состоит из «Индификатора» и «Параметров».

Пример:

destination d_file { file(«/var/log/test.log»);};

Записывать полученные лог-сообщения в файл «/var/log/test.log»

Возможные значения параметров:

  • file() — Записывать лог-сообщения в указанный файл;
  • fifo(),pipe() — Записывать лог-сообщения в указанный pipe;
  • program() — Запускать указанную программу и отправлять лог-сообщение к ней на вход;
  • sql() — Отправлять сообщение в базу данных. Доступно только в премиум релизе;
  • tcp() — Отправлять сообщение на по протоколу TCP на указанный удаленный хост (ip,port);
  • udp() — Отправлять сообщение на по протоколу UDP на указанный удаленный хост (ip,port);
  • tcp6() — Отправлять сообщение на по протоколу TCP на указанный удаленный хост по протокулу IPv6;
  • udp6() — Отправлять сообщение на по протоколу UDP на указанный удаленный хост по протокулу IPv6;
  • unix-stream() — Отправлять сообщения на указанный unix-сокет;
  • usertty() — Отправлять сообщения в терминал к указанному пользователю, если он залогирован в системе.

Template(Шаблоны) — Используются для определения вида записи лог-сообщений в том виде, который удобен пользователю

template temp_test { template(«$ISODATE — $HOST_FROM $MSG\n») };

Запись в виде «описание даты — «хост откуда пришло сообщение» «тело сообщения»

Основные макросы для шаблонов:

  • $ISODATE\$FULLDATE — варианты описания даты;
  • $FACILITY — каким facility сгенерированно сообщение (auth,cron,mail и т.д.);
  • $PRIORITY — уровень сообщения (info,err и т.д.);
  • $HOST — откуда пришло сообщение;
  • $HOST_FROM — последний хост в цепочке;
  • $PROGRAM — имя программы, которая сгенирировала сообщение;
  • $PID — pid процесса;
  • $MSG — тело сообщения.

Шаблоны записываются в объекты destination
Могут указываться в виде полного указания или в виде указания индификатора шаблона.

template temp_test { template(«$ISODATE — $HOST_FROM $MSG\n») }; destination d_file { file(«/var/log/test.log») template(temp_test)}; ИЛИ destination d_file { file(«/var/log/test.log») template(«$ISODATE — $HOST $MSG»)};

Log path() — Определяет что делать с входящим сообщением, на основании указанных фильтров.

log { source(s1); filter(f1); destination(d1); flags();};

Пример:

source s_tcp { tcp(ip(10.25.128.1) port(514)); }; destination d_file { file(«/var/log/test.log»);}; log { source(s_tcp); destination(d_file); flags(final); };

Читать лог-сообщения пришедшие по протоколу TCP на ip адрес 10.25.128.1 и порт 514 и записывать их в файл /var/log/test.log и логировать только в этот destination.

Filters(фильтры) — Используются для определения какие лог-сообщения и куда отправлять.

filter «Индификатор» { «Выражения» ;};

Пример:

filter test { host(«test.test.un») and match(«Kernel») ;};

Под фильтр попадет сообщение, которое будет содержать слово «Kernel» и прийдет от хоста test.test.un

В фильтрах с параметрами host(), match(), program() возможно исползование регулярных выражений.

Параметры можно объединять между собой с помощью логических операторов and, or, not.

Основные выражения для фильтров:

  • facility() — под фильтр попадают сообщения с определенным facility;
  • host() — фильтрация по хосту отправителю;
  • level() or priority() — Фильтрация по уровню сообщения;
  • match() — фильтрация по совпадения в сообщении;
  • program() — фильтрация по имени программы, сгенерировавшей выражение.

Примеры:

source s_udp { udp(ip(0.0.0.0) port(514)); }; destination d_router { file(«/var/log/cisco_router.log»); }; destination d_radius { file(«/var/log/radius_server.log»); }; filter cisco_filter { host(192.168.0.1); }; filter auth_log { host(192.168.0.100) and match(«*auth*»); }; log { source(s_udp); filter(cisco_filter); destination(d_router); }; log { source(s_udp); filter(auth_log); destination(d_radius); };

Указываем в качестве источника все сообщения пришедшие по протоколу UDP на любой ip-адрес сервера на порт 514. Сообщения пришедшие с хоста с ip-адресом 192.168.0.1 записываем в файл «/var/log/cisco_router.log», а сообщения пришедшие с хоста с ip-адресом 192.168.0.100 и содержащие в теле сообщения словосочетание «auth», записываем в файл «/var/log/radius_server.log»

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

Закрыть меню