# 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
# 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
# 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
Комментариев нет:
Отправить комментарий