Linuxoid.pro

Сообщество разработчиков программного обеспечения и IT-специалистов

Мониторинг журналов Linux с помощью Kibana и Rsyslog

В этом руководстве подробно описано, как создать конвейер мониторинга для анализа журналов Linux с помощью ELK 7.2 и Rsyslog. Если вы системный администратор или даже любопытный разработчик приложений, высока вероятность, что вы регулярно копаетесь в своих журналах, чтобы найти в них ценную информацию.

Иногда вам может потребоваться отслеживать вторжения SSH на свои виртуальные машины.

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

Если вы представили себя в одной из этих точек, вы, вероятно, попали в правильный урок.

В этом руководстве мы должны создать полный конвейер мониторинга журналов с использованием стека ELK (ElasticSearch, Logstash и Kibana) и Rsyslog в качестве мощного сервера системного журнала.

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

I — Почему вы должны отслеживать журналы Linux?

Мониторинг журналов Linux имеет решающее значение, и каждый инженер DevOps должен знать, как это делать. Вот почему:

  • У вас есть визуальная обратная связь в режиме реального времени о ваших журналах: возможно, это один из ключевых аспектов мониторинга журналов, вы можете создавать значимые визуализации (например, таблицы данных, круговые диаграммы, графики или агрегированные гистограммы), чтобы придать некоторый смысл вашим журналам.
  • Вы можете агрегировать информацию для создания расширенных и более сложных панелей мониторинга: иногда необработанной информации недостаточно, вы можете объединить ее с другими журналами или сравнить ее с другими журналами для определения тенденции. Платформа визуализации с обработкой выражений позволяет вам это делать.
  • Вы можете быстро отфильтровать определенный срок или определенный период времени: если вас интересуют только журналы SSH, вы можете создать для него целевую панель управления.
  • По журналам можно быстро и элегантно перемещаться: я знаю, как бесконечно отслеживать и обрабатывать файлы журналов. Я бы предпочел иметь для этого платформу.

 

II — Что вы узнаете

Если вы последуете этому руководству, вы узнаете много вещей:

  • Как журналы обрабатываются в системе Linux (Ubuntu или Debian) и что такое rsyslog.
  • Как установить стек ELK (ElasticSearch 7.2, Logstash и Kibana) и для чего эти инструменты будут использоваться.
  • Как настроить rsyslog для пересылки журналов в Logstash
  • Как настроить Logstash для приема журналов и хранилища ElasticSearch.
  • Как поиграть с Kibana, чтобы построить нашу окончательную панель визуализации.

Предварительные условия для этого учебника следующие:

  • У вас есть система Linux с установленным rsyslog . У вас либо автономная машина с rsyslog, либо централизованная система ведения журналов.
  • У вас есть права администратора или достаточно прав для установки новых пакетов в вашей системе Linux.

Без лишних слов, давайте перейдем к этому!

III — Как выглядит архитектура мониторинга журналов?

a — Ключевые концепции ведения журналов Linux

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

Исторически в Linux ведение журнала начинается с системного журнала .

Syslog — это протокол, разработанный в 1980 году, который направлен на стандартизацию форматирования журналов не только для Linux, но и для любой системы, обменивающейся журналами.

Отсюда были разработаны серверы системного журнала, в которые была встроена возможность обработки сообщений системного журнала.

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

Rsyslog был разработан с учетом этой ключевой функции: наличие модульного и настраиваемого способа обработки журналов.

Модульность будет реализована с помощью модулей, а настройка — с помощью шаблонов журналов.

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

б — Построение архитектуры мониторинга журналов

Вот окончательная архитектура, которую мы собираемся использовать в этом уроке.

  • rsyslog : используется как усовершенствованный сервер системного журнала, rsyslog пересылает журналы в Logstash в формате RFC 5424, который мы описали ранее.
  • Logstash : часть стека ELK, Logstash преобразует журналы из формата syslog в JSON. Напоминаем, что ElasticSearch принимает JSON в качестве входных данных.
  • ElasticSearch : известная поисковая система будет хранить журналы в специальном индексе журналов (logstash- *). ElasticSearch естественным образом проиндексирует журналы и сделает их доступными для анализа.
  • Kibana : используется как платформа для исследования и визуализации, Kibana будет размещать нашу последнюю панель управления.

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

IV — Установка различных инструментов

а — Установка Java в Ubuntu

Перед установкой стека ELK вам необходимо установить Java на свой компьютер.

Для этого выполните следующую команду:

$ sudo apt-get install default-jre

На момент написания этого руководства этот экземпляр запускает OpenJDK версии 11 .

ubuntu:~$ java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu218.04.1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu218.04.1, mixed mode, sharing)

б — Добавление эластичных пакетов в ваш экземпляр

В этом руководстве я собираюсь использовать машину Ubuntu, но подробности будут приведены для Debian.

Сначала добавьте ключ GPG в репозиторий APT.

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

Затем вы можете добавить эластичный источник в свой файл списка источников APT.

$ echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

$ cat /etc/apt/sources.list.d/elastic-7.x.list
deb https://artifacts.elastic.co/packages/7.x/apt stable main

$ sudo apt-get update

После этого вы должны быть готовы к установке всех инструментов в стеке ELK.

Начнем с ElasticSearch.

c — Установка ElasticSearch

ElasticSearch — это поисковая система, созданная Elastic, которая хранит данные в индексах для очень быстрого поиска.

Чтобы установить его, выполните следующую команду:

$ sudo apt-get install elasticsearch

Следующая команда автоматически выполнит:

  • Загрузите пакет deb для ElasticSearch;
  • Создайте пользователя elasticsearch ;
  • Создайте группу elasticsearch ;
  • Автоматически создавать полностью настроенную службу systemd (по умолчанию неактивную)

При первом запуске служба неактивна, запустите ее и убедитесь, что все работает нормально.

$ sudo systemctl start elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2019-07-08 18:19:45 UTC; 2 days ago
Docs: http://www.elastic.co

Чтобы убедиться, что ElasticSearch действительно запущен, вы можете выполнить одну из этих двух команд:

  • Наблюдение за тем, какие приложения прослушивают целевой порт
$ sudo lsof -i -P -n | grep LISTEN | grep 9200
java 10667 elasticsearch 212u IPv6 1159208890 0t0 TCP [::1]:9200 (LISTEN)
java 10667 elasticsearch 213u IPv6 1159208891 0t0 TCP 127.0.0.1:9200 (LISTEN)
  • Выполнение простого запроса ElasticSearch
$ curl -XGET 'http://localhost:9200/_all/_search?q=*&pretty'

Ваш экземпляр ElasticSearch готов!

Теперь давайте установим Logstash в качестве нашего инструмента для сбора и фильтрации журналов.

d — Установка Logstash

Если вы ранее добавляли эластичные пакеты, установить Logstash так же просто, как выполнить:

$ sudo apt-get install logstash

Опять же, будет создан сервис Logstash, и вам нужно его активировать.

$ sudo systemctl status logstash 
$ sudo systemctl start logstash

По умолчанию Logstash прослушивает метрики на порту 9600. Как и раньше, перечислите открытые порты на вашем компьютере в поисках этого конкретного порта.

$ sudo lsof -i -P -n | grep LISTEN | grep 9600
java 28872 logstash 79u IPv6 1160098941 0t0 TCP 127.0.0.1:9600 (LISTEN)

Нам нужно только установить Kibana для завершения всей нашей установки.

e — Установка Kibana

Напоминаем, что Kibana — это инструмент визуализации, специально разработанный для ElasticSearch и используемый для отслеживания наших окончательных журналов.

Не очень удивительно, но вот команда для установки Kibana:

$ sudo apt-get install kibana

Как обычно, запустите службу и убедитесь, что она работает правильно.

$ sudo systemctl start kibana
$ sudo lsof -i -P -n | grep LISTEN | grep 5601
node 7253 kibana 18u IPv4 1159451844 0t0 TCP *:5601 (LISTEN)

Веб-интерфейс Kibana доступен на порту 5601 .

Перейдите по адресу http: // localhost: 5601 в своем браузере, и вы должны увидеть следующий экран.

Отлично!

Теперь мы очень готовы принять журналы из rsyslog и начать их визуализацию в Kibana.

V – Маршрутизация журналов Linux в ElasticSearch

Напоминаем, что мы перенаправляем журналы из rsyslog в Logstash, и эти журналы будут переданы в ElasticSearch в значительной степени автоматически.

а — Маршрутизация от Logstash до ElasticSearch

Перед маршрутизацией журналов из rsyslog в Logstash очень важно настроить пересылку журналов между Logstash и ElasticSearch.

Для этого мы собираемся создать файл конфигурации для Logstash и точно сказать ему, что делать.

Чтобы создать файлы конфигурации Logstash, перейдите в /etc/logstash/conf.d и создайте файл logstash.conf.

Внутри добавьте следующее содержимое:

input { 
udp { 
host => "127.0.0.1" 
port => 10514 
codec => "json" 
type => "rsyslog" 
} 
} 

# Конвейер фильтра здесь остается пустым, форматирование не выполняется.. 

filter { } 

# Каждый журнал будет перенаправлен в ElasticSearch. Если вы используете другой порт, вы должны указать его здесь.. 
output { 
if [type] == "rsyslog" { 
elasticsearch { 
hosts => [ "127.0.0.1:9200" ] 
} 
} 
}

Примечание : в этом руководстве мы используем вход UDP для Logstash, но если вы ищете более надежный способ передачи журналов, вам, вероятно, следует использовать вход TCP . Формат почти такой же, просто измените строку UDP на TCP.

Перезапустите службу Logstash.

$ sudo systemctl restart logstash

Чтобы убедиться, что все работает правильно, введите следующую команду:

$ netstat -na | grep 10514
udp 0 0 127.0.0.1:10514 0.0.0.0:*

Logstash теперь прослушивает порт 10514.

b — Маршрутизация от rsyslog к Logstash

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

Rsyslog может преобразовывать журналы с помощью шаблонов . Это именно то, что мы ищем, поскольку ElasticSearch ожидает на входе JSON, а не строки syslog RFC 5424.

Чтобы пересылать журналы в rsyslog, перейдите в /etc/rsyslog.d и создайте новый файл с именем 70-output.conf.

Внутри вашего файла напишите следующее содержимое:

# This line sends all lines to defined IP address at port 10514
# using the json-template format.

*.* @127.0.0.1:10514;json-template

Теперь, когда у вас есть пересылка журналов, создайте файл 01-json-template.conf в той же папке и вставьте следующее содержимое:

template(name="json-template"
type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"@version\":\"1")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\",\"sysloghost\":\"") property(name="hostname")
constant(value="\",\"severity\":\"") property(name="syslogseverity-text")
constant(value="\",\"facility\":\"") property(name="syslogfacility-text")
constant(value="\",\"programname\":\"") property(name="programname")
constant(value="\",\"procid\":\"") property(name="procid")
constant(value="\"}\n")
}

Как вы, наверное, догадались, для каждого входящего сообщения rsyslog будет интерполировать свойства журнала в сообщение в формате JSON и перенаправить его в Logstash, прослушивая порт 10514.

Перезапустите службу rsyslog и убедитесь, что журналы правильно перенаправляются в ElasticSearch.

Примечание : журналы будут пересылаться в индексе с именем logstash- *.

$ sudo systemctl restart rsyslog
$ curl -XGET 'http://localhost:9200/logstash-*/_search?q=*&pretty'
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 10000,
"relation": "gte"
},
"max_score": 1,
"hits": [
{
"_index": "logstash-2019.07.08-000001",
"_type": "_doc",
"_id": "GEBK1WsBQwXNQFYwP8D_",
"_score": 1,
"_source": {
"host": "127.0.0.1",
"severity": "info",
"programname": "memory_usage",
"facility": "user",
"@timestamp": "2019-07-09T05:52:21.402Z",
"sysloghost": "schkn-ubuntu",
"message": " Dload Upload Total Spent Left Speed",
"@version": "1",
"procid": "16780",
"type": "rsyslog"
}
}
]
}
}

Потрясающе! Мы знаем, что журналы rsyslog хранятся непосредственно в ElasticSearch.

Пришло время создать нашу последнюю дашборд в Кибане.

VI — Создание панели управления журналом в Кибане

Здесь начинается самое интересное.

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

Как и в нашей статье о мониторинге процессов Linux, эта часть разделена по разным панелям окончательной панели инструментов, поэтому не стесняйтесь переходить к интересующему вас разделу.

а — Несколько слов о кибане

Перейдите в Kibana (http: // localhost: 5601), и вы должны увидеть следующий экран.

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

Чтобы создать информационную панель, вам нужно будет создать визуализации. В Kibana для этого есть две панели: одна называется «Визуализировать», а другая — «Панель инструментов».

Чтобы создать панель управления, вы сначала создадите каждую отдельную визуализацию с помощью панели «Визуализация» и сохраните их.

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

Перейдите на панель « Визуализация », и давайте начнем с одной первой панели.

б — Агрегированная гистограмма для процессов

Чтобы создать свою первую панель управления, нажмите « Создать новую визуализацию » в правом верхнем углу Kibana. Выберите панель с вертикальной полосой.

Основная цель — построить панель, которая выглядит так:

Как видите, гистограмма показывает общее количество журналов по процессам в агрегированном виде.

Гистограмма также может быть разделена по хостам, если вы работаете с несколькими хостами.

Без лишних слов, вот шпаргалка для этой панели.

c — Пирог по названию программы

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

Вот шпаргалка по этой панели!

d — Пирог по степени серьезности

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

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

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

Опять же, поскольку вы, вероятно, этого ждете, вот шпаргалка для этой панели!

e — Мониторинг записей SSH

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

При входе на вкладку «Обнаружение» ваш «logstash- *» должен быть выбран автоматически.

Оттуда на панели фильтров введите следующий фильтр «programname: ssh *» .

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

Для того, чтобы он был доступен на панели инструментов, нажмите на опцию «Сохранить» и дайте название своей панели.

Теперь на панели инструментов вы можете нажать «Добавить» и выбрать только что созданную панель.

Отлично! Теперь ваша панель включена в вашу панель инструментов из панели обнаружения.

VI — Заключение

Из этого руководства вы лучше понимаете, как легко контролировать всю инфраструктуру ведения журналов с помощью Rsyslog и стека ELK.

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

Один из советов — использовать образ Docker для вашего rsyslog и стека ELK, чтобы иметь возможность масштабировать централизованную часть (например, с Kubernetes), если количество журналов слишком сильно увеличивается.

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

Вы по-прежнему можете полагаться на rsyslog для централизации журналов , но вы можете изменить либо шлюз (в данном случае Logstash), либо инструмент визуализации.

Важно отметить, что вы можете использовать Grafana, например, для очень простого отслеживания журналов Elasticsearch.

С помощью этого руководства вы начнете использовать эту архитектуру в своей собственной инфраструктуре? Как вы думаете, подойдут ли вам другие панели для отладки серьезных сбоев в ваших системах?

Если у вас есть идеи, не забудьте оставить их ниже, чтобы они могли помочь другим инженерам.