понедельник, 28 августа 2023 г.

Grafana Loki. Установка в RockyLinux 9. Базовая настройка.

Выполним установку grafana loki из исходных кодов. Перед установкой необходимо поставить базовые инструменты: git и wget.
# yum install git wget

Для сборки Grafana из исходных кодов необходимо установить Golang. На странице https://go.dev/dl/ получаем ссылку на архив кодов для Linux
В моем случае это будет https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
# cd /usr/src/
# wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz
# tar -v -C /usr/local -xzf go*.tar.gz

Редактируем файл /etc/profile для того что бы добавить указание системе смотреть путь до среды Go.
# nano /etc/profile
В самый конец файла добавляем
export PATH=$PATH:/usr/local/go/bin
Сохраняем изменения в файле.
Теперь из консоли выполним ту же команду, что бы путь до среды Go появился в системе немедленно
# export PATH=$PATH:/usr/local/go/bin
Теперь к go можно обращаться без использования пути. Проверим, установленную версию go:
# go version
go version go1.21.0 linux/amd64


Загружаем исходные данные проекта Grafana Loki и выполняем сборку программы из исходного кода:
# git clone https://github.com/grafana/loki
# cd loki/
# go build ./cmd/loki

В результате этого действия в текущей директории сформируется исполняемый файл «loki».
Этот файл перенесем на постоянное место – к другим исполняемым файлам
# mv loki /usr/local/bin/
Далее необходимо создать конфигурационный файл Loki
# mkdir /etc/loki
# touch /etc/loki/loki-local-config.yaml
# nano /etc/loki/loki-local-config.yaml

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

common:
  instance_addr: 127.0.0.1
  path_prefix: /data_loki/loki
  storage:
    filesystem:
      chunks_directory: /data_loki/loki/chunks
      rules_directory: /data_loki/loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

query_range:
  results_cache:
    cache:
      embedded_cache:
        enabled: true
        max_size_mb: 100

schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h

#Запрет Loki отправлять отчеты в штаб-квартиру Grafana
analytics:
  reporting_enabled: false
/data_loki - Это директория, в которой будут содержаться данные сервиса loki
Создадим эту директорию:
# mkdir /data_loki

Grafana Loki запускается по умолчанию на порту 3100. Данный порт нужно открыть в firewalld.
# firewall-cmd --permanent --add-port=3100/tcp
# firewall-cmd --reload


Выполняем первый запуск сервиса Loki:
# /usr/local/bin/loki -config.file=/etc/loki/loki-local-config.yaml
При первом запуске будут созданы директории для хранения данных сервиса Loki - в /data_loki. Если в выводе нет никаких ошибок, значит все идет хорошо.
Теперь не останавливая сервис заглядываем по URL
http://<IPадрес>:3100/metrics
Мы видим метрики сервиса Loki, значит все работает правильно.
В консоли сервере останавливаем Loki, выполняя CTRL+C

Что бы сервис запускался автоматически необходимо создать пользователя «loki» и юнит systemd:
# useradd --no-create-home --shell /bin/false loki
# chown loki:loki /usr/local/bin/loki
# chown -R loki:loki /etc/loki
# chown -R loki:loki /data_loki

Создаем юнит:
# nano /etc/systemd/system/loki.service
Содержимое файла:
[Unit]
Description=Grafana Loki Service
After=network.target

[Service]
User=loki
Group=loki
Type=simple
ExecStart=/usr/local/bin/loki -config.file=/etc/loki/loki-local-config.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target


Перезапускаем демон systemd и стартуем сервис:
# systemctl daemon-reload
# systemctl start loki
# systemctl enable loki

Проверка работы сервиса:
# systemctl status loki

Примечание:
Если забыть дать права на директорию с данными сервиса Loki (/tmp/loki), то сервис не запуститься, будет выдана ошибка:
Aug 27 13:57:25 SMA-VM-TESTKVS.net systemd[1]: loki.service: Scheduled restart job, restart counter is at 5.
Aug 27 13:57:25 SMA-VM-TESTKVS.net systemd[1]: Stopped Grafana Loki Service.
Aug 27 13:57:25 SMA-VM-TESTKVS.net systemd[1]: loki.service: Start request repeated too quickly.
Aug 27 13:57:25 SMA-VM-TESTKVS.net systemd[1]: loki.service: Failed with result 'exit-code'.
Aug 27 13:57:25 SMA-VM-TESTKVS.net systemd[1]: Failed to start Grafana Loki Service.


Изменение времени хранения логов.

В настройках по умолчанию в Grafana Loki все логи попавшие в базу Loki храняться вечно. Но это поведение можно изменить. Изменения выполняются в конфигурационном файле Loki, который обычно храниться тут: /etc/loki/loki-local-config.yaml
Для то что бы задействовать автоматическое удаление необходимо специальным образом активировать компонент Loki - Compactor. Compactor сжимает данные за сутки в базе Loki и может удалять старые данные.
Текущую конфигурацию Loki и compactor можно посмотреть тут:
http://10.10.49.166:3100/config 

За удаление данных отвечает главная директива: retention_enabled. Значение true обяжет compactor проводить удаление старых данных.
Период хранения указывается в директиве retention_period, который записывается в разделе limits_config.
Данные удаляются сразу порциями, соответствующими периоду индексации в настройках хранилища.
По умолчанию - это одни сутки. (раздел schema_config, параметр period: 24h)

Для того что бы активировать удаление данных compactor вставим конфигурационный файл следующие строки:

# nano /etc/loki/loki-local-config.yaml

compactor:
  working_directory: /data_loki/loki/compactor
  shared_store: filesystem
  compaction_interval: 10m
  retention_enabled: true
  retention_delete_delay: 2h
  deletion_mode: filter-and-delete
  retention_delete_worker_count: 150
  delete_request_cancel_period: 2h

limits_config:
  retention_period: 7d

Перезапускаем сервис Loki
# systemctl restart loki.service

Теперь логи старше 7 дней будут не доступны к выводу и будут удаляться компонентом Compactor.


Grafana Loki и ошибки запросов

При выполнении запросов к базе Loki через Grafana в логах могу появляться следующие ошибки:
1) err="context canceled"
2) msg="error processing requests from scheduler" err="rpc error: code = Canceled desc = context canceled"
 
Они говорят о том, что данные из базы не успевают загрузиться в web-интерфейс по какой-то причине. Вот ряд действий, которые помогут избежать подобных ошибок:
 
 1) Необходимо увеличить timeout оболочки Grafana.
 Это делается в настройках источника данных Loki

2) Необходимо изменить конфигурацию Loki в части таймаута ответа http сервера.
 По умолчанию время таймаута составляет 30 секунд. Можно его увеличить до 300 секунд (5 минут).
 server:
  http_server_read_timeout: 300s
  http_server_write_timeout: 300s 
 
3) Необходимо изменить конфигурацию Loki в части ответа на запросы query. В глобальной конфигурации нужно в разделе limits_config установить параметр query_timeout равным 3 минуты:
limits_config:
  query_timeout: 3m

После изменений конфигурации Loki, нужно перезапустить сервис Loki
# systemctl restart loki.service


Комментариев нет:

Отправить комментарий