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

[.note] #Note: Это руководство предназначено для более старой версии стека ELK, которая несовместима с последней версией. Последняя версия этого руководства доступна по адресуHow To Install Elasticsearch, Logstash, and Kibana (ELK Stack) on Ubuntu 14.04.
#

Вступление

В этом уроке мы рассмотрим установку Logstash 1.4.2 и Kibana 3 и как их настроить для сбора и визуализации системных журналов наших систем в централизованном месте. 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 будет установлен на всех серверах, для которых мы хотим собирать журналы, которые мы будем называть нашимиServers.

Предпосылки

Для завершения этого урока вам потребуется доступ с правами суперпользователя к Ubuntu 14.04 VPS. Инструкции по настройке можно найти здесь (шаги 3 и 4):Initial Server Setup with Ubuntu 14.04.

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

  • ОС: Ubuntu 14.04

  • RAM: 4 ГБ

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

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

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

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

Elasticsearch и Logstash требуют Java 7, поэтому мы установим это сейчас. Мы установим Oracle Java 7, потому что именно это рекомендует Elasticsearch. Однако он должен хорошо работать с OpenJDK, если вы решите пойти по этому пути.

Добавьте Oracle Java PPA в apt:

sudo add-apt-repository -y ppa:webupd8team/java

Обновите базу данных пакетов apt:

sudo apt-get update

Установите последнюю стабильную версию Oracle Java 7 с помощью этой команды (и примите появившееся лицензионное соглашение):

sudo apt-get -y install oracle-java7-installer

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

Установить Elasticsearch

Note: Logstash 1.4.2 рекомендует Elasticsearch 1.1.1.

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

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

Создайте список источников Elasticsearch:

echo 'deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main' | sudo tee /etc/apt/sources.list.d/elasticsearch.list

Обновите базу данных пакетов apt:

sudo apt-get update

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

sudo apt-get -y install elasticsearch=1.1.1

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

sudo vi /etc/elasticsearch/elasticsearch.yml

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

script.disable_dynamic: true

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

network.host: localhost

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

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

sudo service elasticsearch restart

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

sudo update-rc.d elasticsearch defaults 95 10

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

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

Note: Logstash 1.4.2 рекомендует Kibana 3.0.1

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

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

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

tar xvf kibana-3.0.1.tar.gz

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

sudo vi ~/kibana-3.0.1/config.js

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

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

Это необходимо, потому что мы планируем получить доступ к Кибане через порт 80 (т.е. http://logstash\_server\_public\_ip/).

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

sudo mkdir -p /var/www/kibana3

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

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

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

Установить Nginx

Используйте apt для установки Nginx:

sudo apt-get install nginx

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

Загрузите пример конфигурации Nginx из GitHub-репозитория Kibana в свой домашний каталог:

cd ~; wget https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf

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

vi nginx.conf

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

  server_name FQDN;
  root /var/www/kibana3;

Сохранить и выйти. Теперь скопируйте его на серверный блок Nginx по умолчанию с помощью следующей команды:

sudo cp nginx.conf /etc/nginx/sites-available/default

Теперь мы установимapache2-utils, чтобы мы могли использоватьhtpasswd для генерации пары имени пользователя и пароля:

sudo apt-get install apache2-utils

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

sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user

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

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

sudo service nginx restart

Kibana теперь доступен через ваше полное доменное имя или общедоступный IP-адрес вашего сервера Logstash, т.е. http://logstash\_server\_public\_ip/. Если вы зайдете туда в веб-браузере, вы должны увидеть страницу приветствия Kibana, которая позволит вам просматривать информационные панели, но журналов для просмотра не будет, поскольку Logstash еще не настроен. Давайте сделаем это сейчас.

Установите Logstash

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

echo 'deb http://packages.elasticsearch.org/logstash/1.4/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list

Обновите базу данных пакетов apt:

sudo apt-get update

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

sudo apt-get install logstash=1.4.2-1-2c0f5a1

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

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

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

sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private

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

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

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

sudo vi /etc/ssl/openssl.cnf

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

subjectAltName = IP: logstash_server_private_ip

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

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

cd /etc/pki/tls
sudo openssl req -config /etc/ssl/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, в который мы добавим фильтр для сообщений системного журнала:

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

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

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

Note: Выполните эти шаги для каждого сервера, с которого вы хотите отправлять журналы на свой сервер Logstash. Инструкции по установке Logstash Forwarder в дистрибутивах Linux на основе Red Hat (например, RHEL, CentOS и т. Д.), Обратитесь кBuild and Package Logstash Forwarder section варианта CentOS в этом руководстве.

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

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

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

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

НаServer создайте список источников Logstash Forwarder:

echo 'deb http://packages.elasticsearch.org/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

Он также использует тот же ключ GPG, что и Elasticsearch, который можно установить с помощью этой команды:

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

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

sudo apt-get update
sudo apt-get install logstash-forwarder

Note: Если вы используете 32-разрядную версию Ubuntu и получаете сообщение об ошибке «Не удалось найти пакет logstash-forwarder», вам необходимо установить Logstash Forwarder вручную:

wget https://assets.digitalocean.com/articles/logstash/logstash-forwarder_0.3.1_i386.deb
sudo dpkg -i logstash-forwarder_0.3.1_i386.deb

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

cd /etc/init.d/; sudo wget https://raw.githubusercontent.com/elasticsearch/logstash-forwarder/a73e1cb7e43c6de97050912b5bb35910c0f8d0da/logstash-forwarder.init -O logstash-forwarder
sudo chmod +x logstash-forwarder
sudo update-rc.d logstash-forwarder defaults

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

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

Настроить Logstash Forwarder

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

sudo vi /etc/logstash-forwarder

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

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

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

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

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

sudo service logstash-forwarder restart

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

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

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

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

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

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

Kibana 3 Example Dashboard

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

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

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

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

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

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

Заключение

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

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

Related