Thank you for reading this post, don't forget to subscribe!
1.Базовая установка.
2.Установка на ELK на разных нодах
3. Настройка авторизации с помощью XPack
Если в двух словах, Elasticsearch предоставляет механизм поиска, Kibana — веб-интерфейс для работы с Elasticsearch, Logstash — инструмент для сбора логов и их передачи в Elasticsearch. Таким образом, связка Elasticsearch + Kibana + Logstash (или ELK Stack) является инструментом по сбору и хранению журналов операционных систем. При этом поддерживаются разные платформы (Windows, Linux, BSD).
Подготовка сервера
Прежде чем начать, подготовим к установке и настройке наш сервер.
1. Установка wget
В процессе установки пакетов нам понадобиться скачивать установочные файлы. Для этого в системе должен быть установлен wget:
yum install wget
2. Настройка брандмауэра
Открываем порты для работы ELK:
firewall-cmd --permanent --add-port={5044,5601}/tcp
firewall-cmd --reload
где:
- 5044 — порт, на котором слушаем Logstash.
- 5601 — Kibana.
3. SELinux
Отключаем SELinux двумя командами:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
* первая команда выключит систему безопасности до перезагрузки сервера, вторая — навсегда.
Установка Java
Все программные продукты стека ELK разработаны на Java, поэтому не будут работать без соответствующей платформы на сервере. Для ее установки необходимо загрузить дистрибутив с сайта Oracle и выполнить его установку.
Переходим на страницу загрузки Java — на открывшейся странице принимаем лицензионное соглашение:
После появятся ссылки на платформу — кликаем по ссылке для скачивания RPM пакета:
Нас перебросит на страницу ввода логина и пароля — необходимо авторизоваться или зарегистрироваться. После начнется процесс загрузки пакета, и когда он завершится, перекидываем файл на сервер CentOS, например, при помощи WinSCP.
Если у нас нет аккаунта на портале Oracle и нет возможности его зарегистрировать, то можно скачать более раннюю версию java командой:
curl -L -C - -b "oraclelicense=accept-securebackup-cookie" -O 'http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm'
Устанавливаем скачанный пакет командой:
rpm -ivh jdk-*
После окончания установки можно ввести команду:
java -version
Она должна вернуть, примерно, следующее:
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
Elasticsearch
Переходим на страницу загрузки эластика и копируем ссылку на последнюю версию пакета RPM:
… и скачиваем по ней сам пакет:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-x86_64.rpm
* в моем случае была версия 7.3.2.
После устанавливаем эластик на наш сервер:
rpm -ivh elasticsearch-*
Разрешаем автозапуск сервиса и запускаем его:
systemctl enable elasticsearch
systemctl start elasticsearch
Kibana
Переходим на страницу загрузки Kibana и скачиваем ссылку на последнюю вервию пакета RPM:
… и скачиваем по ней пакет для установки kibana:
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.2-x86_64.rpm
Устанавливаем приложение:
rpm -ivh kibana-*
Открываем на редактирование конфигурационный файл:
vi /etc/kibana/kibana.yml
Редактируем параметр host:
server.host: 192.168.1.10
* в данном примере мы говорим, что сервер должен слушать на интерфейсе 192.168.1.10.
Разрешаем автозапуск Kibana и запускаем ее:
systemctl enable kibana
systemctl start kibana
Открываем браузер и переходим по ссылке http://<IP-адрес сервера>:5601. Если мы увидим сообщение «kibana not ready yet», просто ждем создания индекса (на это может уйти до 10 минут). После снова пробуем открыть страницу.
Мы должны увидеть страницу приветствия с заголовком «Welcome to Kibana».
Logstash
Процесс установки Logstash аналогичен — переходим на страницу загрузки программного продукта, копируем ссылку на пакет RPM:
Скачиваем пакет на нашем сервере:
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.2.rpm
… и устанавливаем его:
rpm -ivh logstash-*
Разрешаем автозапуск и стартуем сервис:
systemctl enable logstash
systemctl start logstash
Настройка Logstash
Настройки для логстэша хранятся в каталоге /etc/logstash/conf.d в файлах формата JSON. Для конфигурации используются следующие секции:
- input (входные данные).
- filter (фильтры).
- output (выходные данные).
Для каждой из них мы создадим свой файл.
vi /etc/logstash/conf.d/input.conf
1 2 3 4 5 |
input { beats { port => 5044 } } |
* в данном примере мы настроили logstash для приема логов на порту 5044.
vi /etc/logstash/conf.d/filter.conf
1 2 3 4 5 6 7 8 9 10 11 12 |
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}" ] } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } } |
vi /etc/logstash/conf.d/output.conf
1 2 3 4 5 6 7 8 |
output { elasticsearch { hosts => ["localhost:9200"] hosts => "localhost:9200" manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } } |
Перезапускаем сервис logstash:
systemctl restart logstash
Немного подождем — приложению нужно около 1 минуты, чтобы запуститься. После, введя команду:
ss -tunlp | grep 5044
… мы увидим что-то на подобие:
tcp LISTEN 0 128 :::5044 :::* users:(("java",pid=11745,fd=114))
Сервис запустился и готов принимать логи.
Установка и настройка клиента
Для отправки логов на сервер, мы будем использовать пакет Filebeat. Он поддерживается для различных систем — Linux, Windows, Mac. Мы разберем процедуру установки и настройки для первых двух.
Установка на Linux CentOS
Инструкция подходит для CentOS / Red Hat / Fedora. Переходим на страницу загрузки Filebeat — копируем ссылку на установочный пакет:
Используя скопированную ссылку, скачиваем пакет на сервере:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.2-x86_64.rpm
* если система вернет ошибку, устанавливаем wget командой yum install wget
После устанавливаем пакет:
rpm -ivh filebeat-*
Установка на Linux Ubuntu
Инструкция подходит для Ubuntu / Debian. Переходим на страницу загрузки Filebeat — копируем ссылку на установочный пакет:
Используя скопированную ссылку, скачиваем пакет на сервере:
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.0-amd64.deb
После устанавливаем пакет:
dpkg -i filebeat-*
Установка на Windows
Переходим на страницу загрузки Filebeat — скачиваем архив для Windows:
Распаковываем его в папку C:\Program Files (где C: — диск, на котором установлена система).
Открываем Powershell и вводим команду:
set-executionpolicy unrestricted
На запрос «Вы хотите изменить политику выполнения?» отвечаем утвердительно:
(значением по умолчанию является "N"):Y
Переходим в каталог с Filebeat:
cd "C:\Program Files\Filebeat\"
… и запускаем скрипт установки сервиса:
.\install-service-filebeat.ps1
Настройка после установки
Открываем конфигурационный файл для filebeat.
а) в Linux
vi /etc/filebeat/filebeat.yml
б) в Windows открываем файл filebeat.yml любым текстовым редактором (сам файл находится в каталоге, который мы распаковали скаченный архив).
Находим раздел filebeat.inputs, в нем «type: log». Нам интересны две опции — enabled и paths:
1 2 3 4 5 6 7 8 9 |
... enabled: true ... paths: - /var/log/*.log #- c:\programdata\elasticsearch\logs\* - /var/log/secure - /var/log/messages ... |
* в данном примере мы включили опцию сбора лога (enabled: true) и добавили отправку логов безопасности (/var/log/secure) и системных событий (/var/log/messages).
* для Windows пути будут другие, например, C:\Windows\*.log
Находим опцию output.elasticsearch и комментируем 2 строки:
1 2 3 |
#output.elasticsearch: # Array of hosts to connect to. # hosts: ["localhost:9200"] |
* так как мы собираемся отправлять логи через Logstash, нам они будут мешать.
Находим настройку отправки лога в Logstash и снимаем комментарии, меняем адрес сервера logstash и добавляем строки с template — должно получиться:
1 2 3 4 5 6 |
output.logstash: # The Logstash hosts hosts: ["192.168.1.10:5044"] template.name: "filebeat" template.path: "filebeat.template.json" template.overwrite: false |
* где 192.168.1.10 — адрес, на котором крутится наш сервер.
Разрешаем автозапуск filebeat и стартуем сервис:
systemctl enable filebeat
systemctl start filebeat
Просмотр логов в Kibana
Открываем наш веб-интерфейс с кибаной и переходим в разделы Management - Index Patterns:
В окне справа кликаем по Create Index Pattern:
В строке ввода текста вводим filebeat-*:
* filebeat — это значение параметра template.name, которое мы задавали на стадии настройки filebeat.
… и нажимаем Next Step.
В поле «Time field name» выбираем значение @timestamp и нажимаем Create index pattern:
Очистка устаревших данных
Разберем пример удаления логов, которые старше 30 дней. Для этого будем использовать Elasticsearch Curator. Для установки последнего переходим на страницу Curator Reference, выбираем текущую версию программного продукта и кликаем по Installation:
В открывшемся окне переходим на нужную инструкцию по установки (так как у нас CentOS, выбираем YUM Repository):
В открывшемся окне следуем инструкции — в моем случае, версия была 5.8.
Загружаем и устанавливаем публичный gpg-ключ, которым подписаны пакеты добавляемого репозитория:
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
Создаем файл репозитория:
vi /etc/yum.repos.d/curator.repo
1 2 3 4 5 6 |
[curator-5] name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packages baseurl=https://packages.elastic.co/curator/5/centos/7 gpgcheck=1 gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch enabled=1 |
* на момент написания статьи уже вышла версия CentOS 8, но куратор был только для 7. Вполне возможно, что в ближайшее время появится curator для новой версии операционной системы.
Выполняем установку командой yum:
yum install elasticsearch-curator
После установки куратора, создаем каталог для конфигурационных файлов:
mkdir /etc/curator
Создаем конфигурационный файл config.yml:
vi /etc/curator/config.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
client: hosts: - 127.0.0.1 port: 9200 url_prefix: use_ssl: False certificate: client_cert: client_key: ssl_no_validate: False http_auth: timeout: 30 master_only: False |
* в данном файле нас интересует настройка hosts — мы указали, что curator должен подключаться к elasticsearch на локальном хосте (127.0.0.1) порту 9200.
vi /etc/curator/action.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
actions: 1: action: close description: >- Close indices older than 30 days (based on index name). options: ignore_empty_list: True delete_aliases: False disable_action: False filters: - filtertype: pattern kind: prefix value: filebeat- - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 30 2: action: delete_indices description: >- Delete indices older than 30 days (based on index name). options: ignore_empty_list: True disable_action: False filters: - filtertype: pattern kind: prefix value: filebeat- - filtertype: age source: name direction: older timestring: '%Y.%m.%d' unit: days unit_count: 30 |
Запускаем curator для удаления устаревших логов:
curator --config /etc/curator/config.yml /etc/curator/action.yml
=====================================================
рассмотрим вариант когда ёлка на разных нодах:
выполняем все действия что описаны выше, но ставим пакеты в следующем виде:
elastic-1 - 192.168.1.201
logstash - 192.168.1.202
filebeat - 192.168.1.203
kibana - 192.168.1.204
[root@elastic-1 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v \#
1 2 3 4 5 6 7 8 9 |
cluster.name: my-application node.name: node-1 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 192.168.1.201 http.port: 9200 discovery.seed_hosts: ["192.168.1.201"] cluster.initial_master_nodes: ["192.168.1.201"] |
[root@logstash ~]# cat /etc/logstash/conf.d/input.conf /etc/logstash/conf.d/output.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
input { beats { port => 5044 } } output { elasticsearch { hosts => ["192.168.1.201:9200"] hosts => "192.168.1.201:9200" manage_template => false index => "test-%{+YYYY.MM.dd}" } } |
[root@filebeat ~]# cat /etc/filebeat/filebeat.yml | grep -v \# | grep -v ^
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log - /var/log/messages filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 setup.kibana: host: "192.168.1.204:5601" output.logstash: hosts: ["192.168.1.202:5044"] processors: - add_host_metadata: when.not.contains.tags: forwarded - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~ |
[root@kibana ~]# cat /etc/kibana/kibana.yml | grep -v \# | grep -v ^$
1 2 3 4 |
server.host: "192.168.1.204" server.name: "kibana" elasticsearch.hosts: ["http://192.168.1.201:9200"] |
=========================================================
Настройка авторизации с помощью XPack
Выпуск сертификата в формате PKCS#12
Операции создания центра сертификации (CA) и\или сертификатов (certificates) выполняются утилитой elasticsearch-certutil:
Первым шагом создадим центр сертификации:
[root@elastic-1 ~]# cd /usr/share/elasticsearch
Называем СА как Вам удобно, например elastic-stack-ca.p12, это имя нам потребуется на следующем шаге (утилита предложит наименование по умолчанию).
Если есть необходимость создать СА без пароля то указываем параметр -pass «», команда выглядит следующим образом:
[root@elastic-1 elasticsearch]# bin/elasticsearch-certutil ca -pass ""
Вторым шагом выпускаем сертификат (тут так же можно оставить пароль пустым использую параметр -pass «»):
[root@elastic-1 elasticsearch]# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
Называем СА как Вам удобно, например elastic-cert.p12
Если вы защитили сертификат узла с помощью пароля, добавьте пароль в хранилище ключей Elasticsearch но мы этого не делали поэтому этот шаг можем пропустить:
1 2 3 |
# cd /usr/share/elasticsearch # bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password # bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password |
Теперь созданные файлы копируем в каталог настроек Elasticsearch, в моем случае это /etc/elasticsearch :
[root@elastic-1 elasticsearch]# cp elastic-certificates.p12 /etc/elasticsearch/
[root@elastic-1 elasticsearch]# cp elastic-stack-ca.p12 /etc/elasticsearch/
[root@elastic-1 elasticsearch]# chmod 666 /etc/elasticsearch/elastic-certificates.p12
[root@elastic-1 elasticsearch]# chmod 666 /etc/elasticsearch/elastic-stack-ca.p12
теперь в конфиге elasticsearch.yml для каждого узла кластера указываем использование настроек безопасности XPack и ссылаемся на созданные СА и сертификат:
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-stack-ca.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
[root@elastic-1 elasticsearch]# systemctl restart elasticsearch
Создание сервисных учетных записей в Elasticsearch
Переходим в директорию /usr/share/elasticsearch и запускаем утилиту elasticsearch-setup-passwords в режиме interactive:
[root@elastic-1 elasticsearch]# cd /usr/share/elasticsearch
[root@elastic-1 elasticsearch]# bin/elasticsearch-setup-passwords interactive
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user. You will be prompted to enter passwords as the process progresses. Please confirm that you would like to continue [y/N]y Enter password for [elastic]: Reenter password for [elastic]: Enter password for [apm_system]: Reenter password for [apm_system]: Enter password for [kibana_system]: Reenter password for [kibana_system]: Enter password for [logstash_system]: Reenter password for [logstash_system]: Enter password for [beats_system]: Reenter password for [beats_system]: Enter password for [remote_monitoring_user]: Reenter password for [remote_monitoring_user]: Changed password for user [apm_system] Changed password for user [kibana_system] Changed password for user [kibana] Changed password for user [logstash_system] Changed password for user [beats_system] Changed password for user [remote_monitoring_user] Changed password for user [elastic] |
тут для всех я задал пароль 123456789 кроме remote_monitoring_user для него я задал 123456789123456789
Общий вид конфига будет следующим:
[root@elastic-1 elasticsearch]# cat /etc/elasticsearch/elasticsearch.yml |grep -v \#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
cluster.name: my-application node.name: node-1 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 192.168.1.201 http.port: 9200 discovery.seed_hosts: ["192.168.1.201"] cluster.initial_master_nodes: ["192.168.1.201"] xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-stack-ca.p12 xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12 |
[root@elastic-1 elasticsearch]# systemctl restart elasticsearch
После этого этапа Elasticsearch будет доступен только для авторизированных запросов, иначе мы получим 401 ошибку:
[root@kibana ~]# curl -I http://192.168.1.201:9200
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="security" charset="UTF-8"
content-type: application/json; charset=UTF-8
content-length: 381
Настройка Kibana и Filebeat для общения.
теперь неавторизованные запросы к Elasticsearch отбиваются с ошибкой. Для этого необходимо прописать в конфиг сервисов авторизационные данные (логин\пароль) которые мы указали в Шаге 3 на этапе работы с bin/elasticsearch-setup-passwords interactive.
Для Kibana необходимо в конфиге kibana.yml указать два параметра elasticsearch.username и elasticsearch.password:
[root@kibana ~]# cat /etc/kibana/kibana.yml | grep -v \# | grep -v ^
1 2 3 4 5 6 |
server.host: "192.168.1.204" server.name: "kibana" elasticsearch.hosts: ["http://192.168.1.201:9200"] elasticsearch.username: "kibana_system" elasticsearch.password: "123456789" |
[root@kibana ~]# systemctl restart kibana
далее можем проверить:
http://192.168.1.204:5601/
Теперь при попытки зайти в Kibana, она спрашивает логин\пароль для входа. Первый вход совершаем от учетки elasic (пароль мы задавали в Шаге 3) и создаем себе персональную учетную запись. Stack Management > Security > Users
создаю пользователя test с ролью kibana_admin :
Скрываем пароль в конфиге Filebeat. (В нашем случае не обязательно так как мы посылаем данные в logstash)
Если Kibana обычно находиться рядом с Elasticsearch, то Filebeat как агент зачастую находиться на удаленном сервере, и лежащий в открытом виде пароль не очень хорошая затея.
Но пароль можно скрыть с помощью секрета в хранилище ключей и указать в конфиге в качестве переменной.
Первым делом необходимо создать хранилище и добавить туда запись:
# filebeat keystore create
# filebeat keystore add ES_PWD
После, редактируем конфиг filebeat.yml изменим значение параметра password и перезапустим сервис:
username: "elastic"
password: "${ES_PWD}"
Теперь пароль от пользователя elastic скрыт от лишних глаз
===================================================================================
используем нормальные сертификаты. допустим у нас есть свой центр сертификации. Создаём корневой ключ:
[root@elastic-1 certs]# openssl genrsa -out rootCA.key 4096
Вторая команда создаёт корневой сертификат
[root@elastic-1 certs]# openssl req -x509 -new -key rootCA.key -days 10000 -out rootCA.crt
1 2 3 4 5 6 7 8 9 10 |
Country Name (2 letter code) [XX]:KG string is too long, it needs to be less than 2 bytes long Country Name (2 letter code) [XX]:KG State or Province Name (full name) []:Bishkek Locality Name (eg, city) [Default City]:Bishkek Organization Name (eg, company) [Default Company Ltd]:Home Organizational Unit Name (eg, section) []:Home Common Name (eg, your name or your server's hostname) []:test.ru Email Address []: |
Отвечать на вопросы тут можно как душе угодно.
Создаем сертификат подписанный нашим СА
Генерируем ключ и создаем запрос на сертификат.
[root@elastic-1 certs]# cat csr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[req] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [ dn ] C=RU ST=Bishkek L=Bishkek O=Company OU=IT emailAddress=admin@test.ru CN = *.test.ru [ req_ext ] subjectAltName = @alt_names [ alt_names ] DNS.1 = kibana.test.ru DNS.2 = elastic.test.ru DNS.3 = logstash.test.ru IP.1 = 192.168.1.201 IP.2 = 192.168.1.202 IP.3 = 192.168.1.203 IP.4 = 192.168.1.204 |
[root@elastic-1 certs]# openssl req -new -sha256 -nodes -out my-csr-request.csr -newkey rsa:2048 -keyout my-private.key -config <(cat csr)
и подписываем запрос на сертификат нашим корневым сертификатом.
[root@elastic-1 certs]# openssl x509 -req -in my-csr-request.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out my-cert.crt -days 5000
Теперь на клиенты нужно установить корневой сертификат rootCA.crt
rootCA.crt — можно давать друзьям, устанавливать, копировать не сервера, выкладывать в публичный доступ
rootCA.key — следует держать в тайне
[root@elastic-1 certs]# cp rootCA.crt /etc/pki/ca-trust/source/anchors/
[root@elastic-1 certs]# update-ca-trust force-enable
[root@elastic-1 certs]# update-ca-trust extract
[root@elastic-1 certs]# update-ca-trust
теперь копируем сертификаты на все остальные тачки:
[root@elastic-1 certs]# scp my-cert.crt my-private.key rootCA.crt 192.168.1.202:~/
[root@elastic-1 certs]# scp my-cert.crt my-private.key rootCA.crt 192.168.1.203:~/
[root@elastic-1 certs]# scp my-cert.crt my-private.key rootCA.crt 192.168.1.204:~/
правим на всех тачках hosts
cat /etc/hosts
192.168.1.201 elastic.test.ru
192.168.1.202 logstash.test.ru
192.168.1.204 kibana.test.ru
и на всех тачках применяем наш rootCA.crt
cp rootCA.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust force-enable
update-ca-trust extract
update-ca-trust
дальше будем применять сертификаты:
перейдём к elasticsearch
[root@elastic-1 elasticsearch]# cat /etc/elasticsearch/elasticsearch.yml | grep -v \#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
cluster.name: my-application node.name: elastic.test.ru path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: elastic.test.ru http.port: 9200 discovery.seed_hosts: ["elastic.test.ru"] cluster.initial_master_nodes: ["elastic.test.ru"] xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.key: /etc/elasticsearch/my-private.key xpack.security.transport.ssl.certificate: /etc/elasticsearch/my-cert.crt xpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/rootCA.crt" ] xpack.security.http.ssl.enabled: true xpack.security.http.ssl.key: /etc/elasticsearch/my-private.key xpack.security.http.ssl.certificate: /etc/elasticsearch/my-cert.crt xpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/rootCA.crt" ] |
[root@elastic-1 elasticsearch]# systemctl restart elasticsearch
перейдём к logstash
[root@logstash ~]# cp my-* /etc/logstash/
[root@logstash ~]# cp rootCA.crt /etc/logstash/
[root@logstash logstash]# openssl pkcs8 -in my-private.key -topk8 -nocrypt -out my-private-key.pkcs8.key
[root@logstash logstash]# cat /etc/logstash/logstash.yml | grep -v \# | grep -v ^$
1 2 3 4 5 6 7 8 9 10 11 12 |
path.data: /var/lib/logstash pipeline.ordered: auto path.logs: /var/log/logstash node.name: logstash.test.ru path.config: /etc/logstash/conf.d/*.conf xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.username: "logstash_system" xpack.monitoring.elasticsearch.password: "123456789" xpack.monitoring.elasticsearch.hosts: ["https://elastic.test.ru:9200"] xpack.monitoring.elasticsearch.ssl.verification_mode: certificate xpack.monitoring.elasticsearch.ssl.certificate_authority: "/etc/logstash/rootCA.crt" |
[root@logstash logstash]# cat /etc/logstash/conf.d/example.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
input { beats { port => 5044 ssl => true ssl_key => '/etc/logstash/my-private-key.pkcs8.key' ssl_certificate => '/etc/logstash/my-cert.crt' ssl_certificate_authorities => ["/etc/logstash/rootCA.crt"] } } output { elasticsearch { hosts => ["https://elastic.test.ru:9200"] manage_template => false index => "test-%{+YYYY.MM.dd}" cacert => '/etc/logstash/rootCA.crt' user => 'logstash_system' password => '123456789' } } |
[root@logstash logstash]# systemctl restart logstash
как выяснилось для пользователя logstash_system не хватает прав, я использовал пользователя elastic для проверки работы, надо будет потом править владельца или создать новую роль logstash_new_role и пользователя logstash_new_user .
перейдём к filebeat
[root@filebeat ~]# cp my-* /etc/filebeat/
[root@filebeat ~]# cp rootCA.crt /etc/filebeat/
[root@filebeat ~]# cd /etc/filebeat/
[root@filebeat filebeat]# cat /etc/filebeat/filebeat.yml | grep -v \# | grep -v ^$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log - /var/log/messages filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 output.logstash: hosts: ["logstash.test.ru:5044"] ssl.certificate_authorities: ["/etc/filebeat/rootCA.crt"] ssl.certificate: "/etc/filebeat/my-cert.crt" ssl.key: "/etc/filebeat/my-private.key" processors: - add_host_metadata: when.not.contains.tags: forwarded - add_cloud_metadata: ~ - add_docker_metadata: ~ - add_kubernetes_metadata: ~ |
[root@filebeat filebeat]# systemctl restart filebeat
перейдём к kibana
[root@kibana ~]# cp my-* /etc/kibana/
[root@kibana ~]# cp rootCA.crt /etc/kibana/
[root@kibana ~]# cd /etc/kibana/
[root@kibana kibana]# cat /etc/kibana/kibana.yml | grep -v \# | grep -v ^$
1 2 3 4 5 6 7 8 9 10 |
server.host: "kibana.test.ru" server.name: "kibana" elasticsearch.hosts: ["https://elastic.test.ru:9200"] elasticsearch.username: "kibana_system" elasticsearch.password: "123456789" server.ssl.enabled: true server.ssl.certificate: /etc/kibana/my-cert.crt server.ssl.key: /etc/kibana/my-private.key elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/rootCA.crt" ] |
[root@kibana kibana]# systemctl restart kibana
можем проверять:
https://kibana.test.ru:5601/