Как использовать Logstash и Kibana для централизации журналов в CentOS 7

Вступление

В этом уроке мы рассмотрим установку Logstash 1.4.2 и Kibana 3 на CentOS 7 и как их настроить для сбора и визуализации системных журналов наших систем в централизованном месте. Logstash - это инструмент с открытым исходным кодом для сбора, анализа и хранения журналов для дальнейшего использования. Kibana 3 - это веб-интерфейс, который можно использовать для поиска и просмотра журналов, проиндексированных Logstash. Оба эти инструмента основаны на Elasticsearch. Elasticsearch, Logstash и Kibana, при совместном использовании, называются стеком ELK.

Централизованное ведение журнала может быть очень полезно при попытке выявить проблемы с вашими серверами или приложениями, так как оно позволяет вам искать во всех ваших журналах в одном месте. Это также полезно, поскольку позволяет идентифицировать проблемы, которые охватывают несколько серверов, сопоставляя их журналы в течение определенного периода времени.

Можно использовать Logstash для сбора журналов всех типов, но мы ограничим область применения этого руководства сбором syslog.

Наша цель

Цель этого руководства - настроить Logstash для сбора системных журналов с нескольких серверов и настроить Kibana для визуализации собранных журналов.

Наша установка Logstash / Kibana состоит из четырех основных компонентов:

  • * Logstash *: серверный компонент Logstash, который обрабатывает входящие журналы

  • * Elasticsearch *: хранит все журналы

  • * Kibana *: веб-интерфейс для поиска и визуализации логов

  • * Logstash Forwarder *: Установленный на серверах, которые будут отправлять свои журналы в Logstash, Logstash Forwarder служит агентом пересылки журналов, который использует сетевой протокол lumberjack для связи с Logstash.

Мы установим первые три компонента на одном сервере, который мы будем называть нашим * Logstash Server *. Logstash Forwarder будет установлен на всех серверах, для которых мы хотим собирать журналы, которые мы будем называть нашими * Серверами *.

Предпосылки

Чтобы завершить это руководство, вам потребуется root-доступ к CentOS 7 VPS. Инструкции по настройке можно найти здесь (шаги 3 и 4): Initial Server Setup с CentOS 6.

Объем ЦП, ОЗУ и хранилища, которые потребуются вашему Logstash Server, зависит от объема журналов, которые вы собираетесь собирать. Для этого урока мы будем использовать VPS со следующими спецификациями для нашего сервера Logstash:

  • ОС: CentOS 7

  • RAM: 2 ГБ

  • Процессор: 2

В дополнение к вашему серверу Logstash вам понадобятся несколько других серверов, с которых вы будете собирать журналы.

Давайте приступим к настройке нашего сервера Logstash!

Установите Java 7

Elasticsearch и Logstash требуют Java 7, поэтому мы установим это сейчас. Мы установим OpenJDK 7.

Установите последнюю стабильную версию OpenJDK 7 с помощью этой команды:

sudo yum -y install java-1.7.0-openjdk

Теперь, когда Java 7 установлена, давайте установим ElasticSearch.

Установить Elasticsearch

  • Примечание *: Logstash 1.4.2 рекомендует Elasticsearch 1.1.1.

Выполните следующую команду, чтобы импортировать открытый ключ GPG Elasticsearch в rpm:

sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch

Создайте и отредактируйте новый файл репозитория yum для Elasticsearch:

sudo vi /etc/yum.repos.d/elasticsearch.repo

Добавьте следующую конфигурацию хранилища:

[elasticsearch-1.1]
name=Elasticsearch repository for 1.1.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

Сохранить и выйти.

Установите Elasticsearch 1.1.1 с этой командой:

sudo yum -y install elasticsearch-1.1.1

Elasticsearch теперь установлен. Давайте изменим конфигурацию:

sudo vi /etc/elasticsearch/elasticsearch.yml

Добавьте следующую строку где-нибудь в файле, чтобы отключить динамические сценарии:

script.disable_dynamic: true

Вы также захотите ограничить внешний доступ к вашему экземпляру Elasticsearch, чтобы посторонние не могли прочитать ваши данные или отключить кластер Elasticseach через HTTP API. Найдите строку, которая определяет + network.host + и раскомментируйте ее так, чтобы она выглядела следующим образом:

network.host: localhost

Затем отключите многоадресную рассылку, найдя элемент + discovery.zen.ping.multicast.enabled + и раскомментировав его так, что это выглядит так:

discovery.zen.ping.multicast.enabled: false

Сохраните и выйдите из +asticsearch.yml +.

Теперь запустите Elasticsearch:

sudo systemctl start elasticsearch.service

Затем выполните следующую команду, чтобы запустить Elasticsearch при загрузке:

sudo systemctl enable elasticsearch.service

Теперь, когда Elasticsearch запущен и работает, давайте установим Kibana.

Установить Кибана

  • Примечание *: Logstash 1.4.2 рекомендует Kibana 3.0.1.

Загрузите Kibana в свой домашний каталог с помощью следующей команды:

cd ~; curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz

Распакуйте архив Kibana с помощью tar:

tar xvf kibana-3.0.1.tar.gz

Откройте файл конфигурации Kibana для редактирования:

vi ~/kibana-3.0.1/config.js

В файле конфигурации Kibana найдите строку, в которой указан URL-адрес сервера +asticsearch +, и замените номер порта (по умолчанию 9200) на + 80 +:

  elasticsearch: "http://"+window.location.hostname+":80",

Это необходимо, потому что мы планируем получить доступ к Кибане через порт 80 (т.е. Http: // logstash% 5C_server% 5C_public% 5C_ip / [Http: // logstash \ _SERVER \ _public \ _ip /]).

Мы будем использовать Apache для обслуживания нашей установки Kibana, поэтому давайте переместим файлы в подходящее место. Создайте каталог с помощью следующей команды:

sudo mkdir -p /var/www/kibana3

Теперь скопируйте файлы Kibana в ваш новый каталог:

sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/

Прежде чем мы сможем использовать веб-интерфейс Kibana, мы должны установить Apache. Давайте сделаем это сейчас.

Установите Apache HTTP

Используйте Yum для установки Apache HTTP:

sudo yum -y install httpd

Из-за способа, которым Kibana взаимодействует с пользователем с Elasticsearch (пользователь должен иметь возможность прямого доступа к Elasticsearch), нам необходимо настроить Apache для прокси-сервера запросов порта 80 к порту 9200 (порт, который Elasticsearch прослушивает по умолчанию). Для начала мы предоставим образец файла VirtualHost.

Загрузите пример конфигурации VirtualHost:

cd ~; wget https://assets.digitalocean.com/articles/logstash/kibana3.conf

Откройте образец файла конфигурации для редактирования:

vi kibana3.conf

Найдите и измените выделенные значения + VirtualHost + и + ServerName + на ваше полное доменное имя (или localhost, если вы не используете доменное имя) и + root + на то место, где мы установили Kibana, чтобы они выглядели как следующие записи :

<VirtualHost :80>
 ServerName

Сохранить и выйти. Теперь скопируйте его в конфигурацию конфигурации Apache:

sudo cp ~/kibana3.conf /etc/httpd/conf.d/

Затем создайте логин, который будет использоваться для доступа к Kibana (подставьте свое имя пользователя):

sudo htpasswd -c /etc/httpd/conf.d/kibana-htpasswd

Затем введите пароль и подтвердите его. Ссылка на только что созданный файл htpasswd указана в конфигурации Apache, которую вы недавно настроили.

Теперь запустите Apache, чтобы применить наши изменения:

sudo systemctl start httpd.service

Также настройте Apache для запуска при загрузке:

sudo systemctl enable httpd.service

Kibana теперь доступен через ваше полное доменное имя или общедоступный IP-адрес вашего сервера Logstash, т.е. Http: // logstash% 5C_server% 5C_public% 5C_ip / [Http: // logstash \ _SERVER \ _public \ _ip /]. Если вы зайдете туда в веб-браузере, вы должны увидеть страницу приветствия Kibana, которая позволит вам просматривать информационные панели, но журналов для просмотра не будет, поскольку Logstash еще не настроен. Давайте сделаем это сейчас.

Установите Logstash

Пакет Logstash использует тот же ключ GPG, что и Elasticsearch, и мы уже установили этот открытый ключ, поэтому давайте создадим и отредактируем новый файл репозитория Yum для Logstash:

sudo vi /etc/yum.repos.d/logstash.repo

Добавьте следующую конфигурацию хранилища:

[logstash-1.4]
name=logstash repository for 1.4.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

Сохранить и выйти.

Установите Logstash 1.4.2 с помощью этой команды:

sudo yum -y install logstash-1.4.2

Logstash установлен, но еще не настроен.

Генерация SSL-сертификатов

Поскольку мы собираемся использовать Logstash Forwarder для отправки журналов с наших серверов на наш сервер Logstash, нам необходимо создать SSL-сертификат и пару ключей. Сертификат используется сервером пересылки Logstash для проверки подлинности сервера Logstash.

Теперь у вас есть два варианта для создания ваших сертификатов SSL. Если у вас есть настройка DNS, которая позволит вашим клиентским серверам разрешать IP-адрес сервера Logstash, используйте * Option 2 *. В противном случае * Вариант 1 * позволит вам использовать IP-адреса.

Вариант 1: IP-адрес

Если у вас нет настройки DNS, которая позволила бы вашим серверам, с которых вы будете собирать журналы, разрешать IP-адрес вашего сервера Logstash, вам придется добавить частный IP-адрес сервера Logstash к + subjectAltName + (SAN) поле сертификата SSL, который мы собираемся сгенерировать. Для этого откройте файл конфигурации OpenSSL:

sudo vi /etc/pki/tls/openssl.cnf

Найдите в файле раздел + [v3_ca] + и добавьте в него следующую строку (заменив частный IP-адрес сервера Logstash):

subjectAltName = IP:

Сохранить и выйти.

Теперь создайте SSL-сертификат и закрытый ключ в соответствующих местах (/ etc / pki / tls /) с помощью следующих команд:

cd /etc/pki/tls
sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

Файл logstash-forwarder.crt будет скопирован на все серверы, которые будут отправлять журналы в Logstash, но мы сделаем это чуть позже. Давайте завершим нашу конфигурацию Logstash. Если вы выбрали эту опцию, пропустите опцию 2 и перейдите к * Configure Logstash *.

Вариант 2: полное доменное имя (DNS)

Если у вас есть настройка DNS с вашей частной сетью, вы должны создать запись A, содержащую частный IP-адрес сервера Logstash - это имя домена будет использовано в следующей команде для создания сертификата SSL. Кроме того, вы можете использовать запись, которая указывает на публичный IP-адрес сервера. Просто убедитесь, что ваши серверы (те, с которых вы будете собирать журналы) смогут преобразовать доменное имя в ваш Logstash Server.

Теперь сгенерируйте SSL-сертификат и закрытый ключ в соответствующих местах (/ etc / pki / tls /…) с помощью следующей команды (подставьте в полное доменное имя сервера Logstash):

cd /etc/pki/tls
sudo openssl req -subj '/CN=<^>logstash_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

Файл logstash-forwarder.crt будет скопирован на все серверы, которые будут отправлять журналы в Logstash, но мы сделаем это чуть позже. Давайте завершим нашу конфигурацию Logstash.

Настроить Logstash

Файлы конфигурации Logstash находятся в формате JSON и находятся в /etc/logstash/conf.d. Конфигурация состоит из трех разделов: входы, фильтры и выходы.

Давайте создадим файл конфигурации с именем + 01-lumberjack-input.conf + и настроим наш вход «lumberjack» (протокол, который использует Logstash Forwarder):

sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

Вставьте следующую input конфигурацию:

input {
 lumberjack {
   port => 5000
   type => "logs"
   ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
   ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
 }
}

Сохранить и выйти. Это указывает на ввод + lumberjack +, который будет прослушивать tcp порт + 5000 +, и будет использовать сертификат SSL и закрытый ключ, который мы создали ранее.

Теперь давайте создадим файл конфигурации с именем + 10-syslog.conf +, куда мы добавим фильтр для сообщений syslog:

sudo vi /etc/logstash/conf.d/10-syslog.conf

Вставьте следующую конфигурацию системного журнала filter:

filter {
 if [type] == "syslog" {
   grok {
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
     add_field => [ "received_at", "%{@timestamp}" ]
     add_field => [ "received_from", "%{host}" ]
   }
   syslog_pri { }
   date {
     match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
   }
 }
}

Сохранить и выйти. Этот фильтр ищет журналы, которые помечены как тип «syslog» (от Logstash Forwarder), и он попытается использовать «grok» для анализа входящих журналов системного журнала, чтобы сделать его структурированным и способным выполнять запросы.

Наконец, мы создадим файл конфигурации с именем + 30-lumberjack-output.conf +:

sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf

Вставьте следующую конфигурацию output:

output {
 elasticsearch { host => localhost }
 stdout { codec => rubydebug }
}

Сохранить и выйти. Этот вывод в основном настраивает Logstash для хранения журналов в Elasticsearch.

При такой конфигурации Logstash также будет принимать журналы, которые не соответствуют фильтру, но данные не будут структурированы (например, нефильтрованные журналы Nginx или Apache будут отображаться в виде плоских сообщений вместо категоризации сообщений по кодам ответов HTTP, исходным IP-адресам, обслуживаемым файлам и т. д.).

Если вы хотите добавить фильтры для других приложений, которые используют вход Logstash Forwarder, обязательно назовите файлы так, чтобы они сортировались между входной и выходной конфигурацией (т.е. между 01 и 30).

Перезапустите Logstash, чтобы изменения вступили в силу:

sudo service logstash restart

Теперь, когда наш сервер Logstash готов, давайте перейдем к настройке Logstash Forwarder.

Настройка экспедитора Logstash

  • Примечание *: Выполните эти шаги для каждого сервера, на который вы хотите отправлять журналы на сервер Logstash. Инструкции по установке Logstash Forwarder в дистрибутивах Linux на основе Debian (например, Ubuntu, Debian и т. Д.), Обратитесь к https://www.digitalocean.com/community/tutorials/how-to-use-logstash-and-kibana-to-centralize-and-visualize-logs-on-ubuntu -14-04 # BuildandPackageLogstashForwarder [раздел Build и Package Logstash Forwarder варианта Ubuntu этого руководства].

Копирование SSL-сертификата и пакета экспедитора Logstash

На * Logstash Server * скопируйте SSL-сертификат на * Server * (замените свой логин):

scp /etc/pki/tls/certs/logstash-forwarder.crt @:/tmp

Установить пакет экспедитора Logstash

На * Server * загрузите RPM Logstash Forwarder в свой домашний каталог:

cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm

Затем установите пакет Logstash Forwarder:

sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm

Затем вы захотите установить сценарий инициализации Logstash Forwarder, чтобы он запускался при загрузке. Мы будем использовать скрипт инициализации, предоставленный logstashbook.com:

cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
sudo chmod +x logstash-forwarder

Сценарий инициализации зависит от файла с именем + / etc / sysconfig / logstash-forwarder +. Образец файла доступен для скачивания:

sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig

Откройте его для редактирования:

sudo vi /etc/sysconfig/logstash-forwarder

И измените значение + LOGSTASH_FORWARDER_OPTIONS + так, чтобы оно выглядело следующим образом:

LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"

Сохранить и выйти.

Теперь скопируйте SSL-сертификат в соответствующее место (/ etc / pki / tls / certs):

sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

Настройте экспедитор Logstash

На * Server * создайте и отредактируйте файл конфигурации Logstash Forwarder в формате JSON:

sudo vi /etc/logstash-forwarder

Теперь добавьте в файл следующие строки, заменив в частном IP-адресе вашего Logstash Server + logstash_server_private_IP +:

{
 "network": {
   "servers": [ ":5000" ],
   "timeout": 15,
   "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
 },
 "files": [
   {
     "paths": [
       "/var/log/messages",
       "/var/log/secure"
      ],
     "fields": { "type": "syslog" }
   }
  ]
}

Сохранить и выйти. Это настраивает Logstash Forwarder для подключения к вашему Logstash Server через порт 5000 (порт, для которого мы указали вход ранее) и использует сертификат SSL, который мы создали ранее. Раздел paths указывает, какие файлы журналов отправлять (здесь мы указываем messages и secure), а раздел type указывает, что эти журналы имеют тип «syslog * (это тип, который ищет наш фильтр).

Обратите внимание, что именно здесь вы бы добавили больше файлов / типов для настройки Logstash Forwarder в другие файлы журналов для Logstash на порту 5000.

Теперь мы хотим добавить службу Logstash Forwarder с помощью chkconfig:

sudo chkconfig --add logstash-forwarder

Теперь запустите Logstash Forwarder, чтобы внести наши изменения:

sudo service logstash-forwarder start

Теперь Logstash Forwarder отправляет messages и auth.log на ваш сервер Logstash! Повторите этот процесс для всех других серверов, для которых вы хотите собирать журналы.

Подключиться к Кибане

Когда вы закончите настройку Logstash Forwarder на всех серверах, для которых вы хотите собирать журналы, давайте взглянем на Kibana, веб-интерфейс, который мы установили ранее.

В веб-браузере перейдите по полному доменному имени или общедоступному IP-адресу вашего сервера Logstash. Вам нужно будет ввести имя входа, которое вы создали (во время установки Apache), после чего вы должны увидеть страницу приветствия Kibana.

Нажмите на панель инструментов Logstash, чтобы перейти к готовой панели инструментов. Вы должны увидеть гистограмму с событиями журнала, с сообщениями журнала ниже (если вы не видите никаких событий или сообщений, один из ваших четырех компонентов Logstash не настроен должным образом).

Здесь вы можете искать и просматривать ваши журналы. Вы также можете настроить свою панель инструментов. Вот пример того, как может выглядеть ваш экземпляр Kibana:

изображение: https: //assets.digitalocean.com/articles/logstash/dashboard.png [Пример панели инструментов Kibana 3]

Попробуйте следующие вещи:

  • Ищите «root», чтобы увидеть, пытается ли кто-нибудь войти на ваши серверы как root.

  • Поиск определенного имени хоста

  • Измените временной интервал, выбрав область на гистограмме или в меню выше

  • Нажмите на сообщения под гистограммой, чтобы увидеть, как данные фильтруются

У Kibana есть много других функций, таких как построение графиков и фильтров, так что не стесняйтесь возиться!

Заключение

Теперь, когда ваши системные журналы централизованы с помощью Logstash, и вы можете визуализировать их с помощью Kibana, вам следует хорошо начать с централизации всех важных журналов. Помните, что вы можете отправлять в Logstash практически любые типы журналов, но данные становятся еще более полезными, если их анализировать и структурировать с помощью grok.

Обратите внимание, что ваша панель управления Kibana доступна для всех, кто имеет доступ к вашему серверу, поэтому вы захотите защитить ее чем-то вроде htaccess.

Related