# Настройка Vector для отправки логов в Gotify Эта инструкция описывает, как установить Vector, настроить его для чтения JSON-логов из файла `/opt/org_ccalm_main/logs/ccalm.log`, фильтрации строк с уровнем `ERROR` и отправки уведомлений в Gotify. --- ## 0. ✅ Подключаемся к инфраструктуре ```sh ssh igor@ccalm.org -p 2200 ``` ## Предварительные требования - ОС: Ubuntu/Debian (для других ОС уточните, чтобы адаптировать команды). - Файл логов: `/opt/org_ccalm_main/logs/ccalm.log` с JSON-строками (поля `level` и `message`). - Gotify: Доступный сервер Gotify с URL и токеном (например, `https://gotify.example.com/message?token=`). - Доступ к терминалу с правами `sudo`. ## Шаг 1: Установка Vector Пробуем скачать deb пакет с сайта ```sh curl -L https://packages.timber.io/vector/0.43.1/vector_0.43.1-1_amd64.deb -o vector_0.43.1-1_amd64.deb && sudo dpkg -i vector_0.43.1-1_amd64.deb && sudo apt-get install -f && vector --version ``` ## Шаг 2: Создание конфигурации Vector Vector использует YAML для конфигурации. Настроим чтение логов, фильтрацию `ERROR` и отправку в Gotify. 1. Создайте файл конфигурации `/etc/vector/vector.yaml`: ```sh cd /etc/vector && sudo tee vector.yaml > /dev/null <<'EOF' data_dir: "/var/lib/vector" sources: ccalm_logs: type: file include: - /opt/org_ccalm_main/logs/ccalm.log read_from: beginning transforms: parse_json: type: remap inputs: - ccalm_logs source: | structured, err = parse_json(.message) if err != null { abort } merged, err = merge(., structured) if err != null { abort } . = merged filter_errors: type: filter inputs: - parse_json condition: '.level == "ERROR"' format_telegram_json: type: remap inputs: - filter_errors source: | msg, err = string(.message) if err != null { msg = "Unable to parse message" } .message = "{\"title\":\"CCALM Main Error Log\",\"message\":\"ERROR: " + msg + "\"}" sinks: gotify: type: http inputs: - filter_errors uri: "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" method: post encoding: codec: json template: '{"title":"CCALM Main Error Log","message":"Test message 00","priority":5}' request: headers: Content-Type: "application/json" Host: "gotify.geovizor.top" Content-Length: "{{ content_length }}" tls: verify_certificate: false verify_hostname: false EOF ``` Пробую отправку через curl ```sh curl -X POST -k "https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ" \ -H "Content-Type: application/json" \ -d '{"message": "Test message", "priority": 5}' ``` Проверяем что gotify работает: ```sh curl -k -X POST -H "Content-Type: application/json" -H "Host: gotify.geovizor.top" -d '{"message":"Test message 00","priority":5}' --http1.1 https://gotify.geovizor.top:8443/message?token=AYmcpr43YtPKDmZ -v ``` ### Объяснение конфигурации - **Source (`ccalm_logs`)**: Читает логи из файла, парсит JSON, поддерживает многострочные логи. - **Transform (`filter_errors`)**: Фильтрует логи с `level: "ERROR"`. - **Sink (`gotify`)**: Отправляет отфильтрованные логи в Gotify через HTTP POST. ## Шаг 3: Проверка конфигурации Проверьте корректность YAML: ```sh vector --config /etc/vector/vector.yaml validate ``` Ожидаемый вывод: `Configuration is valid`. ## Шаг 4: Запуск Vector ### Тестовый запуск (для отладки) ```sh sudo vector --config /etc/vector/vector.yaml ``` ### Запуск как сервиса 1. Включите и запустите сервис: ```sh sudo systemctl enable vector sudo systemctl start vector ``` 2. Проверьте статус: ```sh sudo systemctl status vector ``` ## Шаг 5: Проверка отправки в Gotify 1. Убедитесь, что Gotify доступен по указанному URL. 2. Добавьте тестовую строку лога в `/opt/org_ccalm_main/logs/ccalm.log`: ```sh echo '{"level": "ERROR", "message": "Database connection failed", "timestamp": "2025-05-18T12:28:00Z"}' | sudo tee -a /opt/org_ccalm_main/logs/ccalm.log ``` 3. Проверьте Gotify (веб-интерфейс или приложение) — должно прийти уведомление с заголовком "CCALM Log Error" и сообщением "Database connection failed". ## Шаг 6: Отладка - Логи Vector: `/var/log/vector/vector.log` или stdout (в тестовом режиме). - Проверьте логи при проблемах: ```sh cat /var/log/vector/vector.log ``` ## Дополнительные настройки - **Права доступа к файлу логов**: ```sh sudo chown vector:vector /opt/org_ccalm_main/logs/ccalm.log sudo chmod 644 /opt/org_ccalm_main/logs/ccalm.log ``` - **Если JSON-формат отличается**: Если поле `level` называется иначе (например, `log_level`), замените `.level` на `.log_level` в `condition`. - **HTTP вместо HTTPS**: Если Gotify использует HTTP, замените `https://` на `http://` в `uri`. ## Примечания - Убедитесь, что Gotify настроен и токен действителен. - Если логи не отправляются, проверьте сетевую доступность Gotify и правильность URL/токена. - Для чтения только новых логов удалите `read_from: beginning` в конфигурации.