Поиск по сайту:

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


Примечание. Это руководство предназначено для более старой версии стека ELK, которая несовместима с последней версией. Последняя версия этого руководства доступна на странице Как установить Elasticsearch, Logstash и Kibana (ELK Stack) в Ubuntu 14.04.

Введение

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

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

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

Наша цель

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

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

  • Logstash: серверный компонент Logstash, обрабатывающий входящие журналы.
  • Elasticsearch: сохраняет все журналы.
  • Kibana: веб-интерфейс для поиска и визуализации журналов
  • Logstash Forwarder: установленный на серверах, которые будут отправлять свои журналы в Logstash, Logstash Forwarder служит агентом пересылки журналов, который использует сетевой протокол lumberjack для связи с Logstash

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

Предпосылки

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

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

  • ОС: Ubuntu 14.04
  • ОЗУ: 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.

Установить эластичный поиск

Примечание. 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.

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

Примечание. 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",

Это необходимо, потому что мы планируем получить доступ к Kibana через порт 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 из репозитория Kibana на github в свой домашний каталог:

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 для сохранения информационных панелей и предоставления к ним общего доступа (замените свое имя пользователя):

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 доступен в том же репозитории, что и 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 Forwarder для проверки подлинности Logstash Server. Создайте каталоги, в которых будут храниться сертификат и закрытый ключ, с помощью следующих команд:

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

Теперь у вас есть два варианта создания SSL-сертификатов. Если у вас есть настройка DNS, которая позволит вашим клиентским серверам разрешать IP-адрес сервера Logstash, используйте вариант 2. В противном случае вариант 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 и перейдите к настройке Logstash.

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

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

Теперь сгенерируйте сертификат 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 имеют формат JSON и находятся в /etc/logstash/conf.d. Конфигурация состоит из трех разделов: входы, фильтры и выходы.

Давайте создадим файл конфигурации с именем 01-lumberjack-input.conf и настроим наш вход «лесоруб» (протокол, который использует 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

Вставьте следующую конфигурацию системного журнала 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 на основе Red Hat (например, RHEL, CentOS и т. д.) см. в разделе «Сборка и упаковка Logstash Forwarder» варианта CentOS этого руководства.

Скопируйте SSL-сертификат и пакет пересылки Logstash

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

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

Установите пакет пересылки Logstash

На сервере создайте список источников 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

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

wget https://assets.linux-console.net/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

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

sudo vi /etc/logstash-forwarder

Теперь добавьте в файл следующие строки, заменив частный IP-адрес вашего сервера Logstash на logstash_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 через порт 5000 (порт, для которого мы указали входные данные ранее) и использует сертификат SSL, который мы создали ранее. В разделе paths указывается, какие файлы журналов следует отправлять (здесь мы указываем syslog и auth.log), а в разделе type указывается, что эти журналы относятся к типу syslog* (который это тот тип, который ищет наш фильтр).

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

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

sudo service logstash-forwarder restart

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

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

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

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

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

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

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

  • Выполните поиск по слову \root, чтобы узнать, не пытается ли кто-нибудь войти на ваши серверы с правами root
  • Поиск определенного имени хоста
  • Измените временной интервал, выбрав область на гистограмме или в меню выше.
  • Нажимайте на сообщения под гистограммой, чтобы увидеть, как данные фильтруются.

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

Заключение

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

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