вторник, 29 августа 2023 г.

Восстановления пароля пользователя admin в Grafana

При утере пароля admin от web-интерфейса Grafana, можно воспользоваться следующим способом его восстановления.

Данные о пользователях Grafana по умолчанию храняться в базе данных SQLLite, расположенной в файле /var/lib/grafana/grafana.db

Установим приложение для работы с SQLLite:
# yum install sqlite

Подключаемся к базе данных:
# sqlite3 /var/lib/grafana/grafana.db

Выполняем волшебную команду, которая установит для пользователя «admin», пароль «admin»:
sqlite> update user set password = '59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6', salt = 'F3FAxVm33R' where login = 'admin';
Выходим из sqllite, нажимая CTRL+D

Теперь обращаемся к web-интерфейсу Grafana http://<IPадрес>:3000/
Вводим admin / admin и попадаем в форму задания нового пароля пользователю admin
Вводом новый пароль, вводим его еще раз и нажимам «Submit».
Все, пароль пользователя admin восстановлен.

понедельник, 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


суббота, 26 августа 2023 г.

Graylog. Сбор данных syslog

Сервис Graylog собирает данные через так называемые входы (inputs).
Подключаемся к web-интерфейсу graylog под стандартным логином «admin».
http://10.10.49.166:9000/
Тут 10.10.49.166 – IP адрес сервера Graylog
Перед использованием Graylog входы необходимо описать в web-интерфейсе.
Это делается в меню System–>Inputs.
Для описания входа, принимающего сообщения syslog выбираем в выпадающим списке «Select Input» - «Syslog UDP» и нажимаем «Launch new input».


В форме описания нового входа необходимо выбрать:
1) Node (узел) обрабатывающий данные сообщения
2) Title - указать заголовок входа, например "syslog"
3) Bind Address - IP адрес, который будет прослушивать сообщения syslog
Для задействования всех интерфейсов - пишем 0.0.0.0
4) Port - указывается прослушиваемый порт.
Graylog не рекомендует использованием портов для описания входов меньше чем 1024, поэтому вместо стандартного 514 порта для syslog пробуем использовать 5140.
Остальные параметры оставляем по умолчанию.



После внесения данных в форму нажимаем "Save".
Будет создан источник, обеспечивающий прием сообщений syslog.

Для проверки работы входа syslog выполняем из консоли сервера:
# echo "Hello world" | nc -w 1 -u localhost 5140
# echo "Hello SAKURA2.1" | nc -w 1 -u 10.10.49.166 5140

На странице описания входов нажимаем по кнопке "Show received messages".
Мы должны увидеть принятое сообщение "Hello world"

Для приема сообщений с других серверов, мы должны открыть порт 5140 на нашем сервере:
# firewall-cmd --permanent --add-port=5140/udp
# firewall-cmd --reload


На сервере, с которого будем отправлять информацию syslog (с демоном rsyslog), создаем конфигурацию, обеспечивающую передачу syslog сообщений на сервер:
# nano /etc/rsyslog.d/90-graylog.conf
Содержимое файла:
*.* @10.10.49.166:5140;RSYSLOG_SyslogProtocol23Format
После внесения изменений перезагружаем демон rsyslog
# systemctl restart rsyslog
Теперь сервер будет старательно отправлять данные syslog на сервер graylog.
Что бы посмотреть на сообщения, полученные в сервере Graylog. Необходимо перейти по ссылке «Search»:





вторник, 15 августа 2023 г.

Обновление триггеров ZABBIX через импорт шаблонов

В Zabbix есть удобный инструмент обновления шаблонов через "Импорт", когда сначала подготавливается XML файл, а потом XML файл с данными загружается на сервер.

Импорт выполняется через меню «Настройки» —> «Шаблоны», кнопка «Импорт».

При загрузке XML файла, если изменились данные триггера, то будет создан новый триггер рядом со старым. Что бы этого этого избежать, после выбора загружаемого файла выставить галочку «Удалить отсутствующие - триггер»:


После нажатия кнопки «Импорт» будет предупреждение, где нужно нажать «Да»


После этого в Zabbix произойдет добавление новых триггеров и удаление старых.

Элементы данных узлов при этом обновятся нормально, без выставления дополнительных настроек.