Как установить Elasticsearch 1.7, Logstash 1.5 и Kibana 4.1 (ELK Stack) в Ubuntu 14.04

Вступление

В этом уроке мы рассмотрим установку стека Elasticsearch ELK в Ubuntu 14.04, то есть Elasticsearch 1.7.3, Logstash 1.5.4 и Kibana 4.1.1. Мы также покажем вам, как настроить его для сбора и визуализации системных журналов ваших систем в централизованном месте. Logstash - это инструмент с открытым исходным кодом для сбора, анализа и хранения журналов для дальнейшего использования. Kibana - это веб-интерфейс, который можно использовать для поиска и просмотра журналов, проиндексированных Logstash. Оба эти инструмента основаны на Elasticsearch.

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

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

Наша цель

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

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

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

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

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

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

изображение: https: //assets.digitalocean.com/articles/elk/elk-infrastructure-logstashforwarder.png [Инфраструктура ELK]

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

Предпосылки

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

Если вы предпочитаете использовать CentOS вместо этого, ознакомьтесь с этим учебником: https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-centos-7 [ Как установить ELK на CentOS 7].

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

  • ОС: Ubuntu 14.04

  • RAM: 4 ГБ

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

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

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

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

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

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

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

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

sudo apt-get update

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

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

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

Установить Elasticsearch

Elasticsearch можно установить с помощью менеджера пакетов, добавив список источников пакетов Elastic.

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

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Если ваша подсказка просто висит там, она, вероятно, ожидает пароль вашего пользователя (для авторизации команды + sudo +). Если это так, введите свой пароль.

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

echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list

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

sudo apt-get update

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

sudo apt-get -y install elasticsearch

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

sudo vi /etc/elasticsearch/elasticsearch.yml

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

отрывок эластичного поиска.yml (обновлено)

network.host: localhost

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

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

sudo service elasticsearch restart

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

sudo update-rc.d elasticsearch defaults 95 10

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

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

Kibana можно установить с помощью менеджера пакетов, добавив список источников пакетов Elastic.

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

echo 'deb http://packages.elastic.co/kibana/4.1/debian stable main' | sudo tee /etc/apt/sources.list.d/kibana.list

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

sudo apt-get update

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

sudo apt-get -y install kibana

Kibana теперь установлена.

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

sudo vi /opt/kibana/config/kibana.yml

В файле конфигурации Kibana найдите строку, которая задает + host +, и замените IP-адрес (по умолчанию «0.0.0.0») на «localhost»:

kibana.yml выдержка (обновлено)

host: "localhost"

Сохранить и выйти. Этот параметр позволяет Kibana быть доступным только для локального хоста. Это нормально, потому что мы установим обратный прокси-сервер Nginx на том же сервере, чтобы разрешить внешний доступ.

Теперь включите службу Kibana и запустите ее:

sudo update-rc.d kibana defaults 96 9
sudo service kibana start

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

Установить Nginx

Поскольку мы настроили Kibana для прослушивания + localhost +, мы должны настроить обратный прокси-сервер, чтобы разрешить внешний доступ к нему. Мы будем использовать Nginx для этой цели.

  • Примечание: * Если у вас уже есть экземпляр Nginx, который вы хотите использовать, не стесняйтесь использовать его вместо этого. Просто настройте Kibana так, чтобы он был доступен для вашего сервера Nginx (вы, вероятно, захотите изменить значение + host + в + / opt / kibana / config / kibana.yml +) на частный IP-адрес вашего сервера Kibana или имя хоста). Также рекомендуется включить SSL / TLS.

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

sudo apt-get install nginx apache2-utils

Используйте htpasswd для создания пользователя-администратора с именем «kibanaadmin» (вы должны использовать другое имя), который может получить доступ к веб-интерфейсу Kibana:

sudo htpasswd -c /etc/nginx/htpasswd.users

Введите пароль в командной строке. Запомните этот логин, так как он понадобится вам для доступа к веб-интерфейсу Kibana.

Теперь откройте блок сервера Nginx по умолчанию в вашем любимом редакторе. Мы будем использовать vi:

sudo vi /etc/nginx/sites-available/default

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

/ И т.д. / Nginx / сайты-отсутствуют / по умолчанию

server {
   listen 80;

   server_name ;

   auth_basic "Restricted Access";
   auth_basic_user_file /etc/nginx/htpasswd.users;

   location / {
       proxy_pass http://localhost:5601;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection 'upgrade';
       proxy_set_header Host $host;
       proxy_cache_bypass $http_upgrade;
   }
}

Сохранить и выйти. Это настраивает Nginx для направления HTTP-трафика вашего сервера в приложение Kibana, которое прослушивает + localhost: 5601 +. Кроме того, Nginx будет использовать файл + htpasswd.users +, который мы создали ранее, и потребует базовой аутентификации.

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

sudo service nginx restart

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

Установите Logstash

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

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

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

sudo apt-get update

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

sudo apt-get install logstash

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 *. В противном случае * Вариант 1 * позволит вам использовать IP-адреса.

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

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

sudo vi /etc/ssl/openssl.cnf

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

выдержка из openssl.cnf (обновлено)

subjectAltName = 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=/' -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 конфигурацию:

01-дровосек-input.conf

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

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

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

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

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

10-syslog.conf

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:

30-syslog.conf

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 Forwarder (добавьте клиентские серверы)

Выполните эти шаги для каждого сервера Ubuntu или Debian, на который вы хотите отправлять журналы на сервер Logstash. Инструкции по установке Logstash Forwarder в дистрибутивах Linux на основе Red Hat (например, RHEL, CentOS и т. Д.), См. Https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-centos-7#set-up -logstash-forwarder- (add-client-server) [раздел Build и Package Logstash Forwarder] варианта CentOS этого руководства.

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

На * Logstash Server * скопируйте сертификат SSL на * Client Server * (подставьте адрес клиентского сервера и свой собственный логин):

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

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

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

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

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

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

wget -qO - https://packages.elastic.co/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 вручную.

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

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

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

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

sudo vi /etc/logstash-forwarder.conf

В разделе + network + добавьте в файл следующие строки, заменив в частном адресе вашего Logstash Server + logstash_server_private_address +:

logstash-forwarder.conf выдержка 1 из 2

   "servers": [ ":5043" ],
   "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
   "timeout": 15

В разделе + files + (между квадратными скобками) добавьте следующие строки:

logstash-forwarder.conf выдержка 2 из 2

   {
     "paths": [
       "/var/log/syslog",
       "/var/log/auth.log"
      ],
     "fields": { "type": "syslog" }
   }

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

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

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

sudo service logstash-forwarder restart

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

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

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

В веб-браузере перейдите по полному доменному имени или общедоступному IP-адресу вашего сервера Logstash. После ввода учетных данных «kibanaadmin» вы должны увидеть страницу, предлагающую настроить шаблон индекса:

изображение: https: //assets.digitalocean.com/articles/elk/1-select-index.gif [Создать индекс]

Продолжайте и выберите * @ timestamp * из выпадающего меню, затем нажмите кнопку * Create *, чтобы создать первый индекс.

Теперь нажмите на ссылку * Discover * в верхней панели навигации. По умолчанию это покажет вам все данные журнала за последние 15 минут. Вы должны увидеть гистограмму с событиями журнала, с сообщениями журнала ниже:

изображение: https: //assets.digitalocean.com/articles/elk/2-discover.png [открыть страницу]

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

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

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

  • Поиск определенного имени хоста (поиск + host:" "+)

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

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

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

Заключение

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

Чтобы улучшить свой новый стек ELK, вы должны изучить возможность сбора и фильтрации других журналов с помощью Logstash, а также создания панелей управления Kibana. Эти темы рассматриваются во втором и третьем уроках этой серии. Кроме того, если у вас возникли проблемы с настройкой, следуйте нашему учебнику How для устранения типичных проблем стека ELK ,

Related