Большие информационные системы генерируют огромное количество служебной информации, которую нужно где-то хранить. Я расскажу о том, как настроить хранилище для логов на базе Elasticsearch, Logstash и Kibana, которое называют ELK Stack. В это хранилище можно настроить отправку практически любых логов в разных форматах и большого объема. Читать
Архив метки: Elasticsearch
Исправляем статус одиночного сервера ElasticSearch
Зелёный статус для одиночного ElasticSearch
- Когда мы собеседуем системных администраторов и видим в их резюме упоминание ElasticSearch, мы обязательно задаём им вопрос «какого цвета будет одиночный сервер?»
- Примерно половина соискателей не понимает его смысла и на этом наше знакомство с ними, как правило, заканчивается (потому что их владение остальными указанными в резюме терминами обычно находится на аналогичном уровне).
Оставшейся половине мы задаём два вопроса:
- Почему он жёлтый,
- и как превратить его в зелёный, не создавая кластер?
Цвет означает состояние сервера:
- Зелёный — всё хорошо.
- Жёлтый — сервер правильно обрабатывает все запросы на чтение/запись, но есть внутренние проблемы, которые необходимо исправить.
- Красный — всё плохо.
Как увидеть цвет сервера?
- Запрос:
curl '127.0.0.1:9200/_cluster/health?pretty=true'
- Пример ответа:
{
"cluster_name" : "elasticsearch",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 1880,
"active_shards" : 1880,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 1680,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 52.80898876404494
}
Почему отдельный сервер будет по умолчанию жёлтым?
- Потому что ElasticSearch является отказоустойчивой системой хранения данных, которая расчитана для запуска не на одном сервере, а на группе (кластере) из нескольких связанных серверов (узлов, “nodes”).
- В частности, ElasticSearch подразумевает, что при отказе одного узла система должна сохранять полную работоспособность.
- Для этого система должна состоять из нескольких серверов (минимум — двух, желательно — трёх для предотвращения split brain), и каждая порция данных (т.н. “shard” в терминологии ES) должна храниться в нескольких экземплярах на разных серверах.
- Один из этих экземпляров ES будет считать первичным (“master shard”), остальные копиями первичного (“replica shards”).
- В системе из одного сервера ES хранит на нём все “primary shards”, но создавать “replica shards” такой системе будет негде.
- Поэтому статус в приведённом примере является жёлтым из-за ненулевого значения “unassigned_shards”, которое примерно равно “active_shards”.
- Небольшая разница между количеством активных и неразмещённых шардов обусловлена тем, что часть служебных индексов является локальной для каждого узла, то есть не должна иметь реплик и не приводит к появлению unassigned shards.
- Подробнее о том, что такое шарды, зачем они нужны, и какое место занимают между документами и индексами: https://stackoverflow.com/a/49892584/2743554.
Как сделать одиночный сервер зелёным?
- Сначала узнаем, какие шарды система не сумела разместить:
curl -sS -XGET '127.0.0.1:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | grep UNASSIGNED
- Теперь посмотрим, к каким индексам они относятся:
curl -sS -XGET '127.0.0.1:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | awk '/UNASSIGNED/ { print $1 }'
- После этого поменяем настройки индексов — уменьшим количество реплик (так называемый Replication Factor) до нуля:
curl -sS -XGET '127.0.0.1:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | awk '/UNASSIGNED/ { print $1 }' |
while read idx; do
curl -XPUT "localhost:9200/$idx/_settings" -H 'Content-Type: application/json' -d '{ "index": { "number_of_replicas": 0 } }'
done
или
curl -sS -XGET '10.233.108.217:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | awk '/UNASSIGNED/ { print $1 }'
- И проверим результат:
{
"cluster_name" : "elasticsearch",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 1880,
"active_shards" : 1880,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
Почему в полночь карета превратится в тыкву сервер снова станет жёлтым?
- Потому что в ES принято каждые сутки автоматически создавать новый индекс с именем вида “basename-yyyy.mm.dd” из шаблона.
- Поэтому Replication Factor необходимо уменьшить до нуля не только в существующих индексах, но и в шаблонах, из которых будут создаваться новые индексы.
- Это делается так:
curl -XPUT "127.0.0.1:9200/_template/all?pretty=true" -H 'Content-Type: application/json' -d
'{ "template" : "*" , "settings": { "number_of_replicas": 0 } }'
или
curl -XPUT "10.233.108.217:9200/$idx/_settings" -H 'Content-Type: application/json' -d '{ "index": { "number_of_replicas": 0 } }'
- После этого постоянный статус одиночного сервера станет зелёным, а жёлтый превратится из «фонового шума» в надёжный показатель проблем, действительно требующих исправления.
Источник: https://cdnnow.ru/blog/esgreen/
Как установить Elasticsearch на Debian 10
Elasticsearch — это распределенная система полнотекстового поиска и аналитики с открытым исходным кодом. Он поддерживает операции RESTful и позволяет хранить, искать и анализировать большие объемы данных в режиме реального времени.
Elasticsearch — одна из самых популярных поисковых систем для приложений со сложными поисковыми требованиями, таких как крупные магазины электронной коммерции и аналитические приложения. Читать
Очистка elasticsearch с помощью curator
Сегодня расскажу, как настроить автоматическую очистку индексов elasticsearch с помощью curator. С этим столкнется каждый, кто будет эксплуатировать систему, так как она очень требовательна к ресурсам. Очистка старых индексов увеличивает быстродействие.
Как установить стек ELK на Debian 9
В этой статье мы покажем вам, как установить и настроить стек ELK на Debian 9. ELK представляет собой набор из трех открытых источников продуктов, Elasticsearch, Logstash и Kibana и надежное решение для поиска, анализа и визуализации данных. Elasticsearch — это распределенный поисковый и аналитический движок NoSQL для поиска и анализа на основе Lucene, Logstash — это легкий конвейер для обработки событий и журналов из самых разных источников, а Kibana — это веб-приложение для визуализации данных, которое работает поверх Elasticsearch, Эта статья ELK Stack должна работать и на других системах Linux VPS, но была протестирована и написана для Debian 9 VPS, Установка ELK Stack на Debian 9 — это простая и простая задача, просто выполните приведенные ниже шаги, и вы должны установить ее менее чем за 10 минут.
1. Требования
Для завершения этого урока вам понадобятся:
- Debian 9 VPS
- Пользователь с привилегиями sudo
2. Обновление системы и установка необходимых пакетов.
sudo apt-get update && apt-get -y upgrade sudo apt-get install apt-transport-https software-properties-common wget
Вы всегда должны постоянно обновлять программное обеспечение на своем Linux VPS и настраивать автоматическую защиту и критические обновления.
3. Установка Java
Для запуска Elicsearch требуется, по меньшей мере, Java 8. Он поддерживает как OpenJDK, так и Oracle Java. В этом руководстве мы установим OpenJDK версии 8.
Чтобы установить OpenJDK, выполните следующую команду:
sudo apt install openjdk-8-jdk
Чтобы проверить, правильно ли установлено все, выполните:
java -version
и вы должны увидеть что-то вроде следующего:
openjdk version "1.8.0_171" OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-1~deb9u1-b11) OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
4. Установка и настройка Elasticsearch на Debian 9

Мы установим Elasticsearch, используя диспетчер пакетов apt из официального репозитория Elastic. Сначала включите репозиторий и обновите список кеша пакета следующими командами:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list sudo apt-get update
и установите Elasticsearch с помощью команды apt, используя следующую команду:
sudo apt-get install elasticsearch
По завершении установки откройте файл elasticsearch.yml и ограничите удаленный доступ к экземпляру Elasticsearch:
sudo nano /etc/elasticsearch/elasticsearch.yml
# ---------------------------------- Network ----------------------------------- # # Set the bind address to a specific IP (IPv4 or IPv6): # #network.host: 192.168.0.1 network.host: localhost
Перезагрузите службу Elasticsearch и установите ее для автоматического запуска при загрузке:
sudo systemctl restart elasticsearch sudo systemctl enable elasticsearch
Чтобы проверить статус сервера elasticsearch, вы можете использовать следующую команду:
curl -X GET http: // localhost: 9200
Результат должен выглядеть так:
{
"name" : "UHR2XBB",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "Ranc0Jh9QAuuMYhALcZIRA",
"version" : {
"number" : "6.2.4",
"build_hash" : "ccec39f",
"build_date" : "2018-04-12T20:37:28.497551Z",
"build_snapshot" : false,
"lucene_version" : "7.2.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
5. Установка и настройка Kibana на Debian 9
То же, что и Elasticsearch, мы установим последнюю версию Kibana, используя менеджер пакетов apt из официального репозитория Elastic:
sudo apt-get install kibana
По завершении установки откройте файл kibana.yml и ограничите удаленный доступ к экземпляру Kibana:
sudo nano /etc/kibana/kibana.yml
# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values. # The default is 'localhost', which usually means remote machines will not be able to connect. # To allow connections from remote users, set this parameter to a non-loopback address. server.host: "localhost"
Start the Kibana service and set it to start automatically on boot:
sudo systemctl restart kibana sudo systemctl enable kibana
Теперь Kibana будет работать на локальном хосте на порту 5601
6. Установка и настройка Nginx как обратный прокси-сервер
Мы будем использовать Nginx в качестве обратного прокси для доступа к Kibana с общедоступного IP-адреса. Чтобы установить Nginx, запустите:
sudo apt-get install nginx
Создайте базовый файл аутентификации с помощью команды openssl:
echo "admin: $ (openssl passwd -apr1 YourStrongPassword)" | sudo tee -a /etc/nginx/htpasswd.kibana
Примечание: всегда используйте надежный пароль.
Удалите виртуальный хост nginx по умолчанию:
sudo rm -f /etc/nginx/sites-enabled/default
и создайте файл конфигурации виртуального хоста для экземпляра Kibana:
sudo nano /etc/nginx/sites-available/kibana
server {
listen 80 default_server;
server_name _;
return 301 https://$server_name$request_uri;
}
server {
listen 443 default_server ssl http2;
server_name _;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
ssl_session_cache shared:SSL:10m;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.kibana;
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;
}
}
Активируйте серверный блок, создав символическую ссылку:
sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/kibana
Проверьте конфигурацию Nginx:
sudo nginx -t
Перезапустите службу Nginx и запустите ее при загрузке автоматически:
sudo systemctl restart nginx sudo systemctl enable nginx
7. Установка Logstash на Debian 9

Последним шагом является установка Logstash с помощью диспетчера пакетов apt из официального репозитория Elastic.
sudo apt-get install logstash
После того, как пакет Logstash установлен, запустите службу Logstash и запустите ее при загрузке автоматически:
sudo systemctl restart logstash sudo systemctl enable logstash
Конфигурация Logstash зависит от ваших личных предпочтений и плагинов, которые вы будете использовать. Дополнительную информацию о настройке Logstash можно найти здесь.
8. Доступ к Kibana
Теперь вы можете получить доступ к интерфейсу kibana, открыв браузер и набрав https://YourServerIpAddress

Вот и все. Вы успешно установили стек ELK на свой Debian 9 VPS.
PS . Если вам понравился этот пост, поделитесь им со своими друзьями в социальных сетях, используя приведенные ниже кнопки или просто оставьте комментарий в разделе комментариев. Благодарю.
