воскресенье, 7 мая 2023 г.

Установка свежей версии Elasticsearch в Rocky Linux 9.

Обновляемся и устанавливаем JAVA
# yum update
# dnf upgrade --refresh
# yum install java-17-openjdk java-17-openjdk-devel


Скачиваем архив со свежей версией Elasticsearch со страницы https://github.com/elastic/elasticsearch/ (Code-->Download ZIP). На текущий момент – это 8.8.0.
# cd /usr/src/
# wget https://github.com/elastic/elasticsearch/archive/refs/heads/main.zip

Распаковываем скаченный архив
# unzip main.zip
В текущей директории должен появиться каталог elasticsearch-main.
Перемещаем скаченные исходные коды на постоянное место, характерное для нового ПО:
# mkdir /usr/local/elasticsearch
# cp -r elasticsearch-main/* /usr/local/elasticsearch

Удаляем исходные коды:
# rm -f main.zip
# rm -fR elasticsearch-main

Переходим в директорию с нашими кодами:
# cd /usr/local/elasticsearch
Производим сборку проекта для нашего дистрибутива. Это может занять до 15 минут.
# ./gradlew localDistro
Собранный дистрибутив Elasticsearch будет в директории /usr/local/elasticsearch/build/distribution/local/elasticsearch-8.8.0-SNAPSHOT
Запускаемый файл будет тут: bin/elasticsearch
Файл конфигурации будет тут: config/elasticsearch.yml
Для удобства оперирования путями создаем символьную ссылку:
# ln -s /usr/local/elasticsearch/build/distribution/local/elasticsearch-8.8.0-SNAPSHOT /usr/local/elasticsearch/distr

Создаем пользователя, под которым будет работать демон elasticsearch:
# useradd -M -r -s /bin/false elasticsearch
# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch

Создаем директории, которые Elasticsearch будет использовать в работе. Опция -p нужна что бы создать сразу несколько вложенных каталогов, а не создавать отдельно каталог /data, потом вложенный в него каталог /data/elasticsearch и т.д.
# mkdir -p /data/elasticsearch/data
# mkdir -p /data/elasticsearch/logs
# mkdir -p /data/elasticsearch/pid
# chown -R elasticsearch:elasticsearch /data/elasticsearch

Теперь необходимо выполнить первый запуск Elasticsearch от имени пользователя elasticsearch:
# sudo -u elasticsearch /usr/local/elasticsearch/distr/bin/elasticsearch
В процессе первого запуска будет создан пользователь демона elasticsearch - "elastic" и сгенерирован пароль для него. Важно записать этот пароль. Он потребуется в дальнейшем.
Так же будет сгенерирован токен для оболочки Kibana.
Пример вывода после первого запуска:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.

ℹ️  Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  tEd53lbLTzRCqWsPPNzY

ℹ️  HTTP CA certificate SHA-256 fingerprint:
  ce440c1f33438167ed39db49bcca511eec7b6c2ddcca9ba5dc30163705a09a54

ℹ️  Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
  eyJ2ZXIiOiI4LjguMCIsImFkciI9WyIxMC4xMC40OS4xNjY6OTIwMCJdLCJmZ3IiOiJjZTQ0MGMxZjMzNDM4MTY3ZWQzMmRiNDliY2NhNTExZWVjN2I2YzJkZGNjYTliYTVkYzMwMTYzNzA1YTA5YTU0Iiwia2V5Ijoia2lOU25vY0JXSjVjeC1rWlRiWEY6eE9iRW1QNmhUS0tKM3JTbjhtdVVvQSJ9

ℹ️  Configure other nodes to join this cluster:
• On this node:
  ⁃ Create an enrollment token with `bin/elasticsearch-create-enrollment-token -s node`.
  ⁃ Uncomment the transport.host setting at the end of config/elasticsearch.yml.
  ⁃ Restart Elasticsearch.
• On other nodes:
  ⁃ Start Elasticsearch with `bin/elasticsearch --enrollment-token <token>`, using the enrollment token that you generated.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Если мы увидели эту надпись – значит все идет хорошо. Записываем пароль - tEd53lbLTzRCqWsPPNzY и выполняем остановку, сервиса нажав CTRL+C.

Теперь следует внести правки в файл конфигурации Elasticsearch
# nano /usr/local/elasticsearch/distr/config/elasticsearch.yml
cluster.name: cluster-1 (в секции Cluster)
node.name: node-1 (в секции Node)
path.data: /data/elasticsearch/data (в секции Paths)
path.logs: /data/elasticsearch/logs (в секции Paths)
bootstrap.memory_lock: true (в секции Memory)
network.host: <IP адрес сервера> (в секции Network)
action.auto_create_index: false (В секции Various)

На следующем этапе установки в Linux необходимо для Elasticsearch установить максимальные ограничения (то есть фактически снять ограничения) при открытии файлов для пользователя elasticsearch.
# nano /etc/security/limits.conf
В конце файла вписываем:

* soft nofile 65536
* hard nofile 131072
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096

Так как Elasticsearch очень требователен к ресурсам рекомендуется отключить использование файла подкачки:
# swapoff -a
Для увеличения быстродействия Elasticsearch так же рекомендуется увеличить количество адресов виртуальной памяти:
# nano /etc/sysctl.conf
vm.max_map_count = 262144

Проверка изменений:
# sysctl -p

Создаем юнит systemd для запуска и остановки демона Elasticsearch:
# nano /etc/systemd/system/elasticsearch.service
Содержимое файла
[Unit]
Description=Elasticsearch
Wants=network-online.target
After=network-online.target

[Service]
Type=forking
PIDFile=/data/elasticsearch/pid/elasticsearch.pid
RuntimeDirectory=elasticsearch
PrivateTmp=true
User=elasticsearch
Group=elasticsearch
ExecStart=/usr/local/elasticsearch/distr/bin/elasticsearch -d -p /data/elasticsearch/pid/elasticsearch.pid
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65535
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
TimeoutStartSec=900
LimitMEMLOCK=infinity

[Install]
WantedBy=multi-user.target

 

Запускаем сервис:
# systemctl daemon-reload
# systemctl start elasticsearch.service
# systemctl enable elasticsearch.service

Проверка работы сервиса:
# ps ax | grep elastic
# systemctl status elasticsearch.service
# ss -ntlp | grep java

В результате данных проверок мы должны увидеть, что запустилось два демона.
Собственно демон elasticsearch, отвечающий за поиск и индексацию работает на порту 9200. Дополнительный демон-координатор для обмена данными между несколькими экземплярами elasticsearch в кластере работает на порту 9300.
Проверяем работу Elasticsearch в части работы API.
# curl --cacert /usr/local/elasticsearch/distr/config/certs/http_ca.crt -u elastic https://localhost:9200
Enter host password for user 'elastic': <ВВОДИМ ПАРОЛЬ СГЕНЕРИРОВАННЫЙ ПРИ ПЕРВОМ ЗАПУСКЕ>
Получаем ответ:
{
  "name" : "node-1",
  "cluster_name" : "cluster-1",
  "cluster_uuid" : "vs47ZhepTv6NRDCK0SIpeA",
  "version" : {
    "number" : "8.8.0-SNAPSHOT",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "2023-04-20T10:24:17.593292842Z",
    "build_snapshot" : true,
    "lucene_version" : "9.6.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

Все работает. Отлично.
Если нет необходимости вести работу с Elasticsearch с авторизацией https и с паролем, можно отключить эти протоколы. Для этого необходимо в файле конфигурации nano /usr/local/elasticsearch/distr/config/elasticsearch.yml установить параметр:
xpack.security.enabled: false
и перезагрузить сервис:
# systemctl restart elasticsearch.service
Теперь делать запросы к Elasticsearsh проще:
# curl http://localhost:9200
{
  "name" : "node-1",
  "cluster_name" : "cluaster-1",
  "cluster_uuid" : "vs47ZhepTv6NRDCK0SIpeA",
  "version" : {
    "number" : "8.8.0-SNAPSHOT",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "unknown",
    "build_date" : "2023-04-20T10:24:17.593292842Z",
    "build_snapshot" : true,
    "lucene_version" : "9.6.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}






вторник, 11 апреля 2023 г.

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

В настройках по умолчанию, если пользователь обратиться к директории web-сервера по http и в этой директории не будет индексного файла index.html (index.php), то Apache отобразит перечень файлов и каталогов, содержащихся в каталоге. Это поведение предписывается директивой Indexes.
В настройках по умолчанию данная директива присутствует в файле /etc/httpd/conf/httpd.conf в разделе <Directory "/var/www/html">:
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>


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


Что бы русские буквы отображались правильно, необходимо использовать дополнительные директивы IndexOptions Charset=UTF-8
То есть привести настройки к виду:
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    IndexOptions Charset=UTF-8
    AllowOverride None
    Require all granted
</Directory>

 

После рестарта Apache русские буквы отображаются, но имя файла обрезается:

Что бы имя файла не обрезалось необходимо использовать еще одну опцию «NameWidth=*». Конфигурацию настроек каталога в файле /etc/httpd/conf/httpd.conf приводим к виду:
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    IndexOptions Charset=UTF-8 NameWidth=*
    AllowOverride None
    Require all granted
</Directory>

 

Теперь все отображается корректно:





четверг, 29 декабря 2022 г.

Установка Grafana в RockyLinux 9. Подключение Grafana к Clickhouse. Подключение Grafana к MariaDB. M2Collector.

Установка grafana с примерками команд описана на сайте https://grafana.com/grafana/download. Для бесплатного использования необходимо выбирать для установки версию OSS, а не Enterprise

Для установки свежего пакета grafana (9.3) на сервер выполняем:
# cd /usr/src/
# wget https://dl.grafana.com/oss/release/grafana-9.3.2-1.x86_64.rpm
# yum install grafana-9.3.2-1.x86_64.rpm
# systemctl start grafana-server
# systemctl enable grafana-server

Сервер grafana работает на порту 3000
Открываем порт 3000 в firewalld:
# firewall-cmd --permanent --zone=public --add-port=3000/tcp
# firewall-cmd --reload

Обратиться к нему можно по url: http://IPадрес:3000
По умолчанию данные для входа admin / admin
После первого входа сразу будет предложено сменить пароль.

Для установки плагина для grafana, работающего с clickhouse из консоли сервера выполняем:
# grafana-cli plugins install vertamedia-clickhouse-datasource
# systemctl restart grafana-server

(Страница плагина https://grafana.com/grafana/plugins/vertamedia-clickhouse-datasource/)
Для работы с сервером MariaDB специального плагина не нужно. В комплекте с Grafana уже идет предустановленный плагин для работы с базой MySQL. Этот плагин подойдет для работы с MariaDB.

После установки Grafana первым делом необходимо добавить в систему источники данных, куда должна обращаться система для извлечения исходных данных.
Для добавления базы clickhouse выполняем следующее:
Слева снизу выбираем иконку настроек (шестеренку) и пункт меню "Data Sources"
В окне добавления источников данных нажимаем кнопку "Add data source" 


В поисковой строке набираем “clickhouse”. Затем кликаем по найденному плагину "Altinity plugin for ClickHouse".

 
В поле URL вводим URL для доступа к базе. В случае ELIS это http://10.10.49.165:8123.
В простейшем случае более ничего не требуется.
Пример:


Нажимаем кнопку "Save&Test". Источник данных будет добавлен в систему.

 
Для добавления базы MariaDB выполняем следующее:
Слева снизу выбираем иконку настроек (шестеренку) и пункт меню "Data Sources". В поисковой строке набираем “mysql” и кликаем по найденному плагину


В открывшемся окне нужно заполнить данные для доступа к базе данных MariaDB:
Host, Database, User, Password.
Пример:


Нажимаем кнопку "Save&Test". Источник данных будет добавлен в систему.

Для того что что бы отобразить информацию о самой базе ClickHouse можем воспользоваться готовым дашбордом с ресурса
https://grafana.com/grafana/dashboards/?search=clickhouse
Например, "ClickHouse ANAL" с ID=14719
Для того что бы создать на основе этого шаблона dashboard, слева выбираем Dashboards -> +Import
В поле с ID вписываем номер 14719, нажимаем "Load", затем выбираем источник данных, который создали ранее (имя по умолчанию "Altinity plugin for ClickHouse (default)") и нажимаем "Import". Будет создан новый dashboard, отражающий параметры базы ClickHouse.


Для того что что бы отобразить информацию о самой базе MariaDB можем воспользоваться готовым дашбордом с ресурса
https://grafana.com/grafana/dashboards/?search=clickhouse
Например, можно воспользоваться плагином «2MySQL Simple Dashboard 4 MariaDB» с ID 11679.
Для того что бы создать на основе этого шаблона dashboard, слева выбираем Dashboards -> +Import
В поле с ID вписываем номер 11679, нажимаем "Load", затем выбираем источник данных, который создали ранее (в нашем случае MySQL UHOTOOL-2) и нажимаем Import. Будет создан новый dashboard, который призван отражать параметры базы MariaDB. Но по умолчанию база MariaDB не готова отображать статистику своей работы. И dashboard будет выглядеть так:

 
Пока информации тут никой нет. Дело в том, что статистику взять не откуда. Что бы статистика работы MariaDB накапливалась в самой базе MariaDB необходимо воспользоваться решением my2Collector - https://github.com/meob/my2Collector
Нужно сказать и запустить скрипт my2.sql, который создаст дополнительную базу данных на сервере. В эту базу данных с периодичностью 10 минут будут записываться данные о работе сервера MariaDB.
Запуск скрипта выполняется так:
# mysql --user=root -h127.0.0.1 -p < my2.sql
Затем вводиться пароль, после чего сгенерируется новая база my2.
Пользователю, которого мы прописывали в качестве параметров к источнику данных в Grafana нужно дать право выполнять Select в базе данных my2. В нашем случае это выполняется для пользователя viewuser
(GRANT SELECT ON `my2`.* TO 'viewuser'@'%';)
Из представления дашборда сразу исчезнут ошибки, но данные появятся только спустя некоторое время, когда произойдет накопление.

Пример dashboard с данными:


Для создания своего дашборда, который бы брал данные из источников clickhouse или MariaDB нужно выбрать пункт меню слева Dashboards -> + New Dashboards. Затем кликнуть по «Add a new panel». Внизу в левой части экрана настраиваются метрики, которые нужно отобразить, в колонке справа настраивается внешний вид графиков, сверху слева – будет представление метрик.  

Пример запроса к источнику Clickhouse для отображения метрики утилизации CPU

SELECT
    $timeSeries as t,
    diffmetrics.value as cpu
FROM $table
WHERE
    $timeFilter
    and metric = 'CPU-Utilization'

Пример запроса к источнику MariaDB для показа количества вызовов пои данным radius аккаутинга:

Select
  Count(*) as q
From
  radacct
where
  acctsessiontime > 0
  and $__timeFilter(acctstarttime)